diff --git a/README.md b/README.md index f574f3c..a86db4d 100644 --- a/README.md +++ b/README.md @@ -10,15 +10,17 @@ A Flutter application for interfacing with the Friendica social network. * Have a native app client on mobile (Apple and Android) and desktop (Linux, Mac, and Windows) * Providing a simpler UX for people to interact with Friendica -* Providing a better low-bandwidth environment experience than the web-app version running in a browser -* Reduce server side loading in the new fediverse era by doing techniques like leveraging paging of comments, local +* Providing a better low-bandwidth environment experience than the web-app version running in a + browser +* Reduce server side loading in the new fediverse era by doing techniques like leveraging paging of + comments, local caching, and lazy loading. -* Provide more intuitive mechanisms for adding things like Content Warning/Spoiler text and image ALT-text +* Provide more intuitive mechanisms for adding things like Content Warning/Spoiler text and image + ALT-text ## Current Status -The project is currently in an early-beta state. If you'd like to use it at this time please -see the notes at [Relatica Beta Testing Program](beta-program.md). +The project has now been released but is still in active development. It is possible to install it now by following the [install instructions](install.md). @@ -26,6 +28,8 @@ If you would like to contribute please see [this Developers Notes](developers.md ## Community and Support +[Support email](mailto:support@myportal.social) + [Relatica Community Matrix Discussion Room](https://matrix.to/#/#relatica-community:myportal.social) [Issue Tracker](https://gitlab.com/mysocialportal/relatica/-/issues) @@ -34,7 +38,8 @@ If you would like to contribute please see [this Developers Notes](developers.md * More coders and testers are always welcome * CI/CD -* Packaging for Linux operating systems using Flatpak, Snap, etc. (or individual packages per operating system) +* Packaging for Linux operating systems using Flatpak, Snap, etc. (or individual packages per + operating system) * UI/UX cleaning up * Graphics design for logo, website art * Documentation diff --git a/beta-program.md b/beta-program.md deleted file mode 100644 index 2fa307a..0000000 --- a/beta-program.md +++ /dev/null @@ -1,174 +0,0 @@ -# Relatica Beta Testing Program Notes - -These are notes for the Relatica beta testers. Very import sections of this page -to check are: - -* ["Things that work"](#things-that-work) to see what is working well -* ["Things that are broken"](#broken-and-hopefully-fixed-in-the-very-near-future) so - you know how to avoid problems using the application in its current state, - don't report duplicate bugs, etc. -* ["Cumbersome things"](#cumbersome-and-hopefully-improved-in-the-very-near-future) - for the same reason as the above "broken" things. -* [The CHANGELOG](CHANGELOG.md) to see what has changed with each recent version -* [Install Instructions](install.md) to see how to install the application -* [Community Communications](README.md#community-and-support) to know how to - get in touch with other members of the community, developers, etc. - -## Introduction - -At the present time it is possible to use Relatica as your daily driver for -functions that have already been implemented. I've been using it as my -primary Friendica interactions for over a month as of writing this in -January 2023. However, usable doesn't mean feature complete, even for the -subset of features I want to implement. Usable also doesn't mean bug free -experience. It can still be useful to people which is why I'm opening up -access to it right now. Having said that, this is an early beta program. -Since not everyone that is considering using the software at this point may -be familiar with that aspect of the software development process I -wanted to lay out some expectations before getting into the small details - -### Expectations For Early Beta Testers - -* Things that look like they are finished are not -* A lot of things look very not finished -* Download regular updates to get the latest and greatest features and fixes and feedback -* Check in on the CHANGELOG, Issue tracker, etc. for updates -* Some things that look finished may end up changing to improve overall user experience (the "Who - moved the gas pedal?" problem) -* Don't suffer in silence with problems. The beta program is about getting the feedback to what - works, what doesn't, etc. - Provide feedback via the Matrix room, for interactive discussions, or the GitLab issue tracker for - larger bug tracking. -* Feedback should be productive and specific while being as light a load on the beta tester as - possible: - * BAD: "This thing is crap!" - * BAD: "It crashed!!!!" - * Good: "When I click on a notification box it didn't seem to do anything until I clicked in a - very specific area" - * Good: "The app seemed to freeze up when I kept scrolling down my timeline for a long time ( - like half an hour)" - * Good: "I'm finding X feature hard to use because Y is confusing" - * Good: "I am trying to do X with Friendica but I don't see a way to do it. Could that be - implemented in the app?" - -## Application Status and Roadmap - -### Things that work - -* Logging in with username/password and OAuth. These are stored using the OS specific key vaults -* Having multiple accounts logged in at the same time and switching between them -* Writing public and private posts - * For private posts have to select one of the Groups you have users setup for or all followers. - * Typing @ brings up a list of all known fediverse accounts that the app has ever seen as you - type (but not all that your server has seen) - * Typing # brings up a list of all known hashtags that the app has ever seen as you type (but - not all that your server has seen) - * Very basic markdown (wrapping in stars for bold/italics, bulletted list) - * Explicit link preview builder - * Adding new images to posts - * Image posting with easy means of adding ALT text - * Attaching existing images to posts -* Editing posts and comments -* Resharing posts -* Direct (private) messaging -* Group creation, deletion, renaming -* Server-side searching tied into profiles, posts, hashtags -* Browsing timelines including from groups you've created. In this app "Home" is the same as the " - Network" (grid) button in Frio and "Yours" is the equivalent of the Home button in the app. -* Browsing notifications and marking individual ones read or all read -* Browsing and editing image galleries and the images within it. -* Browsing your contacts or searching contacts that are known by your app -* Adjudicating follow requests -* Going to individual profiles to see their posts, follow/unfollow, add/remove from groups -* A "low bandwidth" mode that defers loading of images until you click on them, unless the app - already has that image cached locally. -* Light/dark mode selection -* Opening posts, comments, and profiles in the "external" browser -* Copying posts, comments, image descriptions, direct messages, urls, etc. -* Playing videos within the app on iOS and Android. -* Refresh timelines, galleries, and posts but loading newer or older posts has - specific buttons (this will probably change in the near future) -* Refresh notifications and contacts gets updates to that respective data (this may - change in the near future) -* Show list of who liked and reshared posts/comments -* Detailed information about users, such as description fields -* Notifications browsing and dismissing -* Search through server using freeform text or "%" wild card for: accounts, statuses, hashtags -* Direct Load links to Fediverse posts and accounts within the app -* Responsive design (limited for now) -* Opening accounts, tags, etc within posts within the app itself through user's home server -* User configurable Server blocking -* Smarter hashtag and user account storage/searching - -### Big things I want to have working in the near future: - -* More timeline types like Comments, "By Activity", etc. -* Fix below identified issues -* Real paging across the board - * Comments -* Offline caching of older content -* Dynamic search of locally known posts and hashtags. -* Make forum posts -* Internationalization -* Better screen reader interactions - -### Further out things I want to have working: - -* Profile editor -* Being able to ignore/unignore users -* Events - -### Things I don't envision implementing in the foreseeable future: - -* Account creation through the application -* Creating new forums through the application -* Site administration -* Adding videos or files to posts - -## General behaviors/problems to be aware of: - -### Broken and hopefully fixed in the very near future: - -* Paging for some of the endpoints either isn't wired in yet or is not working as needed server - side. That includes things like: - * Friend requests - * Comments on posts - * Tags - * Blocked user list - -### Fixed in prior releases but may be issues on older Friendica servers: - -* Sending direct messages only works if you are logged in with username/password due to limitations - of the existing DM (Fixed in Friendica 2023.04) - API. (Fixed in Friendica 2023.04) -* Resharing of Diaspora federated posts is currently broken server side. All other posts should be - reshareable. (Fixed in Friendica 2023.04) -* Content Warnings/Spoiler Text on *posts* aren't federating over to Mastodon well so only use it on - Comments for now (fixed on servers running Friendica 2023.04) -* ALT text on images should not have any quotation marks as it breaks when federating over to - Diaspora for the time being (fixed on servers running Friendica 2023.04) -* Blocked/ignored user's content is still returned by the API (Fixed in Friendica 2023.04) - -### Cumbersome and hopefully improved in the very near future: - -* On Linux you will need to login to the key manager and unlock it before opening the app. Some - Linux versions do this - automatically while others do not. -* The "in fill" problem: Timelines fill only at the ends with at most 20 posts per call. So let's - say you logged in at 09:00 and the initial pulls went from 07:00 to 09:00: - ``` - 07:00=====9:00 - ``` - - While browsing you asked for older posts that pulled posts back to 06:00 and up to the time you - asked for more, say 09:30 so the timeline looks like: - ``` - 06:00=========09:30 - ``` - Now at lunch time you come back and ask for newer posts. It will pull the last 20 posts from 12:00 - which say took you back to 11:00. - The timeline looks contiguous but it really is: - ``` - 06:00=========09:30 11:00=====12:00 - ``` - There may be posts in the 09:30 to 11:00 gap or may not. Right now there is no way to fill diff --git a/install.md b/install.md index cbc4f28..43dbc7a 100644 --- a/install.md +++ b/install.md @@ -1,9 +1,5 @@ # Relatica Installation Instructions -**NOTE: Relatica is in an early beta status. Use at own risk.** -For more information about the current beta testing program -[see the program's notes page](beta-program.md). - # Latest Binaries: * Android v0.15.0 Is available by invitation through Play Store beta (please see me for access) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index bb6307d..558312b 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -188,4 +188,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 1df1bb3ed89ef4be6115286519e24a9fad12e640 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 5e31d3d..c53e2b3 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -48,6 +48,7 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" + enableGPUValidationMode = "1" allowLocationSimulation = "YES"> diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index a6bebb3..3995681 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -48,10 +48,10 @@ UIApplicationSupportsIndirectInputEvents NSCameraUsageDescription - Required for taking photos and recording videos. + Required for taking photos and recording videos to attach to posts/comments. NSMicrophoneUsageDescription - Required for recording videos + Required for recording videos to attach to posts/comments NSPhotoLibraryUsageDescription - Required for loading existing pictures. + Required for loading existing pictures to attach to posts/comments or to save images from posts/comments to the local device. diff --git a/lib/controls/entry_media_attachments/media_uploads_control.dart b/lib/controls/entry_media_attachments/media_uploads_control.dart index b4b2515..621abe2 100644 --- a/lib/controls/entry_media_attachments/media_uploads_control.dart +++ b/lib/controls/entry_media_attachments/media_uploads_control.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:logging/logging.dart'; +import 'package:relatica/globals.dart'; import 'package:result_monad/result_monad.dart'; import '../../models/exec_error.dart'; @@ -51,22 +52,23 @@ class _MediaUploadsControlState extends ConsumerState { Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - IconButton( - onPressed: () async { - await MediaUploadAttachmentHelper - .getNewImagesFromCamera() - .match( - onSuccess: (newEntries) => setState(() => - widget.entryMediaItems.attachments - .addAll(newEntries)), - onError: (error) { - buildSnackbar(context, - 'Error selecting attachments: $error'); - logError(error, _logger); - }); - }, - icon: const Icon(Icons.camera_alt), - ), + if (platformHasCamera) + IconButton( + onPressed: () async { + await MediaUploadAttachmentHelper + .getNewImagesFromCamera() + .match( + onSuccess: (newEntries) => setState(() => + widget.entryMediaItems.attachments + .addAll(newEntries)), + onError: (error) { + buildSnackbar(context, + 'Error selecting attachments: $error'); + logError(error, _logger); + }); + }, + icon: const Icon(Icons.camera_alt), + ), IconButton( onPressed: () async { await MediaUploadAttachmentHelper diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 62a483a..4d24102 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -131,7 +131,7 @@ class _NetworkCapabilitiesWidget extends ConsumerWidget { Text('Network Capabilities'), ElevatedButton( onPressed: null, - child: Text('Reset to Defaults'), + child: Text('Reset'), ), ], ), diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 4489fe9..038807b 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -132,4 +132,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 137ddf7b4dbe5a83427ebf04ae8dea674cfd87fa -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 5b9b5e7..5c16ca6 100644 --- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -48,6 +48,7 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" debugServiceExtension = "internal" + enableGPUValidationMode = "1" allowLocationSimulation = "YES"> diff --git a/pubspec.lock b/pubspec.lock index bb639cc..8d2dd15 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -50,18 +50,18 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.12.0" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" build: dependency: transitive description: @@ -162,10 +162,10 @@ packages: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -194,10 +194,10 @@ packages: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" code_builder: dependency: transitive description: @@ -210,10 +210,10 @@ packages: dependency: transitive description: name: collection - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.19.0" + version: "1.19.1" color_blindness: dependency: "direct main" description: @@ -338,10 +338,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" ffi: dependency: transitive description: @@ -769,18 +769,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec url: "https://pub.dev" source: hosted - version: "10.0.7" + version: "10.0.8" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "3.0.8" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: @@ -825,10 +825,10 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: @@ -913,10 +913,10 @@ packages: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.16.0" mime: dependency: transitive description: @@ -1001,10 +1001,10 @@ packages: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" path_parsing: dependency: transitive description: @@ -1334,10 +1334,10 @@ packages: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" sprintf: dependency: transitive description: @@ -1398,10 +1398,10 @@ packages: dependency: "direct main" description: name: stack_trace - sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.12.1" state_notifier: dependency: transitive description: @@ -1414,10 +1414,10 @@ packages: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" stream_transform: dependency: transitive description: @@ -1430,10 +1430,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.1" string_validator: dependency: "direct main" description: @@ -1454,18 +1454,18 @@ packages: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test_api: dependency: transitive description: name: test_api - sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.7.3" + version: "0.7.4" time_machine: dependency: "direct main" description: @@ -1654,10 +1654,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "14.3.1" volume_controller: dependency: transitive description: @@ -1771,5 +1771,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.6.0 <4.0.0" + dart: ">=3.7.0-0 <4.0.0" flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index cd89116..a056459 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.16.0+13 +version: 1.0.0+15 environment: sdk: '>=3.2.0 <4.0.0'