- package Filesystem
-
- import (
- "os"
- "path/filepath"
-
- "github.com/vbauerster/mpb"
- bolt "go.etcd.io/bbolt"
-
- "PackageManager/Client/Database"
- "PackageManager/Client/ProgressBar"
- "PackageManager/Variables"
- )
-
- func pickFilesSingle(filePath string) error {
- var (
- indexBucket *bolt.Bucket
- picksBucket *bolt.Bucket
- err error
- )
-
- err = Database.FsDB.Batch(func(tx *bolt.Tx) error {
- indexBucket = tx.Bucket(Variables.FsHashIndexBucket)
- picksBucket = tx.Bucket(Variables.FsHashPicksBucket)
-
- err = AddFileToBucket(picksBucket, filePath)
- if err != nil {
- return err
- }
- return RemoveFileFromBucket(indexBucket, filePath)
- })
- return err
- }
-
- func pickFilesRecursive(rootPath string) error {
- var (
- fsStatus FilesystemStatus
- indexBucket *bolt.Bucket
- picksBucket *bolt.Bucket
- bar *mpb.Bar
- totalLen int
- f string
- err error
- )
-
- fsStatus, err = GetFilesystemDiff(rootPath)
- if err != nil {
- return err
- }
-
- totalLen = len(fsStatus.NewFiles) + len(fsStatus.ModifiedFiles) + len(fsStatus.MissingFiles)
-
- if totalLen == 0 {
- return nil
- }
-
- bar = ProgressBar.InitBar("Adding...", totalLen)
-
- err = Database.FsDB.Batch(func(tx *bolt.Tx) error {
- indexBucket = tx.Bucket(Variables.FsHashIndexBucket)
- picksBucket = tx.Bucket(Variables.FsHashPicksBucket)
-
- if len(fsStatus.NewFiles) > 0 {
- for _, f = range fsStatus.NewFiles {
- bar.Increment()
- err = AddFileToBucket(picksBucket, f)
- if err != nil {
- return err
- }
- }
- }
-
- if len(fsStatus.ModifiedFiles) > 0 {
- for _, f = range fsStatus.ModifiedFiles {
- bar.Increment()
- err = AddFileToBucket(picksBucket, f)
- if err != nil {
- return err
- }
- }
- }
-
- if len(fsStatus.MissingFiles) > 0 {
- for _, f = range fsStatus.MissingFiles {
- bar.Increment()
- err = RemoveFileFromBucket(indexBucket, f)
- if err != nil {
- return err
- }
- err = RemoveFileFromBucket(picksBucket, f)
- if err != nil {
- return err
- }
- }
- }
-
- return nil
- })
-
- return err
- }
-
- func PickFiles(rootPath string) error {
- var (
- realRootPath string
- rootStat os.FileInfo
- err error
- )
-
- realRootPath = filepath.Join(Variables.RootDir, rootPath)
-
- rootStat, err = os.Stat(realRootPath)
- if err != nil {
- return err
- }
-
- if !rootStat.IsDir() {
- return pickFilesSingle(realRootPath)
- }
-
- return pickFilesRecursive(realRootPath)
- }
-
- func ResetAllPickedFiles() error {
- var err error = Database.FsDB.Batch(func(tx *bolt.Tx) error {
- return tx.DeleteBucket(Variables.FsHashPicksBucket)
- })
-
- return err
- }
|