tagliatelle

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

include-admin-orphans.go (1588B)


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