diff --git a/ntfy.xcodeproj/project.pbxproj b/ntfy.xcodeproj/project.pbxproj index 917de8b..2fe7325 100644 --- a/ntfy.xcodeproj/project.pbxproj +++ b/ntfy.xcodeproj/project.pbxproj @@ -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 = ""; }; 9474F1FC2831311A00CDE4DD /* AddSubscriptionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddSubscriptionView.swift; sourceTree = ""; }; 9474F1FE28316ACE00CDE4DD /* Subscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Subscription.swift; sourceTree = ""; }; + 9474F20028316D1100CDE4DD /* Messenger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Messenger.swift; sourceTree = ""; }; /* 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 = ""; @@ -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 */, diff --git a/ntfy/AppDelegate.swift b/ntfy/AppDelegate.swift index 537396f..a12ccac 100644 --- a/ntfy/AppDelegate.swift +++ b/ntfy/AppDelegate.swift @@ -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 diff --git a/ntfy/Messenger.swift b/ntfy/Messenger.swift new file mode 100644 index 0000000..6840ea6 --- /dev/null +++ b/ntfy/Messenger.swift @@ -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() + } +} diff --git a/ntfy/Subscription.swift b/ntfy/Subscription.swift index b1ba2d8..6773dfc 100644 --- a/ntfy/Subscription.swift +++ b/ntfy/Subscription.swift @@ -8,6 +8,10 @@ import Foundation extension Subscription { + func forceTopic() -> String { + return topic ?? "" + } + func displayName() -> String { return topic ?? "" } diff --git a/ntfy/SubscriptionsList.swift b/ntfy/SubscriptionsList.swift index 7d0c24f..2d34745 100644 --- a/ntfy/SubscriptionsList.swift +++ b/ntfy/SubscriptionsList.swift @@ -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() + } + } + } /*