blob: c7d33460a350f3038c74f1df0a89e98a23f72eda [file] [log] [blame]
// Copyright 2016 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.
#ifndef IOS_CHROME_BROWSER_UI_HISTORY_HISTORY_ENTRY_INSERTER_H_
#define IOS_CHROME_BROWSER_UI_HISTORY_HISTORY_ENTRY_INSERTER_H_
#import <Foundation/Foundation.h>
#import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
namespace base {
class Time;
}
@class CollectionViewModel;
@class HistoryEntryInserter;
@class HistoryEntryItem;
// Delegate for HistoryEntryInserter. Provides callbacks for completion of item
// and section insertion and deletion.
@protocol HistoryEntryInserterDelegate<NSObject>
// Invoked when the inserter has finished inserting an item.
- (void)historyEntryInserter:(HistoryEntryInserter*)inserter
didInsertItemAtIndexPath:(NSIndexPath*)indexPath;
// Invoked when the inserter has finished inserting a section.
- (void)historyEntryInserter:(HistoryEntryInserter*)inserter
didInsertSectionAtIndex:(NSInteger)sectionIndex;
// Invoked when the inserter has finished removing a section.
- (void)historyEntryInserter:(HistoryEntryInserter*)inserter
didRemoveSectionAtIndex:(NSInteger)sectionIndex;
@end
// Object for ensuring history entry items are kept in order as they are added
// to the CollectionViewModel.
@interface HistoryEntryInserter : NSObject
// Delegate for the HistoryEntryInserter. Receives callbacks upon item and
// section insertion and removal.
@property(nonatomic, weak) id<HistoryEntryInserterDelegate> delegate;
// Designated initializer for HistoryEntryInserter. collectionViewModel is the
// model into which entries are inserted. Sections for history entries are
// appended to the model. Sections already in the model at initialization
// of the inserter should not be removed, and sections should not be added
// except by the inserter. Duplicate entries are not inserted.
- (instancetype)initWithModel:(CollectionViewModel*)collectionViewModel
NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE;
// Inserts a history entry into the model at the correct sorted index path.
// History entries in the model are sorted from most to least recent, and
// grouped into section by date. Duplicate entries are not inserted. Invokes
// delegate callback when insertion is complete.
- (void)insertHistoryEntryItem:(HistoryEntryItem*)item;
// Returns section identifier for provided timestamp. Adds section for date if
// not found, and invokes delegate callback.
- (NSUInteger)sectionIdentifierForTimestamp:(base::Time)timestamp;
// Removes section at |sectionIndex|, and invokes delegate callback when removal
// is complete.
- (void)removeSection:(NSInteger)sectionIndex;
@end
#endif // IOS_CHROME_BROWSER_UI_HISTORY_HISTORY_ENTRY_INSERTER_H_