tagliatelle

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 8d48d219fdd66ac64e79bbb237e7e406321a1dee
parent 5f2166b4f4ee13c33167932a00126205c8aa08dc
Author: breadcat <breadcat@users.noreply.github.com>
Date:   Wed,  2 Sep 2026 16:41:50 +0100

Make orphan links clickable and clean up page

Diffstat:
Minternal/app/admin.go | 19+++++++++++++------
Minternal/app/admin_orphans.go | 28+++++++++++++++++++---------
Mstatic/style.css | 2--
Mtemplates/admin.html | 41+++++++++++++++++------------------------
4 files changed, 49 insertions(+), 41 deletions(-)

diff --git a/internal/app/admin.go b/internal/app/admin.go @@ -22,6 +22,11 @@ type AdminPageData struct { RecentFiles []File } +type DBFile struct { + ID int + Filename string +} + type SedRule struct { Name string `json:"name"` Description string `json:"description"` @@ -280,20 +285,22 @@ func vacuumDatabase() error { return nil } -func getFilesInDB() (map[string]bool, error) { - rows, err := DB.Query("SELECT filename FROM files") +func getFilesInDB() (map[string]DBFile, error) { + rows, err := DB.Query("SELECT id, filename FROM files") if err != nil { return nil, err } defer rows.Close() - fileMap := make(map[string]bool) + fileMap := make(map[string]DBFile) for rows.Next() { - var name string - if err := rows.Scan(&name); err != nil { + var file DBFile + + if err := rows.Scan(&file.ID, &file.Filename); err != nil { return nil, err } - fileMap[name] = true + + fileMap[file.Filename] = file } if err := rows.Err(); err != nil { return nil, err diff --git a/internal/app/admin_orphans.go b/internal/app/admin_orphans.go @@ -6,9 +6,14 @@ import ( "os" ) +type OrphanFile struct { + ID int + Filename string +} + type OrphanData struct { - Orphans []string // on disk, not in DB - ReverseOrphans []string // in DB, not on disk + Orphans []OrphanFile // on disk, not in DB + ReverseOrphans []OrphanFile // in DB, not on disk } func getOrphanedFiles(uploadDir string) (OrphanData, error) { @@ -27,17 +32,22 @@ func getOrphanedFiles(uploadDir string) (OrphanData, error) { diskFileSet[f] = true } - var orphans []string + var orphans []OrphanFile for _, f := range diskFiles { - if !dbFiles[f] { - orphans = append(orphans, f) + if _, ok := dbFiles[f]; !ok { + orphans = append(orphans, OrphanFile{ + Filename: f, + }) } } - var reverseOrphans []string - for f := range dbFiles { - if !diskFileSet[f] { - reverseOrphans = append(reverseOrphans, f) + var reverseOrphans []OrphanFile + for filename, file := range dbFiles { + if !diskFileSet[filename] { + reverseOrphans = append(reverseOrphans, OrphanFile{ + ID: file.ID, + Filename: file.Filename, + }) } } diff --git a/static/style.css b/static/style.css @@ -218,7 +218,6 @@ div.config-split {flex: 1} .admin-form-top {margin-top:20px} .admin-hint {color:#666} .admin-hint--inline {margin-left:10px} -.admin-hint--spaced {margin-bottom:12px} /* buttons */ .admin-btn {padding:10px 20px;border:none;border-radius:4px;font-size:16px;cursor:pointer;color:#fff} .admin-btn--sm {padding:8px 16px;font-size:14px} @@ -238,7 +237,6 @@ div.config-split {flex: 1} .thumb-subtab-btn--active {border-bottom-color:#007bff;font-weight:bold} /* orphans */ .admin-orphan-heading {margin-top:24px} -.admin-orphan-heading--db {margin-top:32px} .admin-orphan-list {list-style-type:disc;padding-left:20px} .admin-orphan-item {margin-bottom:5px;font-family:monospace} /* thumbnails */ diff --git a/templates/admin.html b/templates/admin.html @@ -186,41 +186,34 @@ <!-- Orphans Tab --> <div id="admin-content-orphans" class="admin-tab-content"> + <h2>Orphaned Files</h2> - <!-- Files on disk, not in DB --> - <h3 class="admin-orphan-heading">Disk Orphans</h3> - <p class="admin-hint admin-hint--spaced"> - These files exist in the upload directory but are not tracked in the database. - </p> + <div class="config-container"> + <div class="config-split"> + <h3 class="admin-orphan-heading">Untracked Files</h3> {{if .Data.OrphanData.Orphans}} <ul class="admin-orphan-list"> - {{range .Data.OrphanData.Orphans}} - <li class="admin-orphan-item">{{.}}</li> - {{end}} + {{range .Data.OrphanData.Orphans}}<li class="admin-orphan-item">{{.Filename}}</li> + {{end}} </ul> - {{else}} - <div class="admin-alert admin-alert--success"> - <strong>✓ No disk orphans found!</strong> - </div> + {{else}}<strong>✓ No untracked files found!</strong> {{end}} - <!-- Files in DB, not on disk --> - <h3 class="admin-orphan-heading admin-orphan-heading--db">Database Orphans</h3> - <p class="admin-hint admin-hint--spaced"> - These files are tracked in the database but are missing from the upload directory. - </p> + </div> + <div class="config-split"> + + <h3 class="admin-orphan-heading">Missing Files</h3> {{if .Data.OrphanData.ReverseOrphans}} <ul class="admin-orphan-list"> - {{range .Data.OrphanData.ReverseOrphans}} - <li class="admin-orphan-item">{{.}}</li> - {{end}} + {{range .Data.OrphanData.ReverseOrphans}}<li class="admin-orphan-item"><a href="/file/{{.ID}}" target="_blank">{{.Filename}}</a></li> + {{end}} </ul> - {{else}} - <div class="admin-alert admin-alert--success"> - <strong>✓ No database orphans found!</strong> - </div> + {{else}}<strong>✓ No missing files found!</strong> {{end}} + + </div> + </div> </div> <!-- Thumbnails Tab -->