~emersion/goguma

v0.7.0 8 months ago .tar.gz browse log

goguma v0.7.0

Release highlights:

- File uploads via the soju.im/filehost IRC extension
- New look: Goguma now uses Material You
- Many improvements to the iOS port, including support for push notifications
- Goguma now appears as a possible target when sharing text or media from other
  applications

Eli Schwartz (1):
      commands: fix kick to accept kick reasons

Jean THOMAS (11):
      widget/composer: wrap in SafeArea
      ios: add flutter_apns_only dep and upgrade pods
      ios: Add entitlement for photo library access
      composer: Enclose modal sheet in SafeArea
      ios: Update Cocoapods lock file
      ios: Add entitlements file
      ios: Add release-specific entitlement
      ios: Disable background location
      ios: Implement Share Extension
      README: Add iOS build instructions
      ios: adjust ShareExtension/Info.plist

Simon Ser (61):
      client: add ERR_NOSUCHSERVER to possible WHOIS replies
      page/buffer_list: stop using red for unread count
      Add support for file uploads
      widget/composer: remove double quotes
      Upgrade dependencies
      Upgrade dependencies
      page/buffer: wait for full sync before displaying parted banner
      main: drop void_checks lint rule
      Use ConnectionTask to cancel pending sockets
      Upgrade dependencies
      Add support for APNs
      Upgrade dependencies
      irc: ignore highlights in URLs
      apns: pass environment to pushgarden
      Turn on directives_ordering lint
      widget/composer: encode UTF-8 filenames in Content-Disposition
      Register ourselves as a share handler
      page/share: use a more explicit page title
      page/buffer: fix route args in BufferPage.open
      Upgrade app_links to v4.0.0
      main: only fetch initial shared media if irc:// URI is unset
      Upgrade connectivity_plus to v6
      Upgrade share_plus to v8
      Upgrade dependencies
      client: add null check for _lastConnectTime
      app: auto-reconnect in AppLifecycleState.inactive
      main: don't call Client.connect() on startup
      Use "dart run" instead of "flutter pub run"
      Add support for STATUSMSG
      page/buffer: always show sender line for channel-context/STATUSMSG
      irc: fix prefix sort in updateIrcMembership()
      client: add onError callback to Stream.listen()
      app: improve auto-reconnect logic robustness
      client_controller: print network sync errors
      client_controller: make push setup part of network sync
      client_controller: remove unnecessary then()
      Upgrade dependencies
      Upgrade flutter_lints to v4
      Switch to Material 3
      page/buffer: fix link underline color
      app: unify AppLifecycleState handling
      client_controller: rename disconnect() and disconnectAll()
      client_controller: document that add() takes ownership of the Client
      app: kill connections when detached
      app: take auto-reconnect locks into account when killing connections
      android: drop google-services Gradle plugin
      ci: drop --android-project-arg=firebase=true
      android: migrate to Gradle declarative plugins
      Upgrade app_links to v6
      Upgrade flutter_local_notifications to v17
      Upgrade share_plus to v9
      Upgrade geolocator to v12
      Upgrade sentry to v8
      Upgrade dependencies
      android: turn on desugaring
      client_controller: skip notification permission dialog when detached
      client_controller: wait for DB.storeNetwork()
      Leave url_launcher mode as default
      main: conditionally register main isolate port
      android: upgrade Kotlin to 1.8.22
      Bump version to 0.7.0

delthas (7):
      Enable users to upload images from their IME
      commands: add /part
      page/buffer: Make invisible compact message spacing unselectable
      page/buffer: Fix spacing in compact mode
      tool/gen_main: Fix import order
      page/buffer: fix interline height in compact mode
      Use system theme accent color

sewn (1):
      doc/notifications: mention official F-Droid repo lacking firebase

v0.6.0 1 year, 3 months ago .tar.gz browse log

goguma v0.6.0

Release highlights:

- Initial release with iOS support.
- Add support for the draft/pre-away IRC extension, to not toggle the
  away flag when synchronizing chat history in the background.
- Add support for geo URIs and sharing current geolocation
- Add a few more commands (/join, /kick, /mode, /quote)

As usual, a collection of bugfixes is also included.

Jean THOMAS (5):
      ios: Add encryption exemption entitlement
      buffer: Fix semantics for message time
      buffer_list: Stop reading channel initial (a11y)
      ios: Fix Xcode 15 issues
      ios: Add support for irc/ircs URIs

Simon Ser (94):
      Parse OpenGraph image attributes for link previews
      link_preview: add minimum image dimension
      link_preview: fix HTML peeking
      link_preview: peek at HTML more aggressively
      page/buffer: fix blank history when chathistory is disabled
      link_preview: turn off unnecessary_import lint
      link_preview: accepts floats for og:image:width
      link_preview: disable OpenGraph image when dimension is not specified
      widget/link_preview: open web page previews in a browser
      link_preview: fix RangeError in LinkPreviewer._findBodyTag
      link_preview: fix ArgumentError in _fetchHtmlPreview
      linkify: make double-quote a trailing URL character
      database: fix missing WebPushSubscription table
      database: don't use semicolons in SQL statements
      Bump version to 0.5.0
      Upgrade dependencies
      readme: add link to official F-Droid repository
      Revert "Upgrade dependencies"
      Upgrade dependencies
      readme: remove language code from F-Droid link
      Upgrade dependencies
      doc: add index, link from main README
      readme: fix link to docs
      doc/android-debugging: add note about filtering logs
      Revert "Upgrade dependencies"
      ci: explicitly switch to java-11-openjdk
      Upgrade dependencies
      Upgrade dependencies
      Upgrade connectivity_plus to 4.0
      Upgrade share_plus to 7.0
      Upgrade flutter_local_notifications to 14.0
      android: upgrade build.gradle
      ci: document root cause of archlinux-java workaround
      ci: switch to Java 17
      page/buffer: ensure "jump to bottom" button is hidden at bottom
      irc: use RFC 2812 default for CHANTYPES
      irc: add RFC 2812 default for PREFIX
      Upgrade linkify to 5.0 and flutter_linkify to 6.0
      Upgrade dependencies
      Add message sheet
      Resolve linter warnings
      Bump Flutter dependency
      notification_controller: only handle app launch selection once
      Upgrade dependencies
      android: update Gradle
      android: move namespace to build.gradle
      Upgrade dependencies
      android: remove white hash outline from ic_launcher_foreground
      android: add night launch_background
      android: use same pathData as ic_launcher_foreground in ic_stat_name
      android: add monochrome icon
      client: add Client.setAway()
      Add support for draft/pre-away
      client: only send prereg AWAY if we're requesting the cap
      Store network-wide last delivery time
      Bump network last delivery time when receiving NOTICEs
      ci: remove yay workaround for Java version
      Add an app store exception to the license
      Upgrade dependencies
      page/buffer: drop text selection in message bubbles
      Use super parameters
      Upgrade flutter_lints to v3
      Drop unused widget parameters
      Extract commands logic
      commands: add /join
      commands: add /kick
      commands: add /mode
      commands: add /quote
      Disable autocorrect on server/nickname/username text fields
      readme: add links to proprietary stores
      client_controller: only attempt background service on Android
      readme: note that iOS is supported
      doc/compatibility: new page
      linkify: add support for geo URIs
      Add menu to share current location
      widget/composer: replace add menu with bottom sheet
      widget/composer: use explicit type args for showModalBottomSheet
      widget/composer: dismiss bottom sheet on tap
      app: disable Material 3
      Upgrade dependencies
      readme: drop link to Android CI
      Add .b4-config
      Upgrade dependencies
      firebase: detect token changes on startup
      client_controller: request notification permission
      android: revert to flutter.minSdkVersion
      Upgrade flutter_local_notifications to v16
      Upgrade connectivity_plus to v5
      client: add connectErrors stream
      Show connection error in settings
      page/network_details: add reconnect button
      page/network_details: show connection error if any
      page/network_details: hide conversation count if empty
      Bump version to 0.6.0

v0.5.1 1 year, 9 months ago .tar.gz browse log

goguma v0.5.1

Simon Ser (6):
      page/buffer: fix blank history when chathistory is disabled
      linkify: make double-quote a trailing URL character
      database: fix missing WebPushSubscription table
      Bump version to 0.5.0
      ci: explicitly switch to java-11-openjdk
      Bump version to 0.5.1

v0.5.0 1 year, 11 months ago .tar.gz browse log

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

v0.4.1 2 years ago .tar.gz browse log

goguma v0.4.1

This release intends to fix the Goguma build in the official F-Droid
repository.

Simon Ser (2):
      Add PushController abstraction
      Bump version to 0.4.1

v0.4.0 2 years ago .tar.gz browse log

goguma v0.4.0

Highlights for this release:

- Add support for push notifications.
- References to IRC channels are linkified, and IRC URLs are handled.
- Add support for the new draft/read-marker IRC extension, superseding
  the older soju.im/read extension.
- The "/me" command has been implemented.
- Numerous other enhancements and fixes.

Full commit history below.

Simon Ser (125):
      Upgrade dependencies
      android: upgrade Gradle
      Fix use_build_context_synchronously analysis
      Fix library_private_types_in_public_api analysis
      Add support for soju.im/webpush
      doc/notifications: update for web push
      android: add version name suffix for Firebase builds
      client_controller: extend workmanager sync freq with webpush
      android: set minSdkVersion to 19
      android: add project property for applicationIdSuffix
      Improve Firebase initialization logging
      firebase: check whether Play Services are available
      client_controller: use high freq sync job when Firebase is unsupported
      firebase: fix typo in comment
      android: use + for version name metadata separator
      page/network_details: fix BOUNCER DELNETWORK command
      page/network_details: hide edit/delete buttons for non-bouncer
      page/buffer_list: suggest adding a new network
      page/buffer_details: show edit topic button when NAMES isn't loaded
      irc: fix ISUPPORT unescaping
      irc: store raw ISUPPORT values
      irc: add IrcIsupportRegistry.format()
      Cache ISUPPORT in the database
      firebase: use cached ISUPPORT instead of hardcoded defaults
      firebase: check if target is channel instead of checking own nick
      firebase: show INVITE notifications
      ci: remove unnecessary android-platform dependency
      firebase: fix crash on unknown push endpoint
      ci: migrate to new server for F-Droid repo
      ci: include commit hash in version name
      app: make state private
      app: simplify ConnectPage in _handleGenerateInitialRoutes
      irc: fix switch style in parseServerUri
      page/edit_network: make network arg optional
      Add basic irc:// URL handling on Android
      Fix MissingPluginException on startup on Linux
      irc: introduce IrcUri
      Migrate app_links handling to IrcUri
      app: add basic handling for user/channel in IRC URIs
      Rename EditNetworkPage to EditBouncerNetworkPage
      page/edit_bouncer_network: make state private
      client: add {add,change}BouncerNetwork
      page/edit_bouncer_network: don't dismiss page while loading
      page/settings: clear bouncer network list on logout
      page/settings: don't delete servers
      page/settings: stop throwing an Exception when missing main network
      models: replace hashValues with Object.hash
      Upgrade dependencies
      page/edit_bouncer_network: fix invisible submit button
      page/edit_bouncer_network: auto-join target on submit
      client: add deleteBouncerNetwork
      Remove unused variable and import
      irc: add {parse,format}AvailableIrcCaps
      client: add Client.fetchAvailableCaps
      client: allow overriding requested caps
      client: add option to disable registration in connect()
      page/connect: peek server caps
      page/connect: only request sasl cap when testing connection
      page/connect: emty password field when SASL is unsuported
      page/connect: make submit() private
      page/connect: make ConnectPage state private
      irc: add IrcAvailableCapRegistry
      page/buffer: make state private
      page/buffer_list: make state private
      database: add Entry suffix to WebPushSubscription
      page/buffer_details: make state private
      database: improve _getBasePath style
      Cache available caps in the DB
      app: move initialRoute logic to initState
      app: remove outdated TODO
      models: fix switch style
      irc: annotate overridden toString method
      Cache bouncer host/port in the DB
      app: use cached bouncer network URI when handling IRC URI
      page/edit_bouncer_network: check main network is a bouncer
      irc: decode before applying heuristic to choose type in IrcUri
      irc: add missing slash in IrcUri.toString
      app: use cached caps to check for bouncer in _handleAppLink
      app: handle initialUri when networks are configured
      linkify: add support for IRC URLs
      linkify: use our own linkifier for HTTP URLs
      app: remove unused variable
      page/settings: use SwitchListTile
      page/buffer_details: indicate when a channel is moderated
      page/buffer_details: use constants instead of hardcoded membership prefixes
      Add support for draft/read-marker
      page/network_details: indicate whether user is logged in
      client: add authWithPlain
      Add dialog to authenticate
      client_controller: only setup sync once clients are registered
      client_controller: avoid fetching read markers unnecessarily
      linkify: handle channel names
      network_state_aggregator: use Enum.index
      page/buffer_details: hide unauthenticated tile without SASL
      page/network_details: use ElevatedButton for delete dialog
      page/network_details: add logout button
      page/buffer: handle multi-line pastes in composer
      page/buffer: don't overwrite composer text on swipe
      client_controller: don't always create new user buffers
      webpush: handle OperationError
      firebase: handle MARKREAD messages
      Add button to update credentials on ERR_SASLFAIL
      client_controller: update NetworkModel.nickname on RPL_WELCOME
      Store SASL username in DB
      widget/network_indicator: simplify listeners
      app: call _handleNetworkStateChange in _initState
      buffer_list: add placeholder for empty search results
      Remove unnecessary variables and imports
      page/settings: add confirmation dialog for logout
      client_controller: stop sending WHO for old user buffers
      irc: parse RPL_AWAY in reply to WHOIS
      page/settings: show non-bouncer network entries
      client: add support for multiple targets in JOIN
      client_controller: re-join on reconnect
      firebase: fix MARKREAD when running in foreground
      firebase: comment out unused variable
      page/buffer_details: strip ANSI from realnames
      page/buffer: fix crash when navigating away before history is loaded
      Upgrade dependencies
      firebase: don't show notifications for muted buffers
      page/{buffer,buffer_list}: retain scroll position on reconnect
      Upgrade dependencies
      Add basic support for /me command
      page/join: use a short timeout for LIST
      Bump version to 0.4.0

delthas (2):
      Fix crash on tapping "New network"
      Add support for hex color code escapes

v0.3.0 2 years ago .tar.gz browse log

goguma v0.3.0

Pedro Lucas Porcellis (1):
      android: make https links to open on their default handler

Simon Ser (61):
      page/buffer_list: add placeholder
      client: always close socket on registration error
      client: log reconnect errors
      page/buffer_list: make _BufferListPlaceholder constructor const
      Open notification on INVITE
      client: add Client.motd
      page/network_details: display MOTD
      client_controller: check network state in RPL_ENDOFMOTD handler
      page/network_details: show confirmation dialog before deleting network
      app: fix catchError callback type
      Fix handling for bouncer network delete notification
      client: close socket on any PING error
      page/network_details: remove unused variable
      page/network_details: fix showDialog type inference
      page/network_details: s/FlatButton/TextButton/
      Turn on avoid_catches_without_on_clauses lint
      main: use FlutterError to handle uncaught exceptions
      main: exit on Error
      client: throw StateError if connect() is called after disconnect()
      client: log when sending message while connection is closed
      client: rename disconnect() to dispose(), add logging
      main: always print a detailed message on uncaught error
      main: only exit on Error
      page/edit_network: use slightly more user-friendly field names
      page/edit_network: move network name to advanced settings, make optional
      Rename network settings route
      readme: include branch name in CI links
      app: catch reconnect exceptions in _pingAll
      client: fix null dereference in send()
      client: error out in _waitMessage if connecting
      page/join: don't setState if unmounted
      Upgrade dependencies
      notification_controller: remove previous notification from _active list
      Migrate to launchUrl
      Stop using accentColor
      page/buffer: simplify boxColor logic
      models: make BufferModel._typing final
      Disable prefer_is_not_empty/prefer_is_not_operator in analyzer
      Fix unnecessary_this analyzer items
      Always use LaunchMode.externalApplication
      linkify: throw exception on launchUrl failure
      notification_controller: fetch active notification messaging style
      Split ANSI functions into separate file
      Send ACK when running background sync
      Introduce Prefs
      client: throw StateError when dispose() is called twice
      ci: count commits in origin/master for build number
      Catch errors in workmanager dispatcher
      page/buffer: fix date indicator with invalid day
      Stop sending an ACK from workmanager
      prefs: add workaround for shared_preferences
      client_controller: re-format ClientProvider constructor
      client_controller: make ClientController constructor private
      client_controller: take Prefs in connectParamsFromServerEntry
      main: add _initModels
      notification_controller: ignore UnimplementedError for launch details
      Run sync job in separate Isolate when triggered from the background
      Add environment variable for workmanager debugging
      readme: fix link to Android CI
      notification_controller: fix ArgumentError with high IDs
      Bump version to 0.3.0

delthas (5):
      buffer: Fix compact message text
      Move network & bouncerNetwork state formatter to models
      Add a network_details page
      Support typing indicators
      Add IRC color formatting to the alternate compact buffer list

v0.2.0 2 years ago .tar.gz browse log

goguma v0.2.0

Noah Loomans (1):
      page/buffer: render action msgs as annoucements

Simon Ser (263):
      pubspec: specify flutter version constraint
      irc: IRCMessage → IrcMessage
      irc: IRC → Irc throughout
      models: prioritize custom bouncer network name, if any
      client: add Client.who
      Fetch buffer user realname
      client-controller: fix bouncer network linking when already known
      client-controller: fetch realname when receiving direct message
      client-controller: simplify ClientController._handleChatMessages
      models: filter out meaningless realnames
      Set Android notification timestamp
      readme: add contributing section
      connect-page: turn off auto-reconnect
      Handle ERROR messages
      client: explain why we send messages in bulk when connecting
      models: add assertions to BufferModel.{addMessage,populateMessageHistory}
      models: remove unnecessary list addition in BufferModel.populateMessageHistory
      models: add messages to BufferModel in bulk
      models: sort messages in BufferModel.addMessages
      client: add more chathistory helpers
      buffer-page: implement basic infinite scrolling
      irc: rename IrcPrefix to IrcSource
      irc: make params arg mandatory in IrcMessage
      android: add Triple-T metadata
      android: upgrade Gradle
      irc: add support for MONITOR ISUPPORT, add MONITOR constants
      client: add support for MONITOR
      Use MONITOR for user buffers
      models: split BufferModel fields a bit
      buffer-list-page: open buffer when joining channel
      join-dialog: move onSubmit logic over
      join-dialog: make network a late field
      join-dialog: make nameController field final
      Revert "android: upgrade Gradle"
      network-indicator: extract refresh indicator in separate widget
      network-indicator: make NetworkListIndicator state private
      Add refresh indicator to BufferPage
      network-indicator: create AnimationController in initState
      network-indicator: remove intermediary Stack when hidden
      buffer-page: add autocomplete for channel members
      buffer-page: lower auto-complete debounce duration
      client-controller: handle KICK messages
      Introduce NotificationController
      Cancel active notifications
      Upgrade flutter_local_notifications
      notification-controller: query active notifications on startup
      notification-controller: bump notification ID on startup
      Add default cases for enum switches
      Remove unused imports
      Remove unused variables
      client-controller: explicitly return null
      network-state-aggregator: add missing super.dispose() call
      Fix analyzer errors and warnings
      ci: enable analyzer and linter
      ci: ignore linter for now
      Add dark theme
      android: stop relying on `flutter create`
      buffer-page: disable infinite scrolling on chathistory-less servers
      connect-page: fix catchError function type
      connect-page: mark password as required on FAIL ACCOUNT_REQUIRED
      Rename filenames to use underscores instead of hyphens
      Move pages and widgets into their own sub-directory
      page/buffer: remove debugging print
      Remove unnecessary "new" keywords
      Add missing function return types
      Only print all IRC messages in debug mode
      client: add _roundtripMessage
      client: replace Client.batches with ClientEndOfBatch
      client: introduce Client.isNick
      irc: add support for WHOIS
      client: add support for WHOIS
      page/buffer_details: display WHOIS info
      readme: add more screenshots
      readme: reduce screenshot width a bit
      Fix analyzer errors
      client_controller: fix spurious background service permission nag
      client_controller: remove outdated TODO
      readme: add link to IRC channel
      irc: add WhoReply
      client: make it so Client.who returns parsed replies
      page/buffer_details: show offline and away status
      page/buffer_details: don't WHOIS offline users
      Add support for the setname extension
      Switch on the draft/extended-monitor extension
      Add support for the away-notify extension
      irc: sort ISUPPORT tokens alphabetically
      irc: add support for the BOT ISUPPORT token
      irc: add support for RPL_WHOISBOT
      page/buffer_details: show bot status
      irc: clear IrcIsupportRegistry.botMode
      Add support for WHOX
      client: add Client.join
      page/buffer: display banner when channel isn't joined
      client_controller: handle KICK targeted to us
      widget/join_dialog: remove unused import
      page/buffer_details: fix pluralization for member list
      Split GogumaApp into separate file
      page/buffer: show time in message bubbles
      page/buffer: show date marker
      database: cache parsed message in MessageEntry
      database: cache DateTime in MessageEntry
      Open a single notification per buffer, use MessagingStyle
      notification_controller: remove network sub-text
      ci: set version code
      readme: add CI badge
      ci: deploy to F-Droid repo
      Add workaround for Let's Encrypt certs on Android 7
      app: rename GogumaApp to App
      Switch to named routes
      widget/join_dialog: add JoinDialog.show
      page/buffer: show date/times in local timezone
      page/buffer_list: use AnimatedBuilder for BufferItem
      page/buffer_list: use AnimatedWidget
      page/buffer_list: make fields and methods private
      page/buffer: make fields and methods private
      widget/join_dialog: make fields and methods private
      page/buffer: add missing FocusNode.dispose() call
      Address some analyzer issues
      Stop using FlatButton
      Make all StreamControllers synchronous
      notification_controller: s/payload/tag/
      notification_controller: set MessagingStyleInformation.groupConversation
      notification_controller: make initialize async
      notification_controller: rename private field
      irc: fix IrcSource parsing without host
      client: ensure all incoming messages have a source
      irc: make IrcIsupportMembership constructor const
      client: "*" is never a nick
      client: convert double-quoted strings to single-quoted
      client: increase connection registration timeout
      ci: use a different filename for each deployment
      ci: fix command to cleanup old deployed apk files
      client: add autoReconnect setter
      client_controller: introduce ClientAutoReconnectLock
      notification_controller: remove unnecessary import
      irc: switch to generic function type alias for CaseMapping
      client: annotate overridden getter ClientMessage.source
      database: switch to async/await
      Don't assign to void
      client: add Client.setTopic
      Add UI to edit channel topic
      Add support for TOPICLEN
      irc: add support for ISUPPORT CHANMODES
      Handle channel MODE messages
      irc: add standard user and channel mode constants
      client: add Client.fetchMode
      client_controller: split channel mode handling to separate function
      page/buffer_details: take +t channel mode into account
      page/buffer_details: add indicator for invite-only channels
      client: fix client opening two connections
      client: ensure any previous connection is closed in connect()
      client: always cancel reconnect timer in _tryAutoReconnect()
      irc: add constants for standard and widely used memberships
      irc: add WhoxField.toString
      irc: parse channel and membership in WhoReply
      client: ignore invalid UTF-8
      irc: only trim CRLF in IrcMessage.parse
      page/buffer_details: request member list via WHO
      irc: add isStubRealname
      page/buffer_details: display members realname
      Add support for soju.im/no-implicit-names
      client: simplify setTopic and fetchMode a bit
      client: don't ignore errors from previous WHO commands
      Auto-complete channel names
      page/buffer_details: drop unused _membershipLevel function
      irc: mark more constructors as const
      Display network name for dup channel/nick names
      irc: parse WhoxField.account
      widget/edit_topic_dialog: make constructor const
      irc: add support for ISUPPORT ELIST
      irc: add support for RPL_LIST
      client: add Client.list
      Revamp join page
      page/join: use isStubRealname
      page/join: show progress indicator when loading
      page/join: fix race conditions
      client: ensure at most one LIST command is running at a time
      page/join: annotate overridden _JoinItem.build
      Fix ListTile.title colors with rich text
      page/join: don't refresh if query didn't change
      Extract logic to open buffer into public function
      page/buffer_details: open buffer on channel/member tap
      page/join: remove unused import
      notification_controller: return futures
      app: fix route stack on initial launch
      page/connect: use async/await
      page/join: sort channels by number of members
      page/join: use async/await in _search
      page/buffer: use async/await
      client_controller: use async/await
      Move join() to page/buffer.dart
      page/buffer: don't send JOIN if already joined
      client_controller: reset online/away status when disconnected
      page/join: avoid control flow in finally block
      client: use async/await
      client: rework state and auto-reconnect handling
      client: use rethrow
      client: don't overwrite connecting state when socket is closed
      main: use async/await
      client: fix missing await in _roundtripMessage call
      page/buffer: make composer text field grow on long message
      page/buffer_list: extract background service banner into widget
      page/buffer_list: get ClientProvider from context
      widget/network_indicator: read NetworkListModel from context
      main: add explicit cast for SendPort
      page/buffer_list: annotate overridden method
      client: keep track of our realname
      Add a settings page
      page/buffer_list: inline _buildSearchField
      page/buffer_list: remove context arg from _markAllBuffersRead
      page/settings: take bouncer network state into account
      notification_controller: enable notification lights
      irc: make nick comparison case-insensitive in isStubRealname
      notification_controller: add method to format buffer tag
      page/buffer: create banner, message list and composer separately
      page/buffer: add button to jump to bottom
      page/buffer: use 8-digit hex code for color
      irc: add support for NICKLEN and NAMELEN
      client: add Client.setRealname
      Add dialog to edit nickname
      widget/edit_profile_dialog: add realname entry
      client_controller: handle NICK
      models: make nickname and realname part of the state
      page/settings: listen to network changes
      widget/edit_profile_dialog: empty realname field if same as nick
      widget/edit_profile_dialog: use form validation
      page/buffer_list: hide trailing Wrap when empty
      readme: link to new mailing list
      widget/edit_profile_dialog: save new nick to DB
      Move dialogs to separate directory
      pages/settings: fix navigator stack when logging out
      page/settings: drop unused variable
      client: handle server-wide broadcasts in isNick
      Use key in widget constructors
      Strip ANSI formatting from topic
      Add some basic docs
      models: rename BouncerNetwork to BouncerNetworkModel
      irc: move over NAMREPLY parsing
      client: parse NamesReply in ClientEndOfNames
      client: make helper data structure constructors private
      client: make more constructors const
      Save default nickname in shared preferences
      Save realname in shared preferences
      client: improve ConnectParams formatting
      client: update ConnectParams on setNickname/setRealname
      page/settings: rebuild _NetworkItem on BouncerNetworkModel change
      page/settings: vertically align network icon
      irc: fix IRCv3 message tag parsing
      Fix null deref when nick is missing from shared preferences
      irc: drop unused _unescapeTagRegExp
      page/settings: make list const
      database: fix upgrade to version 5 on Android
      page/settings: hide button to add network without bouncer-networks
      page/edit_network: simplify url formatting logic
      page/edit_network: add advanced settings expandable button
      client: make _tryAutoReconnect always async
      Fix buffers and notifications opened with no reason
      notification_controller: handle CTCP messages
      Upgrade dependencies
      page/settings: hide edit profile button when offline
      page/edit_network: improve expand button animation
      page/edit_network: fix indentation
      Bump version to 0.2.0+516

delthas (9):
      Add support for pinned buffers
      Add support for muted buffers
      Add an alternative compact message list view
      Make compatible with Windows
      Fix unauthenticated subtitle message
      Store channel topic & user realnames locally
      Move parseServerUri to irc and make it public
      Add a network add/edit page
      Make all buffer list buffer items the same height

v0.1.0 3 years ago .tar.gz browse log

goguma v0.1.0

Simon Ser (243):
      Add app skeleton
      Add connect form
      Add missing dispose() impl for BufferListPageState
      Collect connect form values
      Add basic IRC client
      Display channel topic
      Split IRC wire format functions to separate file
      Split ConnectPage to separate file
      Add dialog to join channels
      Simplify Provider.of
      Handle TOPIC messages
      Add BufferItemModel provider for BufferPage
      Rename BufferItemModel to BufferModel
      Extract models to separate file
      Extract BufferPage into separate file
      Extract BufferListPage into separate file
      Send PRIVMSG on composer submit
      Store IRCMessage objects in BufferPage state
      Add MessageListModel
      Make IRCMessage and IRCPrefix immutable
      Nuke MessageListModel
      Make BufferModel.name final
      Introduce ServerModel
      Index BufferModel by server, store in a Map
      Reverse messages ListView
      Add ClientController
      Remove unnecessary GogumaState.dispose() override
      Remove GogumaState.connect()
      Add logout menu
      Allow port in server string
      Display NOTICE messages in buffer page
      Add missing client-controller.dart
      Fix buffer list search field cursor color
      Open a new buffer on query
      Maintain a list of available IRC capabilities
      Initialize Client.nick from ConnectParams
      Store server prefix in Client.serverPrefix
      Add ClientSnackbar to display IRC errors
      Linkify messages
      Add TODO about credentials storage
      Fix non-linkified text style in messages
      Reset version in pubspec.yaml
      Add AndroidManifest.xml
      readme: add flutter create commands
      readme: clarify linux setup
      Log when opening connection
      Introduce Client._setState
      Catch connect() errors
      Catch Socket errors
      Upgrade dependencies
      Hide ConnectForm when loading prefs
      lib/client: read nick from RPL_WELCOME
      Upgrade dependencies
      client: return Future when connecting
      Display spinner and error message on connect page
      Add IRCException
      Implement per-field error messages on connect page
      Improve server URL sanity checks, allow disabling TLS
      Add connect timeout
      client: move socketFuture error handling up
      client: add timeout for connection registration
      connect-page: set pass to null if empty
      client: move RPL_WELCOME state updates to _handleMessage
      client: add state stream
      client-snackbar: show client state
      Introduce ServerListModel
      models: add ServerModel.host
      irc: add IRCIsupport helper
      client: add Client.isupport
      models: add ServerModel.network
      irc: add IRCCapRegistry
      client: clear ISUPPORT when disconnected
      irc: rename IRCIsupport to IRCIsupportRegistry
      client-snackbar: clear all previous snack bars
      client: automatically reconnect
      Store server settings in SQLite database
      client-controller: refactor to stop managing ServerListModel
      models: ensure server is stored in DB when creating BufferModel
      Store buffers in DB
      Ensure models are backed by a DB entry
      Remove buffer from DB when leaving channel
      Store message history in DB
      database: turn on ON DELETE CASCADE
      Hide composer when disconnected
      android: re-generate app manifest
      database: minor cosmetic whitespace fixup
      database: one query per execute call
      database: drop unnecessary intermediate subdir on Android
      client-controller: pause stream while handling message
      client-controller: fix dest buffer on user PRIVMSG/NOTICE
      irc: add IRCIsupportRegistry.chanTypes
      Allow nicknames in join dialog
      Don't send PART when leaving user buffer
      Add basic buffer unread count
      Save and restore unread count to DB
      database: fix broken UPDATE queries
      Sort buffers by last message time
      Load initial state from DB concurrently
      main: remove unused import
      android: set app icon
      readme: use --no-overwrite when creating Android app
      client: add Client.isMyNick
      irc: parse CASEMAPPING from ISUPPORT
      client: use case-mapping in Client.isMyNick
      ci: add manifest to build Android app
      client-controller: fix JOIN handling
      models: add case-mapping support for BufferListModel
      models: don't notifyListeners on no-op ServerModel change
      irc: add support for CAP ACK/NAK
      irc: add support for message tags
      client: enable message-tags
      irc: make IRCMessage immutable
      client: request caps on CAP NEW
      Add support for server-time
      Add support for echo-message
      readme: add goals
      client: make ConnectParams an unnamed arg
      client: make ConnectParams immutable
      Add support for SASL PLAIN
      Don't check sasl cap on RPL_WELCOME
      readme: add screenshot
      readme: fix screenshot width
      Introduce NetworkEntity
      Add support for soju.im/bouncer-networks
      Reconnect on initial setup
      Add basic support for draft/chathistory
      client: check StreamController.isClosed before sending events
      client-controller: split into 2 classes
      client: improve logging
      client-controller: use latest server delivery time
      client: add support for batches
      Use CHATHISTORY TARGETS
      models: drop MessageModel.buffer
      database: error out on downgrade
      client: emit stream errors on socker errors
      database: fix Buffer.last_read_time not fetched from table
      Add support for soju.im/read
      database: drop MessageEntry.flags
      buffer-list-page: improve channel topic rendering
      buffer-page: omit subtitle Text if none
      client: send CAP REQ after NICK+USER
      connect-page: s/username/nickname/
      ci: turn on Android builds
      readme: add link to Android builds
      buffer-page: hide sender if same as previous message
      join-dialog: add dropdown to select server
      models: s/ServerModel/NetworkModel/
      irc: only add colon to trailing message param when necessary
      irc: add CTCP message parser
      buffer-page: display CTCP messages
      buffer-page: linkify CTCP ACTION text
      irc: add stripAnsiFormatting
      buffer-page: strip formatting
      database: simplify fetchBuffersLastDeliveredTime query
      database: add index for Message table
      database: drop outdated TODO
      buffer-page: fade text in page title
      Periodically send PINGs in the foreground
      client: cancel reconnect timer on connect and disconnect
      client: drop unused Future from Client.send
      Only send regular PINGs on completely connected clients
      Avoid uncaught exceptions in returned Future objects
      client: reconnect immediately if last attempt was a long time ago
      client: fix closed connection signal
      Don't mark messages as unread when buffer is focused
      client: make nick, serverPrefix and state read-only
      database: accept a list when storing messages
      client: introduce ClientMessage
      client-controller: handle chathistory batches in bulk
      client-controller: simplify _handleChatMessages a bit
      client: add ClientMessage.batchByType
      client-controller: use ClientMessage.batchByType
      database: drop orphan Server entries on Network delete
      Handle FAIL * ACCOUNT_REQUIRED
      client-controller: better handle server messages
      main: ensure we don't leak timer in GogumaAppState._enablePingTimer
      buffer-page: reduce margin between messages from same sender
      buffer-page: add unread marker
      client-controller: don't bump unread count if message is already read
      Add button to mark all buffers as read
      Add Client.fetchChatHistoryBetween
      client: add Client.fetchRead
      Introduce "synchronizing" network state
      client: drop ClientState.registering
      Periodically synchronize chat history
      Open basic notification on direct message
      client-controller: fix destination buffer for own messages
      main: fix infinite loop on initial configuration
      buffer-page: improve link text style
      Open notification on highlight
      irc: fix missing fields in IRCIsupportRegistry.clear()
      irc: parse ISUPPORT PREFIX
      irc: remove default ISUPPORT CHANTYPES
      main: only catch Exception objects in catchError
      client: fix null dereference in Client.disconnect
      Move connection logic to ConnectPage, remove Goguma widget
      connect-page: drop ConnectParamsCallback
      Aggregate status of all networks
      models: add NetworkModel.displayName
      main: add network name to status snackbars
      main: remove outdated TODO
      models: rename BufferModel.subtitle to topic
      android: set appCategory
      android: update app icon
      android: set notification icon
      client-controller: set notification category
      client-controller: create separate notification channel for highlights
      client-controller: set notification sub-text if appropriate
      Remove some stray double-quoted strings
      Use RefreshProgressIndicator to indicate pending connections
      Simplify GogumaAppState fields
      buffer-details-page: add basic page
      buffer-page: wire up BufferDetailsPage menu
      Use a banner instead of a snack bar
      Introduce BufferModel.joined
      Spawn a foreground service on Android when chathistory is unsupported
      Reconnect on connectivity status change
      client-controller: don't ask for background service when disconnected
      Workaround connectivity change events not received on Android
      buffer-details-page: show network name
      buffer-page: allow tapping app bar title to open details
      Extract linkify code into separate file
      buffer-details-page: linkify topic
      buffer-details-page: remove outdated TODO
      doc/notifications: new document
      client: collect RPL_NAMREPLY messages
      Introduce MemberListModel
      buffer-details-page: add member list
      buffer-details-page: show membership description
      client: turn on multi-prefix
      client-controller: reset member list on PART
      buffer-page: introduce _MessageItem
      Implement swipe-to-reply
      buffer-page: set _MessageItem key
      buffer-page: fix composer text not properly reset
      buffer-page: don't mark messages read if app isn't in the foreground
      buffer-details-page: sort members by op level and name
      buffer-page: set composer TextInputAction
      buffer-list-page: remove settings meny for now
      android: setup CI keystore
      android: check in more files, upgrade gradle
      android: downgrade gradle
      pubspec: bump to v0.1.0

Branches

drop-flutter-background
android-decl-plugins
dart-define-from-file
workaround-typeahead
android-13-notif-permission
webpush-conditional
active-notification-style
buf-page-transition
Do not follow this link