MCPcopy Create free account
hub / github.com/FlashpointProject/FlashpointUltimateUpdater / validatePath

Function validatePath

main.go:614–682  ·  view source on GitHub ↗
(p string)

Source from the content-addressed store, hash-verified

612}
613
614func validatePath(p string) (string, bool, error) {
615 /** Check order of:
616 * Root folder (is it empty, or an FP folder)
617 * Flashpoint child folder
618 */
619
620 Resumable := func(p string) bool {
621 sqlitePath := filepath.Join(p, "ultimate.sqlite")
622 _, err := os.Stat(sqlitePath)
623 if os.IsNotExist(err) {
624 // File does not exist
625 return false
626 }
627 if err != nil {
628 panic(err)
629 }
630 return true
631 }
632
633 CheckPath := func(p string) (bool, bool) {
634 _, err := os.Stat(p)
635 if os.IsNotExist(err) {
636 // Folder does not exist
637 return true, false
638 }
639
640 f, err := os.Open(p)
641 if err != nil {
642 // Exists, but cannot open (permissions?)
643 return false, false
644 }
645 defer f.Close()
646
647 _, err = f.Readdirnames(1) // Read just one entry
648 if err != nil {
649 // Directory empty
650 return true, false
651 }
652
653 // If has a resumable file, assume a valid folder without checking others
654 resumable := Resumable(p)
655 if resumable {
656 return true, true
657 }
658
659 // Check if existing FP folder
660 folders := []string{"Data", "FPSoftware", "Launcher"}
661 for _, folder := range folders {
662 folderPath := filepath.Join(p, folder)
663 if _, err := os.Stat(folderPath); os.IsNotExist(err) {
664 return false, false
665 }
666 }
667 return true, resumable
668 }
669
670 available, resumable := CheckPath(p)
671 if available {

Callers 2

NewInstallStateFunction · 0.85
setupLayoutFunction · 0.85

Calls 1

CloseMethod · 0.80

Tested by

no test coverage detected