mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
[DataHolder]: Fixes for out-of-bounds condition and revert back to if-else instead of guard-else for better representation of logic
This commit is contained in:
@@ -41,49 +41,39 @@ class ActiveAppsTimelineProvider<T: WidgetInfo>: AppsTimelineProviderBase<Widge
|
|||||||
apps = getSimulatedData(apps: apps)
|
apps = getSimulatedData(apps: apps)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// always first page since this is never updated
|
// always start with first page since defaultDataHolder is never updated
|
||||||
var currentPageApps = defaultDataHolder.currentPage(inItems: apps)
|
var currentPageApps = defaultDataHolder.currentPage(inItems: apps)
|
||||||
|
|
||||||
guard let widgetInfo = context,
|
|
||||||
let widgetID = widgetInfo.ID else
|
|
||||||
{
|
|
||||||
return currentPageApps
|
|
||||||
}
|
|
||||||
|
|
||||||
let navEvent = getPageInfo(widgetID: widgetID)
|
if let widgetInfo = context,
|
||||||
guard var navEvent = navEvent,
|
let widgetID = widgetInfo.ID {
|
||||||
let direction = navEvent.direction else
|
|
||||||
{
|
var navEvent = getPageInfo(widgetID: widgetID)
|
||||||
// when widget is edited for new ID than the current,
|
if let event = navEvent,
|
||||||
// buttons were never triggered for this ID,
|
let direction = event.direction
|
||||||
// hence nav-event or direction wasn't set yet
|
{
|
||||||
updatePageInfo(
|
let dataHolder = event.dataHolder!
|
||||||
widgetID: widgetID,
|
currentPageApps = dataHolder.currentPage(inItems: apps)
|
||||||
navEvent: NavigationEvent(direction: nil, consumed: true, dataHolder: PaginationDataHolder(other: defaultDataHolder))
|
|
||||||
)
|
// process navigation request only if event wasn't consumed yet
|
||||||
return currentPageApps
|
if !event.consumed {
|
||||||
}
|
switch (direction){
|
||||||
|
case Direction.up:
|
||||||
let dataHolder = navEvent.dataHolder!
|
currentPageApps = dataHolder.prevPage(inItems: apps, whenUnavailable: .current)!
|
||||||
|
case Direction.down:
|
||||||
// process navigation request only if event wasn't consumed yet
|
currentPageApps = dataHolder.nextPage(inItems: apps, whenUnavailable: .current)!
|
||||||
if !navEvent.consumed {
|
}
|
||||||
switch (direction){
|
// mark the event as consumed
|
||||||
case Direction.up:
|
// this prevents duplicate getUpdatedData() requests for same navigation event
|
||||||
currentPageApps = dataHolder.prevPage(inItems: apps, whenUnavailable: .current)!
|
navEvent!.consumed = true
|
||||||
case Direction.down:
|
}
|
||||||
currentPageApps = dataHolder.nextPage(inItems: apps, whenUnavailable: .current)!
|
}else{
|
||||||
|
// construct fresh/replace existing
|
||||||
|
navEvent = NavigationEvent(direction: nil, consumed: true, dataHolder: PaginationDataHolder(other: defaultDataHolder))
|
||||||
}
|
}
|
||||||
// mark the event as consumed
|
// put back the data
|
||||||
// this prevents duplicate getUpdatedData() requests for same navigation event
|
updatePageInfo(widgetID: widgetID, navEvent: navEvent)
|
||||||
navEvent.consumed = true
|
|
||||||
}else{
|
|
||||||
// since the event was consumed, get the current page as-is for this dataholder
|
|
||||||
currentPageApps = dataHolder.currentPage(inItems: apps)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// put back the data
|
|
||||||
updatePageInfo(widgetID: widgetID, navEvent: navEvent)
|
|
||||||
return currentPageApps
|
return currentPageApps
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,13 @@ public class PaginationDataHolder {
|
|||||||
let count = UInt(items.count)
|
let count = UInt(items.count)
|
||||||
|
|
||||||
if(count == 0) { return items }
|
if(count == 0) { return items }
|
||||||
|
|
||||||
|
// since we operate on any input items list at any time,
|
||||||
|
// we set currentPageIndex as last availablePage if out of bounds
|
||||||
|
let availablePages = UInt(ceil(Double(count) / Double(itemsPerPage)))
|
||||||
|
|
||||||
|
self.currentPageindex = min(availablePages-1, currentPageindex)
|
||||||
|
|
||||||
let startIndex = currentPageindex * itemsPerPage
|
let startIndex = currentPageindex * itemsPerPage
|
||||||
let estimatedEndIndex = startIndex + (itemsPerPage-1)
|
let estimatedEndIndex = startIndex + (itemsPerPage-1)
|
||||||
let endIndex: UInt = min(count-1, estimatedEndIndex)
|
let endIndex: UInt = min(count-1, estimatedEndIndex)
|
||||||
|
|||||||
Reference in New Issue
Block a user