diff --git a/ios/HomePlayerWidget/HomePlayerWidget.swift b/ios/HomePlayerWidget/HomePlayerWidget.swift index 8808aae1..e117bf5d 100644 --- a/ios/HomePlayerWidget/HomePlayerWidget.swift +++ b/ios/HomePlayerWidget/HomePlayerWidget.swift @@ -1,10 +1,3 @@ -// -// HomePlayerWidget.swift -// HomePlayerWidget -// -// Created by Kingkor Roy Tirtho on 15/12/24. -// - import WidgetKit import SwiftUI @@ -12,11 +5,11 @@ private let widgetGroupId = "group.spotube_home_player_widget" struct Provider: TimelineProvider { func placeholder(in context: Context) -> SimpleEntry { - SimpleEntry(date: Date(), emoji: "😀") + SimpleEntry(date: Date(), emoji: "😀", trackTitle: "Track Title", artistName: "Artist Name", albumArt: UIImage()) } func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) { - let entry = SimpleEntry(date: Date(), emoji: "😀") + let entry = SimpleEntry(date: Date(), emoji: "😀", trackTitle: "Track Title", artistName: "Artist Name", albumArt: UIImage()) completion(entry) } @@ -27,22 +20,21 @@ struct Provider: TimelineProvider { let currentDate = Date() for hourOffset in 0 ..< 5 { let entryDate = Calendar.current.date(byAdding: .hour, value: hourOffset, to: currentDate)! - let entry = SimpleEntry(date: entryDate, emoji: "😀") + let entry = SimpleEntry(date: entryDate, emoji: "😀", trackTitle: "Track Title", artistName: "Artist Name", albumArt: UIImage()) entries.append(entry) } let timeline = Timeline(entries: entries, policy: .atEnd) completion(timeline) } - -// func relevances() async -> WidgetRelevances { -// // Generate a list containing the contexts this widget is relevant in. -// } } struct SimpleEntry: TimelineEntry { let date: Date let emoji: String + let trackTitle: String + let artistName: String + let albumArt: UIImage } struct HomePlayerWidgetEntryView : View { @@ -55,6 +47,16 @@ struct HomePlayerWidgetEntryView : View { Text("Emoji:") Text(entry.emoji) + + Text("Track Title:") + Text(entry.trackTitle) + + Text("Artist Name:") + Text(entry.artistName) + + Image(uiImage: entry.albumArt) + .resizable() + .aspectRatio(contentMode: .fit) } } } @@ -81,6 +83,6 @@ struct HomePlayerWidget: Widget { #Preview(as: .systemSmall) { HomePlayerWidget() } timeline: { - SimpleEntry(date: .now, emoji: "😀") - SimpleEntry(date: .now, emoji: "🤩") + SimpleEntry(date: .now, emoji: "😀", trackTitle: "Track Title", artistName: "Artist Name", albumArt: UIImage()) + SimpleEntry(date: .now, emoji: "🤩", trackTitle: "Track Title", artistName: "Artist Name", albumArt: UIImage()) } diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 91b7ad94..485968ee 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -44,6 +44,8 @@ UIBackgroundModes audio + fetch + remote-notification UILaunchStoryboardName LaunchScreen @@ -78,5 +80,13 @@ UISupportsDocumentBrowser + NSSiriUsageDescription + This app uses Siri to control playback. + UIBackgroundModes + + audio + fetch + remote-notification + diff --git a/lib/main.dart b/lib/main.dart index 5cd916e5..fe71b919 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -148,6 +148,7 @@ class Spotube extends HookConsumerWidget { ref.listen(connectClientsProvider, (_, __) {}); ref.listen(serverProvider, (_, __) {}); ref.listen(trayManagerProvider, (_, __) {}); + ref.listen(glanceProvider, (_, __) {}); // Register the HomePlayerWidget for iOS useFixWindowStretching(); useDisableBatteryOptimizations(); diff --git a/lib/provider/glance/glance.dart b/lib/provider/glance/glance.dart index 22faa13f..7586d84d 100644 --- a/lib/provider/glance/glance.dart +++ b/lib/provider/glance/glance.dart @@ -96,6 +96,9 @@ Future _sendActiveTrack(Track? track) async { }; await _saveWidgetData("activeTrack", jsonEncode(data)); + await _saveWidgetData("trackTitle", track.name); + await _saveWidgetData("artistName", track.artists?.map((artist) => artist.name).join(", ")); + await _saveWidgetData("albumArt", cachedImage.path); await _updateWidget(); }