include-admin-orphans.go (1466B)
1 package main 2 3 import ( 4 "log" 5 "net/http" 6 "os" 7 ) 8 9 func getOrphanedFiles(uploadDir string) (OrphanData, error) { 10 diskFiles, err := getFilesOnDisk(uploadDir) 11 if err != nil { 12 return OrphanData{}, err 13 } 14 dbFiles, err := getFilesInDB() 15 if err != nil { 16 return OrphanData{}, err 17 } 18 19 // Build a set of disk files for reverse lookup 20 diskFileSet := make(map[string]bool, len(diskFiles)) 21 for _, f := range diskFiles { 22 diskFileSet[f] = true 23 } 24 25 var orphans []string 26 for _, f := range diskFiles { 27 if !dbFiles[f] { 28 orphans = append(orphans, f) 29 } 30 } 31 32 var reverseOrphans []string 33 for f := range dbFiles { 34 if !diskFileSet[f] { 35 reverseOrphans = append(reverseOrphans, f) 36 } 37 } 38 39 return OrphanData{ 40 Orphans: orphans, 41 ReverseOrphans: reverseOrphans, 42 }, nil 43 } 44 45 func orphansHandler(w http.ResponseWriter, r *http.Request) { 46 orphanData, err := getOrphanedFiles(config.UploadDir) 47 if err != nil { 48 log.Printf("Error: orphansHandler: failed to read orphaned files: %v", err) 49 renderError(w, "Error reading orphaned files", http.StatusInternalServerError) 50 return 51 } 52 pageData := buildPageData("Orphaned Files", orphanData) 53 renderTemplate(w, "orphans.html", pageData) 54 } 55 56 func getFilesOnDisk(uploadDir string) ([]string, error) { 57 entries, err := os.ReadDir(uploadDir) 58 if err != nil { 59 return nil, err 60 } 61 var files []string 62 for _, e := range entries { 63 if !e.IsDir() { 64 files = append(files, e.Name()) 65 } 66 } 67 return files, nil 68 }