Drag & drop support for OPML files

This commit is contained in:
relikd
2019-07-25 16:50:58 +02:00
parent 85cc12f34a
commit d56916be7a
13 changed files with 749 additions and 437 deletions

View File

@@ -39,13 +39,13 @@ typedef NS_ENUM(int16_t, FeedGroupType) {
+ (instancetype)newGroup:(FeedGroupType)type inContext:(NSManagedObjectContext*)context;
- (void)setParent:(FeedGroup *)parent andSortIndex:(int32_t)sortIndex;
- (void)setSortIndexIfChanged:(int32_t)sortIndex;
- (void)setNameIfChanged:(NSString*)name;
- (NSMenuItem*)newMenuItem;
// Handle children and parents
- (NSString*)indexPathString;
- (NSArray<FeedGroup*>*)sortedChildren;
- (NSMutableArray<FeedGroup*>*)allParents;
- (BOOL)iterateSorted:(BOOL)ordered overDescendantFeeds:(void(^)(Feed *feed, BOOL* cancel))block;
// Printing
- (NSString*)readableDescription;
@end

View File

@@ -58,11 +58,15 @@
+ (instancetype)newGroup:(FeedGroupType)type inContext:(NSManagedObjectContext*)moc {
FeedGroup *fg = [[FeedGroup alloc] initWithEntity: FeedGroup.entity insertIntoManagedObjectContext:moc];
fg.type = type;
if (type == FEED)
fg.feed = [Feed newFeedAndMetaInContext:moc];
switch (type) {
case GROUP: break;
case FEED: fg.feed = [Feed newFeedAndMetaInContext:moc]; break;
case SEPARATOR: fg.name = @"---"; break;
}
return fg;
}
/// Set @c parent and @c sortIndex. Also if type is @c FEED calculate and set @c indexPath string.
- (void)setParent:(FeedGroup *)parent andSortIndex:(int32_t)sortIndex {
self.parent = parent;
self.sortIndex = sortIndex;
@@ -70,6 +74,16 @@
[self.feed calculateAndSetIndexPathString];
}
/// Set @c sortIndex of @c FeedGroup. Iterate over all @c Feed child items and update @c indexPath string.
- (void)setSortIndexIfChanged:(int32_t)sortIndex {
if (self.sortIndex != sortIndex) {
self.sortIndex = sortIndex;
[self iterateSorted:NO overDescendantFeeds:^(Feed *feed, BOOL *cancel) {
[feed calculateAndSetIndexPathString];
}];
}
}
/// Set @c name attribute but only if value differs.
- (void)setNameIfChanged:(NSString*)name {
if (![self.name isEqualToString: name])