feat(Widget): Reorganize and rename FollowersCountWidget code
This commit is contained in:
parent
e2fe1263a4
commit
e05a8602d5
@ -31,7 +31,7 @@
|
|||||||
2A33063929880835001D4C51 /* CurvedChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A33063329880834001D4C51 /* CurvedChart.swift */; };
|
2A33063929880835001D4C51 /* CurvedChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A33063329880834001D4C51 /* CurvedChart.swift */; };
|
||||||
2A33063A29880835001D4C51 /* LightChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A33063429880834001D4C51 /* LightChart.swift */; };
|
2A33063A29880835001D4C51 /* LightChart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A33063429880834001D4C51 /* LightChart.swift */; };
|
||||||
2A33063B29880835001D4C51 /* ChartType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A33063529880834001D4C51 /* ChartType.swift */; };
|
2A33063B29880835001D4C51 /* ChartType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A33063529880834001D4C51 /* ChartType.swift */; };
|
||||||
2A33AB662982C4AF008A7FB1 /* FollowCountWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A33AB652982C4AF008A7FB1 /* FollowCountWidgetView.swift */; };
|
2A33AB662982C4AF008A7FB1 /* FollowersCountWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A33AB652982C4AF008A7FB1 /* FollowersCountWidgetView.swift */; };
|
||||||
2A3F6FE3292ECB5E002E6DA7 /* FollowedTagsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3F6FE2292ECB5E002E6DA7 /* FollowedTagsViewModel.swift */; };
|
2A3F6FE3292ECB5E002E6DA7 /* FollowedTagsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3F6FE2292ECB5E002E6DA7 /* FollowedTagsViewModel.swift */; };
|
||||||
2A3F6FE5292F6E44002E6DA7 /* FollowedTagsTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3F6FE4292F6E44002E6DA7 /* FollowedTagsTableViewCell.swift */; };
|
2A3F6FE5292F6E44002E6DA7 /* FollowedTagsTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3F6FE4292F6E44002E6DA7 /* FollowedTagsTableViewCell.swift */; };
|
||||||
2A506CF4292CD85800059C37 /* FollowedTagsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A506CF3292CD85800059C37 /* FollowedTagsViewController.swift */; };
|
2A506CF4292CD85800059C37 /* FollowedTagsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A506CF3292CD85800059C37 /* FollowedTagsViewController.swift */; };
|
||||||
@ -44,7 +44,7 @@
|
|||||||
2A728122297EA9D7004138C5 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728121297EA9D7004138C5 /* WidgetKit.framework */; };
|
2A728122297EA9D7004138C5 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728121297EA9D7004138C5 /* WidgetKit.framework */; };
|
||||||
2A728124297EA9D7004138C5 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728123297EA9D7004138C5 /* SwiftUI.framework */; };
|
2A728124297EA9D7004138C5 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A728123297EA9D7004138C5 /* SwiftUI.framework */; };
|
||||||
2A728127297EA9D7004138C5 /* WidgetExtensionBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A728126297EA9D7004138C5 /* WidgetExtensionBundle.swift */; };
|
2A728127297EA9D7004138C5 /* WidgetExtensionBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A728126297EA9D7004138C5 /* WidgetExtensionBundle.swift */; };
|
||||||
2A72812B297EA9D7004138C5 /* FollowersWidgetExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A72812A297EA9D7004138C5 /* FollowersWidgetExtension.swift */; };
|
2A72812B297EA9D7004138C5 /* FollowersCountWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A72812A297EA9D7004138C5 /* FollowersCountWidget.swift */; };
|
||||||
2A72812E297EA9D8004138C5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2A72812D297EA9D8004138C5 /* Assets.xcassets */; };
|
2A72812E297EA9D8004138C5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2A72812D297EA9D8004138C5 /* Assets.xcassets */; };
|
||||||
2A728130297EA9D8004138C5 /* WidgetExtension.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 2A72812C297EA9D7004138C5 /* WidgetExtension.intentdefinition */; };
|
2A728130297EA9D8004138C5 /* WidgetExtension.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 2A72812C297EA9D7004138C5 /* WidgetExtension.intentdefinition */; };
|
||||||
2A728131297EA9D8004138C5 /* WidgetExtension.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 2A72812C297EA9D7004138C5 /* WidgetExtension.intentdefinition */; };
|
2A728131297EA9D8004138C5 /* WidgetExtension.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 2A72812C297EA9D7004138C5 /* WidgetExtension.intentdefinition */; };
|
||||||
@ -620,7 +620,7 @@
|
|||||||
2A33063429880834001D4C51 /* LightChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LightChart.swift; sourceTree = "<group>"; };
|
2A33063429880834001D4C51 /* LightChart.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LightChart.swift; sourceTree = "<group>"; };
|
||||||
2A33063529880834001D4C51 /* ChartType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartType.swift; sourceTree = "<group>"; };
|
2A33063529880834001D4C51 /* ChartType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChartType.swift; sourceTree = "<group>"; };
|
||||||
2A33625329759B4200481A90 /* OpenInActionExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OpenInActionExtension.entitlements; sourceTree = "<group>"; };
|
2A33625329759B4200481A90 /* OpenInActionExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OpenInActionExtension.entitlements; sourceTree = "<group>"; };
|
||||||
2A33AB652982C4AF008A7FB1 /* FollowCountWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowCountWidgetView.swift; sourceTree = "<group>"; };
|
2A33AB652982C4AF008A7FB1 /* FollowersCountWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowersCountWidgetView.swift; sourceTree = "<group>"; };
|
||||||
2A3F6FE2292ECB5E002E6DA7 /* FollowedTagsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedTagsViewModel.swift; sourceTree = "<group>"; };
|
2A3F6FE2292ECB5E002E6DA7 /* FollowedTagsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedTagsViewModel.swift; sourceTree = "<group>"; };
|
||||||
2A3F6FE4292F6E44002E6DA7 /* FollowedTagsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedTagsTableViewCell.swift; sourceTree = "<group>"; };
|
2A3F6FE4292F6E44002E6DA7 /* FollowedTagsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedTagsTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
2A506CF3292CD85800059C37 /* FollowedTagsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedTagsViewController.swift; sourceTree = "<group>"; };
|
2A506CF3292CD85800059C37 /* FollowedTagsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowedTagsViewController.swift; sourceTree = "<group>"; };
|
||||||
@ -635,7 +635,7 @@
|
|||||||
2A728121297EA9D7004138C5 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
|
2A728121297EA9D7004138C5 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
|
||||||
2A728123297EA9D7004138C5 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
|
2A728123297EA9D7004138C5 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
|
||||||
2A728126297EA9D7004138C5 /* WidgetExtensionBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetExtensionBundle.swift; sourceTree = "<group>"; };
|
2A728126297EA9D7004138C5 /* WidgetExtensionBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetExtensionBundle.swift; sourceTree = "<group>"; };
|
||||||
2A72812A297EA9D7004138C5 /* FollowersWidgetExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowersWidgetExtension.swift; sourceTree = "<group>"; };
|
2A72812A297EA9D7004138C5 /* FollowersCountWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowersCountWidget.swift; sourceTree = "<group>"; };
|
||||||
2A72812C297EA9D7004138C5 /* WidgetExtension.intentdefinition */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; path = WidgetExtension.intentdefinition; sourceTree = "<group>"; };
|
2A72812C297EA9D7004138C5 /* WidgetExtension.intentdefinition */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; path = WidgetExtension.intentdefinition; sourceTree = "<group>"; };
|
||||||
2A72812D297EA9D8004138C5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
2A72812D297EA9D8004138C5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
2A72812F297EA9D8004138C5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
2A72812F297EA9D8004138C5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
@ -1409,14 +1409,6 @@
|
|||||||
path = Charts;
|
path = Charts;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
2A33AB642982C4A3008A7FB1 /* WidgetViews */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
2A33AB652982C4AF008A7FB1 /* FollowCountWidgetView.swift */,
|
|
||||||
);
|
|
||||||
path = WidgetViews;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
2A506CF2292CD83B00059C37 /* FollowedTags */ = {
|
2A506CF2292CD83B00059C37 /* FollowedTags */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -1444,11 +1436,10 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
2A33062E29880834001D4C51 /* LightChart */,
|
2A33062E29880834001D4C51 /* LightChart */,
|
||||||
2A33AB642982C4A3008A7FB1 /* WidgetViews */,
|
2A86A14329892700007F1062 /* Variants */,
|
||||||
2AE202A9297FDDF500F66E55 /* WidgetExtension.entitlements */,
|
2AE202A9297FDDF500F66E55 /* WidgetExtension.entitlements */,
|
||||||
2A72813E297EC762004138C5 /* WidgetExtension.swift */,
|
2A72813E297EC762004138C5 /* WidgetExtension.swift */,
|
||||||
2A728126297EA9D7004138C5 /* WidgetExtensionBundle.swift */,
|
2A728126297EA9D7004138C5 /* WidgetExtensionBundle.swift */,
|
||||||
2A72812A297EA9D7004138C5 /* FollowersWidgetExtension.swift */,
|
|
||||||
2A33062C2987DBFA001D4C51 /* FollowersCountHistory.swift */,
|
2A33062C2987DBFA001D4C51 /* FollowersCountHistory.swift */,
|
||||||
2A72812C297EA9D7004138C5 /* WidgetExtension.intentdefinition */,
|
2A72812C297EA9D7004138C5 /* WidgetExtension.intentdefinition */,
|
||||||
2A72812D297EA9D8004138C5 /* Assets.xcassets */,
|
2A72812D297EA9D8004138C5 /* Assets.xcassets */,
|
||||||
@ -1457,6 +1448,23 @@
|
|||||||
path = WidgetExtension;
|
path = WidgetExtension;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
2A86A14329892700007F1062 /* Variants */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
2A86A14429892709007F1062 /* FollowersCount */,
|
||||||
|
);
|
||||||
|
path = Variants;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
2A86A14429892709007F1062 /* FollowersCount */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
2A72812A297EA9D7004138C5 /* FollowersCountWidget.swift */,
|
||||||
|
2A33AB652982C4AF008A7FB1 /* FollowersCountWidgetView.swift */,
|
||||||
|
);
|
||||||
|
path = FollowersCount;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
2D152A8A25C295B8009AA50C /* Content */ = {
|
2D152A8A25C295B8009AA50C /* Content */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@ -3481,9 +3489,9 @@
|
|||||||
2A33063A29880835001D4C51 /* LightChart.swift in Sources */,
|
2A33063A29880835001D4C51 /* LightChart.swift in Sources */,
|
||||||
2A33063B29880835001D4C51 /* ChartType.swift in Sources */,
|
2A33063B29880835001D4C51 /* ChartType.swift in Sources */,
|
||||||
2A33063629880835001D4C51 /* Math.swift in Sources */,
|
2A33063629880835001D4C51 /* Math.swift in Sources */,
|
||||||
2A33AB662982C4AF008A7FB1 /* FollowCountWidgetView.swift in Sources */,
|
2A33AB662982C4AF008A7FB1 /* FollowersCountWidgetView.swift in Sources */,
|
||||||
2A728127297EA9D7004138C5 /* WidgetExtensionBundle.swift in Sources */,
|
2A728127297EA9D7004138C5 /* WidgetExtensionBundle.swift in Sources */,
|
||||||
2A72812B297EA9D7004138C5 /* FollowersWidgetExtension.swift in Sources */,
|
2A72812B297EA9D7004138C5 /* FollowersCountWidget.swift in Sources */,
|
||||||
2A33063929880835001D4C51 /* CurvedChart.swift in Sources */,
|
2A33063929880835001D4C51 /* CurvedChart.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -5,34 +5,34 @@ import SwiftUI
|
|||||||
import Intents
|
import Intents
|
||||||
import MastodonSDK
|
import MastodonSDK
|
||||||
|
|
||||||
struct FollowersProvider: IntentTimelineProvider {
|
struct FollowersCountWidgetProvider: IntentTimelineProvider {
|
||||||
private let followersHistory = FollowersCountHistory.shared
|
private let followersHistory = FollowersCountHistory.shared
|
||||||
|
|
||||||
func placeholder(in context: Context) -> FollowersEntry {
|
func placeholder(in context: Context) -> FollowersCountEntry {
|
||||||
.placeholder
|
.placeholder
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSnapshot(for configuration: FollowersCountIntent, in context: Context, completion: @escaping (FollowersEntry) -> ()) {
|
func getSnapshot(for configuration: FollowersCountIntent, in context: Context, completion: @escaping (FollowersCountEntry) -> ()) {
|
||||||
guard !context.isPreview else {
|
guard !context.isPreview else {
|
||||||
return completion(.placeholder)
|
return completion(.placeholder)
|
||||||
}
|
}
|
||||||
loadCurrentEntry(for: configuration, in: context, completion: completion)
|
loadCurrentEntry(for: configuration, in: context, completion: completion)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTimeline(for configuration: FollowersCountIntent, in context: Context, completion: @escaping (Timeline<FollowersEntry>) -> ()) {
|
func getTimeline(for configuration: FollowersCountIntent, in context: Context, completion: @escaping (Timeline<FollowersCountEntry>) -> ()) {
|
||||||
loadCurrentEntry(for: configuration, in: context) { entry in
|
loadCurrentEntry(for: configuration, in: context) { entry in
|
||||||
completion(Timeline(entries: [entry], policy: .after(.now)))
|
completion(Timeline(entries: [entry], policy: .after(.now)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct FollowersEntry: TimelineEntry {
|
struct FollowersCountEntry: TimelineEntry {
|
||||||
let date: Date
|
let date: Date
|
||||||
let account: FollowersEntryAccountable?
|
let account: FollowersEntryAccountable?
|
||||||
let configuration: FollowersCountIntent
|
let configuration: FollowersCountIntent
|
||||||
|
|
||||||
static var placeholder: Self {
|
static var placeholder: Self {
|
||||||
FollowersEntry(
|
FollowersCountEntry(
|
||||||
date: .now,
|
date: .now,
|
||||||
account: FollowersEntryAccount(
|
account: FollowersEntryAccount(
|
||||||
followersCount: 99_900,
|
followersCount: 99_900,
|
||||||
@ -46,7 +46,7 @@ struct FollowersEntry: TimelineEntry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static var unconfigured: Self {
|
static var unconfigured: Self {
|
||||||
FollowersEntry(
|
FollowersCountEntry(
|
||||||
date: .now,
|
date: .now,
|
||||||
account: nil,
|
account: nil,
|
||||||
configuration: FollowersCountIntent()
|
configuration: FollowersCountIntent()
|
||||||
@ -54,7 +54,7 @@ struct FollowersEntry: TimelineEntry {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct FollowersWidgetExtension: Widget {
|
struct FollowersCountWidget: Widget {
|
||||||
private var availableFamilies: [WidgetFamily] {
|
private var availableFamilies: [WidgetFamily] {
|
||||||
if #available(iOS 16, *) {
|
if #available(iOS 16, *) {
|
||||||
return [.systemSmall, .accessoryRectangular, .accessoryCircular]
|
return [.systemSmall, .accessoryRectangular, .accessoryCircular]
|
||||||
@ -63,8 +63,8 @@ struct FollowersWidgetExtension: Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var body: some WidgetConfiguration {
|
var body: some WidgetConfiguration {
|
||||||
IntentConfiguration(kind: "Followers", intent: FollowersCountIntent.self, provider: FollowersProvider()) { entry in
|
IntentConfiguration(kind: "Followers", intent: FollowersCountIntent.self, provider: FollowersCountWidgetProvider()) { entry in
|
||||||
FollowCountWidgetView(entry: entry)
|
FollowersCountWidgetView(entry: entry)
|
||||||
}
|
}
|
||||||
.configurationDisplayName("Followers")
|
.configurationDisplayName("Followers")
|
||||||
.description("Show number of followers.")
|
.description("Show number of followers.")
|
||||||
@ -72,8 +72,8 @@ struct FollowersWidgetExtension: Widget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private extension FollowersProvider {
|
private extension FollowersCountWidgetProvider {
|
||||||
func loadCurrentEntry(for configuration: FollowersCountIntent, in context: Context, completion: @escaping (FollowersEntry) -> Void) {
|
func loadCurrentEntry(for configuration: FollowersCountIntent, in context: Context, completion: @escaping (FollowersCountEntry) -> Void) {
|
||||||
Task {
|
Task {
|
||||||
guard
|
guard
|
||||||
let authBox = WidgetExtension.appContext
|
let authBox = WidgetExtension.appContext
|
||||||
@ -102,7 +102,7 @@ private extension FollowersProvider {
|
|||||||
|
|
||||||
let imageData = try await URLSession.shared.data(from: resultingAccount.avatarImageURLWithFallback(domain: authBox.domain)).0
|
let imageData = try await URLSession.shared.data(from: resultingAccount.avatarImageURLWithFallback(domain: authBox.domain)).0
|
||||||
|
|
||||||
let entry = FollowersEntry(
|
let entry = FollowersCountEntry(
|
||||||
date: Date(),
|
date: Date(),
|
||||||
account: FollowersEntryAccount.from(
|
account: FollowersEntryAccount.from(
|
||||||
mastodonAccount: resultingAccount,
|
mastodonAccount: resultingAccount,
|
@ -4,12 +4,12 @@ import SwiftUI
|
|||||||
import WidgetKit
|
import WidgetKit
|
||||||
import MastodonAsset
|
import MastodonAsset
|
||||||
|
|
||||||
struct FollowCountWidgetView: View {
|
struct FollowersCountWidgetView: View {
|
||||||
private let followersHistory = FollowersCountHistory.shared
|
private let followersHistory = FollowersCountHistory.shared
|
||||||
|
|
||||||
@Environment(\.widgetFamily) var family
|
@Environment(\.widgetFamily) var family
|
||||||
|
|
||||||
var entry: FollowersProvider.Entry
|
var entry: FollowersCountWidgetProvider.Entry
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
if let account = entry.account {
|
if let account = entry.account {
|
@ -174,8 +174,219 @@
|
|||||||
<key>INIntentVerb</key>
|
<key>INIntentVerb</key>
|
||||||
<string>View</string>
|
<string>View</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentCategory</key>
|
||||||
|
<string>information</string>
|
||||||
|
<key>INIntentDescriptionID</key>
|
||||||
|
<string>B9KyhZ</string>
|
||||||
|
<key>INIntentEligibleForWidgets</key>
|
||||||
|
<true/>
|
||||||
|
<key>INIntentIneligibleForSuggestions</key>
|
||||||
|
<true/>
|
||||||
|
<key>INIntentLastParameterTag</key>
|
||||||
|
<integer>5</integer>
|
||||||
|
<key>INIntentName</key>
|
||||||
|
<string>MultiFollowCountSmall</string>
|
||||||
|
<key>INIntentParameters</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterArraySizes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterArraySizeSize</key>
|
||||||
|
<integer>3</integer>
|
||||||
|
<key>INIntentParameterArraySizeSizeClass</key>
|
||||||
|
<string>Small</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterArraySizeSize</key>
|
||||||
|
<integer>6</integer>
|
||||||
|
<key>INIntentParameterArraySizeSizeClass</key>
|
||||||
|
<string>Medium</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterArraySizeSize</key>
|
||||||
|
<integer>6</integer>
|
||||||
|
<key>INIntentParameterArraySizeSizeClass</key>
|
||||||
|
<string>Large</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterArraySizeSize</key>
|
||||||
|
<integer>6</integer>
|
||||||
|
<key>INIntentParameterArraySizeSizeClass</key>
|
||||||
|
<string>ExtraLarge</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterArraySizeSize</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>INIntentParameterArraySizeSizeClass</key>
|
||||||
|
<string>AccessoryInline</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterArraySizeSize</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>INIntentParameterArraySizeSizeClass</key>
|
||||||
|
<string>AccessoryCorner</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterArraySizeSize</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>INIntentParameterArraySizeSizeClass</key>
|
||||||
|
<string>AccessoryCircular</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterArraySizeSize</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>INIntentParameterArraySizeSizeClass</key>
|
||||||
|
<string>AccessoryRectangular</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>INIntentParameterConfigurable</key>
|
||||||
|
<true/>
|
||||||
|
<key>INIntentParameterDisplayName</key>
|
||||||
|
<string>Accounts</string>
|
||||||
|
<key>INIntentParameterDisplayNameID</key>
|
||||||
|
<string>fovmPX</string>
|
||||||
|
<key>INIntentParameterDisplayPriority</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>INIntentParameterFixedSizeArray</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>INIntentParameterName</key>
|
||||||
|
<string>accounts</string>
|
||||||
|
<key>INIntentParameterObjectType</key>
|
||||||
|
<string>MultiFollowAccountsSmall</string>
|
||||||
|
<key>INIntentParameterObjectTypeNamespace</key>
|
||||||
|
<string>88xZPY</string>
|
||||||
|
<key>INIntentParameterPromptDialogs</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterPromptDialogCustom</key>
|
||||||
|
<true/>
|
||||||
|
<key>INIntentParameterPromptDialogType</key>
|
||||||
|
<string>Configuration</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentParameterPromptDialogCustom</key>
|
||||||
|
<true/>
|
||||||
|
<key>INIntentParameterPromptDialogType</key>
|
||||||
|
<string>Primary</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>INIntentParameterSupportsMultipleValues</key>
|
||||||
|
<true/>
|
||||||
|
<key>INIntentParameterTag</key>
|
||||||
|
<integer>5</integer>
|
||||||
|
<key>INIntentParameterType</key>
|
||||||
|
<string>Object</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>INIntentResponse</key>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentResponseCodes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentResponseCodeName</key>
|
||||||
|
<string>success</string>
|
||||||
|
<key>INIntentResponseCodeSuccess</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INIntentResponseCodeName</key>
|
||||||
|
<string>failure</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
<key>INIntentTitle</key>
|
||||||
|
<string>Multi Follow Count Small</string>
|
||||||
|
<key>INIntentTitleID</key>
|
||||||
|
<string>e0W2wo</string>
|
||||||
|
<key>INIntentType</key>
|
||||||
|
<string>Custom</string>
|
||||||
|
<key>INIntentVerb</key>
|
||||||
|
<string>View</string>
|
||||||
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>INTypes</key>
|
<key>INTypes</key>
|
||||||
<array/>
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>INTypeDisplayName</key>
|
||||||
|
<string>Account</string>
|
||||||
|
<key>INTypeDisplayNameID</key>
|
||||||
|
<string>LUrJ3D</string>
|
||||||
|
<key>INTypeLastPropertyTag</key>
|
||||||
|
<integer>101</integer>
|
||||||
|
<key>INTypeName</key>
|
||||||
|
<string>MultiFollowAccountsSmall</string>
|
||||||
|
<key>INTypeProperties</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>INTypePropertyDefault</key>
|
||||||
|
<true/>
|
||||||
|
<key>INTypePropertyDisplayPriority</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>INTypePropertyName</key>
|
||||||
|
<string>identifier</string>
|
||||||
|
<key>INTypePropertyTag</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>INTypePropertyType</key>
|
||||||
|
<string>String</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INTypePropertyDefault</key>
|
||||||
|
<true/>
|
||||||
|
<key>INTypePropertyDisplayPriority</key>
|
||||||
|
<integer>2</integer>
|
||||||
|
<key>INTypePropertyName</key>
|
||||||
|
<string>displayString</string>
|
||||||
|
<key>INTypePropertyTag</key>
|
||||||
|
<integer>2</integer>
|
||||||
|
<key>INTypePropertyType</key>
|
||||||
|
<string>String</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INTypePropertyDefault</key>
|
||||||
|
<true/>
|
||||||
|
<key>INTypePropertyDisplayPriority</key>
|
||||||
|
<integer>3</integer>
|
||||||
|
<key>INTypePropertyName</key>
|
||||||
|
<string>pronunciationHint</string>
|
||||||
|
<key>INTypePropertyTag</key>
|
||||||
|
<integer>3</integer>
|
||||||
|
<key>INTypePropertyType</key>
|
||||||
|
<string>String</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INTypePropertyDefault</key>
|
||||||
|
<true/>
|
||||||
|
<key>INTypePropertyDisplayPriority</key>
|
||||||
|
<integer>4</integer>
|
||||||
|
<key>INTypePropertyName</key>
|
||||||
|
<string>alternativeSpeakableMatches</string>
|
||||||
|
<key>INTypePropertySupportsMultipleValues</key>
|
||||||
|
<true/>
|
||||||
|
<key>INTypePropertyTag</key>
|
||||||
|
<integer>4</integer>
|
||||||
|
<key>INTypePropertyType</key>
|
||||||
|
<string>SpeakableString</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>INTypePropertyDisplayName</key>
|
||||||
|
<string>username</string>
|
||||||
|
<key>INTypePropertyDisplayNameID</key>
|
||||||
|
<string>TQNJZz</string>
|
||||||
|
<key>INTypePropertyDisplayPriority</key>
|
||||||
|
<integer>5</integer>
|
||||||
|
<key>INTypePropertyName</key>
|
||||||
|
<string>property</string>
|
||||||
|
<key>INTypePropertySupportsMultipleValues</key>
|
||||||
|
<true/>
|
||||||
|
<key>INTypePropertyTag</key>
|
||||||
|
<integer>101</integer>
|
||||||
|
<key>INTypePropertyType</key>
|
||||||
|
<string>String</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
@ -6,6 +6,6 @@ import SwiftUI
|
|||||||
@main
|
@main
|
||||||
struct WidgetExtensionBundle: WidgetBundle {
|
struct WidgetExtensionBundle: WidgetBundle {
|
||||||
var body: some Widget {
|
var body: some Widget {
|
||||||
FollowersWidgetExtension()
|
FollowersCountWidget()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user