返回 DeepSeek-Reasonix
session_catalog_targets.go
根目录 / desktop / session_catalog_targets.go
1 package main
2
3 import (
4 "context"
5 "path/filepath"
6 "strings"
7
8 "reasonix/internal/config"
9 "reasonix/internal/sessioncatalog"
10 )
11
12 func (a *App) sessionCatalogTargets() []sessioncatalog.DirectoryTarget {
13 f := loadProjectsFile()
14 out := []sessioncatalog.DirectoryTarget{}
15 add := func(target sessioncatalog.DirectoryTarget) {
16 out = append(out, target)
17 }
18 add(sessioncatalog.DirectoryTarget{Path: config.SessionDir(), Scope: "global"})
19 add(sessioncatalog.DirectoryTarget{Path: desktopSessionDir(globalWorkspaceRoot()), Scope: "global"})
20 for _, project := range f.Projects {
21 add(sessioncatalog.DirectoryTarget{Path: desktopSessionDir(project.Root), Scope: "project", WorkspaceRoot: project.Root})
22 }
23 if a != nil {
24 a.mu.RLock()
25 collectTab := func(tab *WorkspaceTab) {
26 if tab == nil {
27 return
28 }
29 path := strings.TrimSpace(tab.currentSessionPath())
30 if path == "" {
31 return
32 }
33 add(sessioncatalog.DirectoryTarget{
34 Path: filepath.Dir(path), Scope: tab.Scope, WorkspaceRoot: tab.WorkspaceRoot,
35 })
36 }
37 for _, tab := range a.tabs {
38 collectTab(tab)
39 }
40 for _, tab := range a.detachedSessions {
41 collectTab(tab)
42 }
43 a.mu.RUnlock()
44 }
45 return sessioncatalog.UniqueDirectoryTargets(out)
46 }
47
48 func (a *App) indexRestoredSessionPaths(ctx context.Context, catalog *sessioncatalog.Catalog) {
49 type restored struct {
50 target sessioncatalog.DirectoryTarget
51 path string
52 }
53 a.mu.RLock()
54 items := make([]restored, 0, len(a.tabs)+len(a.detachedSessions))
55 collect := func(tab *WorkspaceTab) {
56 if tab == nil {
57 return
58 }
59 path := strings.TrimSpace(tab.currentSessionPath())
60 if path == "" {
61 return
62 }
63 items = append(items, restored{
64 target: sessioncatalog.DirectoryTarget{Path: filepath.Dir(path), Scope: tab.Scope, WorkspaceRoot: tab.WorkspaceRoot},
65 path: path,
66 })
67 }
68 for _, tab := range a.tabs {
69 collect(tab)
70 }
71 for _, tab := range a.detachedSessions {
72 collect(tab)
73 }
74 a.mu.RUnlock()
75 for _, item := range items {
76 if ctx.Err() != nil {
77 return
78 }
79 _ = catalog.IndexSessionPath(ctx, item.target, item.path)
80 }
81 }
82
82 lines GO