mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-17 02:33:27 +01:00
[Widgets]: cleanup: refactored to use guard-else flow instead of if-else flow
This commit is contained in:
@@ -18,10 +18,16 @@ class ActiveAppsTimelineProvider<T: WidgetInfo>: AppsTimelineProviderBase<Widge
|
||||
let ID: Int?
|
||||
}
|
||||
|
||||
private let dataHolder = PaginationDataHolder(
|
||||
private let defaultDataHolder = PaginationDataHolder(
|
||||
itemsPerPage: ActiveAppsWidget.Constants.MAX_ROWS_PER_PAGE
|
||||
)
|
||||
|
||||
let widgetKind: String
|
||||
|
||||
init(widgetKind: String){
|
||||
self.widgetKind = widgetKind
|
||||
}
|
||||
|
||||
deinit{
|
||||
// if this provider goes out of scope, clear all entries
|
||||
PageInfoManager.shared.clearAll()
|
||||
@@ -30,36 +36,65 @@ class ActiveAppsTimelineProvider<T: WidgetInfo>: AppsTimelineProviderBase<Widge
|
||||
override func getUpdatedData(_ apps: [AppSnapshot], _ context: WidgetInfo?) -> [AppSnapshot] {
|
||||
var apps = apps
|
||||
|
||||
// if simulator, get the 10 simulated entries based on first entry
|
||||
#if targetEnvironment(simulator)
|
||||
apps = getSimulatedData(apps: apps)
|
||||
#endif
|
||||
|
||||
var currentPageApps = dataHolder.currentPage(inItems: apps)
|
||||
if let widgetInfo = context,
|
||||
let widgetID = widgetInfo.ID {
|
||||
|
||||
var navEvent: NavigationEvent? = PageInfoManager.shared.getPageInfo(for: widgetID)
|
||||
if let event = navEvent,
|
||||
let direction = event.direction
|
||||
{
|
||||
// process navigation request only if event wasn't consumed yet
|
||||
if !event.consumed {
|
||||
switch (direction){
|
||||
case Direction.up:
|
||||
currentPageApps = dataHolder.prevPage(inItems: apps, whenUnavailable: .current)!
|
||||
case Direction.down:
|
||||
currentPageApps = dataHolder.nextPage(inItems: apps, whenUnavailable: .current)!
|
||||
}
|
||||
// mark the event as consumed
|
||||
// this prevents duplicate getUpdatedData() requests for same navigation event
|
||||
navEvent!.consumed = true
|
||||
}
|
||||
}
|
||||
PageInfoManager.shared.setPageInfo(for: widgetID, value: navEvent)
|
||||
// always first page since this is never updated
|
||||
var currentPageApps = defaultDataHolder.currentPage(inItems: apps)
|
||||
|
||||
guard let widgetInfo = context,
|
||||
let widgetID = widgetInfo.ID else
|
||||
{
|
||||
return currentPageApps
|
||||
}
|
||||
|
||||
|
||||
let navEvent = getPageInfo(widgetID: widgetID)
|
||||
guard var navEvent = navEvent,
|
||||
let direction = navEvent.direction else
|
||||
{
|
||||
// when widget is edited for new ID than the current,
|
||||
// buttons were never triggered for this ID,
|
||||
// hence nav-event or direction wasn't set yet
|
||||
updatePageInfo(
|
||||
widgetID: widgetID,
|
||||
navEvent: NavigationEvent(direction: nil, consumed: true, dataHolder: PaginationDataHolder(other: defaultDataHolder))
|
||||
)
|
||||
return currentPageApps
|
||||
}
|
||||
|
||||
let dataHolder = navEvent.dataHolder!
|
||||
|
||||
// process navigation request only if event wasn't consumed yet
|
||||
if !navEvent.consumed {
|
||||
switch (direction){
|
||||
case Direction.up:
|
||||
currentPageApps = dataHolder.prevPage(inItems: apps, whenUnavailable: .current)!
|
||||
case Direction.down:
|
||||
currentPageApps = dataHolder.nextPage(inItems: apps, whenUnavailable: .current)!
|
||||
}
|
||||
// mark the event as consumed
|
||||
// this prevents duplicate getUpdatedData() requests for same navigation event
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
private func getPageInfo(widgetID: Int) -> NavigationEvent?{
|
||||
return PageInfoManager.shared.getPageInfo(forWidgetKind: widgetKind, forWidgetID: widgetID)
|
||||
}
|
||||
|
||||
private func updatePageInfo(widgetID: Int, navEvent: NavigationEvent?) {
|
||||
PageInfoManager.shared.setPageInfo(forWidgetKind: widgetKind, forWidgetID: widgetID, value: navEvent)
|
||||
}
|
||||
}
|
||||
|
||||
/// TimelineProvider for WidgetAppIntentConfiguration widget type
|
||||
|
||||
Reference in New Issue
Block a user