Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Unified Diff: ios/chrome/browser/ui/reading_list/reading_list_mediator.mm

Issue 2879183002: Move the ReadingListModel in a Mediator (Closed)
Patch Set: Address comment Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/chrome/browser/ui/reading_list/reading_list_mediator.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/chrome/browser/ui/reading_list/reading_list_mediator.mm
diff --git a/ios/chrome/browser/ui/reading_list/reading_list_mediator.mm b/ios/chrome/browser/ui/reading_list/reading_list_mediator.mm
new file mode 100644
index 0000000000000000000000000000000000000000..815673078d6fcf1c4e19c3bebb716ff43f2dabec
--- /dev/null
+++ b/ios/chrome/browser/ui/reading_list/reading_list_mediator.mm
@@ -0,0 +1,113 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/reading_list/reading_list_mediator.h"
+
+#include "base/metrics/histogram_macros.h"
+#include "components/reading_list/core/reading_list_model.h"
+#import "components/reading_list/ios/reading_list_model_bridge_observer.h"
+#import "ios/chrome/browser/ui/reading_list/reading_list_data_sink.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface ReadingListMediator ()<ReadingListModelBridgeObserver> {
+ std::unique_ptr<ReadingListModelBridge> _modelBridge;
+}
+
+@property(nonatomic, assign) ReadingListModel* model;
+
+@end
+
+@implementation ReadingListMediator
+
+@synthesize model = _model;
+@synthesize dataSink = _dataSink;
+
+#pragma mark - Public
+
+- (instancetype)initWithModel:(ReadingListModel*)model {
+ self = [super init];
+ if (self) {
+ _model = model;
+
+ // This triggers the callback method. Should be created last.
+ _modelBridge.reset(new ReadingListModelBridge(self, model));
+ }
+ return self;
+}
+
+#pragma mark - ReadingListDataSource
+
+- (void)dataSinkWillBeDismissed {
+ self.model->MarkAllSeen();
+ // Reset data sink to prevent further model update notifications.
+ self.dataSink = nil;
+}
+
+- (void)setReadStatus:(BOOL)read forURL:(const GURL&)URL {
+ self.model->SetReadStatus(URL, read);
+}
+
+- (const std::vector<GURL>)keys {
+ return self.model->Keys();
+}
+
+- (const ReadingListEntry*)entryWithURL:(const GURL&)URL {
+ return self.model->GetEntryByURL(URL);
+}
+
+- (void)removeEntryWithURL:(const GURL&)URL {
+ self.model->RemoveEntryByURL(URL);
+}
+
+- (std::unique_ptr<ReadingListModel::ScopedReadingListBatchUpdate>)
+ beginBatchUpdates {
+ return self.model->BeginBatchUpdates();
+}
+
+- (BOOL)isPerformingBatchUpdates {
+ return self.model->IsPerformingBatchUpdates();
+}
+
+#pragma mark - Properties
+
+- (void)setDataSink:(id<ReadingListDataSink>)dataSink {
+ _dataSink = dataSink;
+ if (self.model->loaded()) {
+ [dataSink dataSourceReady:self];
+ }
+}
+
+- (BOOL)ready {
+ return self.model->loaded();
+}
+
+- (BOOL)hasElements {
+ return self.model->size() > 0;
+}
+
+- (BOOL)hasRead {
+ return self.model->size() != self.model->unread_size();
+}
+
+#pragma mark - ReadingListModelBridgeObserver
+
+- (void)readingListModelLoaded:(const ReadingListModel*)model {
+ UMA_HISTOGRAM_COUNTS_1000("ReadingList.Unread.Number", model->unread_size());
+ UMA_HISTOGRAM_COUNTS_1000("ReadingList.Read.Number",
+ model->size() - model->unread_size());
+ [self.dataSink dataSourceReady:self];
+}
+
+- (void)readingListModelDidApplyChanges:(const ReadingListModel*)model {
+ [self.dataSink readingListModelDidApplyChanges];
+}
+
+- (void)readingListModelCompletedBatchUpdates:(const ReadingListModel*)model {
+ [self.dataSink readingListModelCompletedBatchUpdates];
+}
+
+@end
« no previous file with comments | « ios/chrome/browser/ui/reading_list/reading_list_mediator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698