diff --git a/browser/browser.go b/browser/browser.go index f5ce2fc..c4b2eec 100644 --- a/browser/browser.go +++ b/browser/browser.go @@ -87,11 +87,13 @@ func pickFirefox(name, profile string) []Browser { } else { profile = fileutil.ParentDir(profile) } + if !fileutil.IsDirExists(filepath.Clean(profile)) { log.Noticef("find browser firefox %s failed, profile folder does not exist", v.name) continue } - if multiFirefox, err := firefox.New(v.name, v.storage, profile, v.items); err == nil { + + if multiFirefox, err := firefox.New(profile, v.items); err == nil { for _, b := range multiFirefox { log.Noticef("find browser firefox %s success", b.Name()) browsers = append(browsers, b) @@ -100,8 +102,10 @@ func pickFirefox(name, profile string) []Browser { log.Error(err) } } + return browsers } + return nil } diff --git a/browser/firefox/firefox.go b/browser/firefox/firefox.go index 708cd03..825f349 100644 --- a/browser/firefox/firefox.go +++ b/browser/firefox/firefox.go @@ -23,18 +23,11 @@ type Firefox struct { var ErrProfilePathNotFound = errors.New("profile path not found") -// New returns a new Firefox instance. -func New(name, storage, profilePath string, items []item.Item) ([]*Firefox, error) { - f := &Firefox{ - name: name, - storage: storage, - profilePath: profilePath, - items: items, - } - multiItemPaths, err := f.getMultiItemPath(f.profilePath, f.items) - if err != nil { - return nil, err - } +// New returns new Firefox instances. +func New(profilePath string, items []item.Item) ([]*Firefox, error) { + multiItemPaths := make(map[string]map[item.Item]string) + // ignore walk dir error since it can be produced by a single entry + _ = filepath.WalkDir(profilePath, firefoxWalkFunc(items, multiItemPaths)) firefoxList := make([]*Firefox, 0, len(multiItemPaths)) for name, itemPaths := range multiItemPaths { @@ -44,13 +37,8 @@ func New(name, storage, profilePath string, items []item.Item) ([]*Firefox, erro itemPaths: itemPaths, }) } - return firefoxList, nil -} -func (f *Firefox) getMultiItemPath(profilePath string, items []item.Item) (map[string]map[item.Item]string, error) { - multiItemPaths := make(map[string]map[item.Item]string) - err := filepath.Walk(profilePath, firefoxWalkFunc(items, multiItemPaths)) - return multiItemPaths, err + return firefoxList, nil } func (f *Firefox) copyItemToLocal() error { @@ -63,8 +51,8 @@ func (f *Firefox) copyItemToLocal() error { return nil } -func firefoxWalkFunc(items []item.Item, multiItemPaths map[string]map[item.Item]string) filepath.WalkFunc { - return func(path string, info fs.FileInfo, err error) error { +func firefoxWalkFunc(items []item.Item, multiItemPaths map[string]map[item.Item]string) fs.WalkDirFunc { + return func(path string, info fs.DirEntry, err error) error { for _, v := range items { if info.Name() == v.FileName() { parentBaseDir := fileutil.ParentBaseDir(path) @@ -75,6 +63,7 @@ func firefoxWalkFunc(items []item.Item, multiItemPaths map[string]map[item.Item] } } } + return err } } diff --git a/cmd/hack-browser-data/main.go b/cmd/hack-browser-data/main.go index e425a31..0706f0a 100644 --- a/cmd/hack-browser-data/main.go +++ b/cmd/hack-browser-data/main.go @@ -53,6 +53,7 @@ func Execute() { data, err := b.BrowsingData(isFullExport) if err != nil { log.Error(err) + continue } data.Output(outputDir, b.Name(), outputFormat) }