Improve library sync, add more config values

This commit is contained in:
2026-01-24 19:00:22 +01:00
parent 1c26770db0
commit de94315bd9
6 changed files with 56 additions and 31 deletions
+34 -19
View File
@@ -9,10 +9,14 @@ import (
"sheetless-server/handlers"
"sheetless-server/models"
"sheetless-server/utils"
"strings"
"time"
)
func SyncSheets() error {
log.Println("Running library sync")
syncStartTime := time.Now()
// Get all sheets
var sheets []models.Sheet
if err := database.DB.Find(&sheets).Error; err != nil {
@@ -21,33 +25,31 @@ func SyncSheets() error {
// Maps
pathsInDb := make(map[string]*models.Sheet)
hashToSheets := make(map[uint64][]*models.Sheet)
hashToSheets := make(map[string][]*models.Sheet)
for i := range sheets {
sheet := &sheets[i]
pathsInDb[sheet.FilePath] = sheet
hashToSheets[sheet.FileHash] = append(hashToSheets[sheet.FileHash], sheet)
}
// Walk uploads dir
files, err := os.ReadDir(config.AppConfig.SheetsDirectory)
if err != nil {
return err
}
numFilesWithNewHash := 0
numRenamedFiles := 0
numNewFiles := 0
for _, file := range files {
if file.IsDir() {
continue
// Walk sheets directory recursively for PDF files
err := filepath.Walk(config.AppConfig.SheetsDirectory, func(filePath string, info os.FileInfo, walkErr error) error {
if walkErr != nil {
return walkErr
}
// Skip directories and non-PDF files
if info.IsDir() || filepath.Ext(filePath) != ".pdf" {
return nil
}
filePath := filepath.Join(config.AppConfig.SheetsDirectory, file.Name())
hash, err := utils.FileHash(filePath)
if err != nil {
log.Printf("Error hashing file %s: %v", filePath, err)
continue
}
info, err := file.Info()
if err != nil {
log.Printf("Error getting file info %s: %v", filePath, err)
continue
return nil
}
existingSheet, exists := pathsInDb[filePath]
@@ -58,6 +60,8 @@ func SyncSheets() error {
existingSheet.UpdatedAt = time.Now()
if err := database.DB.Save(existingSheet).Error; err != nil {
log.Printf("Error updating sheet hash for %s: %v", filePath, err)
} else {
numFilesWithNewHash++
}
}
} else {
@@ -70,6 +74,8 @@ func SyncSheets() error {
s.UpdatedAt = time.Now()
if err := database.DB.Save(s).Error; err != nil {
log.Printf("Error updating sheet path for %s: %v", filePath, err)
} else {
numRenamedFiles++
}
break
}
@@ -79,11 +85,11 @@ func SyncSheets() error {
uuid, err := handlers.GenerateNonexistentSheetUuid()
if err != nil {
log.Printf("Error generating uuid: %v", err)
continue
return nil
}
newSheet := models.Sheet{
Uuid: *uuid,
Title: file.Name(), // use filename as title
Title: strings.TrimSuffix(filepath.Base(filePath), ".pdf"), // use filename as title
FilePath: filePath,
FileSize: info.Size(),
FileHash: hash,
@@ -92,10 +98,19 @@ func SyncSheets() error {
}
if err := database.DB.Create(&newSheet).Error; err != nil {
log.Printf("Error creating new sheet for %s: %v", filePath, err)
} else {
numNewFiles++
}
}
}
return nil
})
if numFilesWithNewHash != 0 || numRenamedFiles != 0 || numNewFiles != 0 {
log.Printf("Library sync succesfully run.\nChanged hashes: %d, renamed files: %d, new files: %d", numFilesWithNewHash, numRenamedFiles, numNewFiles)
}
return nil
log.Printf("Sync took %s", time.Since(syncStartTime))
return err
}