Allow unsubscribing from topics

This commit is contained in:
Philipp Heckel 2022-05-15 13:32:34 -04:00
parent b5ec7b7ffe
commit 28e54a0a31
5 changed files with 45 additions and 7 deletions

View file

@ -22,6 +22,7 @@
9474F1FB28308A2B00CDE4DD /* SubscriptionRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9474F1FA28308A2B00CDE4DD /* SubscriptionRow.swift */; };
9474F1FD2831311A00CDE4DD /* AddSubscriptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9474F1FC2831311A00CDE4DD /* AddSubscriptionView.swift */; };
9474F1FF28316ACE00CDE4DD /* Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9474F1FE28316ACE00CDE4DD /* Subscription.swift */; };
9474F20128316D1100CDE4DD /* Messenger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9474F20028316D1100CDE4DD /* Messenger.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -67,6 +68,7 @@
9474F1FA28308A2B00CDE4DD /* SubscriptionRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscriptionRow.swift; sourceTree = "<group>"; };
9474F1FC2831311A00CDE4DD /* AddSubscriptionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddSubscriptionView.swift; sourceTree = "<group>"; };
9474F1FE28316ACE00CDE4DD /* Subscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Subscription.swift; sourceTree = "<group>"; };
9474F20028316D1100CDE4DD /* Messenger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Messenger.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -124,6 +126,7 @@
9474F1D1282F2D2C00CDE4DD /* AppDelegate.swift */,
9474F1F82830835400CDE4DD /* DataController.swift */,
9474F1FE28316ACE00CDE4DD /* Subscription.swift */,
9474F20028316D1100CDE4DD /* Messenger.swift */,
);
path = ntfy;
sourceTree = "<group>";
@ -260,6 +263,7 @@
buildActionMask = 2147483647;
files = (
9474F1F92830835400CDE4DD /* DataController.swift in Sources */,
9474F20128316D1100CDE4DD /* Messenger.swift in Sources */,
9474F1D2282F2D2C00CDE4DD /* AppDelegate.swift in Sources */,
9474F1C3282F2AA700CDE4DD /* ContentView.swift in Sources */,
9474F1FB28308A2B00CDE4DD /* SubscriptionRow.swift in Sources */,

View file

@ -18,9 +18,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// FirebaseApp.configure() DOES NOT WORK
FirebaseConfiguration.shared.setLoggerLevel(.max)
Messaging.messaging().delegate = self
Messaging.messaging().subscribe(toTopic: "philtest")
registerForPushNotifications()
UNUserNotificationCenter.current().delegate = self

23
ntfy/Messenger.swift Normal file
View file

@ -0,0 +1,23 @@
//
// Messenger.swift
// ntfy
//
// Created by Philipp Heckel on 5/15/22.
//
import Foundation
import FirebaseMessaging
import CoreData
struct Messenger {
var context: NSManagedObjectContext
func subscribe(toTopic topic: String) {
Messaging.messaging().subscribe(toTopic: topic)
let subscription = Subscription(context: context)
subscription.baseUrl = "https://ntfy.sh"
subscription.topic = topic
try? context.save()
}
}

View file

@ -8,6 +8,10 @@
import Foundation
extension Subscription {
func forceTopic() -> String {
return topic ?? "<unknown>"
}
func displayName() -> String {
return topic ?? "<unknown>"
}

View file

@ -8,6 +8,8 @@
// https://www.hackingwithswift.com/books/ios-swiftui/how-to-combine-core-data-and-swiftui
import SwiftUI
import CoreData
import FirebaseMessaging
struct SubscriptionsList: View {
@Environment(\.managedObjectContext) var context
@ -28,14 +30,13 @@ struct SubscriptionsList: View {
SubscriptionRow(subscription: subscription)
}
/*.swipeActions(edge: .trailing) {
.swipeActions(edge: .trailing) {
Button(role: .destructive) {
// subscription.delete()
// subscriptions.subscriptions = Database.current.getSubscriptions()
unsubscribe(subscription)
} label: {
Label("Delete", systemImage: "trash.circle")
}
}*/
}
}
}
.listStyle(PlainListStyle())
@ -61,6 +62,14 @@ struct SubscriptionsList: View {
.navigationViewStyle(StackNavigationViewStyle())
}
func unsubscribe(_ subscription: Subscription) {
DispatchQueue.main.async {
Messaging.messaging().unsubscribe(fromTopic: subscription.forceTopic())
context.delete(subscription)
try? context.save()
}
}
}
/*