71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package source
|
|
|
|
import (
|
|
"fmt"
|
|
"forever-files/db"
|
|
"forever-files/fileUtilities"
|
|
"forever-files/types"
|
|
"log"
|
|
"os"
|
|
"path"
|
|
)
|
|
|
|
// the purpose of this package is to gather information about the source files for the backup
|
|
// it will store the information in a database
|
|
// information to gather:
|
|
// - file name
|
|
// - file path
|
|
// - file size
|
|
// - file hash
|
|
// - modified date
|
|
|
|
func GatherInfo(path string, db db.DB) {
|
|
err := walkDir(path, db)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func walkDir(dirPath string, db db.DB) error {
|
|
// get list of files in directory
|
|
directoryEntries, err := os.ReadDir(dirPath)
|
|
if err != nil {
|
|
return fmt.Errorf("error reading directory: %w", err)
|
|
}
|
|
for _, entry := range directoryEntries {
|
|
if entry.IsDir() {
|
|
err = walkDir(path.Join(dirPath, entry.Name()), db)
|
|
if err != nil {
|
|
return fmt.Errorf("error walking directory: %w", err)
|
|
}
|
|
} else {
|
|
// gather info
|
|
fileInfo, err := entry.Info()
|
|
if err != nil {
|
|
log.Default().Printf("error getting file info: %v", err)
|
|
continue
|
|
}
|
|
hash, err := fileUtilities.HashFile(path.Join(dirPath, entry.Name()))
|
|
if err != nil {
|
|
log.Default().Printf("error hashing file: %v", err)
|
|
continue
|
|
}
|
|
// store info
|
|
//fmt.Printf("Name: %v, Size: %v, Modified Date: %v, Hash: %v\n", fileInfo.Name(), fileInfo.Size(), fileInfo.ModTime(), hash)
|
|
err = db.StoreFile(types.FileMetadata{
|
|
Name: fileInfo.Name(),
|
|
Path: dirPath,
|
|
Size: fileInfo.Size(),
|
|
Hash: hash,
|
|
ModifiedDate: fileInfo.ModTime(),
|
|
BackedUp: false,
|
|
})
|
|
if err != nil {
|
|
log.Default().Printf("error storing file metadata: %v", err)
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|