Skip to content

Commit 21e4fdb

Browse files
sla8cPaul Von Schrottkystaskus
authored
Stats: PeriodStore + improve CoreData Persistence + Caching (#19776)
* adding a barrierblock to end of fetchAsyncData in order to persistToCoreData * changed to use DispatchGroup * Refactor stats period store dispatch group Co-authored-by: Paul Von Schrottky <[email protected]> Co-authored-by: Povilas Staskus <[email protected]>
1 parent e961d83 commit 21e4fdb

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

WordPress/Classes/Stores/StatsPeriodStore.swift

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,12 @@ private extension StatsPeriodStore {
384384
return
385385
}
386386

387+
let group = DispatchGroup()
388+
389+
if FeatureFlag.statsNewAppearance.enabled {
390+
group.enter()
391+
DDLogInfo("Stats Period: Enter group fetching likes summary.")
392+
}
387393
let likesOperation = PeriodOperation(service: service, for: period, date: date, limit: 14) { [weak self] (likes: StatsLikesSummaryTimeIntervalData?, error: Error?) in
388394
if error != nil {
389395
DDLogError("Stats Period: Error fetching likes summary: \(String(describing: error?.localizedDescription))")
@@ -392,9 +398,17 @@ private extension StatsPeriodStore {
392398
DDLogInfo("Stats Period: Finished fetching likes summary.")
393399
DispatchQueue.main.async {
394400
self?.receivedLikesSummary(likes, error)
401+
if FeatureFlag.statsNewAppearance.enabled {
402+
DDLogInfo("Stats Period: Leave group fetching likes summary.")
403+
group.leave()
404+
}
395405
}
396406
}
397407

408+
if FeatureFlag.statsNewAppearance.enabled {
409+
group.enter()
410+
DDLogInfo("Stats Period: Enter group fetching posts.")
411+
}
398412
let topPostsOperation = PeriodOperation(service: service, for: period, date: date) { [weak self] (posts: StatsTopPostsTimeIntervalData?, error: Error?) in
399413
if error != nil {
400414
DDLogError("Stats Period: Error fetching posts: \(String(describing: error?.localizedDescription))")
@@ -404,9 +418,17 @@ private extension StatsPeriodStore {
404418

405419
DispatchQueue.main.async {
406420
self?.receivedPostsAndPages(posts, error)
421+
if FeatureFlag.statsNewAppearance.enabled {
422+
DDLogInfo("Stats Period: Leave group fetching posts.")
423+
group.leave()
424+
}
407425
}
408426
}
409427

428+
if FeatureFlag.statsNewAppearance.enabled {
429+
group.enter()
430+
DDLogInfo("Stats Period: Enter group fetching referrers.")
431+
}
410432
let topReferrers = PeriodOperation(service: service, for: period, date: date) { [weak self] (referrers: StatsTopReferrersTimeIntervalData?, error: Error?) in
411433
if error != nil {
412434
DDLogError("Stats Period: Error fetching referrers: \(String(describing: error?.localizedDescription))")
@@ -416,9 +438,17 @@ private extension StatsPeriodStore {
416438

417439
DispatchQueue.main.async {
418440
self?.receivedReferrers(referrers, error)
441+
if FeatureFlag.statsNewAppearance.enabled {
442+
DDLogInfo("Stats Period: Leave group fetching referrers.")
443+
group.leave()
444+
}
419445
}
420446
}
421447

448+
if FeatureFlag.statsNewAppearance.enabled {
449+
group.enter()
450+
DDLogInfo("Stats Period: Enter group fetching published.")
451+
}
422452
let topPublished = PublishedPostOperation(service: service, for: period, date: date) { [weak self] (published: StatsPublishedPostsTimeIntervalData?, error: Error?) in
423453
if error != nil {
424454
DDLogError("Stats Period: Error fetching published: \(String(describing: error?.localizedDescription))")
@@ -428,9 +458,17 @@ private extension StatsPeriodStore {
428458

429459
DispatchQueue.main.async {
430460
self?.receivedPublished(published, error)
461+
if FeatureFlag.statsNewAppearance.enabled {
462+
DDLogInfo("Stats Period: Leave group fetching published.")
463+
group.leave()
464+
}
431465
}
432466
}
433467

468+
if FeatureFlag.statsNewAppearance.enabled {
469+
group.enter()
470+
DDLogInfo("Stats Period: Enter group fetching clicks.")
471+
}
434472
let topClicks = PeriodOperation(service: service, for: period, date: date) { [weak self] (clicks: StatsTopClicksTimeIntervalData?, error: Error?) in
435473
if error != nil {
436474
DDLogError("Stats Period: Error fetching clicks: \(String(describing: error?.localizedDescription))")
@@ -440,9 +478,17 @@ private extension StatsPeriodStore {
440478

441479
DispatchQueue.main.async {
442480
self?.receivedClicks(clicks, error)
481+
if FeatureFlag.statsNewAppearance.enabled {
482+
DDLogInfo("Stats Period: Leave group fetching clicks.")
483+
group.leave()
484+
}
443485
}
444486
}
445487

488+
if FeatureFlag.statsNewAppearance.enabled {
489+
group.enter()
490+
DDLogInfo("Stats Period: Enter group fetching authors.")
491+
}
446492
let topAuthors = PeriodOperation(service: service, for: period, date: date) { [weak self] (authors: StatsTopAuthorsTimeIntervalData?, error: Error?) in
447493
if error != nil {
448494
DDLogError("Stats Period: Error fetching authors: \(String(describing: error?.localizedDescription))")
@@ -452,9 +498,17 @@ private extension StatsPeriodStore {
452498

453499
DispatchQueue.main.async {
454500
self?.receivedAuthors(authors, error)
501+
if FeatureFlag.statsNewAppearance.enabled {
502+
DDLogInfo("Stats Period: Leave group fetching authors.")
503+
group.leave()
504+
}
455505
}
456506
}
457507

508+
if FeatureFlag.statsNewAppearance.enabled {
509+
group.enter()
510+
DDLogInfo("Stats Period: Enter group fetching search terms.")
511+
}
458512
let topSearchTerms = PeriodOperation(service: service, for: period, date: date) { [weak self] (searchTerms: StatsSearchTermTimeIntervalData?, error: Error?) in
459513
if error != nil {
460514
DDLogError("Stats Period: Error fetching search terms: \(String(describing: error?.localizedDescription))")
@@ -464,9 +518,17 @@ private extension StatsPeriodStore {
464518

465519
DispatchQueue.main.async {
466520
self?.receivedSearchTerms(searchTerms, error)
521+
if FeatureFlag.statsNewAppearance.enabled {
522+
DDLogInfo("Stats Period: Leave group fetching search terms.")
523+
group.leave()
524+
}
467525
}
468526
}
469527

528+
if FeatureFlag.statsNewAppearance.enabled {
529+
group.enter()
530+
DDLogInfo("Stats Period: Enter group fetching countries.")
531+
}
470532
let topCountries = PeriodOperation(service: service, for: period, date: date, limit: 0) { [weak self] (countries: StatsTopCountryTimeIntervalData?, error: Error?) in
471533
if error != nil {
472534
DDLogError("Stats Period: Error fetching countries: \(String(describing: error?.localizedDescription))")
@@ -476,9 +538,17 @@ private extension StatsPeriodStore {
476538

477539
DispatchQueue.main.async {
478540
self?.receivedCountries(countries, error)
541+
if FeatureFlag.statsNewAppearance.enabled {
542+
DDLogInfo("Stats Period: Leave group fetching countries.")
543+
group.leave()
544+
}
479545
}
480546
}
481547

548+
if FeatureFlag.statsNewAppearance.enabled {
549+
group.enter()
550+
DDLogInfo("Stats Period: Enter group fetching videos.")
551+
}
482552
let topVideos = PeriodOperation(service: service, for: period, date: date) { [weak self] (videos: StatsTopVideosTimeIntervalData?, error: Error?) in
483553
if error != nil {
484554
DDLogError("Stats Period: Error fetching videos: \(String(describing: error?.localizedDescription))")
@@ -488,11 +558,19 @@ private extension StatsPeriodStore {
488558

489559
DispatchQueue.main.async {
490560
self?.receivedVideos(videos, error)
561+
if FeatureFlag.statsNewAppearance.enabled {
562+
DDLogInfo("Stats Period: Leave group fetching videos.")
563+
group.leave()
564+
}
491565
}
492566
}
493567

494568
// 'limit' in this context is used for the 'num' parameter for the 'file-downloads' endpoint.
495569
// 'num' relates to the "number of periods to include in the query".
570+
if FeatureFlag.statsNewAppearance.enabled {
571+
group.enter()
572+
DDLogInfo("Stats Period: Enter group fetching file downloads.")
573+
}
496574
let topFileDownloads = PeriodOperation(service: service, for: period, date: date, limit: 1) { [weak self] (downloads: StatsFileDownloadsTimeIntervalData?, error: Error?) in
497575
if error != nil {
498576
DDLogError("Stats Period: Error file downloads: \(String(describing: error?.localizedDescription))")
@@ -502,6 +580,10 @@ private extension StatsPeriodStore {
502580

503581
DispatchQueue.main.async {
504582
self?.receivedFileDownloads(downloads, error)
583+
if FeatureFlag.statsNewAppearance.enabled {
584+
DDLogInfo("Stats Period: Leave group fetching file downloads.")
585+
group.leave()
586+
}
505587
}
506588
}
507589

@@ -516,6 +598,13 @@ private extension StatsPeriodStore {
516598
topVideos,
517599
topFileDownloads],
518600
waitUntilFinished: false)
601+
602+
if FeatureFlag.statsNewAppearance.enabled {
603+
group.notify(queue: .main) { [weak self] in
604+
DDLogInfo("Stats Period: Finished fetchAsyncData.")
605+
self?.persistToCoreData()
606+
}
607+
}
519608
}
520609

521610
func fetchSummaryLikesData(date: Date, period: StatsPeriodUnit) {

0 commit comments

Comments
 (0)