v0.5.0 1 year, 24 days ago

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

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
      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