mirror of
https://github.com/Xpl0itU/WiiUDownloader.git
synced 2025-05-29 22:45:17 -04:00
Finally fix crash when spamming add to queue on all titles
This commit is contained in:
parent
a908559687
commit
c70878b2c5
1 changed files with 57 additions and 89 deletions
|
@ -512,45 +512,32 @@ func (mw *MainWindow) isSelectionInQueue() bool {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get selection:", err)
|
mw.logger.Fatal("Unable to get selection:", err)
|
||||||
}
|
}
|
||||||
model, err := mw.treeView.GetModel()
|
|
||||||
|
store, err := mw.treeView.GetModel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get model:", err)
|
mw.logger.Fatal("Unable to get model:", err)
|
||||||
}
|
}
|
||||||
treeModel := model.ToTreeModel()
|
|
||||||
|
storeRef := store.(*gtk.ListStore)
|
||||||
|
treeModel := storeRef.ToTreeModel()
|
||||||
if treeModel == nil {
|
if treeModel == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
pathlist := selection.GetSelectedRows(treeModel)
|
selectionSelected := selection.GetSelectedRows(treeModel)
|
||||||
if pathlist == nil {
|
if selectionSelected == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
allTitlesInQueue := true
|
allTitlesInQueue := true
|
||||||
|
|
||||||
for l := pathlist; l != nil; l = l.Next() {
|
iter, _ := treeModel.GetIterFirst()
|
||||||
if l == nil {
|
for iter != nil {
|
||||||
continue
|
inQueueVal, err := treeModel.GetValue(iter, IN_QUEUE_COLUMN)
|
||||||
}
|
|
||||||
lData := l.Data()
|
|
||||||
if lData == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
path, ok := lData.(*gtk.TreePath)
|
|
||||||
if !ok || path == nil || path.GetDepth() <= 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
row, err := treeModel.GetIter(path)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
isInQueue, err := inQueueVal.GoValue()
|
||||||
inQueue, err := treeModel.GetValue(row, IN_QUEUE_COLUMN)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
isInQueue, err := inQueue.GoValue()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -560,7 +547,9 @@ func (mw *MainWindow) isSelectionInQueue() bool {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
inQueue.Unset()
|
if !storeRef.IterNext(iter) {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return allTitlesInQueue
|
return allTitlesInQueue
|
||||||
|
@ -624,102 +613,81 @@ func (mw *MainWindow) onAddToQueueClicked() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get selection:", err)
|
mw.logger.Fatal("Unable to get selection:", err)
|
||||||
}
|
}
|
||||||
model, err := mw.treeView.GetModel()
|
|
||||||
|
store, err := mw.treeView.GetModel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mw.logger.Fatal("Unable to get model:", err)
|
mw.logger.Fatal("Unable to get model:", err)
|
||||||
}
|
}
|
||||||
treeModel := model.ToTreeModel()
|
|
||||||
|
storeRef := store.(*gtk.ListStore)
|
||||||
|
treeModel := storeRef.ToTreeModel()
|
||||||
if treeModel == nil {
|
if treeModel == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
addToQueue := !mw.isSelectionInQueue()
|
addToQueue := !mw.isSelectionInQueue()
|
||||||
pathlist := selection.GetSelectedRows(treeModel)
|
|
||||||
if pathlist == nil {
|
selectionSelected := selection.GetSelectedRows(treeModel)
|
||||||
|
if selectionSelected == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var toUpdateRows []*gtk.TreeIter
|
|
||||||
var toUpdateInQueueVals []bool
|
|
||||||
|
|
||||||
for l := pathlist; l != nil; l = l.Next() {
|
|
||||||
if l == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
treePath := l.Data()
|
|
||||||
if treePath == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
path, ok := treePath.(*gtk.TreePath)
|
|
||||||
if !ok || path == nil || path.GetDepth() <= 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
row, err := treeModel.GetIter(path)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
inQueue, err := treeModel.GetValue(row, IN_QUEUE_COLUMN)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
isInQueue, err := inQueue.GoValue()
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if addToQueue != isInQueue.(bool) {
|
|
||||||
toUpdateRows = append(toUpdateRows, row)
|
|
||||||
toUpdateInQueueVals = append(toUpdateInQueueVals, addToQueue)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
if r := recover(); r != nil {
|
if r := recover(); r != nil {
|
||||||
mw.logger.Fatal("Error updating model:", r)
|
mw.logger.Fatal("Error updating model:", r)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
for i, row := range toUpdateRows {
|
iter, _ := treeModel.GetIterFirst()
|
||||||
inQueueVal := toUpdateInQueueVals[i]
|
for iter != nil {
|
||||||
inQueue, err := treeModel.GetValue(row, IN_QUEUE_COLUMN)
|
inQueueVal, err := treeModel.GetValue(iter, IN_QUEUE_COLUMN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
inQueue.SetBool(inQueueVal)
|
isInQueue, err := inQueueVal.GoValue()
|
||||||
|
|
||||||
tid, err := treeModel.GetValue(row, TITLE_ID_COLUMN)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
tidStr, err := tid.GetString()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if inQueueVal {
|
if addToQueue != isInQueue.(bool) {
|
||||||
name, err := treeModel.GetValue(row, NAME_COLUMN)
|
inQueue, err := treeModel.GetValue(iter, IN_QUEUE_COLUMN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
nameStr, err := name.GetString()
|
inQueue.SetBool(addToQueue)
|
||||||
|
tid, err := treeModel.GetValue(iter, TITLE_ID_COLUMN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
mw.addToQueue(tidStr, nameStr)
|
tidStr, err := tid.GetString()
|
||||||
mw.addToQueueButton.SetLabel("Remove from queue")
|
if err != nil {
|
||||||
name.Unset()
|
continue
|
||||||
} else {
|
}
|
||||||
mw.removeFromQueue(tidStr)
|
|
||||||
mw.addToQueueButton.SetLabel("Add to queue")
|
if addToQueue {
|
||||||
|
name, err := treeModel.GetValue(iter, NAME_COLUMN)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
nameStr, err := name.GetString()
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
mw.addToQueue(tidStr, nameStr)
|
||||||
|
mw.addToQueueButton.SetLabel("Remove from queue")
|
||||||
|
name.Unset()
|
||||||
|
} else {
|
||||||
|
mw.removeFromQueue(tidStr)
|
||||||
|
mw.addToQueueButton.SetLabel("Add to queue")
|
||||||
|
}
|
||||||
|
|
||||||
|
storeRef.SetValue(iter, IN_QUEUE_COLUMN, addToQueue)
|
||||||
|
tid.Unset()
|
||||||
}
|
}
|
||||||
|
|
||||||
queueModel, err := mw.treeView.GetModel()
|
if !storeRef.IterNext(iter) {
|
||||||
if err != nil {
|
break
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
queueModel.(*gtk.ListStore).SetValue(row, IN_QUEUE_COLUMN, inQueueVal)
|
|
||||||
inQueue.Unset()
|
|
||||||
tid.Unset()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue