@@ -2,6 +2,8 @@ package db
22
33import (
44 "errors"
5+ //"github.com/dgraph-io/badger/v2"
6+ // badger "github.com/dgraph-io/badger/v2"
57 "github.com/giwty/switch-library-manager/settings"
68 "github.com/giwty/switch-library-manager/switchfs"
79 "go.uber.org/zap"
@@ -16,12 +18,28 @@ import (
1618var (
1719 versionRegex = regexp .MustCompile (`\[[vV]?(?P<version>[0-9]{1,10})]` )
1820 titleIdRegex = regexp .MustCompile (`\[(?P<titleId>[A-Z,a-z0-9]{16})]` )
21+ total = 0
22+ globalInd = 0
1923)
2024
21- var (
22- total = 0
23- globalInd = 0
24- )
25+ type LocalSwitchDBManager struct {
26+ //db *badger.DB
27+ }
28+
29+ func NewLocalSwitchDBManager (baseFolder string ) (* LocalSwitchDBManager , error ) {
30+ // Open the Badger database located in the /tmp/badger directory.
31+ // It will be created if it doesn't exist.
32+ /*db, err := badger.Open(badger.DefaultOptions(baseFolder))
33+ if err != nil {
34+ log.Fatal(err)
35+ }*/
36+
37+ return & LocalSwitchDBManager {}, nil
38+ }
39+
40+ func (ldb * LocalSwitchDBManager ) Close () {
41+ //ldb.db.Close()
42+ }
2543
2644type ExtendedFileInfo struct {
2745 Info os.FileInfo
@@ -36,22 +54,46 @@ type SwitchFile struct {
3654 Dlc map [string ]ExtendedFileInfo
3755}
3856
57+ func (sf * SwitchFile ) String () string {
58+ var sb strings.Builder
59+ if sf .BaseExist {
60+ sb .WriteString ("base:" )
61+ sb .WriteString (sf .File .Info .Name ())
62+ sb .WriteString ("\n " )
63+ }
64+ if sf .Updates != nil && len (sf .Updates ) != 0 {
65+ sb .WriteString ("Updates:" )
66+ for _ , update := range sf .Updates {
67+ sb .WriteString (update .Info .Name ())
68+ sb .WriteString ("\n " )
69+ }
70+ }
71+ if sf .Dlc != nil && len (sf .Dlc ) != 0 {
72+ sb .WriteString ("Dlc:" )
73+ for _ , dlc := range sf .Dlc {
74+ sb .WriteString (dlc .Info .Name ())
75+ sb .WriteString ("\n " )
76+ }
77+ }
78+ return sb .String ()
79+ }
80+
3981type LocalSwitchFilesDB struct {
4082 TitlesMap map [string ]* SwitchFile
4183 Skipped map [os.FileInfo ]string
4284}
4385
44- func CreateLocalSwitchFilesDB (files []os.FileInfo , parentFolder string , progress ProgressUpdater , recursive bool ) (* LocalSwitchFilesDB , error ) {
86+ func ( ldb * LocalSwitchDBManager ) CreateLocalSwitchFilesDB (files []os.FileInfo , parentFolder string , progress ProgressUpdater , recursive bool ) (* LocalSwitchFilesDB , error ) {
4587 titles := map [string ]* SwitchFile {}
4688 skipped := map [os.FileInfo ]string {}
4789 globalInd = 0
4890 total = 0
49- scanLocalFiles (parentFolder , files , progress , recursive , titles , skipped )
91+ ldb . scanLocalFiles (parentFolder , files , progress , recursive , titles , skipped )
5092
5193 return & LocalSwitchFilesDB {TitlesMap : titles , Skipped : skipped }, nil
5294}
5395
54- func scanLocalFiles (parentFolder string , files []os.FileInfo ,
96+ func ( ldb * LocalSwitchDBManager ) scanLocalFiles (parentFolder string , files []os.FileInfo ,
5597 progress ProgressUpdater ,
5698 recurse bool , titles map [string ]* SwitchFile ,
5799 skipped map [os.FileInfo ]string ) {
@@ -78,11 +120,15 @@ func scanLocalFiles(parentFolder string, files []os.FileInfo,
78120 zap .S ().Errorf ("failed scanning NSP folder [%v]" , err )
79121 continue
80122 }
81- scanLocalFiles (folder , innerFiles , progress , recurse , titles , skipped )
123+ ldb .scanLocalFiles (folder , innerFiles , progress , recurse , titles , skipped )
124+ continue
82125 }
83126
84127 //only handle NSZ and NSP files
85- if ! strings .HasSuffix (file .Name (), "xci" ) && ! strings .HasSuffix (file .Name (), "nsp" ) && ! strings .HasSuffix (file .Name (), "nsz" ) {
128+ if ! strings .HasSuffix (strings .ToLower (file .Name ()), "xci" ) &&
129+ ! strings .HasSuffix (strings .ToLower (file .Name ()), "nsp" ) &&
130+ ! strings .HasSuffix (strings .ToLower (file .Name ()), "nsz" ) &&
131+ ! strings .HasSuffix (strings .ToLower (file .Name ()), "xcz" ) {
86132 skipped [file ] = "non supported File"
87133 continue
88134 }
@@ -142,20 +188,23 @@ func scanLocalFiles(parentFolder string, files []os.FileInfo,
142188}
143189
144190func GetGameMetadata (file os.FileInfo , filePath string ) (* switchfs.ContentMetaAttributes , error ) {
191+
145192 var metadata * switchfs.ContentMetaAttributes = nil
146193 keys , _ := settings .SwitchKeys ()
147194 var err error
148195
149196 if keys != nil && keys .GetKey ("header_key" ) != "" {
150- if strings .HasSuffix (file .Name (), "nsp" ) || strings .HasSuffix (file .Name (), "nsz" ) {
197+ if strings .HasSuffix (strings .ToLower (file .Name ()), "nsp" ) ||
198+ strings .HasSuffix (strings .ToLower (file .Name ()), "nsz" ) {
151199 metadata , err = switchfs .ReadNspMetadata (filePath )
152200 if err != nil {
153201 zap .S ().Errorf ("[file:%v] failed to read NSP [reason: %v]\n " , file .Name (), err )
154202 }
155- } else if strings .HasSuffix (file .Name (), "xci" ) {
203+ } else if strings .HasSuffix (strings .ToLower (file .Name ()), "xci" ) ||
204+ strings .HasSuffix (strings .ToLower (file .Name ()), "xcz" ) {
156205 metadata , err = switchfs .ReadXciMetadata (filePath )
157206 if err != nil {
158- zap .S ().Errorf ("[file:%v] failed to read NSP [reason: %v]\n " , file .Name (), err )
207+ zap .S ().Errorf ("[file:%v] failed to read file [reason: %v]\n " , file .Name (), err )
159208 }
160209 }
161210
0 commit comments