diff --git a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager+Swift.swift b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager+Swift.swift new file mode 100644 index 0000000000..0bb3421dd2 --- /dev/null +++ b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager+Swift.swift @@ -0,0 +1,5 @@ +extension MWMBookmarksManager { + static func categoriesIdList() -> [MWMMarkGroupID] { + return groupsIdList().map { $0.uint32Value } + } +} diff --git a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h index f2ab4f3b88..87acd63b4d 100644 --- a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h +++ b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.h @@ -1,15 +1,33 @@ #import "MWMBookmarksObserver.h" +#import "MWMTypes.h" @interface MWMBookmarksManager : NSObject -+ (instancetype)manager; - + (void)addObserver:(id)observer; + (void)removeObserver:(id)observer; + (BOOL)areBookmarksLoaded; + (void)loadBookmarks; ++ (MWMGroupIDCollection)groupsIdList; ++ (NSString *)getCategoryName:(MWMMarkGroupID)groupId; ++ (uint64_t)getCategoryMarksCount:(MWMMarkGroupID)groupId; ++ (uint64_t)getCategoryTracksCount:(MWMMarkGroupID)groupId; + ++ (MWMMarkGroupID)createCategoryWithName:(NSString *)name; ++ (void)setCategory:(MWMMarkGroupID)groupId name:(NSString *)name; ++ (BOOL)isCategoryVisible:(MWMMarkGroupID)groupId; ++ (void)setCategory:(MWMMarkGroupID)groupId isVisible:(BOOL)isVisible; ++ (void)setAllCategoriesVisible:(BOOL)isVisible; ++ (void)deleteCategory:(MWMMarkGroupID)groupId; + ++ (NSURL *)beginShareCategory:(MWMMarkGroupID)groupId; ++ (void)endShareCategory:(MWMMarkGroupID)groupId; + ++ (NSDate *)lastSynchronizationDate; ++ (BOOL)isCloudEnabled; ++ (void)setCloudEnabled:(BOOL)enabled; + - (instancetype)init __attribute__((unavailable("call +manager instead"))); - (instancetype)copy __attribute__((unavailable("call +manager instead"))); - (instancetype)copyWithZone:(NSZone *)zone __attribute__((unavailable("call +manager instead"))); diff --git a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm index 263eeab0d4..8adec6f92d 100644 --- a/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm +++ b/iphone/Maps/Core/Bookmarks/MWMBookmarksManager.mm @@ -73,7 +73,8 @@ using TLoopBlock = void (^)(Observer observer); return; self.areBookmarksLoaded = YES; [self loopObservers:^(Observer observer) { - [observer onBookmarksLoadFinished]; + if ([observer respondsToSelector:@selector(onBookmarksLoadFinished)]) + [observer onBookmarksLoadFinished]; }]; }; } @@ -110,6 +111,94 @@ using TLoopBlock = void (^)(Observer observer); GetFramework().LoadBookmarks(); } ++ (MWMGroupIDCollection)groupsIdList +{ + auto const & list = GetFramework().GetBookmarkManager().GetBmGroupsIdList(); + NSMutableArray * collection = @[].mutableCopy; + for (auto const & groupId : list) + [collection addObject:@(groupId)]; + return collection.copy; +} + ++ (NSString *)getCategoryName:(MWMMarkGroupID)groupId +{ + return @(GetFramework().GetBookmarkManager().GetCategoryName(groupId).c_str()); +} + ++ (uint64_t)getCategoryMarksCount:(MWMMarkGroupID)groupId +{ + return GetFramework().GetBookmarkManager().GetUserMarkIds(groupId).size(); +} + ++ (uint64_t)getCategoryTracksCount:(MWMMarkGroupID)groupId +{ + return GetFramework().GetBookmarkManager().GetTrackIds(groupId).size(); +} + ++ (MWMMarkGroupID)createCategoryWithName:(NSString *)name +{ + return GetFramework().GetBookmarkManager().CreateBookmarkCategory(name.UTF8String); +} + ++ (void)setCategory:(MWMMarkGroupID)groupId name:(NSString *)name +{ + GetFramework().GetBookmarkManager().GetEditSession().SetCategoryName(groupId, name.UTF8String); +} + ++ (BOOL)isCategoryVisible:(MWMMarkGroupID)groupId +{ + return GetFramework().GetBookmarkManager().IsVisible(groupId); +} + ++ (void)setCategory:(MWMMarkGroupID)groupId isVisible:(BOOL)isVisible +{ + GetFramework().GetBookmarkManager().GetEditSession().SetIsVisible(groupId, isVisible); +} + ++ (void)setAllCategoriesVisible:(BOOL)isVisible +{ + auto & bm = GetFramework().GetBookmarkManager(); + auto editSession = bm.GetEditSession(); + auto const & list = bm.GetBmGroupsIdList(); + for (auto const & groupId : list) + editSession.SetIsVisible(groupId, isVisible); +} + ++ (void)deleteCategory:(MWMMarkGroupID)groupId +{ + GetFramework().GetBookmarkManager().GetEditSession().DeleteBmCategory(groupId); + [[self manager] loopObservers:^(Observer observer) { + if ([observer respondsToSelector:@selector(onBookmarksCategoryDeleted:)]) + [observer onBookmarksCategoryDeleted:groupId]; + }]; +} + ++ (NSURL *)beginShareCategory:(MWMMarkGroupID)groupId +{ + auto const filePath = GetFramework().GetBookmarkManager().BeginSharing(groupId); + NSURL * url = [NSURL fileURLWithPath:@(filePath.c_str()) isDirectory:NO]; + NSAssert(url != nil, @"Invalid share category url"); + return url; +} + ++ (void)endShareCategory:(MWMMarkGroupID)groupId +{ + GetFramework().GetBookmarkManager().EndSharing(groupId); +} + ++ (NSDate *)lastSynchronizationDate +{ + auto timestampInMs = GetFramework().GetBookmarkManager().GetLastSynchronizationTimestampInMs(); + return [NSDate dateWithTimeIntervalSince1970:timestampInMs / 1000]; +} + ++ (BOOL)isCloudEnabled { return GetFramework().GetBookmarkManager().IsCloudEnabled(); } + ++ (void)setCloudEnabled:(BOOL)enabled +{ + GetFramework().GetBookmarkManager().SetCloudEnabled(enabled); +} + - (void)loopObservers:(TLoopBlock)block { for (Observer observer in self.observers) diff --git a/iphone/Maps/Core/Bookmarks/MWMBookmarksObserver.h b/iphone/Maps/Core/Bookmarks/MWMBookmarksObserver.h index 9e74f23398..0c908dab02 100644 --- a/iphone/Maps/Core/Bookmarks/MWMBookmarksObserver.h +++ b/iphone/Maps/Core/Bookmarks/MWMBookmarksObserver.h @@ -1,8 +1,10 @@ +#import "MWMTypes.h" + @protocol MWMBookmarksObserver -- (void)onBookmarksLoadFinished; - @optional +- (void)onBookmarksLoadFinished; - (void)onBookmarksFileLoadSuccess; +- (void)onBookmarksCategoryDeleted:(MWMMarkGroupID)groupId; @end diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj index 4549257d80..842ad17351 100644 --- a/iphone/Maps/Maps.xcodeproj/project.pbxproj +++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj @@ -183,6 +183,7 @@ 349D1CE41E3F836900A878FD /* UIViewController+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349D1CE21E3F836900A878FD /* UIViewController+Hierarchy.swift */; }; 349FC5481F680DAE00968C9F /* ExpandableTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349FC5451F680DAE00968C9F /* ExpandableTextView.swift */; }; 349FC54B1F680DAE00968C9F /* ExpandableTextViewSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349FC5461F680DAE00968C9F /* ExpandableTextViewSettings.swift */; }; + 34A320CE2035ABE200BC36D5 /* MWMBookmarksManager+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A320CD2035ABE200BC36D5 /* MWMBookmarksManager+Swift.swift */; }; 34AB39C21D2BD8310021857D /* MWMStopButton.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AB39C01D2BD8310021857D /* MWMStopButton.mm */; }; 34AB66051FC5AA320078E451 /* MWMNavigationDashboardManager+Entity.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AB65C51FC5AA320078E451 /* MWMNavigationDashboardManager+Entity.mm */; }; 34AB66081FC5AA320078E451 /* MWMNavigationDashboardManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34AB65C61FC5AA320078E451 /* MWMNavigationDashboardManager.mm */; }; @@ -964,6 +965,7 @@ 349D1CE21E3F836900A878FD /* UIViewController+Hierarchy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+Hierarchy.swift"; sourceTree = ""; }; 349FC5451F680DAE00968C9F /* ExpandableTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExpandableTextView.swift; sourceTree = ""; }; 349FC5461F680DAE00968C9F /* ExpandableTextViewSettings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExpandableTextViewSettings.swift; sourceTree = ""; }; + 34A320CD2035ABE200BC36D5 /* MWMBookmarksManager+Swift.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MWMBookmarksManager+Swift.swift"; sourceTree = ""; }; 34AB39BF1D2BD8310021857D /* MWMStopButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWMStopButton.h; sourceTree = ""; }; 34AB39C01D2BD8310021857D /* MWMStopButton.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMStopButton.mm; sourceTree = ""; }; 34AB65C51FC5AA320078E451 /* MWMNavigationDashboardManager+Entity.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "MWMNavigationDashboardManager+Entity.mm"; sourceTree = ""; }; @@ -1378,7 +1380,6 @@ F69739B01FD197DB00FDA07D /* MWMDiscoveryTableManager.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMDiscoveryTableManager.mm; sourceTree = ""; }; F69739B41FD198E300FDA07D /* DiscoveryControllerViewModel.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = DiscoveryControllerViewModel.hpp; sourceTree = ""; }; F69739B51FD19D9900FDA07D /* MWMDiscoveryTapDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MWMDiscoveryTapDelegate.h; sourceTree = ""; }; - F69739D41FD6B4EE00FDA07D /* Statistics+ConnectionTypeLogging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Statistics+ConnectionTypeLogging.h"; sourceTree = ""; }; F69739DA1FD6ECCE00FDA07D /* DiscoveryLocalExpertCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiscoveryLocalExpertCell.swift; sourceTree = ""; }; F69739DE1FD6EE1D00FDA07D /* DiscoveryLocalExpertCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DiscoveryLocalExpertCell.xib; sourceTree = ""; }; F69CE8D41E5C49B4002B5881 /* PPHotelCarouselCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PPHotelCarouselCell.swift; sourceTree = ""; }; @@ -1995,7 +1996,6 @@ 340475221E081A4600C92850 /* MWMCustomFacebookEvents.mm */, 340475231E081A4600C92850 /* Statistics.h */, 340475241E081A4600C92850 /* Statistics.mm */, - F69739D41FD6B4EE00FDA07D /* Statistics+ConnectionTypeLogging.h */, 340475251E081A4600C92850 /* StatisticsStrings.h */, ); path = Statistics; @@ -2407,6 +2407,7 @@ 347039A61FB9A5CF00E47496 /* MWMBookmarksManager.h */, 347039A71FB9A5CF00E47496 /* MWMBookmarksManager.mm */, 347039AB1FB9A97E00E47496 /* MWMBookmarksObserver.h */, + 34A320CD2035ABE200BC36D5 /* MWMBookmarksManager+Swift.swift */, ); path = Bookmarks; sourceTree = ""; @@ -4472,6 +4473,7 @@ 348F8A4F1F863A8500060C2A /* UGCYourReview.swift in Sources */, F6E2FEE21E097BA00083EBEC /* MWMSearchManager.mm in Sources */, F6E2FE221E097BA00083EBEC /* MWMOpeningHoursEditorViewController.mm in Sources */, + 34A320CE2035ABE200BC36D5 /* MWMBookmarksManager+Swift.swift in Sources */, 34943BBB1E2626B200B14F84 /* WelcomePageController.swift in Sources */, 34D3AFE21E376F7E004100F9 /* UITableView+Updates.swift in Sources */, 3404164C1E7BF42E00E2B6D6 /* UIView+Coordinates.swift in Sources */,