Skip to content

Commit e62ada0

Browse files
giwtygiwty
authored andcommitted
support xcz
1 parent 2822812 commit e62ada0

File tree

5 files changed

+84
-20
lines changed

5 files changed

+84
-20
lines changed

db/localSwitchFilesDB.go

Lines changed: 61 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package db
22

33
import (
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 (
1618
var (
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

2644
type 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+
3981
type 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

144190
func 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

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ require (
1717
go.uber.org/zap v1.15.0
1818
golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775 // indirect
1919
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
20-
gopkg.in/natefinch/lumberjack.v2 v2.0.0
2120
gopkg.in/yaml.v2 v2.2.8 // indirect
21+
robpike.io/nihongo v0.0.0-20200511095354-a985f0929cfa
2222
)

go.sum

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl
7979
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
8080
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
8181
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
82+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
8283
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
8384
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
8485
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -99,11 +100,11 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8
99100
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
100101
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
101102
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
102-
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
103-
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
104103
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
105104
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
106105
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
107106
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
108107
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
109108
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
109+
robpike.io/nihongo v0.0.0-20200511095354-a985f0929cfa h1:kqGRKbVGwPB5mg/++wMQxOybtmW0F8uC/y+Wmjipsvc=
110+
robpike.io/nihongo v0.0.0-20200511095354-a985f0929cfa/go.mod h1:43kowN+1Rj2cR4+62PIiOFD5L9AoTNCpNNjQibm7Dq0=

ui/console.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,14 @@ func (c *Console) Start() {
9797
recursiveMode = *recursive
9898
}
9999

100-
localDB, err := db.CreateLocalSwitchFilesDB(files, folderToScan, nil, recursiveMode)
100+
localDbManager, err := db.NewLocalSwitchDBManager(c.baseFolder)
101+
if err != nil {
102+
fmt.Printf("failed to create local files db :%v\n", err)
103+
return
104+
}
105+
defer localDbManager.Close()
106+
107+
localDB, err := localDbManager.CreateLocalSwitchFilesDB(files, folderToScan, nil, recursiveMode)
101108
if err != nil {
102109
fmt.Printf("\nfailed to process local folder\n %v", err)
103110
return
@@ -113,7 +120,7 @@ func (c *Console) Start() {
113120
if settingsObj.OrganizeOptions.DeleteOldUpdateFiles {
114121
s.Restart()
115122
fmt.Printf("\nDeleting old updates\n")
116-
process.DeleteOldUpdates(localDB)
123+
process.DeleteOldUpdates(localDB, nil)
117124
s.Stop()
118125
}
119126

ui/gui.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@ func (g *GUI) Start() {
113113

114114
settings.InitSwitchKeys(g.baseFolder)
115115

116+
localDbManager, err := db.NewLocalSwitchDBManager(g.baseFolder)
117+
if err != nil {
118+
g.sugarLogger.Error("Failed to create local files db\n", err)
119+
return
120+
}
121+
defer localDbManager.Close()
122+
116123
// This will listen to messages sent by Javascript
117124
w.OnMessage(func(m *astilectron.EventMessage) interface{} {
118125

@@ -141,7 +148,7 @@ func (g *GUI) Start() {
141148
case "saveSettings":
142149
g.saveSettings(msg.Payload)
143150
case "updateLocalLibrary":
144-
localDB, err := g.buildLocalDB()
151+
localDB, err := g.buildLocalDB(localDbManager)
145152
if err != nil {
146153
g.sugarLogger.Error(err)
147154
g.state.window.SendMessage(Message{Name: "error", Payload: err.Error()}, func(m *astilectron.EventMessage) {})
@@ -269,7 +276,7 @@ func (g *GUI) buildSwitchDb() (*db.SwitchTitlesDB, error) {
269276
return switchTitleDB, err
270277
}
271278

272-
func (g *GUI) buildLocalDB() (*db.LocalSwitchFilesDB, error) {
279+
func (g *GUI) buildLocalDB(localDbManager *db.LocalSwitchDBManager) (*db.LocalSwitchFilesDB, error) {
273280
folderToScan := settings.ReadSettings(g.baseFolder).Folder
274281
recursiveMode := settings.ReadSettings(g.baseFolder).ScanRecursively
275282

@@ -278,7 +285,7 @@ func (g *GUI) buildLocalDB() (*db.LocalSwitchFilesDB, error) {
278285
return nil, err
279286
}
280287

281-
localDB, err := db.CreateLocalSwitchFilesDB(files, folderToScan, g, recursiveMode)
288+
localDB, err := localDbManager.CreateLocalSwitchFilesDB(files, folderToScan, g, recursiveMode)
282289
g.state.localDB = localDB
283290
return localDB, err
284291
}

0 commit comments

Comments
 (0)