From 9f26f77b45355c81c86dfd20bc4526442d5b45ba Mon Sep 17 00:00:00 2001 From: Marcin Czachurski Date: Mon, 1 May 2023 07:50:24 +0200 Subject: [PATCH] #62 QR code widgets --- .../EnvironmentKit/ApplicationState.swift | 3 + .../EnvironmentKit/Models/AppConstants.swift | 4 + Localization/en.lproj/Localizable.strings | 3 +- Localization/eu.lproj/Localizable.strings | 3 +- Localization/fr.lproj/Localizable.strings | 3 +- Localization/pl.lproj/Localizable.strings | 3 +- Vernissage.xcodeproj/project.pbxproj | 171 ++++++++++++++---- Vernissage/SceneDelegate.swift | 5 + Vernissage/VernissageApp.swift | 6 + Vernissage/Views/ThirdPartyView.swift | 10 + .../Pixelfed.imageset/Contents.json | 56 ++++++ .../Pixelfed.imageset/PixelfedBlack.png | Bin 0 -> 6718 bytes .../Pixelfed.imageset/PixelfedBlack@2x.png | Bin 0 -> 13881 bytes .../Pixelfed.imageset/PixelfedBlack@3x.png | Bin 0 -> 23163 bytes .../Pixelfed.imageset/PixelfedWhite.png | Bin 0 -> 6633 bytes .../Pixelfed.imageset/PixelfedWhite@2x.png | Bin 0 -> 13713 bytes .../Pixelfed.imageset/PixelfedWhite@3x.png | Bin 0 -> 22892 bytes .../QRCode.imageset/Contents.json | 23 +++ .../QRCode.imageset/QRCode.png | Bin 0 -> 19590 bytes .../QRCode.imageset/QRCode@2x.png | Bin 0 -> 26965 bytes .../QRCode.imageset/QRCode@3x.png | Bin 0 -> 29026 bytes VernissageWidget/ImageFetcher.swift | 106 ----------- .../PhotoProvider.swift} | 18 +- .../PhotoWidget.swift} | 8 +- .../PhotoWidgetEntry.swift} | 2 +- .../PhotoWidgetEntryView.swift} | 10 +- .../PhotoWidget/Service/StatusFetcher.swift | 74 ++++++++ .../Views/PhotoLargeWidgetView.swift} | 4 +- .../Views/PhotoMediumWidgetView.swift} | 4 +- .../Views/PhotoSmallWidgetView.swift} | 4 +- .../QRCodeWidget/QRCodeProvider.swift | 47 +++++ .../QRCodeWidget/QRCodeWidget.swift | 21 +++ .../QRCodeWidget/QRCodeWidgetEntry.swift | 18 ++ .../QRCodeWidget/QRCodeWidgetEntryView.swift | 23 +++ .../QRCodeWidget/Service/AccountFetcher.swift | 47 +++++ .../Service/QRCodeGenerator.swift | 24 +++ .../Views/QRCodeLargeWidgetView.swift | 87 +++++++++ .../Views/QRCodeMediumWidgetView.swift | 72 ++++++++ .../Views/QRCodeSmallWidgetView.swift | 66 +++++++ .../SharedServices/FileFetcher.swift | 45 +++++ VernissageWidget/VernissageWidgetBundle.swift | 5 +- 41 files changed, 806 insertions(+), 169 deletions(-) create mode 100644 VernissageWidget/Assets.xcassets/Pixelfed.imageset/Contents.json create mode 100644 VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedBlack.png create mode 100644 VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedBlack@2x.png create mode 100644 VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedBlack@3x.png create mode 100644 VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedWhite.png create mode 100644 VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedWhite@2x.png create mode 100644 VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedWhite@3x.png create mode 100644 VernissageWidget/Assets.xcassets/QRCode.imageset/Contents.json create mode 100644 VernissageWidget/Assets.xcassets/QRCode.imageset/QRCode.png create mode 100644 VernissageWidget/Assets.xcassets/QRCode.imageset/QRCode@2x.png create mode 100644 VernissageWidget/Assets.xcassets/QRCode.imageset/QRCode@3x.png delete mode 100644 VernissageWidget/ImageFetcher.swift rename VernissageWidget/{Provider.swift => PhotoWidget/PhotoProvider.swift} (66%) rename VernissageWidget/{VernissageWidget.swift => PhotoWidget/PhotoWidget.swift} (66%) rename VernissageWidget/{WidgetEntry.swift => PhotoWidget/PhotoWidgetEntry.swift} (88%) rename VernissageWidget/{VernissageWidgetEntryView.swift => PhotoWidget/PhotoWidgetEntryView.swift} (57%) create mode 100644 VernissageWidget/PhotoWidget/Service/StatusFetcher.swift rename VernissageWidget/{Views/LargeWidgetView.swift => PhotoWidget/Views/PhotoLargeWidgetView.swift} (95%) rename VernissageWidget/{Views/MediumWidgetView.swift => PhotoWidget/Views/PhotoMediumWidgetView.swift} (94%) rename VernissageWidget/{Views/SmallWidgetView.swift => PhotoWidget/Views/PhotoSmallWidgetView.swift} (94%) create mode 100644 VernissageWidget/QRCodeWidget/QRCodeProvider.swift create mode 100644 VernissageWidget/QRCodeWidget/QRCodeWidget.swift create mode 100644 VernissageWidget/QRCodeWidget/QRCodeWidgetEntry.swift create mode 100644 VernissageWidget/QRCodeWidget/QRCodeWidgetEntryView.swift create mode 100644 VernissageWidget/QRCodeWidget/Service/AccountFetcher.swift create mode 100644 VernissageWidget/QRCodeWidget/Service/QRCodeGenerator.swift create mode 100644 VernissageWidget/QRCodeWidget/Views/QRCodeLargeWidgetView.swift create mode 100644 VernissageWidget/QRCodeWidget/Views/QRCodeMediumWidgetView.swift create mode 100644 VernissageWidget/QRCodeWidget/Views/QRCodeSmallWidgetView.swift create mode 100644 VernissageWidget/SharedServices/FileFetcher.swift diff --git a/EnvironmentKit/Sources/EnvironmentKit/ApplicationState.swift b/EnvironmentKit/Sources/EnvironmentKit/ApplicationState.swift index 92a4804..2f5bc16 100644 --- a/EnvironmentKit/Sources/EnvironmentKit/ApplicationState.swift +++ b/EnvironmentKit/Sources/EnvironmentKit/ApplicationState.swift @@ -83,6 +83,9 @@ public class ApplicationState: ObservableObject { /// Status which should be shown from URL. @Published public var showStatusId: String? + /// Account which should be shown from URL. + @Published public var showAccountId: String? + /// Updated user profile. @Published public var updatedProfile: Account? diff --git a/EnvironmentKit/Sources/EnvironmentKit/Models/AppConstants.swift b/EnvironmentKit/Sources/EnvironmentKit/Models/AppConstants.swift index 5e9145a..1801189 100644 --- a/EnvironmentKit/Sources/EnvironmentKit/Models/AppConstants.swift +++ b/EnvironmentKit/Sources/EnvironmentKit/Models/AppConstants.swift @@ -17,6 +17,10 @@ public struct AppConstants { public static let statusCallbackPart = "statuses" public static let statusUri = "\(AppConstants.statusScheme)://\(statusCallbackPart)" + public static let accountScheme = "account-vernissage" + public static let accountCallbackPart = "accounts" + public static let accountUri = "\(AppConstants.accountScheme)://\(accountCallbackPart)" + public static let imagePipelineCacheName = "dev.mczachurski.Vernissage.DataCache" public static let coreDataPersistantContainerName = "Vernissage" } diff --git a/Localization/en.lproj/Localizable.strings b/Localization/en.lproj/Localizable.strings index f104ea4..f350ef9 100644 --- a/Localization/en.lproj/Localizable.strings +++ b/Localization/en.lproj/Localizable.strings @@ -299,7 +299,8 @@ "thirdParty.navigationBar.title" = "Third party"; // Mark: Widget view. -"widget.title.description" = "Widget with photos from Pixelfed."; +"widget.title.photoDescription" = "Widget with photos from Pixelfed."; +"widget.title.qrCodeDescription" = "Widget with QR Code to your Pixelfed profile."; // Mark: In-app purchases. "purchase.donut.title" = "Donut"; diff --git a/Localization/eu.lproj/Localizable.strings b/Localization/eu.lproj/Localizable.strings index e0f3e7a..32a82f2 100644 --- a/Localization/eu.lproj/Localizable.strings +++ b/Localization/eu.lproj/Localizable.strings @@ -299,7 +299,8 @@ "thirdParty.navigationBar.title" = "Hirugarrenak"; // Mark: Widget view. -"widget.title.description" = "Widgeta Pixelfed-eko argazkiekin."; +"widget.title.photoDescription" = "Widgeta Pixelfed-eko argazkiekin."; +"widget.title.qrCodeDescription" = "Widget with QR Code to your Pixelfed profile."; // Mark: In-app purchases. "purchase.donut.title" = "Opila"; diff --git a/Localization/fr.lproj/Localizable.strings b/Localization/fr.lproj/Localizable.strings index 7f605df..525ef99 100644 --- a/Localization/fr.lproj/Localizable.strings +++ b/Localization/fr.lproj/Localizable.strings @@ -299,7 +299,8 @@ "thirdParty.navigationBar.title" = "Tiers"; // Mark: Widget view. -"widget.title.description" = "Widget avec des photos de Pixelfed."; +"widget.title.photoDescription" = "Widget avec des photos de Pixelfed."; +"widget.title.qrCodeDescription" = "Widget with QR Code to your Pixelfed profile."; // Mark: In-app purchases. "purchase.donut.title" = "Beignet"; diff --git a/Localization/pl.lproj/Localizable.strings b/Localization/pl.lproj/Localizable.strings index 9e59ec3..923bea6 100644 --- a/Localization/pl.lproj/Localizable.strings +++ b/Localization/pl.lproj/Localizable.strings @@ -299,7 +299,8 @@ "thirdParty.navigationBar.title" = "Zewnętrzne biblioteki"; // Mark: Widget view. -"widget.title.description" = "Widget ze zdjęciami z Pixelfed."; +"widget.title.photoDescription" = "Widget ze zdjęciami z Pixelfed."; +"widget.title.qrCodeDescription" = "Widget z QR kodem do profilu na Pixelfed."; // Mark: In-app purchases. "purchase.donut.title" = "Pączek"; diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index 97a3ce9..69a3e52 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -30,6 +30,13 @@ F835082329BEF9C400DE3247 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F835082629BEF9C400DE3247 /* Localizable.strings */; }; F835082429BEF9C400DE3247 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F835082629BEF9C400DE3247 /* Localizable.strings */; }; F83CBEFB298298A1002972C8 /* ImageCarouselPicture.swift in Sources */ = {isa = PBXBuildFile; fileRef = F83CBEFA298298A1002972C8 /* ImageCarouselPicture.swift */; }; + F84625E929FE2788002D3AF4 /* QRCodeWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84625E829FE2788002D3AF4 /* QRCodeWidget.swift */; }; + F84625EB29FE28D4002D3AF4 /* QRCodeWidgetEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84625EA29FE28D4002D3AF4 /* QRCodeWidgetEntryView.swift */; }; + F84625ED29FE295B002D3AF4 /* QRCodeLargeWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84625EC29FE295B002D3AF4 /* QRCodeLargeWidgetView.swift */; }; + F84625F229FE2B6B002D3AF4 /* QRCodeWidgetEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84625F129FE2B6B002D3AF4 /* QRCodeWidgetEntry.swift */; }; + F84625F429FE2BF9002D3AF4 /* QRCodeProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84625F329FE2BF9002D3AF4 /* QRCodeProvider.swift */; }; + F84625F829FE2C2F002D3AF4 /* AccountFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84625F729FE2C2F002D3AF4 /* AccountFetcher.swift */; }; + F84625FB29FE393B002D3AF4 /* QRCode in Frameworks */ = {isa = PBXBuildFile; productRef = F84625FA29FE393B002D3AF4 /* QRCode */; }; F858906B29E1CC7A00D4BDED /* UIApplication+Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = F858906A29E1CC7A00D4BDED /* UIApplication+Window.swift */; }; F85D4971296402DC00751DF7 /* AuthorizationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D4970296402DC00751DF7 /* AuthorizationService.swift */; }; F85D4975296407F100751DF7 /* HomeTimelineService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D4974296407F100751DF7 /* HomeTimelineService.swift */; }; @@ -46,14 +53,14 @@ F864F75F29BB91B400B13921 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F864F75E29BB91B400B13921 /* WidgetKit.framework */; }; F864F76129BB91B400B13921 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F864F76029BB91B400B13921 /* SwiftUI.framework */; }; F864F76429BB91B400B13921 /* VernissageWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F76329BB91B400B13921 /* VernissageWidgetBundle.swift */; }; - F864F76629BB91B400B13921 /* VernissageWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F76529BB91B400B13921 /* VernissageWidget.swift */; }; + F864F76629BB91B400B13921 /* PhotoWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F76529BB91B400B13921 /* PhotoWidget.swift */; }; F864F76829BB91B600B13921 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F864F76729BB91B600B13921 /* Assets.xcassets */; }; F864F76C29BB91B600B13921 /* VernissageWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = F864F75D29BB91B400B13921 /* VernissageWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - F864F77529BB92CE00B13921 /* Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F77329BB929A00B13921 /* Provider.swift */; }; - F864F77629BB92CE00B13921 /* VernissageWidgetEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F77129BB924D00B13921 /* VernissageWidgetEntryView.swift */; }; - F864F77829BB930000B13921 /* WidgetEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F77729BB930000B13921 /* WidgetEntry.swift */; }; + F864F77529BB92CE00B13921 /* PhotoProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F77329BB929A00B13921 /* PhotoProvider.swift */; }; + F864F77629BB92CE00B13921 /* PhotoWidgetEntryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F77129BB924D00B13921 /* PhotoWidgetEntryView.swift */; }; + F864F77829BB930000B13921 /* PhotoWidgetEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F77729BB930000B13921 /* PhotoWidgetEntry.swift */; }; F864F77A29BB94A800B13921 /* PixelfedKit in Frameworks */ = {isa = PBXBuildFile; productRef = F864F77929BB94A800B13921 /* PixelfedKit */; }; - F864F77C29BB982100B13921 /* ImageFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F77B29BB982100B13921 /* ImageFetcher.swift */; }; + F864F77C29BB982100B13921 /* StatusFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F77B29BB982100B13921 /* StatusFetcher.swift */; }; F864F77D29BB9A4600B13921 /* AttachmentData+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80047FF2961850500E6868A /* AttachmentData+CoreDataClass.swift */; }; F864F77E29BB9A4900B13921 /* AttachmentData+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80048002961850500E6868A /* AttachmentData+CoreDataProperties.swift */; }; F864F78229BB9A6500B13921 /* StatusData+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80048012961850500E6868A /* StatusData+CoreDataClass.swift */; }; @@ -87,6 +94,10 @@ F86B7221296C49A300EE59EC /* EmptyButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86B7220296C49A300EE59EC /* EmptyButtonStyle.swift */; }; F86BC9E929EBBB67009415EC /* ImageSaver.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86BC9E829EBBB66009415EC /* ImageSaver.swift */; }; F86BC9EB29EBDA2E009415EC /* ActivityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86BC9EA29EBDA2E009415EC /* ActivityView.swift */; }; + F8705A7729FF7ABD00DA818A /* QRCodeSmallWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8705A7629FF7ABD00DA818A /* QRCodeSmallWidgetView.swift */; }; + F8705A7929FF7CCB00DA818A /* QRCodeMediumWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8705A7829FF7CCB00DA818A /* QRCodeMediumWidgetView.swift */; }; + F8705A7B29FF872F00DA818A /* QRCodeGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8705A7A29FF872F00DA818A /* QRCodeGenerator.swift */; }; + F8705A7E29FF880600DA818A /* FileFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8705A7D29FF880600DA818A /* FileFetcher.swift */; }; F870EE5229F1645C00A2D43B /* MainNavigationOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F870EE5129F1645C00A2D43B /* MainNavigationOptions.swift */; }; F871F21D29EF0D7000A351EF /* NavigationMenuItemDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = F871F21C29EF0D7000A351EF /* NavigationMenuItemDetails.swift */; }; F8742FC429990AFB00E9642B /* ClientError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8742FC329990AFB00E9642B /* ClientError.swift */; }; @@ -178,9 +189,9 @@ F8DF38E629DDB98A0047F1AA /* SocialsSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8DF38E529DDB98A0047F1AA /* SocialsSectionView.swift */; }; F8E6D03329CDD52500416CCA /* EditProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8E6D03229CDD52500416CCA /* EditProfileView.swift */; }; F8F6E44229BC58F20004795E /* Vernissage.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = F88C2476295C37BB0006098B /* Vernissage.xcdatamodeld */; }; - F8F6E44C29BCC1F70004795E /* SmallWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8F6E44629BCC0DC0004795E /* SmallWidgetView.swift */; }; - F8F6E44D29BCC1F90004795E /* MediumWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8F6E44829BCC0F00004795E /* MediumWidgetView.swift */; }; - F8F6E44E29BCC1FB0004795E /* LargeWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8F6E44A29BCC0FF0004795E /* LargeWidgetView.swift */; }; + F8F6E44C29BCC1F70004795E /* PhotoSmallWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8F6E44629BCC0DC0004795E /* PhotoSmallWidgetView.swift */; }; + F8F6E44D29BCC1F90004795E /* PhotoMediumWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8F6E44829BCC0F00004795E /* PhotoMediumWidgetView.swift */; }; + F8F6E44E29BCC1FB0004795E /* PhotoLargeWidgetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8F6E44A29BCC0FF0004795E /* PhotoLargeWidgetView.swift */; }; F8F6E45129BCE9190004795E /* UIImage+Resize.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8F6E45029BCE9190004795E /* UIImage+Resize.swift */; }; F8FB8ABA29EB2ED400342C04 /* NavigationMenuButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8FB8AB929EB2ED400342C04 /* NavigationMenuButtons.swift */; }; /* End PBXBuildFile section */ @@ -240,6 +251,12 @@ F837269429A221420098D3C4 /* PixelfedKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = PixelfedKit; sourceTree = ""; }; F83CBEFA298298A1002972C8 /* ImageCarouselPicture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageCarouselPicture.swift; sourceTree = ""; }; F844F42429D2DC39000DD896 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + F84625E829FE2788002D3AF4 /* QRCodeWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeWidget.swift; sourceTree = ""; }; + F84625EA29FE28D4002D3AF4 /* QRCodeWidgetEntryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeWidgetEntryView.swift; sourceTree = ""; }; + F84625EC29FE295B002D3AF4 /* QRCodeLargeWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLargeWidgetView.swift; sourceTree = ""; }; + F84625F129FE2B6B002D3AF4 /* QRCodeWidgetEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeWidgetEntry.swift; sourceTree = ""; }; + F84625F329FE2BF9002D3AF4 /* QRCodeProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeProvider.swift; sourceTree = ""; }; + F84625F729FE2C2F002D3AF4 /* AccountFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountFetcher.swift; sourceTree = ""; }; F858906A29E1CC7A00D4BDED /* UIApplication+Window.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIApplication+Window.swift"; sourceTree = ""; }; F85B586C29ED169B00A16D12 /* Vernissage-010.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Vernissage-010.xcdatamodel"; sourceTree = ""; }; F85D4970296402DC00751DF7 /* AuthorizationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorizationService.swift; sourceTree = ""; }; @@ -258,13 +275,13 @@ F864F75E29BB91B400B13921 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; F864F76029BB91B400B13921 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; F864F76329BB91B400B13921 /* VernissageWidgetBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VernissageWidgetBundle.swift; sourceTree = ""; }; - F864F76529BB91B400B13921 /* VernissageWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VernissageWidget.swift; sourceTree = ""; }; + F864F76529BB91B400B13921 /* PhotoWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoWidget.swift; sourceTree = ""; }; F864F76729BB91B600B13921 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; F864F76929BB91B600B13921 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F864F77129BB924D00B13921 /* VernissageWidgetEntryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VernissageWidgetEntryView.swift; sourceTree = ""; }; - F864F77329BB929A00B13921 /* Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Provider.swift; sourceTree = ""; }; - F864F77729BB930000B13921 /* WidgetEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetEntry.swift; sourceTree = ""; }; - F864F77B29BB982100B13921 /* ImageFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageFetcher.swift; sourceTree = ""; }; + F864F77129BB924D00B13921 /* PhotoWidgetEntryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoWidgetEntryView.swift; sourceTree = ""; }; + F864F77329BB929A00B13921 /* PhotoProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoProvider.swift; sourceTree = ""; }; + F864F77729BB930000B13921 /* PhotoWidgetEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoWidgetEntry.swift; sourceTree = ""; }; + F864F77B29BB982100B13921 /* StatusFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusFetcher.swift; sourceTree = ""; }; F864F7A429BBA01D00B13921 /* CoreDataError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataError.swift; sourceTree = ""; }; F866F69E296040A8002E8F88 /* ApplicationSettings+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ApplicationSettings+CoreDataClass.swift"; sourceTree = ""; }; F866F69F296040A8002E8F88 /* ApplicationSettings+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ApplicationSettings+CoreDataProperties.swift"; sourceTree = ""; }; @@ -285,6 +302,10 @@ F86B7220296C49A300EE59EC /* EmptyButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyButtonStyle.swift; sourceTree = ""; }; F86BC9E829EBBB66009415EC /* ImageSaver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageSaver.swift; sourceTree = ""; }; F86BC9EA29EBDA2E009415EC /* ActivityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityView.swift; sourceTree = ""; }; + F8705A7629FF7ABD00DA818A /* QRCodeSmallWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeSmallWidgetView.swift; sourceTree = ""; }; + F8705A7829FF7CCB00DA818A /* QRCodeMediumWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeMediumWidgetView.swift; sourceTree = ""; }; + F8705A7A29FF872F00DA818A /* QRCodeGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeGenerator.swift; sourceTree = ""; }; + F8705A7D29FF880600DA818A /* FileFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileFetcher.swift; sourceTree = ""; }; F870EE5129F1645C00A2D43B /* MainNavigationOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainNavigationOptions.swift; sourceTree = ""; }; F871F21C29EF0D7000A351EF /* NavigationMenuItemDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationMenuItemDetails.swift; sourceTree = ""; }; F871F21F29EF0FEC00A351EF /* Vernissage-011.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Vernissage-011.xcdatamodel"; sourceTree = ""; }; @@ -370,9 +391,9 @@ F8EF3C8B29FC3A5F00CBFF7C /* Vernissage-012.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Vernissage-012.xcdatamodel"; sourceTree = ""; }; F8F6E44329BC5CAA0004795E /* VernissageWidgetExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = VernissageWidgetExtension.entitlements; sourceTree = ""; }; F8F6E44429BC5CC50004795E /* Vernissage.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Vernissage.entitlements; sourceTree = ""; }; - F8F6E44629BCC0DC0004795E /* SmallWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmallWidgetView.swift; sourceTree = ""; }; - F8F6E44829BCC0F00004795E /* MediumWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediumWidgetView.swift; sourceTree = ""; }; - F8F6E44A29BCC0FF0004795E /* LargeWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LargeWidgetView.swift; sourceTree = ""; }; + F8F6E44629BCC0DC0004795E /* PhotoSmallWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoSmallWidgetView.swift; sourceTree = ""; }; + F8F6E44829BCC0F00004795E /* PhotoMediumWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoMediumWidgetView.swift; sourceTree = ""; }; + F8F6E44A29BCC0FF0004795E /* PhotoLargeWidgetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoLargeWidgetView.swift; sourceTree = ""; }; F8F6E45029BCE9190004795E /* UIImage+Resize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Resize.swift"; sourceTree = ""; }; F8FB8AB929EB2ED400342C04 /* NavigationMenuButtons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationMenuButtons.swift; sourceTree = ""; }; F8FFBD4929E99BEE0047EE80 /* Vernissage-009.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Vernissage-009.xcdatamodel"; sourceTree = ""; }; @@ -383,6 +404,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + F84625FB29FE393B002D3AF4 /* QRCode in Frameworks */, F864F76129BB91B400B13921 /* SwiftUI.framework in Frameworks */, F864F77A29BB94A800B13921 /* PixelfedKit in Frameworks */, F864F75F29BB91B400B13921 /* WidgetKit.framework in Frameworks */, @@ -557,6 +579,59 @@ path = Widgets; sourceTree = ""; }; + F84625EE29FE2ABA002D3AF4 /* PhotoWidget */ = { + isa = PBXGroup; + children = ( + F84625F629FE2C18002D3AF4 /* Service */, + F84625EF29FE2AC5002D3AF4 /* Views */, + F864F77729BB930000B13921 /* PhotoWidgetEntry.swift */, + F864F77329BB929A00B13921 /* PhotoProvider.swift */, + F864F77129BB924D00B13921 /* PhotoWidgetEntryView.swift */, + F864F76529BB91B400B13921 /* PhotoWidget.swift */, + ); + path = PhotoWidget; + sourceTree = ""; + }; + F84625EF29FE2AC5002D3AF4 /* Views */ = { + isa = PBXGroup; + children = ( + F8F6E44629BCC0DC0004795E /* PhotoSmallWidgetView.swift */, + F8F6E44829BCC0F00004795E /* PhotoMediumWidgetView.swift */, + F8F6E44A29BCC0FF0004795E /* PhotoLargeWidgetView.swift */, + ); + path = Views; + sourceTree = ""; + }; + F84625F029FE2B40002D3AF4 /* QRCodeWidget */ = { + isa = PBXGroup; + children = ( + F84625F529FE2C0D002D3AF4 /* Service */, + F8F6E44529BCC0C90004795E /* Views */, + F84625E829FE2788002D3AF4 /* QRCodeWidget.swift */, + F84625EA29FE28D4002D3AF4 /* QRCodeWidgetEntryView.swift */, + F84625F129FE2B6B002D3AF4 /* QRCodeWidgetEntry.swift */, + F84625F329FE2BF9002D3AF4 /* QRCodeProvider.swift */, + ); + path = QRCodeWidget; + sourceTree = ""; + }; + F84625F529FE2C0D002D3AF4 /* Service */ = { + isa = PBXGroup; + children = ( + F84625F729FE2C2F002D3AF4 /* AccountFetcher.swift */, + F8705A7A29FF872F00DA818A /* QRCodeGenerator.swift */, + ); + path = Service; + sourceTree = ""; + }; + F84625F629FE2C18002D3AF4 /* Service */ = { + isa = PBXGroup; + children = ( + F864F77B29BB982100B13921 /* StatusFetcher.swift */, + ); + path = Service; + sourceTree = ""; + }; F858906729E1CC2900D4BDED /* Extensions */ = { isa = PBXGroup; children = ( @@ -570,14 +645,11 @@ children = ( F8F6E44329BC5CAA0004795E /* VernissageWidgetExtension.entitlements */, F864F76929BB91B600B13921 /* Info.plist */, + F8705A7C29FF87EE00DA818A /* SharedServices */, + F84625F029FE2B40002D3AF4 /* QRCodeWidget */, + F84625EE29FE2ABA002D3AF4 /* PhotoWidget */, F8F6E44F29BCE9030004795E /* Extensions */, - F8F6E44529BCC0C90004795E /* Views */, - F864F77B29BB982100B13921 /* ImageFetcher.swift */, - F864F77729BB930000B13921 /* WidgetEntry.swift */, - F864F77329BB929A00B13921 /* Provider.swift */, F864F76329BB91B400B13921 /* VernissageWidgetBundle.swift */, - F864F77129BB924D00B13921 /* VernissageWidgetEntryView.swift */, - F864F76529BB91B400B13921 /* VernissageWidget.swift */, F864F76729BB91B600B13921 /* Assets.xcassets */, ); path = VernissageWidget; @@ -591,6 +663,14 @@ path = Styles; sourceTree = ""; }; + F8705A7C29FF87EE00DA818A /* SharedServices */ = { + isa = PBXGroup; + children = ( + F8705A7D29FF880600DA818A /* FileFetcher.swift */, + ); + path = SharedServices; + sourceTree = ""; + }; F878841B29A49493003CFAD2 /* Subviews */ = { isa = PBXGroup; children = ( @@ -802,9 +882,9 @@ F8F6E44529BCC0C90004795E /* Views */ = { isa = PBXGroup; children = ( - F8F6E44629BCC0DC0004795E /* SmallWidgetView.swift */, - F8F6E44829BCC0F00004795E /* MediumWidgetView.swift */, - F8F6E44A29BCC0FF0004795E /* LargeWidgetView.swift */, + F84625EC29FE295B002D3AF4 /* QRCodeLargeWidgetView.swift */, + F8705A7629FF7ABD00DA818A /* QRCodeSmallWidgetView.swift */, + F8705A7829FF7CCB00DA818A /* QRCodeMediumWidgetView.swift */, ); path = Views; sourceTree = ""; @@ -837,6 +917,7 @@ packageProductDependencies = ( F864F77929BB94A800B13921 /* PixelfedKit */, F88BC52E29E04C5F00CE6141 /* EnvironmentKit */, + F84625FA29FE393B002D3AF4 /* QRCode */, ); productName = VernissageWidgetExtension; productReference = F864F75D29BB91B400B13921 /* VernissageWidgetExtension.appex */; @@ -934,6 +1015,7 @@ F8210DD32966BB7E001D9973 /* XCRemoteSwiftPackageReference "Nuke" */, F88E4D4B297EA4290057491A /* XCRemoteSwiftPackageReference "EmojiText" */, F89B5CBE29D019B600549F2F /* XCRemoteSwiftPackageReference "HTMLString" */, + F84625F929FE393B002D3AF4 /* XCRemoteSwiftPackageReference "QRCode" */, ); productRefGroup = F88C2469295C37B80006098B /* Products */; projectDirPath = ""; @@ -1005,16 +1087,18 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F864F77829BB930000B13921 /* WidgetEntry.swift in Sources */, - F864F77529BB92CE00B13921 /* Provider.swift in Sources */, - F864F77629BB92CE00B13921 /* VernissageWidgetEntryView.swift in Sources */, - F864F77C29BB982100B13921 /* ImageFetcher.swift in Sources */, + F864F77829BB930000B13921 /* PhotoWidgetEntry.swift in Sources */, + F864F77529BB92CE00B13921 /* PhotoProvider.swift in Sources */, + F864F77629BB92CE00B13921 /* PhotoWidgetEntryView.swift in Sources */, + F8705A7729FF7ABD00DA818A /* QRCodeSmallWidgetView.swift in Sources */, + F864F77C29BB982100B13921 /* StatusFetcher.swift in Sources */, + F84625ED29FE295B002D3AF4 /* QRCodeLargeWidgetView.swift in Sources */, F8F6E44229BC58F20004795E /* Vernissage.xcdatamodeld in Sources */, - F8F6E44C29BCC1F70004795E /* SmallWidgetView.swift in Sources */, - F864F76629BB91B400B13921 /* VernissageWidget.swift in Sources */, - F8F6E44D29BCC1F90004795E /* MediumWidgetView.swift in Sources */, + F8F6E44C29BCC1F70004795E /* PhotoSmallWidgetView.swift in Sources */, + F864F76629BB91B400B13921 /* PhotoWidget.swift in Sources */, + F8F6E44D29BCC1F90004795E /* PhotoMediumWidgetView.swift in Sources */, F815F60C29E49CF20044566B /* Avatar.swift in Sources */, - F8F6E44E29BCC1FB0004795E /* LargeWidgetView.swift in Sources */, + F8F6E44E29BCC1FB0004795E /* PhotoLargeWidgetView.swift in Sources */, F864F76429BB91B400B13921 /* VernissageWidgetBundle.swift in Sources */, F864F77D29BB9A4600B13921 /* AttachmentData+CoreDataClass.swift in Sources */, F864F7A629BBA01D00B13921 /* CoreDataError.swift in Sources */, @@ -1023,14 +1107,22 @@ F864F78329BB9A6800B13921 /* StatusData+CoreDataProperties.swift in Sources */, F864F78429BB9A6E00B13921 /* ApplicationSettings+CoreDataClass.swift in Sources */, F864F78629BB9A7400B13921 /* AccountData+CoreDataClass.swift in Sources */, + F8705A7B29FF872F00DA818A /* QRCodeGenerator.swift in Sources */, + F8705A7E29FF880600DA818A /* FileFetcher.swift in Sources */, F864F78529BB9A7100B13921 /* ApplicationSettings+CoreDataProperties.swift in Sources */, + F84625E929FE2788002D3AF4 /* QRCodeWidget.swift in Sources */, F864F78729BB9A7700B13921 /* AccountData+CoreDataProperties.swift in Sources */, F864F78829BB9A7B00B13921 /* CoreDataHandler.swift in Sources */, F8F6E45129BCE9190004795E /* UIImage+Resize.swift in Sources */, F864F78929BB9A7D00B13921 /* AccountDataHandler.swift in Sources */, F864F78A29BB9A8000B13921 /* ApplicationSettingsHandler.swift in Sources */, + F84625F229FE2B6B002D3AF4 /* QRCodeWidgetEntry.swift in Sources */, + F84625EB29FE28D4002D3AF4 /* QRCodeWidgetEntryView.swift in Sources */, F864F78C29BB9A8500B13921 /* AttachmentDataHandler.swift in Sources */, + F84625F829FE2C2F002D3AF4 /* AccountFetcher.swift in Sources */, + F84625F429FE2BF9002D3AF4 /* QRCodeProvider.swift in Sources */, F864F78B29BB9A8300B13921 /* StatusDataHandler.swift in Sources */, + F8705A7929FF7CCB00DA818A /* QRCodeMediumWidgetView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1561,6 +1653,14 @@ minimumVersion = 12.0.0; }; }; + F84625F929FE393B002D3AF4 /* XCRemoteSwiftPackageReference "QRCode" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/dmrschmidt/QRCode"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 1.0.0; + }; + }; F88E4D4B297EA4290057491A /* XCRemoteSwiftPackageReference "EmojiText" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/divadretlaw/EmojiText"; @@ -1595,6 +1695,11 @@ package = F8210DD32966BB7E001D9973 /* XCRemoteSwiftPackageReference "Nuke" */; productName = NukeUI; }; + F84625FA29FE393B002D3AF4 /* QRCode */ = { + isa = XCSwiftPackageProductDependency; + package = F84625F929FE393B002D3AF4 /* XCRemoteSwiftPackageReference "QRCode" */; + productName = QRCode; + }; F864F77929BB94A800B13921 /* PixelfedKit */ = { isa = XCSwiftPackageProductDependency; productName = PixelfedKit; diff --git a/Vernissage/SceneDelegate.swift b/Vernissage/SceneDelegate.swift index d933456..d1b7c55 100644 --- a/Vernissage/SceneDelegate.swift +++ b/Vernissage/SceneDelegate.swift @@ -22,6 +22,11 @@ class SceneDelegate: NSObject, UISceneDelegate { if statusId.isEmpty == false { ApplicationState.shared.showStatusId = statusId } + } else if url.host == AppConstants.accountCallbackPart { + let accountId = url.string.replacingOccurrences(of: "\(AppConstants.accountUri)/", with: "") + if accountId.isEmpty == false { + ApplicationState.shared.showAccountId = accountId + } } } } diff --git a/Vernissage/VernissageApp.swift b/Vernissage/VernissageApp.swift index eee05a4..d4e63c8 100644 --- a/Vernissage/VernissageApp.swift +++ b/Vernissage/VernissageApp.swift @@ -95,6 +95,12 @@ struct VernissageApp: App { self.applicationState.showStatusId = nil } } + .onChange(of: applicationState.showAccountId) { newValue in + if let accountId = newValue { + self.routerPath.navigate(to: .userProfile(accountId: accountId, accountDisplayName: nil, accountUserName: "")) + self.applicationState.showAccountId = nil + } + } } } diff --git a/Vernissage/Views/ThirdPartyView.swift b/Vernissage/Views/ThirdPartyView.swift index 197bcb1..390278f 100644 --- a/Vernissage/Views/ThirdPartyView.swift +++ b/Vernissage/Views/ThirdPartyView.swift @@ -90,6 +90,16 @@ struct ThirdPartyView: View { } .font(.footnote) } + + Section("QR codes") { + VStack(alignment: .leading) { + Link("https://github.com/dmrschmidt/QRCode", + destination: URL(string: "https://github.com/dmrschmidt/QRCode")!) + .padding(.bottom, 4) + Text("A simple QR code image generator to use in your apps, written in Swift 5.") + } + .font(.footnote) + } } .navigationTitle("thirdParty.navigationBar.title") .navigationBarTitleDisplayMode(.inline) diff --git a/VernissageWidget/Assets.xcassets/Pixelfed.imageset/Contents.json b/VernissageWidget/Assets.xcassets/Pixelfed.imageset/Contents.json new file mode 100644 index 0000000..5d40392 --- /dev/null +++ b/VernissageWidget/Assets.xcassets/Pixelfed.imageset/Contents.json @@ -0,0 +1,56 @@ +{ + "images" : [ + { + "filename" : "PixelfedBlack.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "PixelfedWhite.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "PixelfedBlack@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "PixelfedWhite@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "PixelfedBlack@3x.png", + "idiom" : "universal", + "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "PixelfedWhite@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedBlack.png b/VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedBlack.png new file mode 100644 index 0000000000000000000000000000000000000000..7df72ad40823b102b0ec2c9e1ebebb29028da7f0 GIT binary patch literal 6718 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 TOvA%pfBRg~HiFk)c8vOeB$NHB literal 0 HcmV?d00001 diff --git a/VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedBlack@2x.png b/VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedBlack@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9bf17361ae7f4a98e117cec4f2b439c2e841947a GIT binary patch literal 13881 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 BEB^oh literal 0 HcmV?d00001 diff --git a/VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedBlack@3x.png b/VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedBlack@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e0886c566f8d7cacc086c3f4e8406d717ce9116a GIT binary patch literal 23163 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 PzcT~tJ$=}q;}H8l)4T|M literal 0 HcmV?d00001 diff --git a/VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedWhite.png b/VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedWhite.png new file mode 100644 index 0000000000000000000000000000000000000000..40efd4e973fcdb2772e33662daf62262e231a347 GIT binary patch literal 6633 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 literal 0 HcmV?d00001 diff --git a/VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedWhite@2x.png b/VernissageWidget/Assets.xcassets/Pixelfed.imageset/PixelfedWhite@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..94223b8726f55655ad4f2b2e7529d8bcea95c91d GIT binary patch literal 13713 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 danZ2_{vT{VC{0#wTrUp- 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¥Wx-HUrSr3^c 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 Q{Sgc=$~bxi{JLcFSoSdKOc9=DrT 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 literal 0 HcmV?d00001 diff --git a/VernissageWidget/ImageFetcher.swift b/VernissageWidget/ImageFetcher.swift deleted file mode 100644 index 787d12c..0000000 --- a/VernissageWidget/ImageFetcher.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// https://mczachurski.dev -// Copyright © 2023 Marcin Czachurski and the repository contributors. -// Licensed under the Apache License 2.0. -// - -import Foundation -import SwiftUI -import PixelfedKit - -public class ImageFetcher { - public static let shared = ImageFetcher() - private init() { } - - private let maxImageSize = 1000.0 - - func fetchWidgetEntries(length: Int = 8) async throws -> [WidgetEntry] { - let defaultSettings = ApplicationSettingsHandler.shared.get() - guard let accountId = defaultSettings.currentAccount else { - return [self.placeholder()] - } - - guard let account = AccountDataHandler.shared.getAccountData(accountId: accountId) else { - return [self.placeholder()] - } - - guard let accessToken = account.accessToken else { - return [self.placeholder()] - } - - let client = PixelfedClient(baseURL: account.serverUrl).getAuthenticated(token: accessToken) - let statuses = try await client.getHomeTimeline(limit: 20) - var widgetEntries: [WidgetEntry] = [] - - for status in statuses { - // When we have images for next hour we can skip. - if widgetEntries.count == length { - break - } - - // We have to skip sensitive (we cannot show them on iPhone home screen). - if status.sensitive { - continue - } - - guard let imageAttachment = status.mediaAttachments.first(where: { $0.type == .image }) else { - continue - } - - let uiImage = await self.getImage(url: imageAttachment.url) - let uiAvatar = await self.getImage(url: status.account.avatar) - - guard let uiImage, let uiAvatar else { - continue - } - - let displayDate = Calendar.current.date(byAdding: .minute, value: widgetEntries.count * 20, to: Date()) - - widgetEntries.append(WidgetEntry(date: displayDate ?? Date(), - image: uiImage, - avatar: uiAvatar, - displayName: status.account.displayNameWithoutEmojis, - statusId: status.id)) - } - - if widgetEntries.isEmpty { - widgetEntries.append(self.placeholder()) - } - - return widgetEntries.shuffled() - } - - func placeholder() -> WidgetEntry { - WidgetEntry(date: Date(), image: nil, avatar: nil, displayName: "Caroline Rick", statusId: "") - } - - private func getImage(url: URL?) async -> UIImage? { - guard let url else { - return nil - } - - do { - let (data, response) = try await URLSession.shared.data(from: url) - - guard (response as? HTTPURLResponse)?.status?.responseType == .success else { - return nil - } - - guard let uiImage = UIImage(data: data) else { - return nil - } - - if uiImage.size.width < self.maxImageSize && uiImage.size.height < self.maxImageSize { - return uiImage - } - - if uiImage.size.width > uiImage.size.height { - return uiImage.resized(toWidth: self.maxImageSize) - } else { - return uiImage.resized(toHeight: self.maxImageSize) - } - } catch { - return nil - } - } -} diff --git a/VernissageWidget/Provider.swift b/VernissageWidget/PhotoWidget/PhotoProvider.swift similarity index 66% rename from VernissageWidget/Provider.swift rename to VernissageWidget/PhotoWidget/PhotoProvider.swift index b90ed14..e284c30 100644 --- a/VernissageWidget/Provider.swift +++ b/VernissageWidget/PhotoWidget/PhotoProvider.swift @@ -8,19 +8,19 @@ import WidgetKit import SwiftUI import Intents -struct Provider: TimelineProvider { - typealias Entry = WidgetEntry +struct PhotoProvider: TimelineProvider { + typealias Entry = PhotoWidgetEntry - func placeholder(in context: Context) -> WidgetEntry { - ImageFetcher.shared.placeholder() + func placeholder(in context: Context) -> PhotoWidgetEntry { + StatusFetcher.shared.placeholder() } - func getSnapshot(in context: Context, completion: @escaping (WidgetEntry) -> Void) { + func getSnapshot(in context: Context, completion: @escaping (PhotoWidgetEntry) -> Void) { Task { if let widgetEntry = await self.getWidgetEntries(length: 1).first { completion(widgetEntry) } else { - let entry = ImageFetcher.shared.placeholder() + let entry = StatusFetcher.shared.placeholder() completion(entry) } } @@ -37,11 +37,11 @@ struct Provider: TimelineProvider { } } - func getWidgetEntries(length: Int = 3) async -> [WidgetEntry] { + func getWidgetEntries(length: Int = 3) async -> [PhotoWidgetEntry] { do { - return try await ImageFetcher.shared.fetchWidgetEntries(length: length) + return try await StatusFetcher.shared.fetchWidgetEntries(length: length) } catch { - return [ImageFetcher.shared.placeholder()] + return [StatusFetcher.shared.placeholder()] } } } diff --git a/VernissageWidget/VernissageWidget.swift b/VernissageWidget/PhotoWidget/PhotoWidget.swift similarity index 66% rename from VernissageWidget/VernissageWidget.swift rename to VernissageWidget/PhotoWidget/PhotoWidget.swift index 4dba6ef..310ddea 100644 --- a/VernissageWidget/VernissageWidget.swift +++ b/VernissageWidget/PhotoWidget/PhotoWidget.swift @@ -7,15 +7,15 @@ import WidgetKit import SwiftUI -struct VernissageWidget: Widget { +struct PhotoWidget: Widget { let kind: String = "VernissageWidget" var body: some WidgetConfiguration { - StaticConfiguration(kind: kind, provider: Provider()) { entry in - VernissageWidgetEntryView(entry: entry) + StaticConfiguration(kind: kind, provider: PhotoProvider()) { entry in + PhotoWidgetEntryView(entry: entry) } .configurationDisplayName("Vernissage") - .description("widget.title.description") + .description("widget.title.photoDescription") .supportedFamilies([.systemSmall, .systemMedium, .systemLarge]) } } diff --git a/VernissageWidget/WidgetEntry.swift b/VernissageWidget/PhotoWidget/PhotoWidgetEntry.swift similarity index 88% rename from VernissageWidget/WidgetEntry.swift rename to VernissageWidget/PhotoWidget/PhotoWidgetEntry.swift index fdb42dc..eb5fdb4 100644 --- a/VernissageWidget/WidgetEntry.swift +++ b/VernissageWidget/PhotoWidget/PhotoWidgetEntry.swift @@ -7,7 +7,7 @@ import WidgetKit import SwiftUI -struct WidgetEntry: TimelineEntry { +struct PhotoWidgetEntry: TimelineEntry { let date: Date let image: UIImage? let avatar: UIImage? diff --git a/VernissageWidget/VernissageWidgetEntryView.swift b/VernissageWidget/PhotoWidget/PhotoWidgetEntryView.swift similarity index 57% rename from VernissageWidget/VernissageWidgetEntryView.swift rename to VernissageWidget/PhotoWidget/PhotoWidgetEntryView.swift index a505082..512986e 100644 --- a/VernissageWidget/VernissageWidgetEntryView.swift +++ b/VernissageWidget/PhotoWidget/PhotoWidgetEntryView.swift @@ -7,16 +7,16 @@ import WidgetKit import SwiftUI -struct VernissageWidgetEntryView: View { +struct PhotoWidgetEntryView: View { @Environment(\.widgetFamily) var family: WidgetFamily - var entry: Provider.Entry + var entry: PhotoProvider.Entry var body: some View { switch family { - case .systemSmall: SmallWidgetView(entry: entry) - case .systemMedium: MediumWidgetView(entry: entry) - case .systemLarge: LargeWidgetView(entry: entry) + case .systemSmall: PhotoSmallWidgetView(entry: entry) + case .systemMedium: PhotoMediumWidgetView(entry: entry) + case .systemLarge: PhotoLargeWidgetView(entry: entry) default: Text("Not supported") } } diff --git a/VernissageWidget/PhotoWidget/Service/StatusFetcher.swift b/VernissageWidget/PhotoWidget/Service/StatusFetcher.swift new file mode 100644 index 0000000..b42057c --- /dev/null +++ b/VernissageWidget/PhotoWidget/Service/StatusFetcher.swift @@ -0,0 +1,74 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import Foundation +import SwiftUI +import PixelfedKit + +public class StatusFetcher { + public static let shared = StatusFetcher() + private init() { } + + func fetchWidgetEntries(length: Int = 8) async throws -> [PhotoWidgetEntry] { + let defaultSettings = ApplicationSettingsHandler.shared.get() + guard let accountId = defaultSettings.currentAccount else { + return [self.placeholder()] + } + + guard let account = AccountDataHandler.shared.getAccountData(accountId: accountId) else { + return [self.placeholder()] + } + + guard let accessToken = account.accessToken else { + return [self.placeholder()] + } + + let client = PixelfedClient(baseURL: account.serverUrl).getAuthenticated(token: accessToken) + let statuses = try await client.getHomeTimeline(limit: 20) + var widgetEntries: [PhotoWidgetEntry] = [] + + for status in statuses { + // When we have images for next hour we can skip. + if widgetEntries.count == length { + break + } + + // We have to skip sensitive (we cannot show them on iPhone home screen). + if status.sensitive { + continue + } + + guard let imageAttachment = status.mediaAttachments.first(where: { $0.type == .image }) else { + continue + } + + let uiImage = await FileFetcher.shared.getImage(url: imageAttachment.url) + let uiAvatar = await FileFetcher.shared.getImage(url: status.account.avatar) + + guard let uiImage, let uiAvatar else { + continue + } + + let displayDate = Calendar.current.date(byAdding: .minute, value: widgetEntries.count * 20, to: Date()) + + widgetEntries.append(PhotoWidgetEntry(date: displayDate ?? Date(), + image: uiImage, + avatar: uiAvatar, + displayName: status.account.displayNameWithoutEmojis, + statusId: status.id)) + } + + if widgetEntries.isEmpty { + widgetEntries.append(self.placeholder()) + } + + return widgetEntries.shuffled() + } + + func placeholder() -> PhotoWidgetEntry { + PhotoWidgetEntry(date: Date(), image: nil, avatar: nil, displayName: "Caroline Rick", statusId: "") + } +} diff --git a/VernissageWidget/Views/LargeWidgetView.swift b/VernissageWidget/PhotoWidget/Views/PhotoLargeWidgetView.swift similarity index 95% rename from VernissageWidget/Views/LargeWidgetView.swift rename to VernissageWidget/PhotoWidget/Views/PhotoLargeWidgetView.swift index a58c89d..c45a2f6 100644 --- a/VernissageWidget/Views/LargeWidgetView.swift +++ b/VernissageWidget/PhotoWidget/Views/PhotoLargeWidgetView.swift @@ -8,8 +8,8 @@ import SwiftUI import WidgetKit import EnvironmentKit -struct LargeWidgetView: View { - var entry: Provider.Entry +struct PhotoLargeWidgetView: View { + var entry: PhotoProvider.Entry var body: some View { if let uiImage = entry.image, let uiAvatar = entry.avatar { diff --git a/VernissageWidget/Views/MediumWidgetView.swift b/VernissageWidget/PhotoWidget/Views/PhotoMediumWidgetView.swift similarity index 94% rename from VernissageWidget/Views/MediumWidgetView.swift rename to VernissageWidget/PhotoWidget/Views/PhotoMediumWidgetView.swift index 1eefeb6..e498839 100644 --- a/VernissageWidget/Views/MediumWidgetView.swift +++ b/VernissageWidget/PhotoWidget/Views/PhotoMediumWidgetView.swift @@ -8,8 +8,8 @@ import SwiftUI import WidgetKit import EnvironmentKit -struct MediumWidgetView: View { - var entry: Provider.Entry +struct PhotoMediumWidgetView: View { + var entry: PhotoProvider.Entry var body: some View { if let uiImage = entry.image, let uiAvatar = entry.avatar { diff --git a/VernissageWidget/Views/SmallWidgetView.swift b/VernissageWidget/PhotoWidget/Views/PhotoSmallWidgetView.swift similarity index 94% rename from VernissageWidget/Views/SmallWidgetView.swift rename to VernissageWidget/PhotoWidget/Views/PhotoSmallWidgetView.swift index be1dd83..2cb195e 100644 --- a/VernissageWidget/Views/SmallWidgetView.swift +++ b/VernissageWidget/PhotoWidget/Views/PhotoSmallWidgetView.swift @@ -8,8 +8,8 @@ import SwiftUI import WidgetKit import EnvironmentKit -struct SmallWidgetView: View { - var entry: Provider.Entry +struct PhotoSmallWidgetView: View { + var entry: PhotoProvider.Entry var body: some View { if let uiImage = entry.image, let uiAvatar = entry.avatar { diff --git a/VernissageWidget/QRCodeWidget/QRCodeProvider.swift b/VernissageWidget/QRCodeWidget/QRCodeProvider.swift new file mode 100644 index 0000000..98dfdd2 --- /dev/null +++ b/VernissageWidget/QRCodeWidget/QRCodeProvider.swift @@ -0,0 +1,47 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import WidgetKit +import SwiftUI +import Intents + +struct QRCodeProvider: TimelineProvider { + typealias Entry = QRCodeWidgetEntry + + func placeholder(in context: Context) -> QRCodeWidgetEntry { + AccountFetcher.shared.placeholder() + } + + func getSnapshot(in context: Context, completion: @escaping (QRCodeWidgetEntry) -> Void) { + Task { + if let widgetEntry = await self.getWidgetEntry().first { + completion(widgetEntry) + } else { + let entry = AccountFetcher.shared.placeholder() + completion(entry) + } + } + } + + func getTimeline(in context: Context, completion: @escaping (Timeline) -> Void) { + Task { + let currentDate = Date() + let widgetEntries = await self.getWidgetEntry() + + let nextUpdateDate = Calendar.current.date(byAdding: .day, value: 1, to: currentDate)! + let timeline = Timeline(entries: widgetEntries, policy: .after(nextUpdateDate)) + completion(timeline) + } + } + + func getWidgetEntry() async -> [QRCodeWidgetEntry] { + do { + return try await AccountFetcher.shared.fetchWidgetEntry() + } catch { + return [AccountFetcher.shared.placeholder()] + } + } +} diff --git a/VernissageWidget/QRCodeWidget/QRCodeWidget.swift b/VernissageWidget/QRCodeWidget/QRCodeWidget.swift new file mode 100644 index 0000000..ec6cb02 --- /dev/null +++ b/VernissageWidget/QRCodeWidget/QRCodeWidget.swift @@ -0,0 +1,21 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import WidgetKit +import SwiftUI + +struct QRCodeWidget: Widget { + let kind: String = "QRCodeWidget" + + var body: some WidgetConfiguration { + StaticConfiguration(kind: kind, provider: QRCodeProvider()) { entry in + QRCodeWidgetEntryView(entry: entry) + } + .configurationDisplayName("Vernissage") + .description("widget.title.qrCodeDescription") + .supportedFamilies([.systemSmall, .systemMedium, .systemLarge]) + } +} diff --git a/VernissageWidget/QRCodeWidget/QRCodeWidgetEntry.swift b/VernissageWidget/QRCodeWidget/QRCodeWidgetEntry.swift new file mode 100644 index 0000000..3fed223 --- /dev/null +++ b/VernissageWidget/QRCodeWidget/QRCodeWidgetEntry.swift @@ -0,0 +1,18 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import WidgetKit +import SwiftUI + +struct QRCodeWidgetEntry: TimelineEntry { + let date: Date + let accountId: String + let avatar: UIImage? + let displayName: String? + let profileUrl: URL? + let avatarUrl: URL? + let portfolioUrl: URL? +} diff --git a/VernissageWidget/QRCodeWidget/QRCodeWidgetEntryView.swift b/VernissageWidget/QRCodeWidget/QRCodeWidgetEntryView.swift new file mode 100644 index 0000000..ffaf457 --- /dev/null +++ b/VernissageWidget/QRCodeWidget/QRCodeWidgetEntryView.swift @@ -0,0 +1,23 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import WidgetKit +import SwiftUI + +struct QRCodeWidgetEntryView: View { + @Environment(\.widgetFamily) var family: WidgetFamily + + var entry: QRCodeProvider.Entry + + var body: some View { + switch family { + case .systemSmall: QRCodeSmallWidgetView(entry: entry) + case .systemMedium: QRCodeMediumWidgetView(entry: entry) + case .systemLarge: QRCodeLargeWidgetView(entry: entry) + default: Text("Not supported") + } + } +} diff --git a/VernissageWidget/QRCodeWidget/Service/AccountFetcher.swift b/VernissageWidget/QRCodeWidget/Service/AccountFetcher.swift new file mode 100644 index 0000000..05e9849 --- /dev/null +++ b/VernissageWidget/QRCodeWidget/Service/AccountFetcher.swift @@ -0,0 +1,47 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import Foundation +import SwiftUI +import PixelfedKit + +public class AccountFetcher { + public static let shared = AccountFetcher() + private init() { } + + func fetchWidgetEntry() async throws -> [QRCodeWidgetEntry] { + let defaultSettings = ApplicationSettingsHandler.shared.get() + guard let accountId = defaultSettings.currentAccount else { + return [self.placeholder()] + } + + guard let account = AccountDataHandler.shared.getAccountData(accountId: accountId) else { + return [self.placeholder()] + } + + let uiAvatar = await FileFetcher.shared.getImage(url: account.avatar) + + return [ + QRCodeWidgetEntry(date: Date(), + accountId: accountId, + avatar: uiAvatar, + displayName: account.displayName, + profileUrl: account.url, + avatarUrl: account.avatar, + portfolioUrl: nil) + ] + } + + func placeholder() -> QRCodeWidgetEntry { + QRCodeWidgetEntry(date: Date(), + accountId: "", + avatar: nil, + displayName: "Caroline Rick", + profileUrl: URL(string: "https://pixelfed.org"), + avatarUrl: nil, + portfolioUrl: nil) + } +} diff --git a/VernissageWidget/QRCodeWidget/Service/QRCodeGenerator.swift b/VernissageWidget/QRCodeWidget/Service/QRCodeGenerator.swift new file mode 100644 index 0000000..bbfb27b --- /dev/null +++ b/VernissageWidget/QRCodeWidget/Service/QRCodeGenerator.swift @@ -0,0 +1,24 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import Foundation +import SwiftUI +import QRCode + +public class QRCodeGenerator { + public static let shared = QRCodeGenerator() + private init() { } + + func generateQRCode(from string: String, scheme: ColorScheme) -> UIImage? { + let qrCode = QRCode(string: string, + color: scheme == .light ? Color.black.toUIColor() : Color.white.toUIColor(), + backgroundColor: scheme == .light ? Color.white.toUIColor() : Color.black.toUIColor(), + size: CGSize(width: 150, height: 150), + scale: 4.0, + inputCorrection: .medium) + return try? qrCode?.image() + } +} diff --git a/VernissageWidget/QRCodeWidget/Views/QRCodeLargeWidgetView.swift b/VernissageWidget/QRCodeWidget/Views/QRCodeLargeWidgetView.swift new file mode 100644 index 0000000..5e0d890 --- /dev/null +++ b/VernissageWidget/QRCodeWidget/Views/QRCodeLargeWidgetView.swift @@ -0,0 +1,87 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import SwiftUI +import WidgetKit +import EnvironmentKit + +struct QRCodeLargeWidgetView: View { + @Environment(\.colorScheme) var colorScheme + + var entry: QRCodeProvider.Entry + + private let qrCodeLightImage: UIImage? + private let qrCodeDarkImage: UIImage? + + init(entry: QRCodeProvider.Entry) { + self.entry = entry + + if let profileUrl = entry.profileUrl { + self.qrCodeLightImage = QRCodeGenerator.shared.generateQRCode(from: profileUrl.absoluteString, scheme: .light) + self.qrCodeDarkImage = QRCodeGenerator.shared.generateQRCode(from: profileUrl.absoluteString, scheme: .dark) + } else { + self.qrCodeLightImage = QRCodeGenerator.shared.generateQRCode(from: "https://pixelfed.org", scheme: .light) + self.qrCodeDarkImage = QRCodeGenerator.shared.generateQRCode(from: "https://pixelfed.org", scheme: .dark) + } + } + + var body: some View { + if let uiAvatar = entry.avatar, let qrCodeImage { + self.getWidgetBody(uiAvatar: Image(uiImage: uiAvatar), uiQRCode: Image(uiImage: qrCodeImage)) + } else { + self.getWidgetBody(uiAvatar: Image("Avatar"), uiQRCode: Image("QRCode")) + .unredacted() + } + } + + var qrCodeImage: UIImage? { + colorScheme == .dark ? qrCodeDarkImage : qrCodeLightImage + } + + @ViewBuilder + private func getWidgetBody(uiAvatar: Image, uiQRCode: Image) -> some View { + VStack(spacing: 0) { + HStack(alignment: .center) { + uiAvatar + .avatar(size: 32) + + Text(entry.displayName ?? "") + .font(.system(size: 18)) + .foregroundColor(Color.primary) + .fontWeight(.semibold) + + Spacer() + } + .padding(.leading, 6) + .padding(.bottom, 4) + + uiQRCode + .resizable() + .widgetURL(URL(string: "\(AppConstants.accountUri)/\(entry.accountId)")) + + if let profileUrl = entry.profileUrl { + HStack { + Text(profileUrl.absoluteString) + .font(.system(size: 10)) + .foregroundColor(Color.primary.opacity(0.6)) + Spacer() + } + .offset(y: -2) + .padding(.leading, 8) + } + + HStack { + Spacer() + Image("Pixelfed") + .resizable() + .scaledToFit() + .frame(height: 32) + .offset(y: -8) + } + } + .padding([.leading, .trailing, .top], 24) + } +} diff --git a/VernissageWidget/QRCodeWidget/Views/QRCodeMediumWidgetView.swift b/VernissageWidget/QRCodeWidget/Views/QRCodeMediumWidgetView.swift new file mode 100644 index 0000000..c70ecfd --- /dev/null +++ b/VernissageWidget/QRCodeWidget/Views/QRCodeMediumWidgetView.swift @@ -0,0 +1,72 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import SwiftUI +import WidgetKit +import EnvironmentKit + +struct QRCodeMediumWidgetView: View { + @Environment(\.colorScheme) var colorScheme + + var entry: QRCodeProvider.Entry + + private let qrCodeLightImage: UIImage? + private let qrCodeDarkImage: UIImage? + + init(entry: QRCodeProvider.Entry) { + self.entry = entry + + if let profileUrl = entry.profileUrl { + self.qrCodeLightImage = QRCodeGenerator.shared.generateQRCode(from: profileUrl.absoluteString, scheme: .light) + self.qrCodeDarkImage = QRCodeGenerator.shared.generateQRCode(from: profileUrl.absoluteString, scheme: .dark) + } else { + self.qrCodeLightImage = QRCodeGenerator.shared.generateQRCode(from: "https://pixelfed.org", scheme: .light) + self.qrCodeDarkImage = QRCodeGenerator.shared.generateQRCode(from: "https://pixelfed.org", scheme: .dark) + } + } + + var body: some View { + if let uiAvatar = entry.avatar, let qrCodeImage { + self.getWidgetBody(uiAvatar: Image(uiImage: uiAvatar), uiQRCode: Image(uiImage: qrCodeImage)) + } else { + self.getWidgetBody(uiAvatar: Image("Avatar"), uiQRCode: Image("QRCode")) + .unredacted() + } + } + + var qrCodeImage: UIImage? { + colorScheme == .dark ? qrCodeDarkImage : qrCodeLightImage + } + + @ViewBuilder + private func getWidgetBody(uiAvatar: Image, uiQRCode: Image) -> some View { + VStack(spacing: 0) { + uiQRCode + .resizable() + .widgetURL(URL(string: "\(AppConstants.accountUri)/\(entry.accountId)")) + + HStack { + uiAvatar + .avatar(size: 24) + .padding(.leading, 8) + + Text(entry.displayName ?? "") + .font(.system(size: 16)) + .foregroundColor(Color.primary) + .fontWeight(.semibold) + + Spacer() + + Image("Pixelfed") + .resizable() + .scaledToFit() + .frame(height: 32) + } + .padding(.top, 4) + } + .padding(8) + } +} diff --git a/VernissageWidget/QRCodeWidget/Views/QRCodeSmallWidgetView.swift b/VernissageWidget/QRCodeWidget/Views/QRCodeSmallWidgetView.swift new file mode 100644 index 0000000..8616c5f --- /dev/null +++ b/VernissageWidget/QRCodeWidget/Views/QRCodeSmallWidgetView.swift @@ -0,0 +1,66 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import SwiftUI +import WidgetKit +import EnvironmentKit + +struct QRCodeSmallWidgetView: View { + @Environment(\.colorScheme) var colorScheme + + var entry: QRCodeProvider.Entry + + private let qrCodeLightImage: UIImage? + private let qrCodeDarkImage: UIImage? + + init(entry: QRCodeProvider.Entry) { + self.entry = entry + + if let profileUrl = entry.profileUrl { + self.qrCodeLightImage = QRCodeGenerator.shared.generateQRCode(from: profileUrl.absoluteString, scheme: .light) + self.qrCodeDarkImage = QRCodeGenerator.shared.generateQRCode(from: profileUrl.absoluteString, scheme: .dark) + } else { + self.qrCodeLightImage = QRCodeGenerator.shared.generateQRCode(from: "https://pixelfed.org", scheme: .light) + self.qrCodeDarkImage = QRCodeGenerator.shared.generateQRCode(from: "https://pixelfed.org", scheme: .dark) + } + } + + var body: some View { + if let uiAvatar = entry.avatar, let qrCodeImage { + self.getWidgetBody(uiAvatar: Image(uiImage: uiAvatar), uiQRCode: Image(uiImage: qrCodeImage)) + } else { + self.getWidgetBody(uiAvatar: Image("Avatar"), uiQRCode: Image("QRCode")) + .unredacted() + } + } + + var qrCodeImage: UIImage? { + colorScheme == .dark ? qrCodeDarkImage : qrCodeLightImage + } + + @ViewBuilder + private func getWidgetBody(uiAvatar: Image, uiQRCode: Image) -> some View { + VStack(spacing: 0) { + uiQRCode + .resizable() + .widgetURL(URL(string: "\(AppConstants.accountUri)/\(entry.accountId)")) + + HStack { + uiAvatar + .avatar(size: 16) + .padding(.leading, 6) + + Spacer() + + Image("Pixelfed") + .resizable() + .scaledToFit() + .frame(height: 24) + } + } + .padding(8) + } +} diff --git a/VernissageWidget/SharedServices/FileFetcher.swift b/VernissageWidget/SharedServices/FileFetcher.swift new file mode 100644 index 0000000..8fc5f54 --- /dev/null +++ b/VernissageWidget/SharedServices/FileFetcher.swift @@ -0,0 +1,45 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import Foundation +import UIKit + +public class FileFetcher { + public static let shared = FileFetcher() + private init() { } + + private let maxImageSize = 1000.0 + + public func getImage(url: URL?) async -> UIImage? { + guard let url else { + return nil + } + + do { + let (data, response) = try await URLSession.shared.data(from: url) + + guard (response as? HTTPURLResponse)?.status?.responseType == .success else { + return nil + } + + guard let uiImage = UIImage(data: data) else { + return nil + } + + if uiImage.size.width < self.maxImageSize && uiImage.size.height < self.maxImageSize { + return uiImage + } + + if uiImage.size.width > uiImage.size.height { + return uiImage.resized(toWidth: self.maxImageSize) + } else { + return uiImage.resized(toHeight: self.maxImageSize) + } + } catch { + return nil + } + } +} diff --git a/VernissageWidget/VernissageWidgetBundle.swift b/VernissageWidget/VernissageWidgetBundle.swift index 0e9be9c..e4db3ff 100644 --- a/VernissageWidget/VernissageWidgetBundle.swift +++ b/VernissageWidget/VernissageWidgetBundle.swift @@ -9,7 +9,10 @@ import SwiftUI @main struct VernissageWidgetBundle: WidgetBundle { + + @WidgetBundleBuilder var body: some Widget { - VernissageWidget() + PhotoWidget() + QRCodeWidget() } }