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