diff --git a/Podfile b/Podfile index 7b1bd834f..bf1a97832 100644 --- a/Podfile +++ b/Podfile @@ -73,6 +73,7 @@ target 'Signal' do # Loki pod 'GCDWebServer', '~> 3.0' + pod 'FeedKit', '~> 8.1' target 'SignalTests' do inherit! :search_paths diff --git a/Pods b/Pods index 98077061d..95f519e4b 160000 --- a/Pods +++ b/Pods @@ -1 +1 @@ -Subproject commit 98077061d67643bda2dc906dd37d571eccbcd164 +Subproject commit 95f519e4b407713a98f98d0aec572b7487c941b3 diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index f15c7dd71..b1ca8310c 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -1509,21 +1509,22 @@ static NSTimeInterval launchStartedAt; for (LKGroupChat *chat in allGroupChats) { NSString *userDefaultsKey = [@"isSetUp." stringByAppendingString:chat.id]; BOOL isChatSetUp = [NSUserDefaults.standardUserDefaults boolForKey:userDefaultsKey]; - if (chat.isDeletable && isChatSetUp) { continue; } - TSGroupModel *group = [[TSGroupModel alloc] initWithTitle:chat.displayName memberIds:@[ userHexEncodedPublicKey, chat.server ] image:nil groupId:[chat.id dataUsingEncoding:NSUTF8StringEncoding]]; - __block TSGroupThread *thread; - [OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - thread = [TSGroupThread getOrCreateThreadWithGroupModel:group transaction:transaction]; - NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; - NSCalendar *calendar = NSCalendar.currentCalendar; - [calendar setTimeZone:timeZone]; - NSDateComponents *dateComponents = [NSDateComponents new]; - [dateComponents setYear:999]; - NSDate *date = [calendar dateByAddingComponents:dateComponents toDate:[NSDate new] options:0]; - [thread updateWithMutedUntilDate:date transaction:transaction]; - }]; - [OWSProfileManager.sharedManager addThreadToProfileWhitelist:thread]; - [NSUserDefaults.standardUserDefaults setBool:YES forKey:userDefaultsKey]; + if (!isChatSetUp || !chat.isDeletable) { + TSGroupModel *group = [[TSGroupModel alloc] initWithTitle:chat.displayName memberIds:@[ userHexEncodedPublicKey, chat.server ] image:nil groupId:[chat.id dataUsingEncoding:NSUTF8StringEncoding]]; + __block TSGroupThread *thread; + [OWSPrimaryStorage.dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + thread = [TSGroupThread getOrCreateThreadWithGroupModel:group transaction:transaction]; + NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; + NSCalendar *calendar = NSCalendar.currentCalendar; + [calendar setTimeZone:timeZone]; + NSDateComponents *dateComponents = [NSDateComponents new]; + [dateComponents setYear:999]; + NSDate *date = [calendar dateByAddingComponents:dateComponents toDate:[NSDate new] options:0]; + [thread updateWithMutedUntilDate:date transaction:transaction]; + }]; + [OWSProfileManager.sharedManager addThreadToProfileWhitelist:thread]; + [NSUserDefaults.standardUserDefaults setBool:YES forKey:userDefaultsKey]; + } } } @@ -1538,6 +1539,8 @@ static NSTimeInterval launchStartedAt; { [self createGroupChatPollersIfNeeded]; [self.lokiPublicChatPoller startIfNeeded]; + [self.lokiNewsPoller startIfNeeded]; + [self.lokiMessengerUpdatesPoller startIfNeeded]; } @end diff --git a/Signal/src/Loki/LokiGroupChatPoller.swift b/Signal/src/Loki/LokiGroupChatPoller.swift index 9609f00c3..130b9bf58 100644 --- a/Signal/src/Loki/LokiGroupChatPoller.swift +++ b/Signal/src/Loki/LokiGroupChatPoller.swift @@ -9,7 +9,7 @@ public final class LokiGroupChatPoller : NSObject { private lazy var pollForNewMessagesInterval: TimeInterval = { switch group.kind { case .publicChat(_): return 4 - case .rss(_): return 8 * 60 + case .rss(_): return 4//8 * 60 } }() @@ -29,6 +29,7 @@ public final class LokiGroupChatPoller : NSObject { @objc public func startIfNeeded() { if hasStarted { return } pollForNewMessagesTimer = Timer.scheduledTimer(withTimeInterval: pollForNewMessagesInterval, repeats: true) { [weak self] _ in self?.pollForNewMessages() } + pollForNewMessages() // Perform initial update if group.isPublicChat { pollForDeletedMessagesTimer = Timer.scheduledTimer(withTimeInterval: pollForDeletedMessagesInterval, repeats: true) { [weak self] _ in self?.pollForDeletedMessages() } } @@ -69,7 +70,14 @@ public final class LokiGroupChatPoller : NSObject { } } } - case .rss(let customID): break // TODO: Implement + case .rss(_): + let url = URL(string: group.server)! + let parser = LokiRSSFeedParser(url: url) + parser.parse { items in + items.reversed().forEach { item in + print("Loki", "\(item.title ?? "nil"), \(item.description ?? "nil"), \(item.dateAsString ?? "nil")") + } + } } }