Skip to content
This repository was archived by the owner on Aug 3, 2024. It is now read-only.

Commit 497ca67

Browse files
l3uddzm-rots
andauthored
refactor(triggers/bernard): folder level events (#35)
* refactor(triggers/bernard): folder level events * feat(triggers/lidarr): support multiple cds Co-authored-by: Storm Timmermans <[email protected]>
1 parent 7eb6971 commit 497ca67

File tree

6 files changed

+186
-309
lines changed

6 files changed

+186
-309
lines changed

triggers/bernard/bernard.go

Lines changed: 14 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,8 @@ func (d daemon) StartAutoSync() error {
263263
}
264264

265265
l.Trace().
266-
Int("files_added", len(paths.AddedFiles)).
267-
Int("files_changed", len(paths.ChangedFiles)).
268-
Int("files_removed", len(paths.RemovedFiles)).
266+
Int("new", len(paths.NewFolders)).
267+
Int("old", len(paths.OldFolders)).
269268
Msgf("Partial sync finished in %s", time.Since(start))
270269

271270
// translate paths to scan task
@@ -284,9 +283,8 @@ func (d daemon) StartAutoSync() error {
284283
}
285284

286285
l.Info().
287-
Int("files_added", task.adds).
288-
Int("files_changed", task.changes).
289-
Int("files_removed", task.removes).
286+
Int("added", task.added).
287+
Int("removed", task.removed).
290288
Msg("Scan moved to processor")
291289
}
292290

@@ -307,21 +305,19 @@ func (d daemon) StartAutoSync() error {
307305

308306
type scanTask struct {
309307
scans []autoscan.Scan
310-
adds int
311-
changes int
312-
removes int
308+
added int
309+
removed int
313310
}
314311

315312
func (d daemon) getScanTask(drive *drive, paths *Paths) *scanTask {
316313
pathMap := make(map[string]int)
317314
task := &scanTask{
318315
scans: make([]autoscan.Scan, 0),
319-
adds: 0,
320-
changes: 0,
321-
removes: 0,
316+
added: 0,
317+
removed: 0,
322318
}
323319

324-
for _, p := range paths.AddedFiles {
320+
for _, p := range paths.NewFolders {
325321
// rewrite path
326322
rewritten := drive.Rewriter(p)
327323

@@ -339,17 +335,16 @@ func (d daemon) getScanTask(drive *drive, paths *Paths) *scanTask {
339335
}
340336

341337
// add scan task
342-
dir := filepath.Dir(rewritten)
343338
task.scans = append(task.scans, autoscan.Scan{
344-
Folder: filepath.Clean(dir),
339+
Folder: filepath.Clean(rewritten),
345340
Priority: d.priority,
346341
Time: drive.ScanTime(),
347342
})
348343

349-
task.adds++
344+
task.added++
350345
}
351346

352-
for _, p := range paths.ChangedFiles {
347+
for _, p := range paths.OldFolders {
353348
// rewrite path
354349
rewritten := drive.Rewriter(p)
355350

@@ -367,42 +362,13 @@ func (d daemon) getScanTask(drive *drive, paths *Paths) *scanTask {
367362
}
368363

369364
// add scan task
370-
dir := filepath.Dir(filepath.Clean(rewritten))
371365
task.scans = append(task.scans, autoscan.Scan{
372-
Folder: filepath.Clean(dir),
366+
Folder: filepath.Clean(rewritten),
373367
Priority: d.priority,
374368
Time: drive.ScanTime(),
375369
})
376370

377-
task.changes++
378-
}
379-
380-
for _, p := range paths.RemovedFiles {
381-
// rewrite path
382-
rewritten := drive.Rewriter(p)
383-
384-
// check if path already seen
385-
if _, ok := pathMap[rewritten]; ok {
386-
// already a scan task present
387-
continue
388-
} else {
389-
pathMap[rewritten] = 1
390-
}
391-
392-
// is this path allowed?
393-
if !drive.Allowed(rewritten) {
394-
continue
395-
}
396-
397-
// add scan task
398-
dir := filepath.Dir(rewritten)
399-
task.scans = append(task.scans, autoscan.Scan{
400-
Folder: filepath.Clean(dir),
401-
Priority: d.priority,
402-
Time: drive.ScanTime(),
403-
})
404-
405-
task.removes++
371+
task.removed++
406372
}
407373

408374
return task

triggers/bernard/datastore.go

Lines changed: 0 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -51,116 +51,3 @@ func (d *bds) GetFolder(driveID string, folderID string) (*datastore.Folder, err
5151

5252
return f, nil
5353
}
54-
55-
const sqlSelectFolderDescendants = `
56-
with cte_Folders as (
57-
-- Root Folder
58-
SELECT
59-
'folder' as [type]
60-
, f.id
61-
, f.drive
62-
, f.name
63-
, f.trashed
64-
, f.parent
65-
FROM folder f
66-
WHERE f.drive = $1 AND f.id = $2
67-
-- Descendant folders
68-
UNION
69-
SELECT
70-
'folder' as [type]
71-
, f.id
72-
, f.drive
73-
, f.name
74-
, f.trashed
75-
, f.parent
76-
FROM cte_Folders cte
77-
JOIN folder f ON f.drive = cte.drive AND f.parent = cte.id
78-
WHERE cte.[type] = 'folder'
79-
), cte_Combined as (
80-
-- Folders
81-
SELECT
82-
*
83-
FROM cte_Folders cte
84-
85-
-- Files
86-
UNION
87-
SELECT
88-
'file' as [type]
89-
, f.id
90-
, f.drive
91-
, f.name
92-
, f.trashed
93-
, f.parent
94-
FROM cte_Folders cte
95-
JOIN file f ON f.drive = cte.drive AND f.parent = cte.id
96-
WHERE cte.[type] = 'folder'
97-
)
98-
SELECT DISTINCT
99-
*
100-
FROM cte_Combined cte
101-
`
102-
103-
type folderDescendants struct {
104-
Folders map[string]datastore.Folder
105-
Files map[string]datastore.File
106-
}
107-
108-
func (d *bds) GetFolderDescendants(driveID string, folderID string) (*folderDescendants, error) {
109-
descendants := &folderDescendants{
110-
Folders: make(map[string]datastore.Folder),
111-
Files: make(map[string]datastore.File),
112-
}
113-
114-
if driveID == folderID {
115-
// never return descendants when folder is a drive
116-
return descendants, nil
117-
}
118-
119-
rows, err := d.DB.Query(sqlSelectFolderDescendants, driveID, folderID)
120-
if errors.Is(err, sql.ErrNoRows) {
121-
return descendants, nil
122-
}
123-
124-
if err != nil {
125-
return nil, err
126-
}
127-
128-
defer rows.Close()
129-
130-
type Row struct {
131-
Type string
132-
ID string
133-
Drive string
134-
Name string
135-
Trashed bool
136-
Parent string
137-
}
138-
139-
for rows.Next() {
140-
desc := &Row{}
141-
142-
err = rows.Scan(&desc.Type, &desc.ID, &desc.Drive, &desc.Name, &desc.Trashed, &desc.Parent)
143-
if err != nil {
144-
return nil, err
145-
}
146-
147-
switch desc.Type {
148-
case "folder":
149-
descendants.Folders[desc.ID] = datastore.Folder{
150-
ID: desc.ID,
151-
Name: desc.Name,
152-
Parent: desc.Parent,
153-
Trashed: desc.Trashed,
154-
}
155-
case "file":
156-
descendants.Files[desc.ID] = datastore.File{
157-
ID: desc.ID,
158-
Name: desc.Name,
159-
Parent: desc.Parent,
160-
Trashed: desc.Trashed,
161-
}
162-
}
163-
}
164-
165-
return descendants, rows.Err()
166-
}

0 commit comments

Comments
 (0)