mirror of
https://github.com/Xpl0itU/WiiUDownloader.git
synced 2025-05-24 03:57:12 -04:00
Remove logger
This commit is contained in:
parent
6605e8380f
commit
91d88dc58e
4 changed files with 60 additions and 147 deletions
|
@ -1,7 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
@ -15,23 +15,17 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
logger, err := wiiudownloader.NewLogger("log.txt")
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println("Error:", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// Check if user is running macOS
|
// Check if user is running macOS
|
||||||
if runtime.GOOS == "darwin" {
|
if runtime.GOOS == "darwin" {
|
||||||
execPath, err := os.Executable()
|
execPath, err := os.Executable()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err.Error())
|
log.Fatal(err.Error())
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bundlePath := filepath.Dir(filepath.Dir(execPath))
|
bundlePath := filepath.Dir(filepath.Dir(execPath))
|
||||||
filePath := filepath.Join(bundlePath, "Resources", "lib", "share", "glib-schemas")
|
filePath := filepath.Join(bundlePath, "Resources", "lib", "share", "glib-schemas")
|
||||||
if _, err := os.Stat(filePath); os.IsNotExist(err) {
|
if _, err := os.Stat(filePath); os.IsNotExist(err) {
|
||||||
logger.Warning("glib-schemas not found")
|
log.Println("glib-schemas not found")
|
||||||
} else {
|
} else {
|
||||||
os.Setenv("GSETTINGS_SCHEMA_DIR", filePath)
|
os.Setenv("GSETTINGS_SCHEMA_DIR", filePath)
|
||||||
}
|
}
|
||||||
|
@ -40,7 +34,7 @@ func main() {
|
||||||
|
|
||||||
app, err := gtk.ApplicationNew("io.github.xpl0itu.wiiudownloader", glib.APPLICATION_FLAGS_NONE)
|
app, err := gtk.ApplicationNew("io.github.xpl0itu.wiiudownloader", glib.APPLICATION_FLAGS_NONE)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Fatal(err.Error())
|
log.Fatal("Error creating application.")
|
||||||
}
|
}
|
||||||
|
|
||||||
client := &http.Client{
|
client := &http.Client{
|
||||||
|
@ -60,7 +54,7 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
app.Connect("activate", func() {
|
app.Connect("activate", func() {
|
||||||
win := NewMainWindow(app, wiiudownloader.GetTitleEntries(wiiudownloader.TITLE_CATEGORY_GAME), logger, client)
|
win := NewMainWindow(app, wiiudownloader.GetTitleEntries(wiiudownloader.TITLE_CATEGORY_GAME), client)
|
||||||
win.ShowAll()
|
win.ShowAll()
|
||||||
app.AddWindow(win.window)
|
app.AddWindow(win.window)
|
||||||
app.GetActiveWindow().Show()
|
app.GetActiveWindow().Show()
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -29,7 +30,6 @@ const (
|
||||||
type MainWindow struct {
|
type MainWindow struct {
|
||||||
window *gtk.ApplicationWindow
|
window *gtk.ApplicationWindow
|
||||||
treeView *gtk.TreeView
|
treeView *gtk.TreeView
|
||||||
logger *wiiudownloader.Logger
|
|
||||||
searchEntry *gtk.Entry
|
searchEntry *gtk.Entry
|
||||||
deleteEncryptedContentsCheckbox *gtk.CheckButton
|
deleteEncryptedContentsCheckbox *gtk.CheckButton
|
||||||
addToQueueButton *gtk.Button
|
addToQueueButton *gtk.Button
|
||||||
|
@ -43,16 +43,16 @@ type MainWindow struct {
|
||||||
client *http.Client
|
client *http.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewMainWindow(app *gtk.Application, entries []wiiudownloader.TitleEntry, logger *wiiudownloader.Logger, client *http.Client) *MainWindow {
|
func NewMainWindow(app *gtk.Application, entries []wiiudownloader.TitleEntry, client *http.Client) *MainWindow {
|
||||||
gSettings, err := gtk.SettingsGetDefault()
|
gSettings, err := gtk.SettingsGetDefault()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err.Error())
|
log.Println(err.Error())
|
||||||
}
|
}
|
||||||
gSettings.SetProperty("gtk-application-prefer-dark-theme", isDarkMode())
|
gSettings.SetProperty("gtk-application-prefer-dark-theme", isDarkMode())
|
||||||
|
|
||||||
win, err := gtk.ApplicationWindowNew(app)
|
win, err := gtk.ApplicationWindowNew(app)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Fatal("Unable to create window:", err)
|
log.Fatalln("Unable to create window:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
win.SetTitle("WiiUDownloader")
|
win.SetTitle("WiiUDownloader")
|
||||||
|
@ -63,7 +63,7 @@ func NewMainWindow(app *gtk.Application, entries []wiiudownloader.TitleEntry, lo
|
||||||
|
|
||||||
searchEntry, err := gtk.EntryNew()
|
searchEntry, err := gtk.EntryNew()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Fatal("Unable to create search entry:", err)
|
log.Fatalln("Unable to create entry:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mainWindow := MainWindow{
|
mainWindow := MainWindow{
|
||||||
|
@ -71,7 +71,6 @@ func NewMainWindow(app *gtk.Application, entries []wiiudownloader.TitleEntry, lo
|
||||||
titles: entries,
|
titles: entries,
|
||||||
searchEntry: searchEntry,
|
searchEntry: searchEntry,
|
||||||
currentRegion: wiiudownloader.MCP_REGION_EUROPE | wiiudownloader.MCP_REGION_JAPAN | wiiudownloader.MCP_REGION_USA,
|
currentRegion: wiiudownloader.MCP_REGION_EUROPE | wiiudownloader.MCP_REGION_JAPAN | wiiudownloader.MCP_REGION_USA,
|
||||||
logger: logger,
|
|
||||||
lastSearchText: "",
|
lastSearchText: "",
|
||||||
client: client,
|
client: client,
|
||||||
}
|
}
|
||||||
|
@ -84,7 +83,7 @@ func NewMainWindow(app *gtk.Application, entries []wiiudownloader.TitleEntry, lo
|
||||||
func (mw *MainWindow) updateTitles(titles []wiiudownloader.TitleEntry) {
|
func (mw *MainWindow) updateTitles(titles []wiiudownloader.TitleEntry) {
|
||||||
store, err := gtk.ListStoreNew(glib.TYPE_BOOLEAN, glib.TYPE_STRING, glib.TYPE_STRING, glib.TYPE_STRING, glib.TYPE_STRING)
|
store, err := gtk.ListStoreNew(glib.TYPE_BOOLEAN, glib.TYPE_STRING, glib.TYPE_STRING, glib.TYPE_STRING, glib.TYPE_STRING)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create list store:", err)
|
log.Fatalln("Unable to create list store:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, entry := range titles {
|
for _, entry := range titles {
|
||||||
|
@ -96,7 +95,7 @@ func (mw *MainWindow) updateTitles(titles []wiiudownloader.TitleEntry) {
|
||||||
[]int{IN_QUEUE_COLUMN, KIND_COLUMN, TITLE_ID_COLUMN, REGION_COLUMN, NAME_COLUMN},
|
[]int{IN_QUEUE_COLUMN, KIND_COLUMN, TITLE_ID_COLUMN, REGION_COLUMN, NAME_COLUMN},
|
||||||
[]interface{}{mw.isTitleInQueue(entry), wiiudownloader.GetFormattedKind(entry.TitleID), fmt.Sprintf("%016x", entry.TitleID), wiiudownloader.GetFormattedRegion(entry.Region), entry.Name},
|
[]interface{}{mw.isTitleInQueue(entry), wiiudownloader.GetFormattedKind(entry.TitleID), fmt.Sprintf("%016x", entry.TitleID), wiiudownloader.GetFormattedRegion(entry.Region), entry.Name},
|
||||||
); err != nil {
|
); err != nil {
|
||||||
mw.logger.Fatal("Unable to set values:", err)
|
log.Fatalln("Unable to set values:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mw.treeView.SetModel(store)
|
mw.treeView.SetModel(store)
|
||||||
|
@ -105,7 +104,7 @@ func (mw *MainWindow) updateTitles(titles []wiiudownloader.TitleEntry) {
|
||||||
func (mw *MainWindow) ShowAll() {
|
func (mw *MainWindow) ShowAll() {
|
||||||
store, err := gtk.ListStoreNew(glib.TYPE_BOOLEAN, glib.TYPE_STRING, glib.TYPE_STRING, glib.TYPE_STRING, glib.TYPE_STRING)
|
store, err := gtk.ListStoreNew(glib.TYPE_BOOLEAN, glib.TYPE_STRING, glib.TYPE_STRING, glib.TYPE_STRING, glib.TYPE_STRING)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create list store:", err)
|
log.Fatalln("Unable to create list store:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, entry := range mw.titles {
|
for _, entry := range mw.titles {
|
||||||
|
@ -118,18 +117,18 @@ func (mw *MainWindow) ShowAll() {
|
||||||
[]interface{}{mw.isTitleInQueue(entry), wiiudownloader.GetFormattedKind(entry.TitleID), fmt.Sprintf("%016x", entry.TitleID), wiiudownloader.GetFormattedRegion(entry.Region), entry.Name},
|
[]interface{}{mw.isTitleInQueue(entry), wiiudownloader.GetFormattedKind(entry.TitleID), fmt.Sprintf("%016x", entry.TitleID), wiiudownloader.GetFormattedRegion(entry.Region), entry.Name},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to set values:", err)
|
log.Fatalln("Unable to set values:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mw.treeView, err = gtk.TreeViewNew()
|
mw.treeView, err = gtk.TreeViewNew()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create tree view:", err)
|
log.Fatalln("Unable to create tree view:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
selection, err := mw.treeView.GetSelection()
|
selection, err := mw.treeView.GetSelection()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get selection:", err)
|
log.Fatalln("Unable to get selection:", err)
|
||||||
}
|
}
|
||||||
selection.SetMode(gtk.SELECTION_MULTIPLE)
|
selection.SetMode(gtk.SELECTION_MULTIPLE)
|
||||||
|
|
||||||
|
@ -137,70 +136,70 @@ func (mw *MainWindow) ShowAll() {
|
||||||
|
|
||||||
toggleRenderer, err := gtk.CellRendererToggleNew()
|
toggleRenderer, err := gtk.CellRendererToggleNew()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create cell renderer toggle:", err)
|
log.Fatalln("Unable to create cell renderer toggle:", err)
|
||||||
}
|
}
|
||||||
column, err := gtk.TreeViewColumnNewWithAttribute("Queue", toggleRenderer, "active", IN_QUEUE_COLUMN)
|
column, err := gtk.TreeViewColumnNewWithAttribute("Queue", toggleRenderer, "active", IN_QUEUE_COLUMN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create tree view column:", err)
|
log.Fatalln("Unable to create tree view column:", err)
|
||||||
}
|
}
|
||||||
mw.treeView.AppendColumn(column)
|
mw.treeView.AppendColumn(column)
|
||||||
|
|
||||||
renderer, err := gtk.CellRendererTextNew()
|
renderer, err := gtk.CellRendererTextNew()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create cell renderer:", err)
|
log.Fatalln("Unable to create cell renderer:", err)
|
||||||
}
|
}
|
||||||
column, err = gtk.TreeViewColumnNewWithAttribute("Kind", renderer, "text", KIND_COLUMN)
|
column, err = gtk.TreeViewColumnNewWithAttribute("Kind", renderer, "text", KIND_COLUMN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create tree view column:", err)
|
log.Fatalln("Unable to create tree view column:", err)
|
||||||
}
|
}
|
||||||
mw.treeView.AppendColumn(column)
|
mw.treeView.AppendColumn(column)
|
||||||
|
|
||||||
renderer, err = gtk.CellRendererTextNew()
|
renderer, err = gtk.CellRendererTextNew()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create cell renderer:", err)
|
log.Fatalln("Unable to create cell renderer:", err)
|
||||||
}
|
}
|
||||||
column, err = gtk.TreeViewColumnNewWithAttribute("Title ID", renderer, "text", TITLE_ID_COLUMN)
|
column, err = gtk.TreeViewColumnNewWithAttribute("Title ID", renderer, "text", TITLE_ID_COLUMN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create tree view column:", err)
|
log.Fatalln("Unable to create tree view column:", err)
|
||||||
}
|
}
|
||||||
mw.treeView.AppendColumn(column)
|
mw.treeView.AppendColumn(column)
|
||||||
|
|
||||||
column, err = gtk.TreeViewColumnNewWithAttribute("Region", renderer, "text", REGION_COLUMN)
|
column, err = gtk.TreeViewColumnNewWithAttribute("Region", renderer, "text", REGION_COLUMN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create tree view column:", err)
|
log.Fatalln("Unable to create tree view column:", err)
|
||||||
}
|
}
|
||||||
mw.treeView.AppendColumn(column)
|
mw.treeView.AppendColumn(column)
|
||||||
|
|
||||||
renderer, err = gtk.CellRendererTextNew()
|
renderer, err = gtk.CellRendererTextNew()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create cell renderer:", err)
|
log.Fatalln("Unable to create cell renderer:", err)
|
||||||
}
|
}
|
||||||
column, err = gtk.TreeViewColumnNewWithAttribute("Name", renderer, "text", NAME_COLUMN)
|
column, err = gtk.TreeViewColumnNewWithAttribute("Name", renderer, "text", NAME_COLUMN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create tree view column:", err)
|
log.Fatalln("Unable to create tree view column:", err)
|
||||||
}
|
}
|
||||||
mw.treeView.AppendColumn(column)
|
mw.treeView.AppendColumn(column)
|
||||||
|
|
||||||
mainvBox, err := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 0)
|
mainvBox, err := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create box:", err)
|
log.Fatalln("Unable to create box:", err)
|
||||||
}
|
}
|
||||||
menuBar, err := gtk.MenuBarNew()
|
menuBar, err := gtk.MenuBarNew()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create menu bar:", err)
|
log.Fatalln("Unable to create menu bar:", err)
|
||||||
}
|
}
|
||||||
toolsSubMenu, err := gtk.MenuNew()
|
toolsSubMenu, err := gtk.MenuNew()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create menu:", err)
|
log.Fatalln("Unable to create menu:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
toolsMenu, err := gtk.MenuItemNewWithLabel("Tools")
|
toolsMenu, err := gtk.MenuItemNewWithLabel("Tools")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create menu item:", err)
|
log.Fatalln("Unable to create menu item:", err)
|
||||||
}
|
}
|
||||||
decryptContentsMenuItem, err := gtk.MenuItemNewWithLabel("Decrypt contents")
|
decryptContentsMenuItem, err := gtk.MenuItemNewWithLabel("Decrypt contents")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create menu item:", err)
|
log.Fatalln("Unable to create menu item:", err)
|
||||||
}
|
}
|
||||||
decryptContentsMenuItem.Connect("activate", func() {
|
decryptContentsMenuItem.Connect("activate", func() {
|
||||||
mw.progressWindow, err = createProgressWindow(mw.window)
|
mw.progressWindow, err = createProgressWindow(mw.window)
|
||||||
|
@ -230,7 +229,7 @@ func (mw *MainWindow) ShowAll() {
|
||||||
|
|
||||||
generateFakeTicketCert, err := gtk.MenuItemNewWithLabel("Generate fake ticket and cert")
|
generateFakeTicketCert, err := gtk.MenuItemNewWithLabel("Generate fake ticket and cert")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create menu item:", err)
|
log.Fatalln("Unable to create menu item:", err)
|
||||||
}
|
}
|
||||||
generateFakeTicketCert.Connect("activate", func() {
|
generateFakeTicketCert.Connect("activate", func() {
|
||||||
tmdPath, err := dialog.File().Title("Select the game's tmd file").Filter("tmd", "tmd").Load()
|
tmdPath, err := dialog.File().Title("Select the game's tmd file").Filter("tmd", "tmd").Load()
|
||||||
|
@ -287,20 +286,20 @@ func (mw *MainWindow) ShowAll() {
|
||||||
mainvBox.PackStart(menuBar, false, false, 0)
|
mainvBox.PackStart(menuBar, false, false, 0)
|
||||||
tophBox, err := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
|
tophBox, err := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create box:", err)
|
log.Fatalln("Unable to create box:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mw.categoryButtons = make([]*gtk.ToggleButton, 0)
|
mw.categoryButtons = make([]*gtk.ToggleButton, 0)
|
||||||
for _, cat := range []string{"Game", "Update", "DLC", "Demo", "All"} {
|
for _, cat := range []string{"Game", "Update", "DLC", "Demo", "All"} {
|
||||||
button, err := gtk.ToggleButtonNewWithLabel(cat)
|
button, err := gtk.ToggleButtonNewWithLabel(cat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create toggle button:", err)
|
log.Fatalln("Unable to create toggle button:", err)
|
||||||
}
|
}
|
||||||
tophBox.PackStart(button, false, false, 0)
|
tophBox.PackStart(button, false, false, 0)
|
||||||
button.Connect("pressed", mw.onCategoryToggled)
|
button.Connect("pressed", mw.onCategoryToggled)
|
||||||
buttonLabel, err := button.GetLabel()
|
buttonLabel, err := button.GetLabel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get label:", err)
|
log.Fatalln("Unable to get label:", err)
|
||||||
}
|
}
|
||||||
if buttonLabel == "Game" {
|
if buttonLabel == "Game" {
|
||||||
button.SetActive(true)
|
button.SetActive(true)
|
||||||
|
@ -313,7 +312,7 @@ func (mw *MainWindow) ShowAll() {
|
||||||
|
|
||||||
scrollable, err := gtk.ScrolledWindowNew(nil, nil)
|
scrollable, err := gtk.ScrolledWindowNew(nil, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create scrolled window:", err)
|
log.Fatalln("Unable to create scrolled window:", err)
|
||||||
}
|
}
|
||||||
scrollable.SetPolicy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
scrollable.SetPolicy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
||||||
selection.Connect("changed", mw.onSelectionChanged)
|
selection.Connect("changed", mw.onSelectionChanged)
|
||||||
|
@ -323,27 +322,27 @@ func (mw *MainWindow) ShowAll() {
|
||||||
|
|
||||||
bottomhBox, err := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
|
bottomhBox, err := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create box:", err)
|
log.Fatalln("Unable to create box:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mw.addToQueueButton, err = gtk.ButtonNewWithLabel("Add to queue")
|
mw.addToQueueButton, err = gtk.ButtonNewWithLabel("Add to queue")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create button:", err)
|
log.Fatalln("Unable to create button:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadQueueButton, err := gtk.ButtonNewWithLabel("Download queue")
|
downloadQueueButton, err := gtk.ButtonNewWithLabel("Download queue")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create button:", err)
|
log.Fatalln("Unable to create button:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
decryptContentsCheckbox, err := gtk.CheckButtonNewWithLabel("Decrypt contents")
|
decryptContentsCheckbox, err := gtk.CheckButtonNewWithLabel("Decrypt contents")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create button:", err)
|
log.Fatalln("Unable to create button:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mw.deleteEncryptedContentsCheckbox, err = gtk.CheckButtonNewWithLabel("Delete encrypted contents after decryption")
|
mw.deleteEncryptedContentsCheckbox, err = gtk.CheckButtonNewWithLabel("Delete encrypted contents after decryption")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create button:", err)
|
log.Fatalln("Unable to create button:", err)
|
||||||
}
|
}
|
||||||
mw.deleteEncryptedContentsCheckbox.SetSensitive(false)
|
mw.deleteEncryptedContentsCheckbox.SetSensitive(false)
|
||||||
|
|
||||||
|
@ -381,7 +380,7 @@ func (mw *MainWindow) ShowAll() {
|
||||||
|
|
||||||
checkboxvBox, err := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 0)
|
checkboxvBox, err := gtk.BoxNew(gtk.ORIENTATION_VERTICAL, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create box:", err)
|
log.Fatalln("Unable to create box:", err)
|
||||||
}
|
}
|
||||||
checkboxvBox.PackStart(decryptContentsCheckbox, false, false, 0)
|
checkboxvBox.PackStart(decryptContentsCheckbox, false, false, 0)
|
||||||
checkboxvBox.PackEnd(mw.deleteEncryptedContentsCheckbox, false, false, 0)
|
checkboxvBox.PackEnd(mw.deleteEncryptedContentsCheckbox, false, false, 0)
|
||||||
|
@ -391,7 +390,7 @@ func (mw *MainWindow) ShowAll() {
|
||||||
japanButton, err := gtk.CheckButtonNewWithLabel("Japan")
|
japanButton, err := gtk.CheckButtonNewWithLabel("Japan")
|
||||||
japanButton.SetActive(true)
|
japanButton.SetActive(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create button:", err)
|
log.Fatalln("Unable to create button:", err)
|
||||||
}
|
}
|
||||||
japanButton.Connect("clicked", func() {
|
japanButton.Connect("clicked", func() {
|
||||||
mw.onRegionChange(japanButton, wiiudownloader.MCP_REGION_JAPAN)
|
mw.onRegionChange(japanButton, wiiudownloader.MCP_REGION_JAPAN)
|
||||||
|
@ -401,7 +400,7 @@ func (mw *MainWindow) ShowAll() {
|
||||||
usaButton, err := gtk.CheckButtonNewWithLabel("USA")
|
usaButton, err := gtk.CheckButtonNewWithLabel("USA")
|
||||||
usaButton.SetActive(true)
|
usaButton.SetActive(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create button:", err)
|
log.Fatalln("Unable to create button:", err)
|
||||||
}
|
}
|
||||||
usaButton.Connect("clicked", func() {
|
usaButton.Connect("clicked", func() {
|
||||||
mw.onRegionChange(usaButton, wiiudownloader.MCP_REGION_USA)
|
mw.onRegionChange(usaButton, wiiudownloader.MCP_REGION_USA)
|
||||||
|
@ -411,7 +410,7 @@ func (mw *MainWindow) ShowAll() {
|
||||||
europeButton, err := gtk.CheckButtonNewWithLabel("Europe")
|
europeButton, err := gtk.CheckButtonNewWithLabel("Europe")
|
||||||
europeButton.SetActive(true)
|
europeButton.SetActive(true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to create button:", err)
|
log.Fatalln("Unable to create button:", err)
|
||||||
}
|
}
|
||||||
europeButton.Connect("clicked", func() {
|
europeButton.Connect("clicked", func() {
|
||||||
mw.onRegionChange(europeButton, wiiudownloader.MCP_REGION_EUROPE)
|
mw.onRegionChange(europeButton, wiiudownloader.MCP_REGION_EUROPE)
|
||||||
|
@ -443,7 +442,7 @@ func (mw *MainWindow) onRegionChange(button *gtk.CheckButton, region uint8) {
|
||||||
func (mw *MainWindow) onSearchEntryChanged() {
|
func (mw *MainWindow) onSearchEntryChanged() {
|
||||||
text, err := mw.searchEntry.GetText()
|
text, err := mw.searchEntry.GetText()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get text:", err)
|
log.Fatalln("Unable to get text:", err)
|
||||||
}
|
}
|
||||||
mw.lastSearchText = text
|
mw.lastSearchText = text
|
||||||
mw.filterTitles(text)
|
mw.filterTitles(text)
|
||||||
|
@ -452,7 +451,7 @@ func (mw *MainWindow) onSearchEntryChanged() {
|
||||||
func (mw *MainWindow) filterTitles(filterText string) {
|
func (mw *MainWindow) filterTitles(filterText string) {
|
||||||
store, err := mw.treeView.GetModel()
|
store, err := mw.treeView.GetModel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get tree view model:", err)
|
log.Fatalln("Unable to get tree view model:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
storeRef := store.(*gtk.ListStore)
|
storeRef := store.(*gtk.ListStore)
|
||||||
|
@ -469,7 +468,7 @@ func (mw *MainWindow) filterTitles(filterText string) {
|
||||||
[]int{IN_QUEUE_COLUMN, KIND_COLUMN, TITLE_ID_COLUMN, REGION_COLUMN, NAME_COLUMN},
|
[]int{IN_QUEUE_COLUMN, KIND_COLUMN, TITLE_ID_COLUMN, REGION_COLUMN, NAME_COLUMN},
|
||||||
[]interface{}{mw.isTitleInQueue(entry), wiiudownloader.GetFormattedKind(entry.TitleID), fmt.Sprintf("%016x", entry.TitleID), wiiudownloader.GetFormattedRegion(entry.Region), entry.Name},
|
[]interface{}{mw.isTitleInQueue(entry), wiiudownloader.GetFormattedKind(entry.TitleID), fmt.Sprintf("%016x", entry.TitleID), wiiudownloader.GetFormattedRegion(entry.Region), entry.Name},
|
||||||
); err != nil {
|
); err != nil {
|
||||||
mw.logger.Fatal("Unable to set values:", err)
|
log.Fatalln("Unable to set values:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -478,7 +477,7 @@ func (mw *MainWindow) filterTitles(filterText string) {
|
||||||
func (mw *MainWindow) onCategoryToggled(button *gtk.ToggleButton) {
|
func (mw *MainWindow) onCategoryToggled(button *gtk.ToggleButton) {
|
||||||
category, err := button.GetLabel()
|
category, err := button.GetLabel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get label:", err)
|
log.Fatalln("Unable to get label:", err)
|
||||||
}
|
}
|
||||||
mw.titles = wiiudownloader.GetTitleEntries(wiiudownloader.GetCategoryFromFormattedCategory(category))
|
mw.titles = wiiudownloader.GetTitleEntries(wiiudownloader.GetCategoryFromFormattedCategory(category))
|
||||||
mw.updateTitles(mw.titles)
|
mw.updateTitles(mw.titles)
|
||||||
|
@ -503,12 +502,12 @@ func (mw *MainWindow) onDecryptContentsMenuItemClicked(selectedPath string) erro
|
||||||
func (mw *MainWindow) isSelectionInQueue() bool {
|
func (mw *MainWindow) isSelectionInQueue() bool {
|
||||||
selection, err := mw.treeView.GetSelection()
|
selection, err := mw.treeView.GetSelection()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get selection:", err)
|
log.Fatalln("Unable to get selection:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
store, err := mw.treeView.GetModel()
|
store, err := mw.treeView.GetModel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get model:", err)
|
log.Fatalln("Unable to get model:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
storeRef := store.(*gtk.ListStore)
|
storeRef := store.(*gtk.ListStore)
|
||||||
|
@ -589,7 +588,7 @@ func (mw *MainWindow) isTitleInQueue(title wiiudownloader.TitleEntry) bool {
|
||||||
func (mw *MainWindow) addToQueue(tid, name string) {
|
func (mw *MainWindow) addToQueue(tid, name string) {
|
||||||
titleID, err := strconv.ParseUint(tid, 16, 64)
|
titleID, err := strconv.ParseUint(tid, 16, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to parse title ID:", err)
|
log.Fatalln("Unable to parse title ID:", err)
|
||||||
}
|
}
|
||||||
mw.titleQueue = append(mw.titleQueue, wiiudownloader.TitleEntry{TitleID: titleID, Name: name})
|
mw.titleQueue = append(mw.titleQueue, wiiudownloader.TitleEntry{TitleID: titleID, Name: name})
|
||||||
}
|
}
|
||||||
|
@ -606,12 +605,12 @@ func (mw *MainWindow) removeFromQueue(tid string) {
|
||||||
func (mw *MainWindow) onAddToQueueClicked() {
|
func (mw *MainWindow) onAddToQueueClicked() {
|
||||||
selection, err := mw.treeView.GetSelection()
|
selection, err := mw.treeView.GetSelection()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get selection:", err)
|
log.Fatalln("Unable to get selection:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
store, err := mw.treeView.GetModel()
|
store, err := mw.treeView.GetModel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get model:", err)
|
log.Fatalln("Unable to get model:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
storeRef := store.(*gtk.ListStore)
|
storeRef := store.(*gtk.ListStore)
|
||||||
|
@ -629,7 +628,7 @@ func (mw *MainWindow) onAddToQueueClicked() {
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
mw.logger.Fatal("Error updating model:", r)
|
log.Fatalln("Error updating model:", r)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -693,14 +692,14 @@ func (mw *MainWindow) onAddToQueueClicked() {
|
||||||
func (mw *MainWindow) updateTitlesInQueue() {
|
func (mw *MainWindow) updateTitlesInQueue() {
|
||||||
store, err := mw.treeView.GetModel()
|
store, err := mw.treeView.GetModel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get tree view model:", err)
|
log.Fatalln("Unable to get tree view model:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
storeRef := store.(*gtk.ListStore)
|
storeRef := store.(*gtk.ListStore)
|
||||||
|
|
||||||
iter, ok := storeRef.GetIterFirst()
|
iter, ok := storeRef.GetIterFirst()
|
||||||
if !ok {
|
if !ok {
|
||||||
mw.logger.Fatal("Unable to get first iter:", err)
|
log.Fatalln("Unable to get first iter:", err)
|
||||||
}
|
}
|
||||||
for iter != nil {
|
for iter != nil {
|
||||||
tid, err := storeRef.GetValue(iter, TITLE_ID_COLUMN)
|
tid, err := storeRef.GetValue(iter, TITLE_ID_COLUMN)
|
||||||
|
@ -754,7 +753,7 @@ func (mw *MainWindow) onDownloadQueueClicked(selectedPath string) error {
|
||||||
}
|
}
|
||||||
tidStr := fmt.Sprintf("%016x", title.TitleID)
|
tidStr := fmt.Sprintf("%016x", title.TitleID)
|
||||||
titlePath := filepath.Join(selectedPath, fmt.Sprintf("%s [%s] [%s]", normalizeFilename(title.Name), wiiudownloader.GetFormattedKind(title.TitleID), tidStr))
|
titlePath := filepath.Join(selectedPath, fmt.Sprintf("%s [%s] [%s]", normalizeFilename(title.Name), wiiudownloader.GetFormattedKind(title.TitleID), tidStr))
|
||||||
if err := wiiudownloader.DownloadTitle(tidStr, titlePath, mw.decryptContents, mw.progressWindow, mw.getDeleteEncryptedContents(), mw.logger, mw.client); err != nil && err != context.Canceled {
|
if err := wiiudownloader.DownloadTitle(tidStr, titlePath, mw.decryptContents, mw.progressWindow, mw.getDeleteEncryptedContents(), mw.client); err != nil && err != context.Canceled {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
@ -158,7 +159,7 @@ func downloadFile(progressReporter ProgressReporter, client *http.Client, downlo
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func DownloadTitle(titleID, outputDirectory string, doDecryption bool, progressReporter ProgressReporter, deleteEncryptedContents bool, logger *Logger, client *http.Client) error {
|
func DownloadTitle(titleID, outputDirectory string, doDecryption bool, progressReporter ProgressReporter, deleteEncryptedContents bool, client *http.Client) error {
|
||||||
tEntry := getTitleEntryFromTid(titleID)
|
tEntry := getTitleEntryFromTid(titleID)
|
||||||
|
|
||||||
progressReporter.ResetTotalDownloaded()
|
progressReporter.ResetTotalDownloaded()
|
||||||
|
@ -252,7 +253,7 @@ func DownloadTitle(titleID, outputDirectory string, doDecryption bool, progressR
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
certFile.Close()
|
certFile.Close()
|
||||||
logger.Info("Certificate saved to %v \n", certPath)
|
log.Printf("Certificate saved to %v \n", certPath)
|
||||||
|
|
||||||
g, ctx := errgroup.WithContext(context.Background())
|
g, ctx := errgroup.WithContext(context.Background())
|
||||||
g.SetLimit(maxConcurrentDownloads)
|
g.SetLimit(maxConcurrentDownloads)
|
||||||
|
|
81
logger.go
81
logger.go
|
@ -1,81 +0,0 @@
|
||||||
package wiiudownloader
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
type LogLevel int
|
|
||||||
|
|
||||||
const (
|
|
||||||
Info LogLevel = iota
|
|
||||||
Warning
|
|
||||||
Error
|
|
||||||
Fatal
|
|
||||||
)
|
|
||||||
|
|
||||||
var logLevelStrings = map[LogLevel]string{
|
|
||||||
Info: "[Info]",
|
|
||||||
Warning: "[Warning]",
|
|
||||||
Error: "[Error]",
|
|
||||||
Fatal: "[Fatal]",
|
|
||||||
}
|
|
||||||
|
|
||||||
type Logger struct {
|
|
||||||
logFile *os.File
|
|
||||||
logger *log.Logger
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewLogger(logFilePath string) (*Logger, error) {
|
|
||||||
var logFile *os.File
|
|
||||||
var err error
|
|
||||||
|
|
||||||
// If logFilePath is empty, log only to stdout
|
|
||||||
if logFilePath == "" {
|
|
||||||
return &Logger{
|
|
||||||
logger: log.New(os.Stdout, "", log.Ldate|log.Ltime),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open the log file for writing, truncating it if it exists
|
|
||||||
logFile, err = os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o666)
|
|
||||||
if err != nil {
|
|
||||||
// If unable to open the log file, log the error to stdout
|
|
||||||
log.New(os.Stdout, "", log.Ldate|log.Ltime).Printf("[Error] Unable to open log file: %v\n", err)
|
|
||||||
return &Logger{
|
|
||||||
logger: log.New(os.Stdout, "", log.Ldate|log.Ltime),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the logger that writes to both stdout and the file
|
|
||||||
logger := log.New(io.MultiWriter(os.Stdout, logFile), "", log.Ldate|log.Ltime)
|
|
||||||
|
|
||||||
return &Logger{
|
|
||||||
logFile: logFile,
|
|
||||||
logger: logger,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *Logger) log(level LogLevel, format string, v ...interface{}) {
|
|
||||||
if prefix, ok := logLevelStrings[level]; ok {
|
|
||||||
l.logger.Printf(prefix+" "+format, v...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *Logger) Info(format string, v ...interface{}) {
|
|
||||||
l.log(Info, format, v...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *Logger) Warning(format string, v ...interface{}) {
|
|
||||||
l.log(Warning, format, v...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *Logger) Error(format string, v ...interface{}) {
|
|
||||||
l.log(Error, format, v...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *Logger) Fatal(format string, v ...interface{}) {
|
|
||||||
l.log(Fatal, format, v...)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue