goguma v0.5.0 Highlights for this release: - Image previews - Support for UnifiedPush to deliver notifications - Performance improvements when loading messages in a conversation - Conversations can be archived - The composer now supports multi-line messages - The labeled-response, reply-tag and channel-context IRCv3 extensions are now supported Full commit history below. Jean THOMAS (2): ios: Add support lib: Add iOS init code for notifications Simon Ser (177): Upgrade dependencies client: fix fetchReadMarker reply handler Extract composer in separate widget widget/composer: split long text into multiple messages Remove stale bouncer networks client_controller: drop unnecessary cast Drop support for soju.im/read page/buffer: make message text selectable irc: add IrcMessage.copyWith() client: fix infinite loop in ClientMessage.batchByType() client: add ClientBatch.tags client: add ClientMessage.label client: add support for labeled-response doc/permissions: new page ci: clone flutter repo instead of using AUR package irc: relax *LEN ISUPPORT parsing android: remove permissions we don't need Upgrade dependencies Annotate background handlers with @pragma('vm:eFull commit history below.ntry-point') client_controller: pass Client and NetworkModel in errors stream app: only offer to change password if SASL PLAIN is setup widget/composer: fix failed assert on servers missing echo-message irc: add ERR_CANNOTSENDTOCHAN and ERR_NOTEXTTOSEND client: add sendTextMessage widget/composer: use Client.sendTextMessage() client: fix echo-message disabled by mistake client: improve sendTextMessage robustness without labeled-response app: print number of networks when multiple are disconnected app: fix stuck banner indicating disconnected servers doc/connect: add documentation for connection page/buffer: simplify PopupMenuButton callback Load messages in chunks from the DB database: fix SQL error on Android page/buffer: fix unread counter not being cleared page/buffer: move context.read() calls to the top database: fix and optimize DB.listMessagesBefore() Use PlatformDispatcher.instance.onError page/buffer: disable text selection for timestamp Add support for UnifiedPush Unregister push subscriptions client_controller: create new subscription when refresh fails unifiedpush: log message in onUnregistered unifiedpush: log selected distributor unifiedpush: stop unregistering in _handleMessage Upgrade dependencies doc/notifications: indicate that UnifiedPush is supported notification_controller: fix typo in error message push: fix tapping notification when app is running Introduce WebPushSubscriptionEntry.tag firebase: parse subscription resource URL from HTTP response linux: add hacky Flatpak builder manifest client: handle ERR_BADCHANMASK as JOIN reply firebase: move initPush wrapping to firebase.dart tool/gen_firebase_options: exit with non-zero code on bad arg syntax Generate alternative main() function Upgrade dependencies notification_controller: use a singleton notification_controller: don't pick an in-use ID doc: add instructions to get Android logs widget/composer: prevent virtual keyboard from being closed on submit Upgrade dependencies Use ratified extended-monitor cap name Upgrade dependencies Wipe push subscriptions on provider change unifiedpush: use same singleton pattern as NotificationController Add basic image previews page/buffer: display progress indicator for link previews page/buffer: add error widget for link previews Cache metadata for link previews Extract link preview UI into separate widget widget/link_preview: split photo preview into separate widget widget/link_preview: use const and Key in constructors page/buffer: fix extra spacing due to link previews page/buffer: use DefaultTextStyle for links linkify: drop textStyle argument page/buffer: drop textStyle variable dialog/edit_profile: validate nickname page/join: validate nicknames and channel names page/join: trim query page/join: locally filter LIST replies Stop opening notifications for NOTICE and CTCP Improve NOTICE and CTCP handling database: optimize fetchBuffersLastDeliveredTime() database: optimize fetchBuffersUnreadCount() database: fix type cast error firebase: print HTTP response body on error database: refactor schema initialization and migrations database: fix unread count for new conversations database: rename fetchBuffers{UnreadCount,LastDeliveredTime} Fix buffer unread count on startup when last_read_time is unset network_state_aggregator: expose a set of faulty networks Don't close unrelated SnackBars on network state change app: drop unnecessary fallback for faulty network name network_state_aggregator: remove unnecessary import Upgrade dependencies Introduce basic logging infrastructure logging: move uncaught exception handling over link_preview: protect against empty host linkify: ensure recognized URLs pass Uri.parse() Upgrade dependencies android: update proguard-rules.pro Add support for Sentry/Glitchtip error reporting client_controller: ignore result of Client.connect() client: fix StateError in Client._waitMessage() page/connect: fix StateError in _fetchAvailableCaps() client: extract socket monitoring to separate function page/buffer: check mounted before setState() page/connect: don't call setState() if unmounted in _handleServerFocusChange() client_controller: catch exceptions in FlutterBackground.enableBackgroundExecution() client: ignore Socket.close()'s Future client: fixup outdated comment Turn on unawaited_futures lint client: throw exception when RPL_ENDOFNAMES is missing RPL_NAMREPLY linux: add boilerplate files irc: add IrcMessage.paramAt() client: don't crash on missing PONG param irc: override operator [] for IrcMessage.params logging: ignore SocketException page/edit_bouncer_network: check mounted before using context Upgrade dependencies android: upgrade kotlin_version to 1.8.0 page/buffer: don't set onSwipe when composer is hidden android: update gradle to 7.6 firebase: check whether token is null in init() page/buffer: retain composer state when canSendMessage changes Archive conversations Upgrade to Flutter 3.7 page/buffer: fix unnecessary ! operator Fix Flutter 3.7 deprecations Upgrade dependencies ansi: fix stripping hex colors with both foreground and background page/buffer: fix PopupMenuItem text when channel is parted client_controller: more push subscription logging Upgrade dependencies main: log when clearing push subscriptions client_controller: only delete old push subscription on FAIL WEBPUSH unifiedpush: add timeout for createSubscription() client: add timeouts for webPush{Register,Unregister} page/gallery: introduce simple gallery Add missing gallery changes client: add default timeout for _waitMessage() client_controller: skip NOTICEs for archived buffers irc: implement IrcNameMap.containsKey() page/buffer: refuse to reply to users who left the channel unifiedpush: log endpoint updates unifiedpush: drop unregistered instances from DB unifiedpush: log failed registrations unifiedpush: add TODO to properly cleanup registration in callback Replace flutter_typeahead with flutter_flipped_autocomplete page/buffer: show SnackBars above Composer page/buffer: rename joinBanner to banner page/gallery: animate page transitions page/buffer: fix FloatingActionButton hero tag conflict widget/composer: escape text starting with "/" in setTextPrefix() page/buffer: fix composer hidden when keyboord shows up page/buffer: fix duplicated image previews in compact mode widget/composer: set +draft/reply tag database: add Message.network_msgid column database: use "SELECT *" database: fix typo in network_msgid column references Show message reply indicator page/{buffer,network}_details: make MOTD/topic text selectable page/buffer: don't fetch more history if already loaded models: skip notifyListeners() when BufferModel.addMessages() is no-op page/buffer: jump to unread indicator page/buffer: make reply chip clickable page/buffer: make parent message blink page/buffer: set _MessageItem.onMsgRefTap return type page/buffer: don't mark read if not scrolled to bottom page/buffer: drop unused variable page/buffer: add placeholder Use unifiedpush_android fork Upgrade dependencies page/buffer: fix last messages hidden when opening virtual keyboard logging: don't report silent errors to sentry main: make _waitNetworkOnline async main, unifiedpush: use more detailed TimeoutExceptions delthas (8): Order buffers and buffer members in a case-insensitive order page/join: display the number of users per channel Store bouncer network names locally Support @+draft/channel-context Fix regression in compact message formatting page/buffer: Support link previews in compact mode ansi: Fix rendering hex colors Do not crop images horizontally