chore(release): v6.0.0+60000004 (#528)

This commit is contained in:
Jagandeep Brar
2021-12-23 13:18:39 -05:00
committed by GitHub
parent 646899fbbf
commit 803bfe1f37
42 changed files with 540 additions and 447 deletions

View File

@@ -6,12 +6,14 @@
- `[Dashboard]` (Calendar) Display content poster and additional information
- `[Firebase]` (Analytics) Completely removed Analytics and Crashlytics
- `[Settings]` Show dismissable blocks with information and links
- `[Images]` (Cache) Cache fetched images to disk
- `[Lidarr]` (Add Artist) Show artist poster in result list
- `[Lidarr]` (Add Artist) Allow user to select monitoring options
- `[Lidarr]` (Add Artist) Removed toggle to use album folders
- `[Lidarr]` (Catalogue) Show artist poster in catalogue list
- `[Lidarr]` (Missing) Display album covers
- `[Settings]` (Configuration) Show dismissable blocks with information and links
- `[Settings]` (System) Ability to clear image cache
- `[Sonarr]` (Catalogue) Previous airing sorting option
- `[Sonarr]` (Season List) Display season posters
- `[Sonarr]` (Queue) Option to set queue page size

View File

@@ -1,37 +1,69 @@
{
"motd": "This build includes some minor but necessary changes for the next public release, including the ability to delete your LunaSea account (with all cloud data) directly from the app!\n\nThis build also removes the usage of custom icons (outside of branding/logo icons), and now uses only built-in icons for a more consistent feel across the UI.",
"motd": "This build introduces a substantial rework of many UI elements, including a much more performant tile block, normalized font sizes, a new minified drawer header, and more!\n\nAlongside other changes in this build (listed below), this build also completely removes all Firebase Crashlytics & Analytics data collection.",
"new": [
{
"module": "Dashboard",
"changes": [
"(Calendar) Add option to show past days in schedule view"
"(Calendar) Display content poster and additional information"
]
},
{
"module": "Firebase",
"changes": [
"(Analytics) Completely removed Analytics and Crashlytics"
]
},
{
"module": "Images",
"changes": [
"(Cache) Cache fetched images to disk"
]
},
{
"module": "Lidarr",
"changes": [
"(Add Artist) Show artist poster in result list",
"(Add Artist) Allow user to select monitoring options",
"(Add Artist) Removed toggle to use album folders",
"(Catalogue) Show artist poster in catalogue list",
"(Missing) Display album covers"
]
},
{
"module": "Settings",
"changes": [
"(Account) Ability to delete your LunaSea account and all cloud data"
"(Configuration) Show dismissable blocks with information and links",
"(System) Ability to clear image cache"
]
},
{
"module": "Sonarr",
"changes": [
"(Catalogue) Previous airing sorting option",
"(Season List) Display season posters",
"(Queue) Option to set queue page size"
]
},
{
"module": "UI/UX",
"changes": [
"(Icons) Added/updated brand icons for Lidarr, Sonarr, and Overseerr"
"(Tile Blocks) Allow overflowing title or body lines to be horizontally scrolled"
]
}
],
"tweaks": [
{
"module": "Sonarr",
"changes": [
"(Queue) Hide redundant queue information on episode sheet"
]
},
{
"module": "UI/UX",
"changes": [
"(Drawer) Update the list divider styling",
"(Icons) Replace custom icons (except branding icons) with Flutter defaults"
"(Drawer) Heavily reduced the size of the header area",
"(Fonts) Normalized font sizes across the UI",
"(Images) Set the default image opacity to 20% (custom set values are uneffected)",
"(Tile Blocks) Heavily improved build and memory performance of tiles",
"(Tile Blocks) Improved consistency in trailing icon/text size",
"(Tile Blocks) Improved consistency of tile height, content spacing, and padding",
"(Tile Blocks) Natively draw placeholder posters for movies, series, albums, etc.",
"(Tile Blocks) Fade-in background image loads",
"(Tooltips) Added styling to match LunaSea theme"
]
}
],
@@ -39,26 +71,21 @@
{
"module": "Dashboard",
"changes": [
"(Calendar) Calendar type switcher would not show when starting on calendar page",
"(Calendar) Use Sonarr v3 routes for fetching the calendar"
"(Calendar) Lidarr entries would not appear",
"(Modules) Unbranded icons could use incorrect colours"
]
},
{
"module": "Lidarr",
"changes": [
"(Artists) Safe-guard fetching of artist quality profiles"
"(Albums) List would fail to load on nightly Lidarr builds"
]
},
{
"module": "LunaSea",
"module": "Sonarr",
"changes": [
"(Keyboards) External keyboard inputs were not being accepted"
]
},
{
"module": "Tautulli",
"changes": [
"(Activity) Activity counter badge would not completely fade away"
"(Catalogue) Missing filter would fail to load when using Sonarr v4 in some cases",
"(Images) Images now use v3 API path"
]
}
],

View File

@@ -49,6 +49,9 @@
"settings.ClearConfigurationHint1": "Are you sure you want to clear your configuration?",
"settings.ClearConfigurationHint2": "You will be starting from a clean slate, please ensure you backup your current configuration first!",
"settings.ClearConfigurationHint3": "If you are signed into a LunaSea account, you will be signed out.",
"settings.ClearImageCache": "Clear Image Cache",
"settings.ClearImageCacheHint1": "Are you sure you want to clear all images from the cache?",
"settings.ClearImageCacheHint2": "Redownloading images for a large library can consume a large amount of data.",
"settings.ClearLogs": "Clear Logs",
"settings.ClearLogsHint1": "Are you sure you want to clear all recorded logs?\n\nLogs can be useful for bug reports and debugging.",
"settings.ConfigureModule": "Configure {}",

View File

@@ -26,6 +26,19 @@
"settings.BackupConfigurationHint1": "Alle back-ups zijn versleuteld voordat ze worden geëxporteerd",
"settings.BackupList": "Back-up Lijst",
"settings.BackupToCloud": "Back-up naar Cloud",
"settings.AccountDeletedMessage": "Uw LunaSea account is met succes verwijderd",
"settings.AccountSettings": "Account instellingen",
"settings.AccountDeleted": "Account verwijderd",
"settings.ClearConfigurationHint1": "Weet je zeker dat je de configuratie wilt verwijderen?",
"settings.ClearConfiguration": "Configuratie wissen",
"settings.BackupToCloudDescription": "Configuratie data opslaan",
"settings.BackupToCloudFailure": "Backup mislukt",
"settings.BackupToCloudSuccess": "Backup geslaagd",
"settings.BannersNotificationModuleSupportHeader": "Ondersteunde modules",
"settings.BannersNotificationModuleSupportBody": "Notificaties gebaseerd op webhooks worden alleen ondersteund door onderstaande modules\n\nOndersteuning voor meer modules volgen in de toekomst!",
"settings.BasicAuthenticationHint1": "Gebruikersnaam mag geen dubbele punt bevatten",
"settings.BasicAuthenticationHint2": "Wachtwoord mag wel een dubbele punt bevatten",
"settings.BasicAuthenticationHint3": "Gebruikersnaam en wachtwoord worden automatisch geconverteerd naar base64 codering",
"lunasea.Add": "Voeg Toe",
"lunasea.AnErrorHasOccurred": "Een Fout Is Opgetreden",
"lunasea.BackUp": "Back-up",

View File

@@ -30,31 +30,33 @@ build:
(description): Build (Android) - Build Split APKs
(execution): once
(scripts):
- ./scripts/build/apk.sh
- flutter clean
- flutter build apk --split-per-abi --bundle-sksl-path shaders/android_sksl.json --release
aab:
(description): Build (Android) - Build Appbundle
(execution): once
(scripts):
- ./scripts/build/aab.sh
- flutter clean
- flutter build appbundle --bundle-sksl-path shaders/android_sksl.json --release
ios:
ipa:
(description): Build (iOS) - Build IPA
(execution): once
(scripts):
- ./scripts/build/ipa.sh
- flutter build ipa --bundle-sksl-path shaders/ios_sksl.json --release
archive:
(description): Build (iOS) - Build Xcode Archive
(execution): once
(scripts):
- flutter clean
- flutter build ios --bundle-sksl-path shaders/ios_sksl.json
- flutter build ios --bundle-sksl-path shaders/ios_sksl.json --release
macos:
archive:
(description): Build (iOS) - Build Xcode Archive
(execution): once
(scripts):
- flutter clean
- flutter build macos
- flutter build macos --release
cocoapods:
clearcache:
(description): Cocoapods - Delete Cache & Derived Data
@@ -109,4 +111,9 @@ generate:
(description): Generator - Localizations
(execution): once
(scripts):
- dart ./scripts/generate/localization.dart
- dart ./scripts/generate_localization.dart
profile:
(description): Run in Profile Mode
(execution): once
(scripts):
- flutter run --profile --cache-sksl --purge-persistent-cache

View File

@@ -106,6 +106,9 @@ PODS:
- FirebaseCore (~> 8.0)
- GTMSessionFetcher/Core (~> 1.5)
- Flutter (1.0.0)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- GoogleDataTransport (9.1.2):
- GoogleUtilities/Environment (~> 7.2)
- nanopb (~> 2.30908.0)
@@ -165,6 +168,9 @@ PODS:
- Flutter
- shared_preferences_ios (0.0.1):
- Flutter
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
- SwiftyGif (5.4.2)
- url_launcher_ios (0.0.1):
- Flutter
@@ -186,6 +192,7 @@ DEPENDENCIES:
- quick_actions (from `.symlinks/plugins/quick_actions/ios`)
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
SPEC REPOS:
@@ -199,6 +206,7 @@ SPEC REPOS:
- FirebaseInstallations
- FirebaseMessaging
- FirebaseStorage
- FMDB
- GoogleDataTransport
- GoogleUtilities
- GTMSessionFetcher
@@ -237,6 +245,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/share_plus/ios"
shared_preferences_ios:
:path: ".symlinks/plugins/shared_preferences_ios/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
@@ -263,6 +273,7 @@ SPEC CHECKSUMS:
FirebaseMessaging: 82c4a48638f53f7b184f3cc9f6cd2cbe533ab316
FirebaseStorage: 452c98c31ccb40b819764bf3039426c4388d9939
Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
GoogleDataTransport: 629c20a4d363167143f30ea78320d5a7eb8bd940
GoogleUtilities: 684ee790a24f73ebb2d1d966e9711c203f2a4237
GTMSessionFetcher: 43748f93435c2aa068b1cbe39655aaf600652e91
@@ -275,6 +286,7 @@ SPEC CHECKSUMS:
SDWebImage: 4dc3e42d9ec0c1028b960a33ac6b637bb432207b
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
shared_preferences_ios: aef470a42dc4675a1cdd50e3158b42e3d1232b32
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
SwiftyGif: dec758a9dd3d278e5a855dbf279bf062c923c387
url_launcher_ios: 02f1989d4e14e998335b02b67a7590fa34f971af

View File

@@ -8,8 +8,8 @@
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
22ABA27907009C6D67E17F02 /* Pods_ImageNotification.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DDBAA25D93558DC2ACE8794 /* Pods_ImageNotification.framework */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
3D61E14E96B7D4053F5149E8 /* Pods_ImageNotification.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 31E137C17ECE8FB49677BF90 /* Pods_ImageNotification.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
@@ -18,7 +18,7 @@
9C5DBBF2257EB50400836D8D /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9C5DBBF1257EB50400836D8D /* GoogleService-Info.plist */; };
9C7092B325E77E470056AE0B /* NotificationService.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C7092B225E77E470056AE0B /* NotificationService.m */; };
9C7092B725E77E470056AE0B /* ImageNotification.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 9C7092AF25E77E470056AE0B /* ImageNotification.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
E81187C204448290256D1292 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 525B84ABAED8CC10DD278134 /* Pods_Runner.framework */; };
E5D25C1E03B6BC8A29076BA3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB17C8DE485610F7704287B8 /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -56,15 +56,16 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
023AA6ADC9E3524E90FC4938 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
1AEC3393F733CF63CC471C78 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
31E137C17ECE8FB49677BF90 /* Pods_ImageNotification.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ImageNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
525B84ABAED8CC10DD278134 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
662CD407BE758B5E7C57DF9E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
7DDBAA25D93558DC2ACE8794 /* Pods_ImageNotification.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ImageNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; };
947991346E21E2CBEC0CD8E9 /* Pods-ImageNotification.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.profile.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.profile.xcconfig"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -72,6 +73,7 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
9A54E4E8BFAA8BBEE938F1C3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
9C0A396F23E0F00900EC8127 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
9C2991232453FE3100B93AB2 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
9C5DBBF1257EB50400836D8D /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
@@ -81,11 +83,9 @@
9C7092B125E77E470056AE0B /* NotificationService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationService.h; sourceTree = "<group>"; };
9C7092B225E77E470056AE0B /* NotificationService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationService.m; sourceTree = "<group>"; };
9C7092B425E77E470056AE0B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
AB50C11FF4EFC5D9961D1031 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
ACE755908B540FD8855E4D89 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
C041C2ED656F3E1D27D9E228 /* Pods-ImageNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.debug.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.debug.xcconfig"; sourceTree = "<group>"; };
C9A446482226EB46FF708884 /* Pods-ImageNotification.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.profile.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.profile.xcconfig"; sourceTree = "<group>"; };
FE066D193740042A640E4E50 /* Pods-ImageNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.release.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.release.xcconfig"; sourceTree = "<group>"; };
A191DF243880CD21D150EA3C /* Pods-ImageNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.release.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.release.xcconfig"; sourceTree = "<group>"; };
BB17C8DE485610F7704287B8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E8514DF39E114907A369593F /* Pods-ImageNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ImageNotification.debug.xcconfig"; path = "Target Support Files/Pods-ImageNotification/Pods-ImageNotification.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -94,7 +94,7 @@
buildActionMask = 2147483647;
files = (
9C2991242453FE3100B93AB2 /* StoreKit.framework in Frameworks */,
E81187C204448290256D1292 /* Pods_Runner.framework in Frameworks */,
E5D25C1E03B6BC8A29076BA3 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -102,7 +102,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
22ABA27907009C6D67E17F02 /* Pods_ImageNotification.framework in Frameworks */,
3D61E14E96B7D4053F5149E8 /* Pods_ImageNotification.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -182,8 +182,8 @@
isa = PBXGroup;
children = (
9C2991232453FE3100B93AB2 /* StoreKit.framework */,
7DDBAA25D93558DC2ACE8794 /* Pods_ImageNotification.framework */,
525B84ABAED8CC10DD278134 /* Pods_Runner.framework */,
31E137C17ECE8FB49677BF90 /* Pods_ImageNotification.framework */,
BB17C8DE485610F7704287B8 /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -191,12 +191,12 @@
F5D05D221249C73674C5DB0D /* Pods */ = {
isa = PBXGroup;
children = (
C041C2ED656F3E1D27D9E228 /* Pods-ImageNotification.debug.xcconfig */,
FE066D193740042A640E4E50 /* Pods-ImageNotification.release.xcconfig */,
C9A446482226EB46FF708884 /* Pods-ImageNotification.profile.xcconfig */,
AB50C11FF4EFC5D9961D1031 /* Pods-Runner.debug.xcconfig */,
ACE755908B540FD8855E4D89 /* Pods-Runner.release.xcconfig */,
1AEC3393F733CF63CC471C78 /* Pods-Runner.profile.xcconfig */,
E8514DF39E114907A369593F /* Pods-ImageNotification.debug.xcconfig */,
A191DF243880CD21D150EA3C /* Pods-ImageNotification.release.xcconfig */,
947991346E21E2CBEC0CD8E9 /* Pods-ImageNotification.profile.xcconfig */,
9A54E4E8BFAA8BBEE938F1C3 /* Pods-Runner.debug.xcconfig */,
023AA6ADC9E3524E90FC4938 /* Pods-Runner.release.xcconfig */,
662CD407BE758B5E7C57DF9E /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@@ -208,7 +208,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
3485969F7F1D5F22AA9F93DD /* [CP] Check Pods Manifest.lock */,
440A55AC1D27EC80F1FD3447 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
@@ -216,8 +216,8 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
9C7092B825E77E470056AE0B /* Embed App Extensions */,
FEF0F5B439D2594CBDB93362 /* [CP] Embed Pods Frameworks */,
71292F5AA25ED2C228C6EFFB /* [CP] Copy Pods Resources */,
612B00A195C7C580D2188AA3 /* [CP] Embed Pods Frameworks */,
0505C764539DE626998A7119 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -233,7 +233,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 9C7092BC25E77E470056AE0B /* Build configuration list for PBXNativeTarget "ImageNotification" */;
buildPhases = (
5FBBFCF3DA2647B52FD6E1AE /* [CP] Check Pods Manifest.lock */,
80666D8860C2D5B82039C00B /* [CP] Check Pods Manifest.lock */,
9C7092AB25E77E470056AE0B /* Sources */,
9C7092AC25E77E470056AE0B /* Frameworks */,
9C7092AD25E77E470056AE0B /* Resources */,
@@ -312,7 +312,39 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3485969F7F1D5F22AA9F93DD /* [CP] Check Pods Manifest.lock */ = {
0505C764539DE626998A7119 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh",
"${PODS_ROOT}/FirebaseFirestore/FirebaseFirestore/Resources/gRPCCertificates-Cpp.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates-Cpp.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
440A55AC1D27EC80F1FD3447 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -334,21 +366,73 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
612B00A195C7C580D2188AA3 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/DKImagePickerController/DKImagePickerController.framework",
"${BUILT_PRODUCTS_DIR}/DKPhotoGallery/DKPhotoGallery.framework",
"${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseAuth/FirebaseAuth.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseStorage/FirebaseStorage.framework",
"${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework",
"${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework",
"${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework",
"${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
"${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
"${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework",
"${BUILT_PRODUCTS_DIR}/in_app_purchase_ios/in_app_purchase_ios.framework",
"${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework",
"${BUILT_PRODUCTS_DIR}/package_info_plus/package_info_plus.framework",
"${BUILT_PRODUCTS_DIR}/path_provider_ios/path_provider_ios.framework",
"${BUILT_PRODUCTS_DIR}/quick_actions/quick_actions.framework",
"${BUILT_PRODUCTS_DIR}/share_plus/share_plus.framework",
"${BUILT_PRODUCTS_DIR}/shared_preferences_ios/shared_preferences_ios.framework",
"${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework",
"${BUILT_PRODUCTS_DIR}/url_launcher_ios/url_launcher_ios.framework",
);
name = "Thin Binary";
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKImagePickerController.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKPhotoGallery.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuth.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseStorage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/in_app_purchase_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info_plus.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/quick_actions.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/share_plus.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_ios.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
5FBBFCF3DA2647B52FD6E1AE /* [CP] Check Pods Manifest.lock */ = {
80666D8860C2D5B82039C00B /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -370,24 +454,6 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
71292F5AA25ED2C228C6EFFB /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh",
"${PODS_ROOT}/FirebaseFirestore/FirebaseFirestore/Resources/gRPCCertificates-Cpp.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates-Cpp.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -402,68 +468,6 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
};
FEF0F5B439D2594CBDB93362 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/DKImagePickerController/DKImagePickerController.framework",
"${BUILT_PRODUCTS_DIR}/DKPhotoGallery/DKPhotoGallery.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseAuth/FirebaseAuth.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseStorage/FirebaseStorage.framework",
"${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework",
"${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework",
"${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework",
"${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
"${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
"${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework",
"${BUILT_PRODUCTS_DIR}/in_app_purchase_ios/in_app_purchase_ios.framework",
"${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework",
"${BUILT_PRODUCTS_DIR}/package_info_plus/package_info_plus.framework",
"${BUILT_PRODUCTS_DIR}/path_provider_ios/path_provider_ios.framework",
"${BUILT_PRODUCTS_DIR}/quick_actions/quick_actions.framework",
"${BUILT_PRODUCTS_DIR}/share_plus/share_plus.framework",
"${BUILT_PRODUCTS_DIR}/shared_preferences_ios/shared_preferences_ios.framework",
"${BUILT_PRODUCTS_DIR}/url_launcher_ios/url_launcher_ios.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKImagePickerController.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKPhotoGallery.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuth.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseStorage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/in_app_purchase_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info_plus.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/quick_actions.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/share_plus.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_ios.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */

View File

@@ -1,4 +1,5 @@
// Packages
export 'package:cached_network_image/cached_network_image.dart';
export 'package:easy_localization/easy_localization.dart';
export 'package:expandable/expandable.dart';
export 'package:fading_edge_scrollview/fading_edge_scrollview.dart';

View File

@@ -1,2 +1,3 @@
export 'cache/image_cache.dart';
export 'cache/memory_lru.dart';
export 'cache/memory_store.dart';

16
lib/core/cache/image_cache.dart vendored Normal file
View File

@@ -0,0 +1,16 @@
import 'package:flutter/material.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
class LunaImageCache {
static const _key = 'LUNA_IMAGE_CACHE';
static CacheManager instance = CacheManager(Config(_key));
/// Initialize the image cache by setting [ImageCache]'s maximumSize and maximumSizeBytes.
void initialize() {
ImageCache().maximumSize = 1000;
ImageCache().maximumSizeBytes = 128 << 20;
}
/// Clear the cached images
Future<void> clear() => instance.emptyCache();
}

View File

@@ -1,7 +1,6 @@
export 'system/configuration.dart';
export 'system/desktop_window.dart';
export 'system/filesystem.dart';
export 'system/image_cache.dart';
export 'system/in_app_purchases.dart';
export 'system/localization.dart';
export 'system/networking.dart';

View File

@@ -1,9 +0,0 @@
import 'package:flutter/painting.dart';
class LunaImageCache {
/// Initialize the image cache by setting [ImageCache]'s maximumSize and maximumSizeBytes.
void initialize() {
ImageCache().maximumSize = 1000;
ImageCache().maximumSizeBytes = 128 << 20;
}
}

View File

@@ -10,7 +10,6 @@ export 'ui/card.dart';
export 'ui/colors.dart';
export 'ui/containers.dart';
export 'ui/controllers.dart';
export 'ui/decoration.dart';
export 'ui/dialog.dart';
export 'ui/divider.dart';
export 'ui/drawer.dart';
@@ -68,7 +67,7 @@ class LunaUI {
// <--> Other
static const int ANIMATION_SPEED = 250;
static const int ANIMATION_SPEED_IMAGES = 175;
static const int ANIMATION_SPEED_IMAGES = 150;
static const double BORDER_RADIUS = 10.0;
static const double OPACITY_DIMMED = 0.75;
static const double OPACITY_DISABLED = 0.50;

View File

@@ -141,9 +141,11 @@ class LunaBlock extends StatelessWidget {
milliseconds: LunaUI.ANIMATION_SPEED_IMAGES,
),
fit: BoxFit.cover,
image: NetworkImage(
image: CachedNetworkImageProvider(
backgroundUrl,
headers: backgroundHeaders?.cast<String, String>(),
cacheManager: LunaImageCache.instance,
errorListener: () {},
),
imageErrorBuilder: (context, error, stack) => SizedBox(
height: _height,

View File

@@ -1 +0,0 @@
export 'decoration/card_decoration.dart';

View File

@@ -1,28 +0,0 @@
import 'package:flutter/material.dart';
import 'package:lunasea/core.dart';
// ignore: non_constant_identifier_names
Decoration LunaCardDecoration({@required String uri, @required Map headers}) {
if (LunaDatabaseValue.THEME_IMAGE_BACKGROUND_OPACITY.data == 0) return null;
if (uri == null || uri.isEmpty) {
return BoxDecoration(
borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS),
);
}
double _opacity =
(LunaDatabaseValue.THEME_IMAGE_BACKGROUND_OPACITY.data as int) / 100;
return BoxDecoration(
image: DecorationImage(
image: NetworkImage(
uri,
headers: Map<String, String>.from(headers),
),
// To prevent excessive logs, just handle an error loading the image with an empty callback
onError: (error, stack) {},
opacity: _opacity,
fit: BoxFit.cover,
),
borderRadius: BorderRadius.circular(LunaUI.BORDER_RADIUS),
);
}

View File

@@ -48,9 +48,11 @@ class LunaNetworkImage extends ClipRRect {
fadeOutDuration: const Duration(milliseconds: 1),
placeholder: MemoryImage(kTransparentImage),
fit: BoxFit.cover,
image: NetworkImage(
image: CachedNetworkImageProvider(
url,
headers: headers?.cast<String, String>(),
cacheManager: LunaImageCache.instance,
errorListener: () {},
),
imageErrorBuilder: (context, error, stack) => SizedBox(
height: height,

View File

@@ -5,7 +5,6 @@ abstract class CalendarData {
String title;
List<TextSpan> get body;
String get bannerURI;
String backgroundUrl(BuildContext context);
String posterUrl(BuildContext context);

View File

@@ -19,15 +19,6 @@ class CalendarLidarrData extends CalendarData {
@required this.totalTrackCount,
}) : super(id, title);
@override
String get bannerURI {
return api['enabled']
? (api['host'] as String).endsWith('/')
? '${api['host']}api/v1/MediaCover/Artist/$artistId/banner.jpg?apikey=${api['key']}'
: '${api['host']}/api/v1/MediaCover/Artist/$artistId/banner.jpg?apikey=${api['key']}'
: '';
}
@override
List<TextSpan> get body {
return [
@@ -109,8 +100,8 @@ class CalendarLidarrData extends CalendarData {
String posterUrl(BuildContext context) {
return api['enabled']
? (api['host'] as String).endsWith('/')
? '${api['host']}api/v1/MediaCover/Artist/$artistId/poster-500.jpg?apikey=${api['key']}'
: '${api['host']}/api/v1/MediaCover/Artist/$artistId/poster-500.jpg?apikey=${api['key']}'
? '${api['host']}api/v1/MediaCover/Artist/$artistId/poster-250.jpg?apikey=${api['key']}'
: '${api['host']}/api/v1/MediaCover/Artist/$artistId/poster-250.jpg?apikey=${api['key']}'
: '';
}
}

View File

@@ -51,17 +51,6 @@ class CalendarRadarrData extends CalendarData {
];
}
@override
String get bannerURI {
if (api['enabled']) {
if ((api['host'] as String).endsWith('/')) {
return '${api['host']}api/v3/MediaCover/$id/fanart-360.jpg?apikey=${api['key']}';
}
return '${api['host']}/api/v3/MediaCover/$id/fanart-360.jpg?apikey=${api['key']}';
}
return '';
}
@override
Future<void> enterContent(BuildContext context) async =>
RadarrMoviesDetailsRouter().navigateTo(context, movieId: id);

View File

@@ -66,15 +66,6 @@ class CalendarSonarrData extends CalendarData {
return false;
}
@override
String get bannerURI {
return api['enabled']
? (api['host'] as String).endsWith('/')
? '${api['host']}api/mediacover/$seriesID/banner-70.jpg?apikey=${api['key']}'
: '${api['host']}/api/mediacover/$seriesID/banner-70.jpg?apikey=${api['key']}'
: '';
}
@override
Future<void> enterContent(BuildContext context) async =>
SonarrSeriesDetailsRouter().navigateTo(

View File

@@ -37,14 +37,12 @@ class LidarrAlbumData {
return trackCount != 1 ? '$trackCount Tracks' : '$trackCount Track';
}
String albumCoverURI({bool highRes = false}) {
String albumCoverURI() {
if (api['enabled']) {
String _base = (api['host'] as String).endsWith('/')
? '${api['host']}api/v1/MediaCover/Album'
: '${api['host']}/api/v1/MediaCover/Album';
return highRes
? '$_base/$albumID/cover.jpg?apikey=${api['key']}'
: '$_base/$albumID/cover-500.jpg?apikey=${api['key']}';
return '$_base/$albumID/cover-250.jpg?apikey=${api['key']}';
}
return '';
}

View File

@@ -124,38 +124,22 @@ class LidarrCatalogueData {
return '';
}
String posterURI({bool highRes = false}) {
String posterURI() {
if (api['enabled']) {
String _base = (api['host'] as String).endsWith('/')
? '${api['host']}api/v1/MediaCover/Artist'
: '${api['host']}/api/v1/MediaCover/Artist';
return highRes
? '$_base/$artistID/poster.jpg?apikey=${api['key']}'
: '$_base/$artistID/poster-500.jpg?apikey=${api['key']}';
return '$_base/$artistID/poster-250.jpg?apikey=${api['key']}';
}
return '';
}
String fanartURI({bool highRes = false}) {
String fanartURI() {
if (api['enabled']) {
String _base = (api['host'] as String).endsWith('/')
? '${api['host']}api/v1/MediaCover/Artist'
: '${api['host']}/api/v1/MediaCover/Artist';
return highRes
? '$_base/$artistID/fanart.jpg?apikey=${api['key']}'
: '$_base/$artistID/fanart-360.jpg?apikey=${api['key']}';
}
return '';
}
String bannerURI({bool highRes = false}) {
if (api['enabled']) {
String _base = (api['host'] as String).endsWith('/')
? '${api['host']}api/v1/MediaCover/Artist'
: '${api['host']}/api/v1/MediaCover/Artist';
return highRes
? '$_base/$artistID/banner.jpg?apikey=${api['key']}'
: '$_base/$artistID/banner-70.jpg?apikey=${api['key']}';
return '$_base/$artistID/fanart-360.jpg?apikey=${api['key']}';
}
return '';
}

View File

@@ -43,26 +43,22 @@ class LidarrMissingData {
return 'Unknown Date/Time';
}
String albumCoverURI({bool highRes = false}) {
String albumCoverURI() {
if (api['enabled']) {
String _base = (api['host'] as String).endsWith('/')
? '${api['host']}api/v1/MediaCover/Album'
: '${api['host']}/api/v1/MediaCover/Album';
return highRes
? '$_base/$albumID/cover.jpg?apikey=${api['key']}'
: '$_base/$albumID/cover-500.jpg?apikey=${api['key']}';
return '$_base/$albumID/cover-250.jpg?apikey=${api['key']}';
}
return '';
}
String posterURI({bool highRes = false}) {
String posterURI() {
if (api['enabled']) {
String _base = (api['host'] as String).endsWith('/')
? '${api['host']}api/v1/MediaCover/Artist'
: '${api['host']}/api/v1/MediaCover/Artist';
return highRes
? '$_base/$artistID/poster.jpg?apikey=${api['key']}'
: '$_base/$artistID/poster-500.jpg?apikey=${api['key']}';
return '$_base/$artistID/poster-250.jpg?apikey=${api['key']}';
}
return '';
}
@@ -72,21 +68,7 @@ class LidarrMissingData {
String _base = (api['host'] as String).endsWith('/')
? '${api['host']}api/v1/MediaCover/Artist'
: '${api['host']}/api/v1/MediaCover/Artist';
return highRes
? '$_base/$artistID/fanart.jpg?apikey=${api['key']}'
: '$_base/$artistID/fanart-360.jpg?apikey=${api['key']}';
}
return '';
}
String bannerURI({bool highRes = false}) {
String _base = (api['host'] as String).endsWith('/')
? '${api['host']}api/v1/MediaCover/Artist'
: '${api['host']}/api/v1/MediaCover/Artist';
if (api['enabled']) {
return highRes
? '$_base/$artistID/banner.jpg?apikey=${api['key']}'
: '$_base/$artistID/banner-70.jpg?apikey=${api['key']}';
return '$_base/$artistID/fanart-360.jpg?apikey=${api['key']}';
}
return '';
}

View File

@@ -47,7 +47,7 @@ class _State extends State<LidarrCatalogueTile> {
posterPlaceholderIcon: LunaIcons.USER,
posterUrl: widget.data.posterURI(),
posterHeaders: Database.currentProfileObject.getLidarr()['headers'],
backgroundUrl: widget.data.bannerURI(),
backgroundUrl: widget.data.fanartURI(),
backgroundHeaders: Database.currentProfileObject.getLidarr()['headers'],
posterIsSquare: true,
onTap: () async => _enterArtist(),

View File

@@ -52,7 +52,7 @@ class _State extends State<LidarrMissingTile> {
posterHeaders: Database.currentProfileObject.getLidarr()['headers'],
posterIsSquare: true,
posterPlaceholderIcon: LunaIcons.MUSIC,
backgroundUrl: widget.entry.bannerURI(),
backgroundUrl: widget.entry.fanartURI(),
backgroundHeaders: Database.currentProfileObject.getLidarr()['headers'],
);
}

View File

@@ -214,7 +214,8 @@ class RadarrState extends LunaModuleState {
a.lunaEarlierReleaseDate != null) return -1;
if (a.lunaEarlierReleaseDate == null &&
b.lunaEarlierReleaseDate == null) _comparison = 0;
_comparison ??= b.lunaEarlierReleaseDate.compareTo(a.lunaEarlierReleaseDate);
_comparison ??=
b.lunaEarlierReleaseDate.compareTo(a.lunaEarlierReleaseDate);
if (_comparison == 0)
return a.sortTitle
.toLowerCase()
@@ -324,26 +325,12 @@ class RadarrState extends LunaModuleState {
/// IMAGES ///
//////////////
String getPosterURL(int movieId, {bool highRes = false}) {
String getPosterURL(int movieId) {
if (_enabled) {
String _base = _host.endsWith('/')
? '${_host}api/v3/MediaCover'
: '$_host/api/v3/MediaCover';
return highRes
? '$_base/$movieId/poster.jpg?apikey=$_apiKey'
: '$_base/$movieId/poster-500.jpg?apikey=$_apiKey';
}
return null;
}
String getBannerURL(int movieId, {bool highRes = false}) {
if (_enabled) {
String _base = _host.endsWith('/')
? '${_host}api/v3/MediaCover'
: '$_host/api/v3/MediaCover';
return highRes
? '$_base/$movieId/banner.jpg?apikey=$_apiKey'
: '$_base/$movieId/banner-70.jpg?apikey=$_apiKey';
return '$_base/$movieId/poster-250.jpg?apikey=$_apiKey';
}
return null;
}
@@ -353,9 +340,7 @@ class RadarrState extends LunaModuleState {
String _base = _host.endsWith('/')
? '${_host}api/v3/MediaCover'
: '$_host/api/v3/MediaCover';
return highRes
? '$_base/$movieId/fanart.jpg?apikey=$_apiKey'
: '$_base/$movieId/fanart-360.jpg?apikey=$_apiKey';
return '$_base/$movieId/fanart-360.jpg?apikey=$_apiKey';
}
return null;
}

View File

@@ -1004,6 +1004,34 @@ class SettingsDialogs {
return _flag;
}
Future<bool> clearImageCache(BuildContext context) async {
bool _flag = false;
void _setValues(bool flag) {
_flag = flag;
Navigator.of(context).pop();
}
await LunaDialog.dialog(
context: context,
title: 'settings.ClearImageCache'.tr(),
buttons: [
LunaDialog.button(
text: 'lunasea.Clear'.tr(),
textColor: LunaColours.red,
onPressed: () => _setValues(true),
),
],
content: [
LunaDialog.textContent(text: 'settings.ClearImageCacheHint1'.tr()),
LunaDialog.textContent(text: ''),
LunaDialog.textContent(text: 'settings.ClearImageCacheHint2'.tr()),
],
contentPadding: LunaDialog.textDialogContentPadding(),
);
return _flag;
}
Future<bool> clearConfiguration(BuildContext context) async {
bool _flag = false;

View File

@@ -50,6 +50,7 @@ class _State extends State<_Widget> with LunaScrollControllerMixin {
const SettingsSystemBackupRestoreRestoreTile(),
const LunaDivider(),
if (kDebugMode) _hideTooltipBanners(),
_clearImageCache(),
_clearConfiguration(),
],
);
@@ -101,6 +102,24 @@ class _State extends State<_Widget> with LunaScrollControllerMixin {
);
}
Widget _clearImageCache() {
return LunaBlock(
title: 'Clear Image Cache',
body: const [TextSpan(text: 'Clear cached images from the disk')],
trailing: const LunaIconButton(icon: Icons.image_not_supported_rounded),
onTap: () async {
bool result = await SettingsDialogs().clearImageCache(context);
if (result) {
LunaImageCache().clear();
showLunaSuccessSnackBar(
title: 'Image Cache Cleared',
message: 'Your image cache has been cleared',
);
}
},
);
}
Widget _clearConfiguration() {
return LunaBlock(
title: 'Clear Configuration',

View File

@@ -271,29 +271,16 @@ class SonarrState extends LunaModuleState {
: '$_host/api/v3/MediaCover';
}
String getBannerURL(int seriesId, {bool highRes = false}) {
String getPosterURL(int seriesId) {
if (_enabled) {
return highRes
? '${_baseImageURL()}/$seriesId/banner.jpg?apikey=$_apiKey'
: '${_baseImageURL()}/$seriesId/banner-70.jpg?apikey=$_apiKey';
}
return null;
}
String getPosterURL(int seriesId, {bool highRes = false}) {
if (_enabled) {
return highRes
? '${_baseImageURL()}/$seriesId/poster.jpg?apikey=$_apiKey'
: '${_baseImageURL()}/$seriesId/poster-500.jpg?apikey=$_apiKey';
return '${_baseImageURL()}/$seriesId/poster-250.jpg?apikey=$_apiKey';
}
return null;
}
String getFanartURL(int seriesId, {bool highRes = false}) {
if (_enabled) {
return highRes
? '${_baseImageURL()}/$seriesId/fanart.jpg?apikey=$_apiKey'
: '${_baseImageURL()}/$seriesId/fanart-360.jpg?apikey=$_apiKey';
return '${_baseImageURL()}/$seriesId/fanart-360.jpg?apikey=$_apiKey';
}
return null;
}

View File

@@ -49,6 +49,9 @@
"settings.ClearConfigurationHint1": "Are you sure you want to clear your configuration?",
"settings.ClearConfigurationHint2": "You will be starting from a clean slate, please ensure you backup your current configuration first!",
"settings.ClearConfigurationHint3": "If you are signed into a LunaSea account, you will be signed out.",
"settings.ClearImageCache": "Clear Image Cache",
"settings.ClearImageCacheHint1": "Are you sure you want to clear all images from the cache?",
"settings.ClearImageCacheHint2": "Redownloading images for a large library can consume a large amount of data.",
"settings.ClearLogs": "Clear Logs",
"settings.ClearLogsHint1": "Are you sure you want to clear all recorded logs?\n\nLogs can be useful for bug reports and debugging.",
"settings.ConfigureModule": "Configure {}",

View File

@@ -16,6 +16,7 @@ import package_info_plus_macos
import path_provider_macos
import share_plus_macos
import shared_preferences_macos
import sqflite
import url_launcher_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
@@ -30,5 +31,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
}

View File

@@ -80,6 +80,9 @@ PODS:
- FirebaseCore (~> 8.0)
- GTMSessionFetcher/Core (~> 1.5)
- FlutterMacOS (1.0.0)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- GoogleDataTransport (9.1.2):
- GoogleUtilities/Environment (~> 7.2)
- nanopb (~> 2.30908.0)
@@ -116,6 +119,9 @@ PODS:
- FlutterMacOS
- shared_preferences_macos (0.0.1):
- FlutterMacOS
- sqflite (0.0.2):
- FlutterMacOS
- FMDB (>= 2.7.5)
- url_launcher_macos (0.0.1):
- FlutterMacOS
@@ -133,6 +139,7 @@ DEPENDENCIES:
- path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`)
- share_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos`)
- shared_preferences_macos (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`)
- sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`)
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
SPEC REPOS:
@@ -144,6 +151,7 @@ SPEC REPOS:
- FirebaseInstallations
- FirebaseMessaging
- FirebaseStorage
- FMDB
- GoogleDataTransport
- GoogleUtilities
- GTMSessionFetcher
@@ -178,6 +186,8 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos
shared_preferences_macos:
:path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos
sqflite:
:path: Flutter/ephemeral/.symlinks/plugins/sqflite/macos
url_launcher_macos:
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
@@ -203,6 +213,7 @@ SPEC CHECKSUMS:
FirebaseMessaging: 82c4a48638f53f7b184f3cc9f6cd2cbe533ab316
FirebaseStorage: 452c98c31ccb40b819764bf3039426c4388d9939
FlutterMacOS: 57701585bf7de1b3fc2bb61f6378d73bbdea8424
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
GoogleDataTransport: 629c20a4d363167143f30ea78320d5a7eb8bd940
GoogleUtilities: 684ee790a24f73ebb2d1d966e9711c203f2a4237
GTMSessionFetcher: 43748f93435c2aa068b1cbe39655aaf600652e91
@@ -212,6 +223,7 @@ SPEC CHECKSUMS:
PromisesObjC: 68159ce6952d93e17b2dfe273b8c40907db5ba58
share_plus_macos: 853ee48e7dce06b633998ca0735d482dd671ade4
shared_preferences_macos: 480ce071d0666e37cef23fe6c702293a3d21799e
sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea
url_launcher_macos: 45af3d61de06997666568a7149c1be98b41c95d4
PODFILE CHECKSUM: b26bb765a568f6d4f2c0d9767ef2eee43a3f07ed

View File

@@ -21,13 +21,13 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
094E875D803D9BCED22EEB02 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3098CCE1245488FDC4653AD7 /* Pods_Runner.framework */; };
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
9CB665D62619F8E400932F8C /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9CB665D52619F8E400932F8C /* GoogleService-Info.plist */; };
CA61A3521F573D6644DB14A9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 618FDC36C766439F24D06F8C /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -54,7 +54,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
2D911EEB517390915940B299 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
170A2DA65219F3FE7CE779C3 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
3098CCE1245488FDC4653AD7 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
33CC10ED2044A3C60003C045 /* LunaSea.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LunaSea.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -69,12 +70,11 @@
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
4743A8E42A87B4AD69F5E777 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
618FDC36C766439F24D06F8C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
9CB665D52619F8E400932F8C /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
C23D530B760B9F49181D59A9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
D672DF2EB9996C884441FB62 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
E7D67584EEB54736FC5FAAF7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -82,21 +82,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
CA61A3521F573D6644DB14A9 /* Pods_Runner.framework in Frameworks */,
094E875D803D9BCED22EEB02 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
0D33575850A81F169F37BFE6 /* Frameworks */ = {
isa = PBXGroup;
children = (
618FDC36C766439F24D06F8C /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
33BA886A226E78AF003329D5 /* Configs */ = {
isa = PBXGroup;
children = (
@@ -116,7 +108,7 @@
33CEB47122A05771004F2AC0 /* Flutter */,
33CC10EE2044A3C60003C045 /* Products */,
C16DBC6D5885D252E3ED5BAD /* Pods */,
0D33575850A81F169F37BFE6 /* Frameworks */,
7496191F59AEBF18FC3B1018 /* Frameworks */,
);
sourceTree = "<group>";
};
@@ -163,12 +155,20 @@
path = Runner;
sourceTree = "<group>";
};
7496191F59AEBF18FC3B1018 /* Frameworks */ = {
isa = PBXGroup;
children = (
3098CCE1245488FDC4653AD7 /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
C16DBC6D5885D252E3ED5BAD /* Pods */ = {
isa = PBXGroup;
children = (
4743A8E42A87B4AD69F5E777 /* Pods-Runner.debug.xcconfig */,
2D911EEB517390915940B299 /* Pods-Runner.release.xcconfig */,
C23D530B760B9F49181D59A9 /* Pods-Runner.profile.xcconfig */,
170A2DA65219F3FE7CE779C3 /* Pods-Runner.debug.xcconfig */,
D672DF2EB9996C884441FB62 /* Pods-Runner.release.xcconfig */,
E7D67584EEB54736FC5FAAF7 /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@@ -180,14 +180,14 @@
isa = PBXNativeTarget;
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
3CBBBFA7C9E7216004B3FD0A /* [CP] Check Pods Manifest.lock */,
B3EB9FE19A9E29E637DB9738 /* [CP] Check Pods Manifest.lock */,
33CC10E92044A3C60003C045 /* Sources */,
33CC10EA2044A3C60003C045 /* Frameworks */,
33CC10EB2044A3C60003C045 /* Resources */,
33CC110E2044A8840003C045 /* Bundle Framework */,
3399D490228B24CF009A79C7 /* ShellScript */,
F996385B971FCEF98CA6257D /* [CP] Embed Pods Frameworks */,
7DE54AC427A284D3594DB252 /* [CP] Copy Pods Resources */,
1389318A3991C3052619453E /* [CP] Embed Pods Frameworks */,
7BEF3CE57F50FA6DEE0C10FA /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -258,6 +258,23 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
1389318A3991C3052619453E /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
3399D490228B24CF009A79C7 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -295,7 +312,24 @@
shellPath = /bin/sh;
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
};
3CBBBFA7C9E7216004B3FD0A /* [CP] Check Pods Manifest.lock */ = {
7BEF3CE57F50FA6DEE0C10FA /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
B3EB9FE19A9E29E637DB9738 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -317,40 +351,6 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
7DE54AC427A284D3594DB252 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
F996385B971FCEF98CA6257D /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */

View File

@@ -148,6 +148,27 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "8.1.3"
cached_network_image:
dependency: "direct main"
description:
name: cached_network_image
url: "https://pub.dartlang.org"
source: hosted
version: "3.2.0"
cached_network_image_platform_interface:
dependency: transitive
description:
name: cached_network_image_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
cached_network_image_web:
dependency: transitive
description:
name: cached_network_image_web
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
characters:
dependency: transitive
description:
@@ -454,6 +475,20 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_blurhash:
dependency: transitive
description:
name: flutter_blurhash
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.0"
flutter_cache_manager:
dependency: "direct main"
description:
name: flutter_cache_manager
url: "https://pub.dartlang.org"
source: hosted
version: "3.3.0"
flutter_launcher_icons:
dependency: "direct dev"
description:
@@ -709,6 +744,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
octo_image:
dependency: transitive
description:
name: octo_image
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
overseerr:
dependency: "direct main"
description:
@@ -821,6 +863,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.4"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.11.1"
percent_indicator:
dependency: "direct main"
description:
@@ -919,6 +968,13 @@ packages:
relative: true
source: path
version: "2.1.1+1"
rxdart:
dependency: transitive
description:
name: rxdart
url: "https://pub.dartlang.org"
source: hosted
version: "0.27.3"
share_plus:
dependency: "direct main"
description:
@@ -1106,6 +1162,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
sqflite:
dependency: transitive
description:
name: sqflite
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
stack_trace:
dependency: "direct main"
description:
@@ -1162,6 +1232,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
synchronized:
dependency: transitive
description:
name: synchronized
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.0"
table_calendar:
dependency: "direct main"
description:
@@ -1373,5 +1450,5 @@ packages:
source: hosted
version: "3.1.0"
sdks:
dart: ">=2.14.0 <3.0.0"
dart: ">=2.15.0 <3.0.0"
flutter: ">=2.5.0"

View File

@@ -1,6 +1,6 @@
name: lunasea
description: Self-Hosted Controller
version: 6.0.0+60000003
version: 6.0.0+60000004
publish_to: 'none'
environment:
sdk: ">=2.7.0 <3.0.0"
@@ -9,6 +9,8 @@ dependencies:
flutter:
sdk: flutter
badges: ^2.0.2
bitsdojo_window: ^0.1.1+1
cached_network_image: ^3.2.0
cloud_firestore: ^3.1.5
convert: ^3.0.1
dio: ^4.0.4
@@ -26,6 +28,7 @@ dependencies:
fl_chart: ^0.40.6
flash: ^2.0.3+1
fluro: ^2.0.3
flutter_cache_manager: ^3.3.0
flutter_spinkit: ^5.1.0
google_nav_bar: ^5.0.5
hive: ^2.0.5
@@ -59,7 +62,6 @@ dependencies:
wake_on_lan:
path: packages/wake_on_lan
xml: ^5.3.1
bitsdojo_window: ^0.1.1+1
dev_dependencies:
build_runner: ^2.1.7

View File

@@ -1,12 +0,0 @@
#!/usr/bin/env bash
# Remove old builds
rm -rf output/*.aab
# Clean and build
flutter clean
flutter build appbundle
# Copy APKs to root of project
mkdir -p output
cp build/app/outputs/bundle/release/app-release.aab output/LunaSea-release.aab
# Remove build files
rm -rf build

View File

@@ -1,14 +0,0 @@
#!/usr/bin/env bash
# Remove old builds
rm -rf output/*.apk
# Clean and build
flutter clean
flutter build apk --split-per-abi
# Copy APKs to root of project
mkdir -p output
cp build/app/outputs/apk/release/app-armeabi-v7a-release.apk output/LunaSea-armeabi-v7a-release.apk
cp build/app/outputs/apk/release/app-arm64-v8a-release.apk output/LunaSea-arm64-v8a-release.apk
cp build/app/outputs/apk/release/app-x86_64-release.apk output/LunaSea-x86_64-release.apk
# Remove build files
rm -rf build

View File

@@ -1,14 +0,0 @@
#!/usr/bin/env bash
# Remove old builds
rm -rf build
rm -rf output/*.ipa
# Clean and build
flutter clean
flutter build ipa --export-options-plist=ios/ExportOptions.plist
# Copy IPA to root of project
mkdir -p output
cp build/ios/ipa/LunaSea.ipa output/LunaSea-arm64-release.ipa
# Remove build files
rm -rf build
rm -rf ios/build

59
shaders/android_sksl.json Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long