From 6afd5eefad8f100093cf9cf160f3f574641b1cbb Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 30 Nov 2023 17:56:41 -0500 Subject: [PATCH 01/12] Remove timestamp from follow requests because it is the timestamp of account creation --- lib/controls/notifications_control.dart | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/controls/notifications_control.dart b/lib/controls/notifications_control.dart index d38dce6..328927d 100644 --- a/lib/controls/notifications_control.dart +++ b/lib/controls/notifications_control.dart @@ -142,12 +142,14 @@ class NotificationControl extends StatelessWidget { onTapUrl: (_) async => onTap!(), ), ), - subtitle: GestureDetector( - onTap: onTap, - child: Text( - ElapsedDateUtils.epochSecondsToString(notification.timestamp), - ), - ), + subtitle: notification.type == NotificationType.follow_request + ? null + : GestureDetector( + onTap: onTap, + child: Text( + ElapsedDateUtils.epochSecondsToString(notification.timestamp), + ), + ), trailing: notification.dismissed || notification.type == NotificationType.direct_message ? null From 7afc398db4505c9ac2867a7a15fabf70c595b01d Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Tue, 5 Dec 2023 07:48:33 -0500 Subject: [PATCH 02/12] Bump version to v0.10.0 --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 27b121d..f86a0fd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: relatica description: A mobile and desktop client for interacting with the Friendica social network publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 0.9.0 +version: 0.10.0 environment: sdk: '>=3.0.0 <4.0.0' From 45f16fa849fa4ce57e065f37c9ec912cb2766f6a Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Tue, 5 Dec 2023 07:57:43 -0500 Subject: [PATCH 03/12] Add count of users in view of circle members --- lib/screens/circle_editor_screen.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/screens/circle_editor_screen.dart b/lib/screens/circle_editor_screen.dart index bae8c51..d354a69 100644 --- a/lib/screens/circle_editor_screen.dart +++ b/lib/screens/circle_editor_screen.dart @@ -191,7 +191,7 @@ class _CircleEditorScreenState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('Circle Members:', + Text('Circle Members (${members.length}):', style: Theme.of(context).textTheme.headlineSmall), IconButton( onPressed: () { From dc3107f3920736b391e6002fa437288e7a891a07 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Tue, 21 May 2024 15:06:09 -0400 Subject: [PATCH 04/12] CocoaPods tweaks with latest XCode --- ios/Flutter/AppFrameworkInfo.plist | 2 +- ios/Podfile.lock | 4 +- ios/Runner.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- macos/Podfile.lock | 2 +- macos/Runner.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- pubspec.lock | 74 +++++++++++++------ 8 files changed, 61 insertions(+), 29 deletions(-) diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 9625e10..7c56964 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/ios/Podfile.lock b/ios/Podfile.lock index e4472cc..074b413 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -166,7 +166,7 @@ SPEC CHECKSUMS: DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 file_picker: 15fd9539e4eb735dc54bae8c0534a7a9511a03de - Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_file_dialog: 4c014a45b105709a27391e266c277d7e588e9299 flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be flutter_web_auth_2: 051cf9f5dc366f31b5dcc4e2952c2b954767be8a @@ -192,4 +192,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 1df1bb3ed89ef4be6115286519e24a9fad12e640 -COCOAPODS: 1.14.2 +COCOAPODS: 1.15.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 981076a..aaa2d82 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -157,7 +157,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a6b826d..5e31d3d 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ =3.0.0 <4.0.0" + dart: ">=3.2.0-0 <4.0.0" flutter: ">=3.10.0" From 2e9b7fd1f890d79dd20e5f6f3e627a38368ce2f8 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Tue, 21 May 2024 15:07:06 -0400 Subject: [PATCH 05/12] Add v0.10.0 Changelog update --- CHANGELOG.md | 62 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d8be834..406bb4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,64 +1,88 @@ # Relatica Change Log +## Version 0.10.0 (beta) + +* Changes + * Add user count in the Circles Management screen + ## Version 0.9.0 (beta) * Changes * Sign in screen has a better flow and layout to make it less confusing * Notifications screen has a cleaner look when no notifications exist * Timeline screens have a cleaner look when no posts exist - * Clicking anywhere on a post/comment in the status search results will open post. The "Go To Post/Comment" menu + * Clicking anywhere on a post/comment in the status search results will open post. The "Go To + Post/Comment" menu option is still there. * Drag down to refresh timeline will clear and reload the timeline from scratch after a warning. * Fixes * Search screen bug with initial search not updating screen correctly addressed - * Multiple images showing up for the same post has been fixed for D* reshares and ActivityPub posts with link + * Multiple images showing up for the same post has been fixed for D* reshares and ActivityPub + posts with link previews. that embedded the same image as an image attachment. * Capitalization in ALT Text field editors should be sentence now. * Maximum thread rendering depth is set to 5. * New Features - * When a user clicks on a tag in a post it opens the search onto their local server not the original post/comment's + * When a user clicks on a tag in a post it opens the search onto their local server not the + original post/comment's server - * Log entry viewer screen with ability to filter, export individual entries, or the entire table to a JSON file for + * Log entry viewer screen with ability to filter, export individual entries, or the entire table + to a JSON file for helping with debugging. ## Version 0.8.0 (beta) * Changes - * "Groups" have been renamed "Circles" to match the upcoming Friendica release nomenclature change. - * Timeline selector has now been merged into one big list with a divider between the standard types and the circles - * User Profile screen buttons have been rearranged so that (un)block and (un)follow are on their own line + * "Groups" have been renamed "Circles" to match the upcoming Friendica release nomenclature + change. + * Timeline selector has now been merged into one big list with a divider between the standard + types and the circles + * User Profile screen buttons have been rearranged so that (un)block and (un)follow are on their + own line * Notifications processing has been streamlined again, especially for older notifications - * Contacts information is updated as the data comes in (may need to pull this out since it can temporarily show + * Contacts information is updated as the data comes in (may need to pull this out since it can + temporarily show incorrect connection information before the followers mapping occurs) - * Link preview has a new more efficient layout with the photo on top and the text caption underneath + * Link preview has a new more efficient layout with the photo on top and the text caption + underneath * Sign-in screen has been changed to be more user-friendly - * Start-up splash screen has more prompts to let users know what is happening and timeouts when trying to - communicate with the servers. If nothing is logged in it drops to the sign in screen rather than staying on splash + * Start-up splash screen has more prompts to let users know what is happening and timeouts when + trying to + communicate with the servers. If nothing is logged in it drops to the sign in screen rather + than staying on splash screen. * Streamlined the visibility selection in the post/comment editor - * Interactions toolbar has been streamlined. Navigating to the screen with details on who liked/reshared etc. is now - in menu and clicking in any free space in the post card area (except around images/videos since that is + * Interactions toolbar has been streamlined. Navigating to the screen with details on who + liked/reshared etc. is now + in menu and clicking in any free space in the post card area (except around images/videos + since that is technically part of a media carousel control). * When saving images on mobile it writes to the photo gallery than the files area. * Fixes - * Adding/removing of users from Circles properly reflects on profile screen (before needed to navigate away and back + * Adding/removing of users from Circles properly reflects on profile screen (before needed to + navigate away and back to get it to appear) * Multiclicking on notifications will not cause multiple navigations to that post/comment * Multiclicking on post/comment creation will not cause multiple creation events * Loading newer notifications works. * Changing profiles when on the Contacts or Search screen now properly reflect the change - * Fix privacy levels on response to Mastodon direct messages. Previously it would expand the privacy to include + * Fix privacy levels on response to Mastodon direct messages. Previously it would expand the + privacy to include followers * Image/video size in post/comment viewer doesn't overflow the boundaries of the card * Unresharing a post doesn't cause it to disappear - * Image viewer screen has better fill and image text appears after clicking ALT button rather than as a caption - * Resharing of comments in Friendica is spotty through the UI and even more so through the API. It has been removed + * Image viewer screen has better fill and image text appears after clicking ALT button rather + than as a caption + * Resharing of comments in Friendica is spotty through the UI and even more so through the API. + It has been removed for the time being - * PNG images always displayed very low res thumbnails that Friendica generates. PNGs now always load the full size + * PNG images always displayed very low res thumbnails that Friendica generates. PNGs now always + load the full size image, for previews and full views * New Features - * Can click on the visibility icon on posts to get a dialog box listing the visibility of the post/comment + * Can click on the visibility icon on posts to get a dialog box listing the visibility of the + post/comment ## Version 0.7.2 (beta) From 7370422dd6720f5bac9488a959c8e45a2be51768 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 20 Jun 2024 16:52:24 -0400 Subject: [PATCH 06/12] Send Relatica/ as User Agent on HTTP requests --- lib/globals.dart | 3 +++ lib/main.dart | 11 +++++++++ lib/utils/network_utils.dart | 20 ++++++++++++---- macos/Podfile.lock | 2 +- pubspec.lock | 46 +++++++++++++++++++++--------------- pubspec.yaml | 3 ++- 6 files changed, 60 insertions(+), 25 deletions(-) diff --git a/lib/globals.dart b/lib/globals.dart index 03050e3..7642b10 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -19,6 +19,9 @@ final platformIsDesktop = !platformIsMobile; final useImagePicker = kIsWeb || platformIsMobile; +String appVersion = ''; +String userAgent = ''; + const usePhpDebugging = false; const maxViewPortalHeight = 750.0; diff --git a/lib/main.dart b/lib/main.dart index 7e1a85d..8650e76 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import 'package:media_kit/media_kit.dart'; import 'package:multi_trigger_autocomplete/multi_trigger_autocomplete.dart'; +import 'package:package_info_plus/package_info_plus.dart'; import 'package:provider/provider.dart'; import 'app_theme.dart'; @@ -45,6 +46,7 @@ void main() async { await fixLetsEncryptCertOnOldAndroid(); await dependencyInjectionInitialization(); + await setupPackageInfoAndUserAgent(); runApp(DevicePreview( enabled: !kReleaseMode && enablePreview, @@ -52,6 +54,15 @@ void main() async { )); } +Future setupPackageInfoAndUserAgent() async { + PackageInfo packageInfo = await PackageInfo.fromPlatform(); + appVersion = packageInfo.version; + userAgent = 'Relatica/$appVersion'; + print('App Version: $appVersion'); + print('User Agent: $userAgent'); + print(''); +} + class App extends StatelessWidget { const App({super.key}); diff --git a/lib/utils/network_utils.dart b/lib/utils/network_utils.dart index c6db2b4..f7178f8 100644 --- a/lib/utils/network_utils.dart +++ b/lib/utils/network_utils.dart @@ -19,6 +19,18 @@ enum _RequestType { const _expireDuration = Duration(seconds: 2); +class _UserAgentClient extends http.BaseClient { + http.Client _inner; + + _UserAgentClient() : _inner = http.Client(); + + @override + Future send(http.BaseRequest request) { + request.headers['user-agent'] = userAgent; + return _inner.send(request); + } +} + class _CachedResponse { final _RequestType requestType; final Uri requestUri; @@ -112,7 +124,7 @@ class _ExpiringRequestCache { print('Returning cached response for $type => $url'); response = _responses[requestStub]?.response ?? http.Response('', 555); } else { - final request = http.get( + final request = _UserAgentClient().get( url, headers: headers, ); @@ -184,7 +196,7 @@ FutureResult postUrl( requestHeaders['Cookie'] = 'XDEBUG_SESSION=PHPSTORM;path=/'; } try { - final request = http.post( + final request = _UserAgentClient().post( url, headers: requestHeaders, body: jsonEncode(body), @@ -215,7 +227,7 @@ FutureResult putUrl( }) async { _logger.fine('PUT: $url \n Body: $body'); try { - final request = http.put( + final request = _UserAgentClient().put( url, headers: headers, body: jsonEncode(body), @@ -246,7 +258,7 @@ FutureResult deleteUrl( }) async { _logger.fine('DELETE: $url'); try { - final request = http.delete( + final request = _UserAgentClient().delete( url, headers: headers, body: jsonEncode(body), diff --git a/macos/Podfile.lock b/macos/Podfile.lock index df9ce18..641b848 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -119,7 +119,7 @@ SPEC CHECKSUMS: media_kit_video: c75b07f14d59706c775778e4dd47dd027de8d1e5 ObjectBox: e7ff611291a0663380e0736b46786bcd077294ff objectbox_flutter_libs: 32997857c213cbcc6f9b25ffc73e1e3c34ea3c8e - package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce + package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 screen_brightness_macos: 2d6d3af2165592d9a55ffcd95b7550970e41ebda shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 diff --git a/pubspec.lock b/pubspec.lock index 9daf2bd..9a8d641 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -253,10 +253,10 @@ packages: dependency: transitive description: name: dbus - sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" + sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac" url: "https://pub.dev" source: hosted - version: "0.7.8" + version: "0.7.10" desktop_window: dependency: "direct main" description: @@ -309,10 +309,10 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" file: dependency: transitive description: @@ -950,21 +950,21 @@ packages: source: hosted version: "2.1.0" package_info_plus: - dependency: transitive + dependency: "direct main" description: name: package_info_plus - sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" + sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "8.0.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.0" path: dependency: "direct main" description: @@ -1049,10 +1049,10 @@ packages: dependency: transitive description: name: plugin_platform_interface - sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.6" + version: "2.1.8" pointycastle: dependency: transitive description: @@ -1567,18 +1567,18 @@ packages: dependency: transitive description: name: wakelock_plus - sha256: f45a6c03aa3f8322e0a9d7f4a0482721c8789cb41d555407367650b8f9c26018 + sha256: "14758533319a462ffb5aa3b7ddb198e59b29ac3b02da14173a1715d65d4e6e68" url: "https://pub.dev" source: hosted - version: "1.1.3" + version: "1.2.5" wakelock_plus_platform_interface: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: "40fabed5da06caff0796dc638e1f07ee395fb18801fbff3255a2372db2d80385" + sha256: "422d1cdbb448079a8a62a5a770b69baa489f8f7ca21aef47800c726d404f9d16" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.1" watcher: dependency: transitive description: @@ -1587,6 +1587,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" web_socket_channel: dependency: transitive description: @@ -1599,10 +1607,10 @@ packages: dependency: transitive description: name: win32 - sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" + sha256: "0eaf06e3446824099858367950a813472af675116bf63f008a4c2a75ae13e9cb" url: "https://pub.dev" source: hosted - version: "5.0.9" + version: "5.5.0" win32_registry: dependency: transitive description: @@ -1644,5 +1652,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0-0 <4.0.0" - flutter: ">=3.10.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.19.0" diff --git a/pubspec.yaml b/pubspec.yaml index f86a0fd..41f35f4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -2,7 +2,7 @@ name: relatica description: A mobile and desktop client for interacting with the Friendica social network publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 0.10.0 +version: 0.10.1 environment: sdk: '>=3.0.0 <4.0.0' @@ -38,6 +38,7 @@ dependencies: network_to_file_image: ^4.0.1 objectbox: ^2.3.1 objectbox_flutter_libs: ^2.3.1 + package_info_plus: ^8.0.0 path: ^1.8.2 path_provider: ^2.0.11 provider: ^6.0.4 From 04b6da1f8efdef4fd54799fd899c61a0c0f80b3b Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 20 Jun 2024 16:54:16 -0400 Subject: [PATCH 07/12] Remove prints from setupPackageInfoAndUserAgent main.dart --- lib/main.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 8650e76..50f4974 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -58,9 +58,6 @@ Future setupPackageInfoAndUserAgent() async { PackageInfo packageInfo = await PackageInfo.fromPlatform(); appVersion = packageInfo.version; userAgent = 'Relatica/$appVersion'; - print('App Version: $appVersion'); - print('User Agent: $userAgent'); - print(''); } class App extends StatelessWidget { From f45ace3567a083c1df14c292069093bd1d65c745 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 20 Jun 2024 17:45:52 -0400 Subject: [PATCH 08/12] Update CHANGELOG for 0.10.1 --- CHANGELOG.md | 6 ++++++ ios/Podfile.lock | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 406bb4a..41bd846 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Relatica Change Log +## Version 0.10.1 (beta) + +* Changes + * Adds Relatica User Agent string to API requests so that Friendica servers running >2023.06 + with blockbot enabled will allow requests. + ## Version 0.10.0 (beta) * Changes diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 074b413..2bc8010 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -178,7 +178,7 @@ SPEC CHECKSUMS: media_kit_video: 5da63f157170e5bf303bf85453b7ef6971218a2e ObjectBox: e7ff611291a0663380e0736b46786bcd077294ff objectbox_flutter_libs: 0948d6feb7de4f7edaebc7a898b9e85b7fc2bc89 - package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85 + package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 screen_brightness_ios: 715ca807df953bf676d339f11464e438143ee625 SDWebImage: 96e0c18ef14010b7485210e92fac888587ebb958 @@ -188,7 +188,7 @@ SPEC CHECKSUMS: url_launcher_ios: 68d46cc9766d0c41dbdc884310529557e3cd7a86 video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126 volume_controller: 531ddf792994285c9b17f9d8a7e4dcdd29b3eae9 - wakelock_plus: 8b09852c8876491e4b6d179e17dfe2a0b5f60d47 + wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1 PODFILE CHECKSUM: 1df1bb3ed89ef4be6115286519e24a9fad12e640 From feb799dd207a8f742b23c2a81d97cec81a4954fa Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 20 Jun 2024 18:24:14 -0400 Subject: [PATCH 09/12] Add user agent data for image upload/download requests --- .../login_aware_cached_network_image.dart | 5 +- lib/friendica_client/friendica_client.dart | 2 + lib/utils/network_utils.dart | 14 +-- lib/utils/opengraph_preview_grabber.dart | 4 +- pubspec.lock | 96 +++++++------------ pubspec.yaml | 2 +- 6 files changed, 47 insertions(+), 76 deletions(-) diff --git a/lib/controls/login_aware_cached_network_image.dart b/lib/controls/login_aware_cached_network_image.dart index f8bb5c1..cd901f4 100644 --- a/lib/controls/login_aware_cached_network_image.dart +++ b/lib/controls/login_aware_cached_network_image.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import 'package:provider/provider.dart'; +import '../globals.dart'; import '../services/auth_service.dart'; class LoginAwareCachedNetworkImage extends StatelessWidget { @@ -22,12 +23,12 @@ class LoginAwareCachedNetworkImage extends StatelessWidget { Widget build(BuildContext context) { final profile = context.watch().currentProfile; - Map? headers; + Map headers = {'user-agent': userAgent}; try { final imageServer = Uri.parse(imageUrl).host; if (imageServer == profile.serverName) { - headers = {'Authorization': profile.credentials.authHeaderValue}; + headers['Authorization'] = profile.credentials.authHeaderValue; } } catch (e) { _logger.severe('Error Parsing ImageURL: $e'); diff --git a/lib/friendica_client/friendica_client.dart b/lib/friendica_client/friendica_client.dart index 7a0d6b7..b3a98ef 100644 --- a/lib/friendica_client/friendica_client.dart +++ b/lib/friendica_client/friendica_client.dart @@ -717,6 +717,7 @@ class RemoteFileClient extends FriendicaClient { url, headers: { 'Authorization': _profile.credentials.authHeaderValue, + 'user-agent': userAgent, }, ); @@ -742,6 +743,7 @@ class RemoteFileClient extends FriendicaClient { final postUri = Uri.parse('https://$serverName/api/friendica/photo/create'); final request = http.MultipartRequest('POST', postUri); request.headers['Authorization'] = _profile.credentials.authHeaderValue; + request.headers['user-agent'] = userAgent; if (usePhpDebugging) { request.headers['Cookie'] = 'XDEBUG_SESSION=PHPSTORM;path=/'; } diff --git a/lib/utils/network_utils.dart b/lib/utils/network_utils.dart index f7178f8..8fe36a7 100644 --- a/lib/utils/network_utils.dart +++ b/lib/utils/network_utils.dart @@ -19,10 +19,10 @@ enum _RequestType { const _expireDuration = Duration(seconds: 2); -class _UserAgentClient extends http.BaseClient { - http.Client _inner; +class RelaticaUserAgentHttpClient extends http.BaseClient { + final http.Client _inner; - _UserAgentClient() : _inner = http.Client(); + RelaticaUserAgentHttpClient() : _inner = http.Client(); @override Future send(http.BaseRequest request) { @@ -124,7 +124,7 @@ class _ExpiringRequestCache { print('Returning cached response for $type => $url'); response = _responses[requestStub]?.response ?? http.Response('', 555); } else { - final request = _UserAgentClient().get( + final request = RelaticaUserAgentHttpClient().get( url, headers: headers, ); @@ -196,7 +196,7 @@ FutureResult postUrl( requestHeaders['Cookie'] = 'XDEBUG_SESSION=PHPSTORM;path=/'; } try { - final request = _UserAgentClient().post( + final request = RelaticaUserAgentHttpClient().post( url, headers: requestHeaders, body: jsonEncode(body), @@ -227,7 +227,7 @@ FutureResult putUrl( }) async { _logger.fine('PUT: $url \n Body: $body'); try { - final request = _UserAgentClient().put( + final request = RelaticaUserAgentHttpClient().put( url, headers: headers, body: jsonEncode(body), @@ -258,7 +258,7 @@ FutureResult deleteUrl( }) async { _logger.fine('DELETE: $url'); try { - final request = _UserAgentClient().delete( + final request = RelaticaUserAgentHttpClient().delete( url, headers: headers, body: jsonEncode(body), diff --git a/lib/utils/opengraph_preview_grabber.dart b/lib/utils/opengraph_preview_grabber.dart index 5eb7c57..efcddea 100644 --- a/lib/utils/opengraph_preview_grabber.dart +++ b/lib/utils/opengraph_preview_grabber.dart @@ -1,11 +1,11 @@ import 'dart:convert'; import 'package:html/parser.dart'; -import 'package:http/http.dart' as http; import 'package:result_monad/result_monad.dart'; import '../models/exec_error.dart'; import '../models/link_preview_data.dart'; +import 'network_utils.dart'; const ogTitleKey = 'og:title'; const ogDescriptionKey = 'og:description'; @@ -35,7 +35,7 @@ FutureResult getLinkPreview(String url) async { FutureResult>, dynamic> _getOpenGraphData( String url) async { return runCatchingAsync>>(() async { - final response = await http.get(Uri.parse(url)); + final response = await RelaticaUserAgentHttpClient().get(Uri.parse(url)); if (response.statusCode != 200) { return buildErrorResult( type: ErrorType.serverError, diff --git a/pubspec.lock b/pubspec.lock index 9a8d641..1b04765 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.17.2" color_blindness: dependency: "direct main" description: @@ -309,10 +309,10 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.0" file: dependency: transitive description: @@ -733,30 +733,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.8.1" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" - url: "https://pub.dev" - source: hosted - version: "10.0.0" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 - url: "https://pub.dev" - source: hosted - version: "2.0.1" lints: dependency: transitive description: @@ -785,18 +761,18 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.5.0" media_kit: dependency: "direct main" description: @@ -873,10 +849,10 @@ packages: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.9.1" mime: dependency: transitive description: @@ -953,26 +929,26 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 + sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "4.2.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "2.0.1" path: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.8.3" path_parsing: dependency: transitive description: @@ -1303,18 +1279,18 @@ packages: dependency: "direct main" description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.1" stream_transform: dependency: transitive description: @@ -1359,10 +1335,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.6.0" time_machine: dependency: "direct main" description: @@ -1547,14 +1523,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.17" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 - url: "https://pub.dev" - source: hosted - version: "13.0.0" volume_controller: dependency: transitive description: @@ -1567,18 +1535,18 @@ packages: dependency: transitive description: name: wakelock_plus - sha256: "14758533319a462ffb5aa3b7ddb198e59b29ac3b02da14173a1715d65d4e6e68" + sha256: f268ca2116db22e57577fb99d52515a24bdc1d570f12ac18bb762361d43b043d url: "https://pub.dev" source: hosted - version: "1.2.5" + version: "1.1.4" wakelock_plus_platform_interface: dependency: transitive description: name: wakelock_plus_platform_interface - sha256: "422d1cdbb448079a8a62a5a770b69baa489f8f7ca21aef47800c726d404f9d16" + sha256: "40fabed5da06caff0796dc638e1f07ee395fb18801fbff3255a2372db2d80385" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.1.0" watcher: dependency: transitive description: @@ -1591,10 +1559,10 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -1607,10 +1575,10 @@ packages: dependency: transitive description: name: win32 - sha256: "0eaf06e3446824099858367950a813472af675116bf63f008a4c2a75ae13e9cb" + sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574 url: "https://pub.dev" source: hosted - version: "5.5.0" + version: "5.1.1" win32_registry: dependency: transitive description: @@ -1652,5 +1620,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.3.0 <4.0.0" - flutter: ">=3.19.0" + dart: ">=3.1.0 <4.0.0" + flutter: ">=3.10.0" diff --git a/pubspec.yaml b/pubspec.yaml index 41f35f4..12279d1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -38,7 +38,7 @@ dependencies: network_to_file_image: ^4.0.1 objectbox: ^2.3.1 objectbox_flutter_libs: ^2.3.1 - package_info_plus: ^8.0.0 + package_info_plus: ^4.2.0 path: ^1.8.2 path_provider: ^2.0.11 provider: ^6.0.4 From fcf56cbf98af396d3f09d3239d1c61f2a64b4db6 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 20 Jun 2024 18:48:08 -0400 Subject: [PATCH 10/12] Add Version strings to settings and splash screens --- CHANGELOG.md | 1 + lib/screens/settings_screen.dart | 13 +++++++++++++ lib/screens/splash.dart | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41bd846..138fd95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Changes * Adds Relatica User Agent string to API requests so that Friendica servers running >2023.06 with blockbot enabled will allow requests. + * Adds version string to the settings screen to help users identify version installed ## Version 0.10.0 (beta) diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 4fe2f86..49166e5 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -28,6 +28,7 @@ class SettingsScreen extends StatelessWidget { child: ResponsiveMaxWidth( child: ListView( children: [ + buildVersionString(), buildLowBandwidthWidget(settings), buildThemeWidget(settings), if (!kReleaseMode) buildColorBlindnessTestSettings(settings), @@ -40,6 +41,18 @@ class SettingsScreen extends StatelessWidget { )); } + Widget buildVersionString() { + return Center( + child: Text( + 'Relatica $appVersion', + style: const TextStyle( + decoration: TextDecoration.underline, + fontWeight: FontWeight.bold, + ), + ), + ); + } + Widget buildLowBandwidthWidget(SettingsService settings) { return ListTile( title: const Text('Low bandwidth mode'), diff --git a/lib/screens/splash.dart b/lib/screens/splash.dart index c25fc9c..ba0ec3c 100644 --- a/lib/screens/splash.dart +++ b/lib/screens/splash.dart @@ -29,7 +29,7 @@ class SplashScreen extends StatelessWidget { SvgPicture.asset('icon/relatica_logo.svg', width: 128), const VerticalPadding(), Text( - 'Relatica', + 'Relatica $appVersion', style: Theme.of(context).textTheme.headlineLarge, ), const VerticalPadding(), From d36f7781f70380f2bf5f23acb34d927e3d229196 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 20 Jun 2024 19:23:27 -0400 Subject: [PATCH 11/12] Update Podfiles for Apple builds --- ios/Podfile.lock | 4 +-- macos/Podfile.lock | 2 +- pubspec.lock | 74 ++++++++++++++++++++++++++++++---------------- 3 files changed, 52 insertions(+), 28 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 2bc8010..074b413 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -178,7 +178,7 @@ SPEC CHECKSUMS: media_kit_video: 5da63f157170e5bf303bf85453b7ef6971218a2e ObjectBox: e7ff611291a0663380e0736b46786bcd077294ff objectbox_flutter_libs: 0948d6feb7de4f7edaebc7a898b9e85b7fc2bc89 - package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c + package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85 path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 screen_brightness_ios: 715ca807df953bf676d339f11464e438143ee625 SDWebImage: 96e0c18ef14010b7485210e92fac888587ebb958 @@ -188,7 +188,7 @@ SPEC CHECKSUMS: url_launcher_ios: 68d46cc9766d0c41dbdc884310529557e3cd7a86 video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126 volume_controller: 531ddf792994285c9b17f9d8a7e4dcdd29b3eae9 - wakelock_plus: 78ec7c5b202cab7761af8e2b2b3d0671be6c4ae1 + wakelock_plus: 8b09852c8876491e4b6d179e17dfe2a0b5f60d47 PODFILE CHECKSUM: 1df1bb3ed89ef4be6115286519e24a9fad12e640 diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 641b848..df9ce18 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -119,7 +119,7 @@ SPEC CHECKSUMS: media_kit_video: c75b07f14d59706c775778e4dd47dd027de8d1e5 ObjectBox: e7ff611291a0663380e0736b46786bcd077294ff objectbox_flutter_libs: 32997857c213cbcc6f9b25ffc73e1e3c34ea3c8e - package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c + package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 screen_brightness_macos: 2d6d3af2165592d9a55ffcd95b7550970e41ebda shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 diff --git a/pubspec.lock b/pubspec.lock index 1b04765..2f8e2a7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -181,10 +181,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" color_blindness: dependency: "direct main" description: @@ -733,6 +733,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.8.1" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://pub.dev" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://pub.dev" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://pub.dev" + source: hosted + version: "2.0.1" lints: dependency: transitive description: @@ -761,18 +785,18 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" media_kit: dependency: "direct main" description: @@ -849,10 +873,10 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.11.0" mime: dependency: transitive description: @@ -945,10 +969,10 @@ packages: dependency: "direct main" description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_parsing: dependency: transitive description: @@ -1279,18 +1303,18 @@ packages: dependency: "direct main" description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" stream_transform: dependency: transitive description: @@ -1335,10 +1359,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.6.1" time_machine: dependency: "direct main" description: @@ -1523,6 +1547,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.17" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://pub.dev" + source: hosted + version: "13.0.0" volume_controller: dependency: transitive description: @@ -1555,14 +1587,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - web: - dependency: transitive - description: - name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 - url: "https://pub.dev" - source: hosted - version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -1620,5 +1644,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.1.0 <4.0.0" + dart: ">=3.2.0-0 <4.0.0" flutter: ">=3.10.0" From d7dbb66d29f288ffa08c7ae3727d79a6b4edb4c4 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 20 Jun 2024 19:23:35 -0400 Subject: [PATCH 12/12] Update install locations for v0.10.1 --- install.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install.md b/install.md index f42e4ed..c1634fb 100644 --- a/install.md +++ b/install.md @@ -6,12 +6,12 @@ For more information about the current beta testing program # Latest Binaries: -* Android v0.9.0 Is available by invitation through Play Store beta (please see me for access) - or [this self-installable ZIP file](https://mysocialportal-relatica.nyc3.cdn.digitaloceanspaces.com/v0.9.0/relatica_v0.9.0.apk.zip) -* iPhone/iPad v0.9.0: This is only available through TestFlight. Please contact me for access. -* [Windows (Intel) v0.9.0](https://mysocialportal-relatica.nyc3.cdn.digitaloceanspaces.com/v0.9.0/relatica_v0.9.0_win_x64.zip) -* macOS v0.9.0:This is only available through TestFlight. Please contact me for access. -* [Linux v0.9.0 (tested on Ubuntu 20 and 22)](https://mysocialportal-relatica.nyc3.cdn.digitaloceanspaces.com/v0.9.0/relatica_v0.9.0_linux_x64.zip) +* Android v0.10.1 Is available by invitation through Play Store beta (please see me for access) + or [this self-installable ZIP file](https://mysocialportal-relatica.nyc3.cdn.digitaloceanspaces.com/v0.10.1/relatica_v0.10.1.apk.zip) +* iPhone/iPad v0.10.1: This is only available through TestFlight. Please contact me for access. +* [Windows (Intel) v0.10.1](https://mysocialportal-relatica.nyc3.cdn.digitaloceanspaces.com/v0.10.1/relatica_v0.10.1_win_x64.zip) +* macOS v0.10.1:This is only available through TestFlight. Please contact me for access. +* [Linux v0.10.1 (tested on Ubuntu 20 and 22)](https://mysocialportal-relatica.nyc3.cdn.digitaloceanspaces.com/v0.10.1/relatica_v0.10.1_linux_x64.zip) ## Mobile