├── .envrc
├── .github
├── CODEOWNERS
├── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ └── feature_request.yml
├── pull_request_template.md
└── workflows
│ ├── build.yaml
│ ├── gh-pages.yaml
│ ├── image.yaml
│ ├── integration-tests.yaml
│ ├── release.yaml
│ └── tests.yaml
├── .gitignore
├── .gitlab-ci.yml
├── .mailmap
├── .metadata
├── CHANGELOG.md
├── Dockerfile
├── LICENSE
├── PRIVACY.md
├── README.md
├── TRANSLATORS_GUIDE.md
├── analysis_options.yaml
├── android
├── .gitignore
├── Gemfile
├── Gemfile.lock
├── app
│ ├── build.gradle
│ ├── google-services.json
│ ├── proguard-rules.pro
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── app
│ │ │ └── twake
│ │ │ └── android
│ │ │ └── chat
│ │ │ └── MainActivityTest.java
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-playstore.png
│ │ ├── kotlin
│ │ │ └── app
│ │ │ │ └── twake
│ │ │ │ └── android
│ │ │ │ └── chat
│ │ │ │ ├── FcmPushService.kt
│ │ │ │ ├── MainActivity.kt
│ │ │ │ └── UnifiedPushService.kt
│ │ └── res
│ │ │ ├── drawable-anydpi-v24
│ │ │ └── notifications_icon.xml
│ │ │ ├── drawable-hdpi
│ │ │ ├── branding.png
│ │ │ └── splash.png
│ │ │ ├── drawable-mdpi
│ │ │ ├── branding.png
│ │ │ └── splash.png
│ │ │ ├── drawable-v21
│ │ │ ├── background.png
│ │ │ └── launch_background.xml
│ │ │ ├── drawable-v24
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable-xhdpi
│ │ │ ├── branding.png
│ │ │ └── splash.png
│ │ │ ├── drawable-xxhdpi
│ │ │ ├── branding.png
│ │ │ └── splash.png
│ │ │ ├── drawable-xxxhdpi
│ │ │ ├── branding.png
│ │ │ └── splash.png
│ │ │ ├── drawable
│ │ │ ├── background.png
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── launch_background.xml
│ │ │ └── notifications_icon.png
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── values-night-v31
│ │ │ └── styles.xml
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ ├── values-v31
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── fastlane
│ ├── Appfile
│ ├── Fastfile
│ ├── README.md
│ ├── metadata
│ │ └── android
│ │ │ └── en-US
│ │ │ ├── changelogs
│ │ │ ├── 2324 (1.6.0).txt
│ │ │ └── 50 (0.22.1).txt
│ │ │ ├── full_description.txt
│ │ │ ├── images
│ │ │ ├── featureGraphic.png
│ │ │ └── icon.png
│ │ │ ├── short_description.txt
│ │ │ ├── title.txt
│ │ │ └── video.txt
│ └── report.xml
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── appimage
├── .gitignore
├── AppImageBuilder.yml
├── AppRun
├── FluffyChat.desktop
└── README.md
├── assets
├── backup.png
├── blur.png
├── branding.png
├── colors.png
├── favicon.png
├── google_fonts
│ ├── Inter-Bold.ttf
│ ├── Inter-Medium.ttf
│ ├── Inter-Regular.ttf
│ └── Inter-SemiBold.ttf
├── icons
│ └── icon_launcher.png
├── images
│ ├── app_store.svg
│ ├── google_play.svg
│ ├── ic_add.svg
│ ├── ic_add_file.svg
│ ├── ic_application_grid.svg
│ ├── ic_done.svg
│ ├── ic_emoji.svg
│ ├── ic_empty_group_chat.svg
│ ├── ic_empty_page.svg
│ ├── ic_empty_search.svg
│ ├── ic_encrypted.svg
│ ├── ic_error_page.svg
│ ├── ic_error_page_background.svg
│ ├── ic_file_audio.svg
│ ├── ic_file_doc.svg
│ ├── ic_file_error.svg
│ ├── ic_file_excel.svg
│ ├── ic_file_folder.svg
│ ├── ic_file_image.svg
│ ├── ic_file_pdf.svg
│ ├── ic_file_ppt.svg
│ ├── ic_file_unknown.svg
│ ├── ic_file_video.svg
│ ├── ic_file_word.svg
│ ├── ic_file_zip.svg
│ ├── ic_goto.svg
│ ├── ic_jump_to.svg
│ ├── ic_keyboard.svg
│ ├── ic_matrixid.svg
│ ├── ic_no_results_found.svg
│ ├── ic_person_check.svg
│ ├── ic_phone_call.svg
│ ├── ic_photos_setting.svg
│ ├── ic_reply.svg
│ ├── ic_send.svg
│ ├── ic_send_status.svg
│ ├── ic_sending.svg
│ ├── ic_shield_lock_fill.svg
│ ├── ic_show_in_chat.svg
│ ├── ic_skeletons.svg
│ ├── ic_status.svg
│ ├── ic_twake_image_beta.svg
│ ├── ic_twake_image_logo.svg
│ ├── ic_twake_logo.svg
│ ├── ic_unpin.svg
│ ├── ic_users_outline.svg
│ ├── ic_video_call.svg
│ ├── ic_voice_message.svg
│ ├── logo_twake_welcome.svg
│ └── search_emoji_empty.svg
├── info-logo.png
├── js
│ └── package
│ │ └── .gitkeep
├── l10n
│ ├── intl_ar.arb
│ ├── intl_ca.arb
│ ├── intl_cs.arb
│ ├── intl_de.arb
│ ├── intl_en.arb
│ ├── intl_eo.arb
│ ├── intl_es.arb
│ ├── intl_et.arb
│ ├── intl_eu.arb
│ ├── intl_fa.arb
│ ├── intl_fi.arb
│ ├── intl_fr.arb
│ ├── intl_ga.arb
│ ├── intl_gl.arb
│ ├── intl_he.arb
│ ├── intl_hr.arb
│ ├── intl_hu.arb
│ ├── intl_id.arb
│ ├── intl_ie.arb
│ ├── intl_it.arb
│ ├── intl_ja.arb
│ ├── intl_ko.arb
│ ├── intl_lt.arb
│ ├── intl_nb.arb
│ ├── intl_nl.arb
│ ├── intl_pl.arb
│ ├── intl_pt.arb
│ ├── intl_pt_BR.arb
│ ├── intl_pt_PT.arb
│ ├── intl_ro.arb
│ ├── intl_ru.arb
│ ├── intl_sk.arb
│ ├── intl_sl.arb
│ ├── intl_sr.arb
│ ├── intl_sv.arb
│ ├── intl_tr.arb
│ ├── intl_uk.arb
│ ├── intl_vi.arb
│ ├── intl_zh.arb
│ └── intl_zh_Hant.arb
├── logo.png
├── logo.svg
├── sas-emoji.json
├── share.png
├── sounds
│ ├── WoodenBeaver_stereo_message-new-instant.ogg
│ ├── call.ogg
│ └── phone.ogg
├── twake.svg
├── twake_loading.json
├── typing-indicator.zip
└── verification.png
├── config.sample.json
├── configurations
├── app_dashboard.json
├── icons
│ ├── ic_twake_calendar.svg
│ ├── ic_twake_chat.svg
│ ├── ic_twake_contacts.svg
│ ├── ic_twake_drive.svg
│ ├── ic_twake_mail.svg
│ ├── ic_twake_support.svg
│ └── ic_twake_visio.svg
└── nginx.conf.template
├── docs
├── LICENSE
├── OFL.txt
├── ZenKurenaido-Regular.ttf
├── adr
│ ├── 0001-record-architecture-decisions.md
│ ├── 0002-parse-pushnotification-error.md
│ ├── 0003-improve-for-load-image-first-time.md
│ ├── 0004-cannot-get-current-location-and-current-context.md
│ ├── 0005-matrix-sdk-receipts-not-working-properly.md
│ ├── 0006-dom-exception-error-when-delete-disk-for-web.md
│ ├── 0007-implement-search-in-chat-room.md
│ ├── 0008-apply-dio-cache-interceptor.md
│ ├── 0009-Instructions-for-naming-twake-events.md
│ ├── 0010-upgrade-gradle-build-to-7-3-0.md
│ ├── 0011-workaround-for-ios-force-user-relogin.md
│ ├── 0012-improve-ios-notification.md
│ ├── 0013-refactor-message-widget.md
│ ├── 0014-find-to-last-read-message.md
│ ├── 0015-get-server-config.md
│ ├── 0016-sticky-timestamp-inside-chat.md
│ ├── 0017-remove-set-state-for-reply-message.md
│ ├── 0018-show-in-chat-of-media-functionality.md
│ ├── 0019-change-the-way-log-in-SSO-in-web.md
│ ├── 0020-keyboard-is-disappeared-then-appeared.md
│ ├── 0021--chat-message-bubbles-width.md
│ ├── 0022-listen-to-presence-status.md
│ ├── 0023-upgrade-flutter-3.22.md
│ ├── 0024-cancel-upload-file-with-caption.md
│ ├── 0024-upgrade-flutter-3.24.md
│ ├── 0025-add-patrol-integration-tests.md
│ ├── 0025-improve-tag-suggesstion-and-dispay-members-in-group-chat-detail.md
│ └── memory_leak_tracking
│ │ ├── 0001-dispose-valuenotifier-when-not-used.md
│ │ ├── 0002-cancel-stream-subscription-when-not-used.md
│ │ └── 0003-do-not-set-null-to-variable-after-cancel.md
├── appstore-badge.png
├── bg.svg
├── browser-badge.png
├── code_style.md
├── configurations
│ ├── app_grid_configuration.md
│ ├── config_build_mobile_app_for_public_platform.md
│ ├── config_web_app_for_public_platform.md
│ └── configure_push_gateway.md
├── en
│ └── privacy.html
├── favicon.png
├── fdroid_button.png
├── fdroid_repo.md
├── firefox_icon.png
├── flathub-badge-en.png
├── google-play-badge.png
├── how_to_fork.md
├── index.html
├── kofi_button_dark.png
├── qr-nightly.svg
├── qr-stable.svg
├── screenshots
│ ├── desktop.png
│ ├── mobile.png
│ ├── product.jpeg
│ ├── screenshots.png
│ ├── showcase1.jpeg
│ ├── showcase2.jpeg
│ ├── showcase3.jpeg
│ ├── showcase4.jpeg
│ └── showcase5.jpeg
├── tailwind.config.js
└── tailwind.css
├── fastlane
├── fdroid
├── .gitignore
├── config.nightly.py
├── config.stable.py
├── fdroid-icon.png
└── metadata
│ └── chat.fluffy.fluffychat.yml
├── flake.lock
├── flake.nix
├── integration_test
├── .gitignore
├── base
│ ├── base_scenario.dart
│ ├── core_robot.dart
│ └── test_base.dart
├── dendrite
│ └── data
│ │ └── dendrite.yaml
├── extensions
│ ├── default_flows.dart
│ └── wait_for.dart
├── robots
│ └── login_robot.dart
├── scenarios
│ └── login_scenario.dart
├── synapse
│ └── data
│ │ ├── homeserver.yaml
│ │ ├── localhost.log.config
│ │ └── localhost.signing.key
├── tests
│ └── login
│ │ └── login_test.dart
└── users.dart
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Gemfile
├── Gemfile.lock
├── NSE
│ ├── AttributedString.swift
│ ├── AvatarSize.swift
│ ├── BackgroundTaskProtocol.swift
│ ├── BackgroundTaskServiceProtocol.swift
│ ├── Bundle.swift
│ ├── Date.swift
│ ├── DesignKit
│ │ ├── Package.resolved
│ │ ├── Package.swift
│ │ ├── Sources
│ │ │ ├── Buttons
│ │ │ │ ├── ElementActionButtonStyle.swift
│ │ │ │ ├── ElementCapsuleButtonStyle.swift
│ │ │ │ └── ElementGhostButtonStyle.swift
│ │ │ ├── Colors
│ │ │ │ └── ElementColors.swift
│ │ │ ├── Common
│ │ │ │ └── ElementControlSize.swift
│ │ │ ├── Shapes
│ │ │ │ └── RoundedCornerShape.swift
│ │ │ └── TextFields
│ │ │ │ └── ElementTextFieldStyle.swift
│ │ └── Tests
│ │ │ └── DesignKitTests.swift
│ ├── FileManager.swift
│ ├── Generated
│ │ ├── Assets.swift
│ │ ├── Strings+Untranslated.swift
│ │ └── Strings.swift
│ ├── HTMLParsing
│ │ ├── AttributedStringBuilder.swift
│ │ ├── AttributedStringBuilderProtocol.swift
│ │ ├── DTHTMLElement+AttributedStringBuilder.swift
│ │ ├── ElementXAttributeScope.swift
│ │ ├── UIFont+AttributedStringBuilder.h
│ │ └── UIFont+AttributedStringBuilder.m
│ ├── ImageCache.swift
│ ├── Info.plist
│ ├── InfoPlistReader.swift
│ ├── KeychainController.swift
│ ├── KeychainControllerProtocol.swift
│ ├── LayoutDirection.swift
│ ├── Logging
│ │ ├── MXLog.swift
│ │ ├── MXLogger.swift
│ │ └── RustTracing.swift
│ ├── MatrixEntityRegex.swift
│ ├── NSE.entitlements
│ ├── NSRegularExpresion.swift
│ ├── NotificationConstants.swift
│ ├── PermalinkBuilder.swift
│ ├── PlaceholderAvatarImage.swift
│ ├── Provider
│ │ ├── ImageProviderProtocol.swift
│ │ ├── MediaFileHandleProxy.swift
│ │ ├── MediaLoader.swift
│ │ ├── MediaLoaderProtocol.swift
│ │ ├── MediaProvider.swift
│ │ ├── MediaProviderProtocol.swift
│ │ ├── MediaSourceProxy.swift
│ │ └── MockMediaProvider.swift
│ ├── Proxy
│ │ ├── NotificationItemProxy.swift
│ │ └── NotificationItemProxyProtocol.swift
│ ├── RestorationToken.swift
│ ├── RoomMessageEventStringBuilder.swift
│ ├── SharedUserDefaultsKeys.swift
│ ├── Sources
│ │ ├── NotificationContentBuilder.swift
│ │ ├── NotificationServiceExtension.swift
│ │ └── Other
│ │ │ ├── DataProtectionManager.swift
│ │ │ ├── NSELogger.swift
│ │ │ ├── NSESettings.swift
│ │ │ ├── NSEUserSession.swift
│ │ │ └── UNNotificationRequest.swift
│ ├── String.swift
│ ├── Task.swift
│ ├── TestablePreview.swift
│ ├── UNNotificationContent.swift
│ ├── URL.swift
│ ├── UTType.swift
│ ├── UserAgentBuilder.swift
│ └── UserPreference.swift
├── Podfile
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ ├── NSE.xcscheme
│ │ ├── Runner.xcscheme
│ │ └── TwakeShareExtension.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ ├── WorkspaceSettings.xcsettings
│ │ └── swiftpm
│ │ └── Package.resolved
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ ├── Icon-App-20x20@1x.png
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@1x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@1x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-50x50@1x.png
│ │ │ ├── Icon-App-50x50@2x.png
│ │ │ ├── Icon-App-57x57@1x.png
│ │ │ ├── Icon-App-57x57@2x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ ├── Icon-App-72x72@1x.png
│ │ │ ├── Icon-App-72x72@2x.png
│ │ │ ├── Icon-App-76x76@1x.png
│ │ │ ├── Icon-App-76x76@2x.png
│ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ ├── BrandingImage.imageset
│ │ │ ├── BrandingImage.png
│ │ │ ├── BrandingImage@2x.png
│ │ │ ├── BrandingImage@3x.png
│ │ │ └── Contents.json
│ │ ├── LaunchBackground.imageset
│ │ │ ├── Contents.json
│ │ │ └── background.png
│ │ └── LaunchImage.imageset
│ │ │ ├── Contents.json
│ │ │ ├── LaunchImage.png
│ │ │ ├── LaunchImage@2x.png
│ │ │ ├── LaunchImage@3x.png
│ │ │ └── README.md
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── GoogleService-Info.plist
│ ├── Info.plist
│ ├── Runner-Bridging-Header.h
│ ├── Runner.entitlements
│ ├── ar.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── ca.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── cs.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── de.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── en.lproj
│ │ ├── Localizable.strings
│ │ └── Localizable.stringsdict
│ ├── eo.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── es.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── et.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── eu.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── fr.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ ├── Localizable.stringsdict
│ │ └── Main.strings
│ ├── gl.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── hr-HR.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── hu-HU.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── hu.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── hy.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── it.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── ja.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── nb-NO.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── pl.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── pt.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── ru-RU.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ ├── Localizable.stringsdict
│ │ └── Main.strings
│ ├── sk-SK.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── sv-SE.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── tr.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── uk.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ ├── vi-VN.lproj
│ │ ├── LaunchScreen.strings
│ │ ├── Localizable.strings
│ │ └── Main.strings
│ └── zh-Hans.lproj
│ │ ├── LaunchScreen.strings
│ │ └── Main.strings
├── TwakeShareExtension
│ ├── Base.lproj
│ │ └── MainInterface.storyboard
│ ├── Info.plist
│ ├── ShareViewController.swift
│ └── TwakeShareExtension.entitlements
└── fastlane
│ ├── Appfile
│ ├── Fastfile
│ ├── Matchfile
│ ├── README.md
│ └── report.xml
├── l10n.yaml
├── lib
├── app_state
│ ├── failure.dart
│ ├── initial.dart
│ ├── success.dart
│ └── success_converter.dart
├── config
│ ├── app_config.dart
│ ├── app_emojis.dart
│ ├── app_grid_config
│ │ ├── app_config_loader.dart
│ │ ├── app_config_parser.dart
│ │ └── app_grid_errors.dart
│ ├── config_saas
│ │ └── config_saas.dart
│ ├── default_power_level_member.dart
│ ├── first_column_inner_routes.dart
│ ├── go_routes
│ │ ├── go_router.dart
│ │ └── router_arguments.dart
│ ├── isrg_x1.dart
│ ├── localizations
│ │ ├── language_code_constants.dart
│ │ └── localization_service.dart
│ ├── setting_keys.dart
│ └── themes.dart
├── data
│ ├── datasource
│ │ ├── contact
│ │ │ ├── address_book_datasource.dart
│ │ │ ├── hive_third_party_contact_datasource.dart
│ │ │ └── phonebook_datasource.dart
│ │ ├── federation_configurations_datasource.dart
│ │ ├── invitation
│ │ │ ├── hive_invitation_status_datasource.dart
│ │ │ └── invitation_datasource.dart
│ │ ├── localizations
│ │ │ └── localizations_datasource.dart
│ │ ├── media
│ │ │ └── media_data_source.dart
│ │ ├── multiple_account
│ │ │ └── multiple_account_datasource.dart
│ │ ├── reactions
│ │ │ └── reactions_datasource.dart
│ │ ├── recovery_words_data_source.dart
│ │ ├── server_config_datasource.dart
│ │ ├── server_search_datasource.dart
│ │ ├── tom_configurations_datasource.dart
│ │ └── tom_contacts_datasource.dart
│ ├── datasource_impl
│ │ ├── contact
│ │ │ ├── address_book_datasource_impl.dart
│ │ │ ├── hive_third_party_contact_datasource_impl.dart
│ │ │ ├── phonebook_contact_datasource_impl.dart
│ │ │ └── tom_contacts_datasource_impl.dart
│ │ ├── federation_configurations_datasource_impl.dart
│ │ ├── invitation
│ │ │ ├── hive_invitation_status_datasource_impl.dart
│ │ │ └── invitation_datasource_impl.dart
│ │ ├── localizations
│ │ │ └── localizations_datasource_impl.dart
│ │ ├── media
│ │ │ └── media_data_source_impl.dart
│ │ ├── multiple_account
│ │ │ └── multiple_account_datasource_impl.dart
│ │ ├── reactions
│ │ │ └── reactions_datasource_impl.dart
│ │ ├── recovery_words_data_source_impl.dart
│ │ ├── server_config_datasource_impl.dart
│ │ ├── server_search_datasource_impl.dart
│ │ └── tom_configurations_datasource_impl.dart
│ ├── extensions
│ │ └── media
│ │ │ └── url_preview_response_extension.dart
│ ├── hive
│ │ ├── dto
│ │ │ ├── contact
│ │ │ │ ├── contact_hive_obj.dart
│ │ │ │ └── third_party_contact_hive_obj.dart
│ │ │ ├── federation_configurations_hive_obj.dart
│ │ │ ├── federation_server_information_hive_obj.dart
│ │ │ ├── invitation_status
│ │ │ │ └── invitation_status_hive_obj.dart
│ │ │ ├── tom_configurations_hive_obj.dart
│ │ │ └── tom_server_information_hive_obj.dart
│ │ ├── extension
│ │ │ ├── contact_hive_obj_extension.dart
│ │ │ └── invitation_status_hive_obj_extension.dart
│ │ └── hive_collection_tom_database.dart
│ ├── local
│ │ ├── contact
│ │ │ ├── enum
│ │ │ │ ├── chunk_federation_contact_error_enum.dart
│ │ │ │ ├── contacts_hive_error_enum.dart
│ │ │ │ └── contacts_vault_error_enum.dart
│ │ │ └── shared_preferences_contact_cache_manager.dart
│ │ ├── localizations
│ │ │ └── language_cache_manager.dart
│ │ ├── multiple_account
│ │ │ └── multiple_account_cache_manager.dart
│ │ └── reaction
│ │ │ └── reaction_cache_manager.dart
│ ├── model
│ │ ├── addressbook
│ │ │ ├── address_book.dart
│ │ │ ├── address_book_request.dart
│ │ │ └── address_book_response.dart
│ │ ├── federation_server
│ │ │ ├── federation_configuration.dart
│ │ │ └── federation_server_information.dart
│ │ ├── invitation
│ │ │ ├── generate_invitation_link_response.dart
│ │ │ ├── invitation_request.dart
│ │ │ ├── invitation_status_response.dart
│ │ │ └── send_invitation_response.dart
│ │ ├── media
│ │ │ ├── download_file_response.dart
│ │ │ ├── upload_file_json.dart
│ │ │ └── url_preview_response.dart
│ │ ├── recovery_words_json.dart
│ │ └── search
│ │ │ ├── server_search_request.dart
│ │ │ └── server_search_response.dart
│ ├── network
│ │ ├── contact
│ │ │ ├── address_book_api.dart
│ │ │ └── tom_contact_api.dart
│ │ ├── dio_cache_option.dart
│ │ ├── dio_client.dart
│ │ ├── exception
│ │ │ └── dio_duplicate_download_exception.dart
│ │ ├── extensions
│ │ │ ├── file_info_extension.dart
│ │ │ └── options_extensions.dart
│ │ ├── homeserver_endpoint.dart
│ │ ├── identity_endpoint.dart
│ │ ├── interceptor
│ │ │ ├── authorization_interceptor.dart
│ │ │ ├── download_file_interceptor.dart
│ │ │ ├── dynamic_url_interceptor.dart
│ │ │ └── matrix_dio_cache_interceptor.dart
│ │ ├── invitation
│ │ │ └── invitation_api.dart
│ │ ├── media
│ │ │ ├── cancel_exception.dart
│ │ │ └── media_api.dart
│ │ ├── recovery_words
│ │ │ └── recovery_words_api.dart
│ │ ├── search
│ │ │ └── server_search_api.dart
│ │ ├── server_config_api.dart
│ │ ├── service_path.dart
│ │ ├── status_error_code.dart
│ │ └── tom_endpoint.dart
│ └── repository
│ │ ├── contact
│ │ ├── address_book_repository_impl.dart
│ │ ├── hive_third_party_contact_repository_impl.dart
│ │ ├── phonebook_contact_repository_impl.dart
│ │ └── tom_contact_repository_impl.dart
│ │ ├── federation_configurations_repository_impl.dart
│ │ ├── invitation
│ │ ├── hive_invitation_status_repository_impl.dart
│ │ └── invitation_repository_impl.dart
│ │ ├── localizations
│ │ └── localizations_repository_impl.dart
│ │ ├── media
│ │ └── media_repository_impl.dart
│ │ ├── multiple_account
│ │ └── multiple_account_repository_impl.dart
│ │ ├── reactions
│ │ └── reactions_repository_impl.dart
│ │ ├── recovery_words_repository_impl.dart
│ │ ├── server_config_repository_impl.dart
│ │ ├── server_search_repository_impl.dart
│ │ └── tom_configurations_repository_impl.dart
├── di
│ ├── base_di.dart
│ └── global
│ │ ├── dio_cache_interceptor_for_client.dart
│ │ ├── get_it_initializer.dart
│ │ ├── hive_di.dart
│ │ ├── network_connectivity_di.dart
│ │ └── network_di.dart
├── domain
│ ├── app_state
│ │ ├── app_grid
│ │ │ └── get_app_grid_configuration_state.dart
│ │ ├── contact
│ │ │ ├── delete_third_party_contact_box_state.dart
│ │ │ ├── get_address_book_state.dart
│ │ │ ├── get_contacts_state.dart
│ │ │ ├── get_phonebook_contact_state.dart
│ │ │ ├── lookup_match_contact_state.dart
│ │ │ ├── post_address_book_state.dart
│ │ │ └── try_get_synced_phone_book_contact_state.dart
│ │ ├── direct_chat
│ │ │ ├── create_direct_chat_failed.dart
│ │ │ ├── create_direct_chat_loading.dart
│ │ │ └── create_direct_chat_success.dart
│ │ ├── download
│ │ │ └── download_file_state.dart
│ │ ├── forward
│ │ │ └── forward_message_state.dart
│ │ ├── invitation
│ │ │ ├── generate_invitation_link_state.dart
│ │ │ ├── get_invitation_status_state.dart
│ │ │ ├── hive_delete_invitation_status_state.dart
│ │ │ ├── hive_get_invitation_status_state.dart
│ │ │ ├── send_invitation_state.dart
│ │ │ └── store_invitation_status_state.dart
│ │ ├── localizations
│ │ │ └── save_language_state.dart
│ │ ├── preview_file
│ │ │ ├── download_file_for_preview_failure.dart
│ │ │ ├── download_file_for_preview_loading.dart
│ │ │ └── download_file_for_preview_success.dart
│ │ ├── preview_url
│ │ │ ├── get_preview_url_failure.dart
│ │ │ ├── get_preview_url_loading.dart
│ │ │ └── get_preview_url_success.dart
│ │ ├── recovery_words
│ │ │ ├── delete_recovery_states.dart
│ │ │ ├── get_recovery_words_failed.dart
│ │ │ ├── get_recovery_words_success.dart
│ │ │ ├── save_recovery_words_failed.dart
│ │ │ └── save_recovery_words_success.dart
│ │ ├── room
│ │ │ ├── chat_get_pinned_events_state.dart
│ │ │ ├── chat_room_search_state.dart
│ │ │ ├── create_new_group_chat_state.dart
│ │ │ ├── delete_event_state.dart
│ │ │ ├── timeline_search_event_state.dart
│ │ │ ├── update_group_chat_failure.dart
│ │ │ ├── update_group_chat_loading.dart
│ │ │ ├── update_group_chat_success.dart
│ │ │ ├── update_pinned_events_state.dart
│ │ │ └── upload_content_state.dart
│ │ ├── search
│ │ │ ├── pre_search_state.dart
│ │ │ ├── search_state.dart
│ │ │ └── server_search_state.dart
│ │ ├── send_file_dialog
│ │ │ └── generate_thumbnails_media_state.dart
│ │ ├── send_files
│ │ │ ├── send_files_failed.dart
│ │ │ ├── send_files_loading.dart
│ │ │ ├── send_files_loading_with_placeholder.dart
│ │ │ └── send_files_success.dart
│ │ ├── settings
│ │ │ ├── update_profile_failure.dart
│ │ │ ├── update_profile_loading.dart
│ │ │ └── update_profile_success.dart
│ │ └── validator
│ │ │ └── verify_name_view_state.dart
│ ├── contact_manager
│ │ └── contacts_manager.dart
│ ├── enums
│ │ └── pinned_messages_action_enum.dart
│ ├── exception
│ │ ├── contacts
│ │ │ └── twake_lookup_exceptions.dart
│ │ ├── federation_configuration_not_found.dart
│ │ ├── invitation
│ │ │ └── invitation_status_not_found.dart
│ │ ├── room
│ │ │ ├── can_not_create_new_group_chat_exception.dart
│ │ │ └── can_not_upload_content_exception.dart
│ │ ├── tom_configuration_not_found.dart
│ │ └── verify_name_exception.dart
│ ├── keychain_sharing
│ │ ├── keychain_sharing_manager.dart
│ │ ├── keychain_sharing_restore_token.dart
│ │ └── keychain_sharing_session.dart
│ ├── model
│ │ ├── app_grid
│ │ │ ├── app_grid_configuration_parser.dart
│ │ │ ├── linagora_app.dart
│ │ │ └── linagora_applications.dart
│ │ ├── contact
│ │ │ ├── contact.dart
│ │ │ ├── contact_query.dart
│ │ │ ├── contact_status.dart
│ │ │ ├── contact_type.dart
│ │ │ ├── federation_identity_register_response.dart
│ │ │ ├── lookup_mxid_request.dart
│ │ │ ├── lookup_mxid_response.dart
│ │ │ ├── third_party_status.dart
│ │ │ └── tom_contact.dart
│ │ ├── download_file
│ │ │ └── download_file_for_preview_response.dart
│ │ ├── extensions
│ │ │ ├── contact
│ │ │ │ ├── address_book_extension.dart
│ │ │ │ ├── contact_extension.dart
│ │ │ │ └── tom_contact_extension.dart
│ │ │ ├── homeserver_summary_extensions.dart
│ │ │ ├── invitation
│ │ │ │ └── invitation_extension.dart
│ │ │ ├── linagora_app_extensions.dart
│ │ │ ├── list_validator_extension.dart
│ │ │ ├── platform_file
│ │ │ │ └── platform_file_extension.dart
│ │ │ ├── push
│ │ │ │ └── push_notification_extension.dart
│ │ │ ├── search
│ │ │ │ └── contact_search_extension.dart
│ │ │ ├── string_extension.dart
│ │ │ └── validator_failure_extension.dart
│ │ ├── invitation
│ │ │ ├── invitation_medium_enum.dart
│ │ │ └── invitation_status.dart
│ │ ├── media
│ │ │ └── url_preview.dart
│ │ ├── preview_file
│ │ │ ├── document_uti.dart
│ │ │ └── supported_preview_file_types.dart
│ │ ├── query.dart
│ │ ├── recovery_words
│ │ │ └── recovery_words.dart
│ │ ├── room
│ │ │ ├── create_new_group_chat_request.dart
│ │ │ ├── room_extension.dart
│ │ │ └── room_list_extension.dart
│ │ ├── search
│ │ │ ├── contact_search_model.dart
│ │ │ ├── recent_chat_model.dart
│ │ │ ├── search_model.dart
│ │ │ └── server_side_search_categories.dart
│ │ ├── tom_configurations.dart
│ │ ├── tom_server_information.dart
│ │ └── verification
│ │ │ ├── composite_name_validator.dart
│ │ │ ├── empty_name_validator.dart
│ │ │ ├── name_with_space_only_validator.dart
│ │ │ ├── new_name_request.dart
│ │ │ └── validator.dart
│ ├── repository
│ │ ├── contact
│ │ │ ├── address_book_repository.dart
│ │ │ └── hive_contact_repository.dart
│ │ ├── contact_repository.dart
│ │ ├── federation_configurations_repository.dart
│ │ ├── invitation
│ │ │ ├── hive_invitation_status_repository.dart
│ │ │ └── invitation_repository.dart
│ │ ├── localizations
│ │ │ └── localizations_repository.dart
│ │ ├── media
│ │ │ └── media_repository.dart
│ │ ├── multiple_account
│ │ │ └── multiple_account_repository.dart
│ │ ├── phonebook_contact_repository.dart
│ │ ├── reactions
│ │ │ └── reactions_repository.dart
│ │ ├── recovery_words_repository.dart
│ │ ├── server_config_repository.dart
│ │ ├── server_search_repository.dart
│ │ └── tom_configurations_repository.dart
│ └── usecase
│ │ ├── app_grid
│ │ └── get_app_grid_configuration_interactor.dart
│ │ ├── contacts
│ │ ├── delete_third_party_contact_box_interactor.dart
│ │ ├── federation_look_up_argument.dart
│ │ ├── federation_look_up_phonebook_contact_interactor.dart
│ │ ├── get_address_book_interactor.dart
│ │ ├── get_tom_contacts_interactor.dart
│ │ ├── lookup_match_contact_interactor.dart
│ │ ├── post_address_book_interactor.dart
│ │ ├── try_get_synced_phone_book_contact_interactor.dart
│ │ ├── twake_look_up_argument.dart
│ │ └── twake_look_up_phonebook_contact_interactor.dart
│ │ ├── create_direct_chat_interactor.dart
│ │ ├── download_file_for_preview_interactor.dart
│ │ ├── forward
│ │ └── forward_message_interactor.dart
│ │ ├── generate_thumbnails_media_interactor.dart
│ │ ├── invitation
│ │ ├── constants.dart
│ │ ├── generate_invitation_link_interactor.dart
│ │ ├── get_invitation_status_interactor.dart
│ │ ├── hive_delete_invitation_status_interactor.dart
│ │ ├── hive_get_invitation_status_interactor.dart
│ │ ├── send_invitation_interactor.dart
│ │ └── store_invitation_status_interactor.dart
│ │ ├── lazy_load_interactor.dart
│ │ ├── preview_url
│ │ └── get_preview_url_interactor.dart
│ │ ├── reactions
│ │ ├── get_recent_reactions_interactor.dart
│ │ └── store_recent_reactions_interactor.dart
│ │ ├── recovery
│ │ ├── delete_recovery_words_interactor.dart
│ │ ├── get_recovery_words_interactor.dart
│ │ └── save_recovery_words_interactor.dart
│ │ ├── room
│ │ ├── chat_get_pinned_events_interactor.dart
│ │ ├── chat_room_search_interactor.dart
│ │ ├── create_new_group_chat_interactor.dart
│ │ ├── delete_event_interactor.dart
│ │ ├── download_media_file_interactor.dart
│ │ ├── timeline_search_event_interactor.dart
│ │ ├── update_group_chat_interactor.dart
│ │ ├── update_pinned_messages_interactor.dart
│ │ ├── upload_content_for_web_interactor.dart
│ │ └── upload_content_interactor.dart
│ │ ├── search
│ │ ├── pre_search_recent_contacts_interactor.dart
│ │ ├── search_recent_chat_interactor.dart
│ │ └── server_search_interactor.dart
│ │ ├── settings
│ │ ├── save_language_interactor.dart
│ │ └── update_profile_interactor.dart
│ │ └── verify_name_interactor.dart
├── event
│ ├── twake_event_dispatcher.dart
│ ├── twake_event_messages.dart
│ ├── twake_event_types.dart
│ └── twake_inapp_event_types.dart
├── main.dart
├── migrate_steps
│ ├── migrate_steps.dart
│ └── migrate_v6_to_v7
│ │ └── migrate_v6_to_v7.dart
├── modules
│ ├── federation_identity_lookup
│ │ ├── data
│ │ │ ├── datasource
│ │ │ │ └── federation_identity_lookup_datasource.dart
│ │ │ ├── datasource_impl
│ │ │ │ └── federation_identity_lookup_datasource_impl.dart
│ │ │ ├── network
│ │ │ │ ├── federation_identity_endpoint.dart
│ │ │ │ └── federation_identity_lookup_api.dart
│ │ │ └── repository_impl
│ │ │ │ └── federation_identity_lookup_repository_impl.dart
│ │ ├── domain
│ │ │ ├── exceptions
│ │ │ │ └── federation_identity_lookup_exceptions.dart
│ │ │ ├── models
│ │ │ │ ├── federation_arguments.dart
│ │ │ │ ├── federation_contact.dart
│ │ │ │ ├── federation_hash_details_response.dart
│ │ │ │ ├── federation_lookup_mxid_request.dart
│ │ │ │ ├── federation_lookup_mxid_response.dart
│ │ │ │ ├── federation_register_response.dart
│ │ │ │ └── federation_third_party_contact.dart
│ │ │ ├── repository
│ │ │ │ └── federation_identity_lookup_repository.dart
│ │ │ ├── state
│ │ │ │ └── federation_identity_lookup_state.dart
│ │ │ └── usecase
│ │ │ │ └── federation_identity_lookup_interactor.dart
│ │ └── manager
│ │ │ ├── federation_identity_lookup_manager.dart
│ │ │ └── identity_lookup_manager.dart
│ └── federation_identity_request_token
│ │ ├── data
│ │ ├── datasource
│ │ │ └── federation_identity_request_token_datasource.dart
│ │ ├── datasource_impl
│ │ │ └── federation_identity_request_token_datasource_impl.dart
│ │ ├── network
│ │ │ ├── federation_identity_request_token_api.dart
│ │ │ └── federation_identity_request_token_endpoint.dart
│ │ └── repository
│ │ │ └── federation_identity_request_token_repository_impl.dart
│ │ ├── domain
│ │ ├── models
│ │ │ ├── federation_token_information.dart
│ │ │ └── federation_token_request.dart
│ │ ├── repository
│ │ │ └── federation_identity_request_token_repository.dart
│ │ ├── state
│ │ │ └── federation_identity_request_token_state.dart
│ │ └── usecase
│ │ │ └── federation_identity_request_token_interactor.dart
│ │ └── manager
│ │ └── federation_identity_request_token_manager.dart
├── pages
│ ├── add_story
│ │ ├── add_story.dart
│ │ ├── add_story_view.dart
│ │ └── invite_story_page.dart
│ ├── app_grid
│ │ ├── app_grid_dashboard_controller.dart
│ │ ├── app_grid_dashboard_item.dart
│ │ ├── app_grid_dashboard_item_style.dart
│ │ ├── app_grid_dashboard_overlay.dart
│ │ ├── app_grid_dashboard_overlay_style.dart
│ │ ├── app_grid_dashboard_view.dart
│ │ └── app_grid_dashboard_view_style.dart
│ ├── archive
│ │ ├── archive.dart
│ │ └── archive_view.dart
│ ├── auto_homeserver_picker
│ │ ├── auto_homeserver_picker.dart
│ │ ├── auto_homeserver_picker_state.dart
│ │ ├── auto_homeserver_picker_view.dart
│ │ └── auto_homeserver_picker_view_style.dart
│ ├── bootstrap
│ │ ├── bootstrap_dialog.dart
│ │ ├── init_client_dialog.dart
│ │ ├── tom_bootstrap_dialog.dart
│ │ ├── tom_bootstrap_dialog_mobile_style.dart
│ │ ├── tom_bootstrap_dialog_mobile_view.dart
│ │ ├── tom_bootstrap_dialog_style.dart
│ │ └── tom_bootstrap_dialog_web_view.dart
│ ├── chat
│ │ ├── add_widget_tile.dart
│ │ ├── add_widget_tile_view.dart
│ │ ├── chat.dart
│ │ ├── chat_actions.dart
│ │ ├── chat_actions_style.dart
│ │ ├── chat_app_bar_title.dart
│ │ ├── chat_app_bar_title_style.dart
│ │ ├── chat_context_menu_actions.dart
│ │ ├── chat_event_list.dart
│ │ ├── chat_horizontal_action_menu.dart
│ │ ├── chat_input_row.dart
│ │ ├── chat_input_row_mobile.dart
│ │ ├── chat_input_row_send_btn.dart
│ │ ├── chat_input_row_style.dart
│ │ ├── chat_input_row_web.dart
│ │ ├── chat_invitation_body.dart
│ │ ├── chat_invitation_body_style.dart
│ │ ├── chat_loading_view.dart
│ │ ├── chat_loading_view_style.dart
│ │ ├── chat_pinned_events
│ │ │ ├── bottom_menu
│ │ │ │ ├── bottom_menu_mobile.dart
│ │ │ │ └── bottom_menu_web.dart
│ │ │ ├── pinned_events_argument.dart
│ │ │ ├── pinned_events_controller.dart
│ │ │ ├── pinned_events_style.dart
│ │ │ ├── pinned_events_view.dart
│ │ │ ├── pinned_messages.dart
│ │ │ ├── pinned_messages_screen.dart
│ │ │ └── pinned_messages_style.dart
│ │ ├── chat_view.dart
│ │ ├── chat_view_body.dart
│ │ ├── chat_view_body_style.dart
│ │ ├── chat_view_style.dart
│ │ ├── command_hints.dart
│ │ ├── context_item_chat_action.dart
│ │ ├── cupertino_widgets_bottom_sheet.dart
│ │ ├── dialog_reject_invite_style.dart
│ │ ├── dialog_reject_invite_widget.dart
│ │ ├── disabled_chat_input_row.dart
│ │ ├── disabled_chat_input_row_style.dart
│ │ ├── edit_widgets_dialog.dart
│ │ ├── event_info_dialog.dart
│ │ ├── events
│ │ │ ├── audio_player.dart
│ │ │ ├── button_content.dart
│ │ │ ├── button_content_style.dart
│ │ │ ├── call_invite_content.dart
│ │ │ ├── cute_events.dart
│ │ │ ├── download_video_state.dart
│ │ │ ├── download_video_widget.dart
│ │ │ ├── encrypted_content.dart
│ │ │ ├── encrypted_mixin.dart
│ │ │ ├── event_video_player.dart
│ │ │ ├── formatted_text_widget.dart
│ │ │ ├── html_message.dart
│ │ │ ├── images_builder
│ │ │ │ ├── image_bubble.dart
│ │ │ │ ├── image_builder_web.dart
│ │ │ │ ├── image_placeholder.dart
│ │ │ │ ├── message_content_image_builder.dart
│ │ │ │ ├── sending_image_info_widget.dart
│ │ │ │ └── unencrypted_image_builder_web.dart
│ │ │ ├── map_bubble.dart
│ │ │ ├── message
│ │ │ │ ├── display_name_widget.dart
│ │ │ │ ├── message.dart
│ │ │ │ ├── message_content_builder.dart
│ │ │ │ ├── message_content_builder_mixin.dart
│ │ │ │ ├── message_content_with_timestamp_builder.dart
│ │ │ │ ├── message_context_menu_action.dart
│ │ │ │ ├── message_style.dart
│ │ │ │ ├── multi_platform_message_container.dart
│ │ │ │ ├── reply_content_widget.dart
│ │ │ │ ├── reply_icon_widget.dart
│ │ │ │ └── swipeable_message.dart
│ │ │ ├── message_content.dart
│ │ │ ├── message_content_mixin.dart
│ │ │ ├── message_content_style.dart
│ │ │ ├── message_download_content.dart
│ │ │ ├── message_download_content_web.dart
│ │ │ ├── message_reactions.dart
│ │ │ ├── message_reactions_bottom_sheet.dart
│ │ │ ├── message_reactions_style.dart
│ │ │ ├── message_time.dart
│ │ │ ├── message_time_style.dart
│ │ │ ├── message_upload_content.dart
│ │ │ ├── message_video_download_content.dart
│ │ │ ├── message_video_download_content_web.dart
│ │ │ ├── message_video_upload_content.dart
│ │ │ ├── redacted_content.dart
│ │ │ ├── reply_content.dart
│ │ │ ├── reply_content_style.dart
│ │ │ ├── sending_video_widget.dart
│ │ │ ├── state_message.dart
│ │ │ ├── sticker.dart
│ │ │ ├── unknown_content.dart
│ │ │ └── verification_request_content.dart
│ │ ├── group_chat_empty_view.dart
│ │ ├── input_bar
│ │ │ ├── context_menu_input_bar.dart
│ │ │ ├── focus_suggestion_controller.dart
│ │ │ ├── focus_suggestion_list.dart
│ │ │ ├── input_bar.dart
│ │ │ ├── input_bar_shortcut.dart
│ │ │ └── input_bar_style.dart
│ │ ├── item_actions_bottom_widget.dart
│ │ ├── others_group_chat_empty_view.dart
│ │ ├── phone_number_context_menu_actions.dart
│ │ ├── recording_dialog.dart
│ │ ├── reply_display.dart
│ │ ├── reply_display_style.dart
│ │ ├── seen_by_row.dart
│ │ ├── send_file_dialog
│ │ │ ├── files_listview_widget.dart
│ │ │ ├── hover_actions_widget.dart
│ │ │ ├── media_page_view_widget.dart
│ │ │ ├── send_file_dialog.dart
│ │ │ ├── send_file_dialog_style.dart
│ │ │ └── send_file_dialog_view.dart
│ │ ├── sticker_picker_dialog.dart
│ │ ├── sticky_timestamp_widget.dart
│ │ ├── tombstone_display.dart
│ │ ├── typing_indicators.dart
│ │ └── widgets_bottom_sheet.dart
│ ├── chat_adaptive_scaffold
│ │ ├── chat_adaptive_scaffold.dart
│ │ ├── chat_adaptive_scaffold_builder.dart
│ │ └── chat_adaptive_scaffold_style.dart
│ ├── chat_blank
│ │ ├── chat_blank.dart
│ │ ├── chat_blank_style.dart
│ │ └── chat_qr_code.dart
│ ├── chat_details
│ │ ├── chat_details.dart
│ │ ├── chat_details_actions_button.dart
│ │ ├── chat_details_actions_enum.dart
│ │ ├── chat_details_edit.dart
│ │ ├── chat_details_edit_context_menu_actions.dart
│ │ ├── chat_details_edit_option.dart
│ │ ├── chat_details_edit_option_style.dart
│ │ ├── chat_details_edit_view.dart
│ │ ├── chat_details_edit_view_style.dart
│ │ ├── chat_details_header_view.dart
│ │ ├── chat_details_navigator.dart
│ │ ├── chat_details_page_view
│ │ │ ├── chat_details_members_page.dart
│ │ │ ├── chat_details_page_enum.dart
│ │ │ ├── chat_details_page_view.dart
│ │ │ ├── chat_details_page_view_style.dart
│ │ │ ├── files
│ │ │ │ ├── chat_details_files_item
│ │ │ │ │ ├── chat_details_files_item.dart
│ │ │ │ │ ├── chat_details_files_item_style.dart
│ │ │ │ │ └── chat_details_files_item_view.dart
│ │ │ │ ├── chat_details_files_item_web
│ │ │ │ │ ├── chat_details_files_item_view_web.dart
│ │ │ │ │ └── chat_details_files_item_web.dart
│ │ │ │ ├── chat_details_files_page.dart
│ │ │ │ ├── chat_details_files_page_style.dart
│ │ │ │ ├── chat_details_files_row
│ │ │ │ │ ├── chat_details_file_download_tile.dart
│ │ │ │ │ ├── chat_details_file_downloaded_tile.dart
│ │ │ │ │ ├── chat_details_file_downloading_tile.dart
│ │ │ │ │ ├── chat_details_file_row_body.dart
│ │ │ │ │ ├── chat_details_file_row_downloading_web.dart
│ │ │ │ │ ├── chat_details_file_row_web.dart
│ │ │ │ │ ├── chat_details_row_downloading_wrapper.dart
│ │ │ │ │ └── chat_details_row_wrapper.dart
│ │ │ │ └── chat_details_files_tile
│ │ │ │ │ ├── chat_details_file_downloading_tile.dart
│ │ │ │ │ └── chat_details_file_row_web.dart
│ │ │ ├── links
│ │ │ │ ├── chat_details_links_item.dart
│ │ │ │ ├── chat_details_links_page.dart
│ │ │ │ └── chat_details_links_style.dart
│ │ │ └── media
│ │ │ │ ├── chat_details_media_page.dart
│ │ │ │ └── chat_details_media_style.dart
│ │ ├── chat_details_view.dart
│ │ ├── chat_details_view_style.dart
│ │ └── participant_list_item
│ │ │ ├── participant_list_item.dart
│ │ │ └── participant_list_item_style.dart
│ ├── chat_draft
│ │ ├── draft_chat.dart
│ │ ├── draft_chat_adaptive_scaffold.dart
│ │ ├── draft_chat_empty_widget.dart
│ │ ├── draft_chat_empty_widget_style.dart
│ │ ├── draft_chat_input_row.dart
│ │ ├── draft_chat_input_row_style.dart
│ │ ├── draft_chat_view.dart
│ │ └── draft_chat_view_style.dart
│ ├── chat_encryption_settings
│ │ ├── chat_encryption_settings.dart
│ │ └── chat_encryption_settings_view.dart
│ ├── chat_list
│ │ ├── chat_custom_slidable_action.dart
│ │ ├── chat_list.dart
│ │ ├── chat_list_body_view.dart
│ │ ├── chat_list_body_view_style.dart
│ │ ├── chat_list_bottom_navigator.dart
│ │ ├── chat_list_bottom_navigator_style.dart
│ │ ├── chat_list_header.dart
│ │ ├── chat_list_header_style.dart
│ │ ├── chat_list_item.dart
│ │ ├── chat_list_item_style.dart
│ │ ├── chat_list_item_subtitle.dart
│ │ ├── chat_list_item_title.dart
│ │ ├── chat_list_item_title_style.dart
│ │ ├── chat_list_skeletonizer_style.dart
│ │ ├── chat_list_skeletonizer_widget.dart
│ │ ├── chat_list_view.dart
│ │ ├── chat_list_view_builder.dart
│ │ ├── chat_list_view_style.dart
│ │ ├── client_chooser_button_style.dart
│ │ ├── common_chat_list_item.dart
│ │ ├── navi_rail_item.dart
│ │ ├── receive_sharing_intent_mixin.dart
│ │ ├── search_title.dart
│ │ ├── slidable_chat_list_item.dart
│ │ ├── space_view.dart
│ │ └── stories_header.dart
│ ├── chat_permissions_settings
│ │ ├── chat_permissions_settings.dart
│ │ ├── chat_permissions_settings_view.dart
│ │ └── permission_list_tile.dart
│ ├── chat_profile_info
│ │ ├── chat_profile_info.dart
│ │ ├── chat_profile_info_navigator.dart
│ │ ├── chat_profile_info_style.dart
│ │ └── chat_profile_info_view.dart
│ ├── chat_search
│ │ ├── chat_search.dart
│ │ ├── chat_search_style.dart
│ │ └── chat_search_view.dart
│ ├── connect
│ │ ├── connect_page.dart
│ │ ├── connect_page_view.dart
│ │ ├── connect_page_view_style.dart
│ │ ├── sso_button.dart
│ │ └── sso_login_state.dart
│ ├── contacts_tab
│ │ ├── contacts_appbar.dart
│ │ ├── contacts_appbar_style.dart
│ │ ├── contacts_invitation.dart
│ │ ├── contacts_invitation_style.dart
│ │ ├── contacts_invitation_view.dart
│ │ ├── contacts_tab.dart
│ │ ├── contacts_tab_body_view.dart
│ │ ├── contacts_tab_view.dart
│ │ ├── contacts_tab_view_style.dart
│ │ └── empty_contacts_body.dart
│ ├── device_settings
│ │ ├── device_settings.dart
│ │ ├── device_settings_view.dart
│ │ └── user_device_list_item.dart
│ ├── dialer
│ │ ├── dialer.dart
│ │ └── pip
│ │ │ ├── dismiss_keyboard.dart
│ │ │ └── pip_view.dart
│ ├── error_page
│ │ ├── error_page.dart
│ │ └── error_page_style.dart
│ ├── forward
│ │ ├── forward.dart
│ │ ├── forward_item_style.dart
│ │ ├── forward_view.dart
│ │ ├── forward_view_style.dart
│ │ ├── forward_web_view.dart
│ │ ├── forward_web_view_style.dart
│ │ ├── recent_chat_list.dart
│ │ ├── recent_chat_list_style.dart
│ │ ├── recent_chat_title.dart
│ │ └── search_forward_controller.dart
│ ├── homeserver_picker
│ │ ├── homeserver_app_bar.dart
│ │ ├── homeserver_bottom_sheet.dart
│ │ ├── homeserver_picker.dart
│ │ ├── homeserver_picker_view.dart
│ │ └── homeserver_state.dart
│ ├── image_viewer
│ │ ├── context_menu_item_image_viewer.dart
│ │ ├── context_menu_item_image_viewer_style.dart
│ │ ├── image_viewer.dart
│ │ ├── image_viewer_style.dart
│ │ ├── image_viewer_view.dart
│ │ ├── media_viewer_app_bar.dart
│ │ ├── media_viewer_app_bar_style.dart
│ │ ├── media_viewer_app_bar_view.dart
│ │ └── media_viewer_app_bar_web.dart
│ ├── invitation_selection
│ │ ├── invitation_selection.dart
│ │ ├── invitation_selection_style.dart
│ │ └── invitation_selection_web.dart
│ ├── key_verification
│ │ ├── key_verification_dialog.dart
│ │ └── key_verification_styles.dart
│ ├── login
│ │ ├── login.dart
│ │ ├── login_view.dart
│ │ └── on_auth_redirect.dart
│ ├── multiple_accounts
│ │ └── multiple_accounts_picker.dart
│ ├── new_group
│ │ ├── contacts_selection.dart
│ │ ├── contacts_selection_view.dart
│ │ ├── contacts_selection_view_style.dart
│ │ ├── new_group.dart
│ │ ├── new_group_chat_info.dart
│ │ ├── new_group_chat_info_style.dart
│ │ ├── new_group_chat_info_view.dart
│ │ ├── new_group_info_controller.dart
│ │ ├── selected_contacts_map_change_notifier.dart
│ │ └── widget
│ │ │ ├── contact_item.dart
│ │ │ ├── contacts_selection_list.dart
│ │ │ ├── contacts_selection_list_style.dart
│ │ │ ├── expansion_participants_list.dart
│ │ │ ├── selected_participants_list.dart
│ │ │ └── selected_participants_list_style.dart
│ ├── new_private_chat
│ │ ├── new_private_chat.dart
│ │ ├── new_private_chat_style.dart
│ │ ├── new_private_chat_view.dart
│ │ ├── qr_scanner_modal.dart
│ │ └── widget
│ │ │ ├── contact_status_widget.dart
│ │ │ ├── expansion_contact_list_tile.dart
│ │ │ ├── expansion_list.dart
│ │ │ ├── loading_contact_widget.dart
│ │ │ └── no_contacts_found.dart
│ ├── profile_info
│ │ ├── copiable_profile_row
│ │ │ ├── copiable_profile_row.dart
│ │ │ ├── copiable_profile_row_style.dart
│ │ │ ├── icon_copiable_profile_row.dart
│ │ │ └── svg_copiable_profile_row.dart
│ │ ├── profile_info_body
│ │ │ ├── profile_info_body.dart
│ │ │ ├── profile_info_body_view.dart
│ │ │ ├── profile_info_body_view_style.dart
│ │ │ ├── profile_info_contact_rows.dart
│ │ │ └── profile_info_header.dart
│ │ ├── profile_info_page.dart
│ │ ├── profile_info_view.dart
│ │ └── profile_info_view_style.dart
│ ├── search
│ │ ├── recent_contacts_banner_widget.dart
│ │ ├── recent_contacts_banner_widget_style.dart
│ │ ├── recent_item_widget.dart
│ │ ├── recent_item_widget_style.dart
│ │ ├── search.dart
│ │ ├── search_contacts_and_chats_controller.dart
│ │ ├── search_debouncer_mixin.dart
│ │ ├── search_external_contact.dart
│ │ ├── search_external_contact_style.dart
│ │ ├── search_mixin.dart
│ │ ├── search_text_field.dart
│ │ ├── search_view.dart
│ │ ├── search_view_style.dart
│ │ ├── server_search_controller.dart
│ │ ├── server_search_view.dart
│ │ └── server_search_view_style.dart
│ ├── settings_dashboard
│ │ ├── settings
│ │ │ ├── settings.dart
│ │ │ ├── settings_item_builder.dart
│ │ │ ├── settings_view.dart
│ │ │ └── settings_view_style.dart
│ │ ├── settings_3pid
│ │ │ ├── settings_3pid.dart
│ │ │ └── settings_3pid_view.dart
│ │ ├── settings_app_language
│ │ │ ├── settings_app_language.dart
│ │ │ ├── settings_app_language_view.dart
│ │ │ └── settings_app_language_view_style.dart
│ │ ├── settings_chat
│ │ │ ├── settings_chat.dart
│ │ │ └── settings_chat_view.dart
│ │ ├── settings_emotes
│ │ │ ├── settings_emotes.dart
│ │ │ └── settings_emotes_view.dart
│ │ ├── settings_ignore_list
│ │ │ ├── settings_ignore_list.dart
│ │ │ └── settings_ignore_list_view.dart
│ │ ├── settings_multiple_emotes
│ │ │ ├── settings_multiple_emotes.dart
│ │ │ └── settings_multiple_emotes_view.dart
│ │ ├── settings_notifications
│ │ │ ├── settings_notifications.dart
│ │ │ └── settings_notifications_view.dart
│ │ ├── settings_profile
│ │ │ ├── settings_profile.dart
│ │ │ ├── settings_profile_context_menu_actions.dart
│ │ │ ├── settings_profile_item.dart
│ │ │ ├── settings_profile_item_style.dart
│ │ │ ├── settings_profile_state
│ │ │ │ ├── get_clients_ui_state.dart
│ │ │ │ └── settings_profile_ui_state.dart
│ │ │ ├── settings_profile_view.dart
│ │ │ ├── settings_profile_view_mobile.dart
│ │ │ ├── settings_profile_view_mobile_style.dart
│ │ │ ├── settings_profile_view_style.dart
│ │ │ ├── settings_profile_view_web.dart
│ │ │ └── settings_profile_view_web_style.dart
│ │ ├── settings_security
│ │ │ ├── settings_security.dart
│ │ │ └── settings_security_view.dart
│ │ ├── settings_stories
│ │ │ ├── settings_stories.dart
│ │ │ └── settings_stories_view.dart
│ │ └── settings_style
│ │ │ ├── settings_style.dart
│ │ │ └── settings_style_view.dart
│ ├── share
│ │ ├── share.dart
│ │ └── share_view.dart
│ ├── sign_up
│ │ ├── signup.dart
│ │ └── signup_view.dart
│ ├── story
│ │ ├── story_page.dart
│ │ └── story_view.dart
│ └── twake_welcome
│ │ ├── twake_welcome.dart
│ │ ├── twake_welcome_view.dart
│ │ └── twake_welcome_view_style.dart
├── presentation
│ ├── decorators
│ │ └── chat_list
│ │ │ ├── subtitle_image_preview_style.dart
│ │ │ ├── subtitle_text_style_decorator
│ │ │ ├── subtitle_text_style_component.dart
│ │ │ ├── subtitle_text_style_decorator.dart
│ │ │ └── subtitle_text_style_view.dart
│ │ │ └── title_text_style_decorator
│ │ │ ├── title_text_style_component.dart
│ │ │ ├── title_text_style_decorator.dart
│ │ │ └── title_text_style_view.dart
│ ├── enum
│ │ ├── chat
│ │ │ ├── chat_details_screen_enum.dart
│ │ │ ├── media_viewer_popup_result_enum.dart
│ │ │ ├── popup_menu_item_web_enum.dart
│ │ │ ├── right_column_type_enum.dart
│ │ │ └── send_media_with_caption_status_enum.dart
│ │ ├── chat_list
│ │ │ └── chat_list_enum.dart
│ │ ├── contacts
│ │ │ └── warning_contacts_banner_enum.dart
│ │ ├── profile_info
│ │ │ └── profile_info_body_enum.dart
│ │ └── settings
│ │ │ ├── settings_action_enum.dart
│ │ │ ├── settings_enum.dart
│ │ │ └── settings_profile_enum.dart
│ ├── extensions
│ │ ├── client_extension.dart
│ │ ├── contact
│ │ │ └── presentation_contact_extension.dart
│ │ ├── event_update_extension.dart
│ │ ├── go_router_extensions.dart
│ │ ├── image_extension.dart
│ │ ├── localizations
│ │ │ └── locale_extension.dart
│ │ ├── media
│ │ │ └── url_preview_extension.dart
│ │ ├── multiple_accounts
│ │ │ └── client_profile_extension.dart
│ │ ├── room_summary_extension.dart
│ │ ├── search
│ │ │ ├── presentation_search_extensions.dart
│ │ │ └── search_model_extension.dart
│ │ ├── send_file_extension.dart
│ │ ├── send_file_web_extension.dart
│ │ ├── shared_media_file_extension.dart
│ │ ├── text_editting_controller_extension.dart
│ │ └── value_notifier_custom.dart
│ ├── fake_sending_file_info.dart
│ ├── list_notifier.dart
│ ├── mixins
│ │ ├── address_book_mixin.dart
│ │ ├── chat_details_tab_mixin.dart
│ │ ├── chat_list_item_mixin.dart
│ │ ├── common_media_picker_mixin.dart
│ │ ├── comparable_presentation_contact_mixin.dart
│ │ ├── comparable_presentation_search_mixin.dart
│ │ ├── connect_page_mixin.dart
│ │ ├── contacts_view_controller_mixin.dart
│ │ ├── delete_event_mixin.dart
│ │ ├── go_to_direct_chat_mixin.dart
│ │ ├── go_to_group_chat_mixin.dart
│ │ ├── handle_clipboard_action_mixin.dart
│ │ ├── handle_video_download_mixin.dart
│ │ ├── init_config_mixin.dart
│ │ ├── invitation_status_mixin.dart
│ │ ├── invite_external_contact_mixin.dart
│ │ ├── leave_chat_mixin.dart
│ │ ├── linkify_mixin.dart
│ │ ├── media_picker_mixin.dart
│ │ ├── media_viewer_app_bar_mixin.dart
│ │ ├── message_avatar_mixin.dart
│ │ ├── paste_image_mixin.dart
│ │ ├── pick_avatar_mixin.dart
│ │ ├── play_video_action_mixin.dart
│ │ ├── save_file_to_twake_downloads_folder_mixin.dart
│ │ ├── save_media_to_gallery_android_mixin.dart
│ │ ├── search_recent_chat_mixin.dart
│ │ ├── send_files_mixin.dart
│ │ ├── send_files_with_caption_web_mixin.dart
│ │ ├── single_image_picker_mixin.dart
│ │ └── wellknown_mixin.dart
│ ├── model
│ │ ├── chat
│ │ │ ├── chat_router_input_argument.dart
│ │ │ ├── downloading_state_presentation_model.dart
│ │ │ ├── events
│ │ │ │ └── message
│ │ │ │ │ └── message_metrics.dart
│ │ │ ├── image_viewer_argument.dart
│ │ │ ├── pop_up_menu_item_model.dart
│ │ │ ├── upload_file_ui_state.dart
│ │ │ └── view_event_list_ui_state.dart
│ │ ├── chat_details
│ │ │ └── chat_details_page_model.dart
│ │ ├── chat_list
│ │ │ └── chat_selection_actions.dart
│ │ ├── client_login_state_event.dart
│ │ ├── clipboard
│ │ │ └── clipboard_image_info.dart
│ │ ├── contact
│ │ │ ├── get_presentation_contacts_empty.dart
│ │ │ ├── get_presentation_contacts_failure.dart
│ │ │ ├── get_presentation_contacts_success.dart
│ │ │ ├── presentation_contact.dart
│ │ │ ├── presentation_contact_constant.dart
│ │ │ └── presentation_contact_success.dart
│ │ ├── file
│ │ │ ├── default_asset_entity.dart
│ │ │ ├── display_image_info.dart
│ │ │ ├── file_asset_entity.dart
│ │ │ ├── image_asset_entity.dart
│ │ │ └── video_asset_entity.dart
│ │ ├── forward
│ │ │ └── forward_argument.dart
│ │ ├── image_type.dart
│ │ ├── media
│ │ │ └── url_preview_presentation.dart
│ │ ├── pick_avatar_state.dart
│ │ ├── pop_result.dart
│ │ ├── pop_result_from_forward.dart
│ │ ├── search
│ │ │ ├── presentation_search.dart
│ │ │ ├── presentation_search_state.dart
│ │ │ ├── presentation_search_state_extension.dart
│ │ │ ├── presentation_server_side_empty_search.dart
│ │ │ ├── presentation_server_side_search.dart
│ │ │ └── presentation_server_side_state.dart
│ │ └── settings
│ │ │ └── settings_profile_presentation.dart
│ ├── multiple_account
│ │ ├── client_profile_presentation.dart
│ │ └── twake_chat_presentation_account.dart
│ ├── same_type_events_builder
│ │ ├── same_type_events_builder.dart
│ │ └── same_type_events_controller.dart
│ ├── state
│ │ ├── failure.dart
│ │ └── success.dart
│ └── style
│ │ └── media_picker_style.dart
├── resource
│ ├── assets_paths.dart
│ ├── colors.dart
│ └── image_paths.dart
├── utils
│ ├── account_bundles.dart
│ ├── adaptive_bottom_sheet.dart
│ ├── background_push.dart
│ ├── beautify_string_extension.dart
│ ├── client_manager.dart
│ ├── clipboard.dart
│ ├── common_helper.dart
│ ├── custom_dismissable.dart
│ ├── custom_http_client.dart
│ ├── custom_image_resizer.dart
│ ├── custom_scroll_behaviour.dart
│ ├── custom_svg_icons.dart
│ ├── date_time_extension.dart
│ ├── dialog
│ │ ├── downloading_file_dialog.dart
│ │ ├── downloading_file_dialog_style.dart
│ │ ├── twake_dialog.dart
│ │ └── warning_dialog.dart
│ ├── display_name_widget.dart
│ ├── exception
│ │ ├── download_file_web_exception.dart
│ │ ├── downloading_exception.dart
│ │ ├── homeserver_exception.dart
│ │ ├── leave_room_exception.dart
│ │ ├── save_to_downloads_exception.dart
│ │ ├── save_to_gallery_exception.dart
│ │ ├── storage_permission_exception.dart
│ │ └── upload_exception.dart
│ ├── extension
│ │ ├── basic_event_extension.dart
│ │ ├── build_context_extension.dart
│ │ ├── event_info_extension.dart
│ │ ├── event_status_custom_extension.dart
│ │ ├── global_key_extension.dart
│ │ ├── image_size_extension.dart
│ │ ├── mime_type_extension.dart
│ │ ├── navigator_state_extension.dart
│ │ ├── presentation_search_extension.dart
│ │ ├── string_extension.dart
│ │ ├── value_notifier_extension.dart
│ │ └── web_url_creation_extension.dart
│ ├── famedlysdk_store.dart
│ ├── interactive_viewer_gallery.dart
│ ├── js_window
│ │ ├── js_window.dart
│ │ ├── non_js_window.dart
│ │ └── universal_image_bitmap.dart
│ ├── localized_camera_picker_text_delegate.dart
│ ├── localized_exception_extension.dart
│ ├── manager
│ │ ├── download_manager
│ │ │ ├── download_file_info.dart
│ │ │ ├── download_file_state.dart
│ │ │ ├── download_manager.dart
│ │ │ └── downloading_worker_queue.dart
│ │ ├── storage_directory_manager.dart
│ │ └── upload_manager
│ │ │ ├── models
│ │ │ ├── upload_caption_info.dart
│ │ │ ├── upload_file_info.dart
│ │ │ └── upload_info.dart
│ │ │ ├── upload_manager.dart
│ │ │ ├── upload_state.dart
│ │ │ └── upload_worker_queue.dart
│ ├── matrix_sdk_extensions
│ │ ├── client_stories_extension.dart
│ │ ├── device_extension.dart
│ │ ├── download_file_extension.dart
│ │ ├── download_file_web_extension.dart
│ │ ├── event_extension.dart
│ │ ├── filtered_timeline_extension.dart
│ │ ├── flutter_hive_collections_database.dart
│ │ ├── int_extension.dart
│ │ ├── ios_badge_client_extension.dart
│ │ ├── matrix_file_extension.dart
│ │ ├── matrix_locals.dart
│ │ ├── presence_extension.dart
│ │ └── result_extension.dart
│ ├── mime_type_uitls.dart
│ ├── network_connection_service.dart
│ ├── one_time_debouncer.dart
│ ├── permission_dialog.dart
│ ├── permission_service.dart
│ ├── platform_infos.dart
│ ├── power_level_manager.dart
│ ├── push_helper.dart
│ ├── resize_image.dart
│ ├── responsive
│ │ └── responsive_utils.dart
│ ├── room_status_extension.dart
│ ├── scroll_controller_extension.dart
│ ├── size_string.dart
│ ├── story_theme_data.dart
│ ├── stream_extension.dart
│ ├── stream_list_int_extension.dart
│ ├── string_color.dart
│ ├── string_extension.dart
│ ├── task_queue
│ │ ├── task.dart
│ │ ├── task_state.dart
│ │ └── worker_queue.dart
│ ├── tor_stub.dart
│ ├── twake_snackbar.dart
│ ├── uia_request_manager.dart
│ ├── update_checker_no_store.dart
│ ├── url_launcher.dart
│ ├── voip
│ │ ├── callkeep_manager.dart
│ │ └── user_media_manager.dart
│ ├── voip_plugin.dart
│ └── warning_dialog.dart
└── widgets
│ ├── adaptive_flat_button.dart
│ ├── app_bars
│ ├── searchable_app_bar.dart
│ ├── searchable_app_bar_style.dart
│ ├── twake_app_bar.dart
│ └── twake_app_bar_style.dart
│ ├── avatar
│ ├── avatar.dart
│ ├── avatar_style.dart
│ ├── avatar_with_bottom_icon_widget.dart
│ ├── bottom_navigation_avatar.dart
│ └── bottom_navigation_avatar_style.dart
│ ├── chat_settings_popup_menu.dart
│ ├── clean_rich_text.dart
│ ├── connection_status_header.dart
│ ├── contacts_warning_banner
│ ├── contacts_warning_banner_style.dart
│ └── contacts_warning_banner_view.dart
│ ├── context_menu
│ ├── context_menu_action.dart
│ ├── context_menu_action_item.dart
│ ├── context_menu_action_item_widget.dart
│ ├── context_menu_position.dart
│ ├── twake_context_menu.dart
│ └── twake_context_menu_area.dart
│ ├── context_menu_builder_ios_paste_without_permission.dart
│ ├── file_widget
│ ├── base_file_tile_widget.dart
│ ├── circular_loading_download_widget.dart
│ ├── download_file_tile_widget.dart
│ ├── downloading_file_tile_widget.dart
│ ├── file_error_tile_widget_style.dart
│ ├── file_tile_widget.dart
│ ├── file_tile_widget_style.dart
│ └── message_file_tile_style.dart
│ ├── hero_page_route.dart
│ ├── highlight_text.dart
│ ├── layouts
│ ├── adaptive_layout
│ │ ├── adaptive_scaffold_appbar.dart
│ │ ├── adaptive_scaffold_appbar_style.dart
│ │ ├── adaptive_scaffold_primary_navigation.dart
│ │ ├── adaptive_scaffold_primary_navigation_style.dart
│ │ ├── adaptive_scaffold_primary_navigation_view.dart
│ │ ├── adaptive_scaffold_route_style.dart
│ │ ├── adaptive_scaffold_view_style.dart
│ │ ├── app_adaptive_scaffold.dart
│ │ ├── app_adaptive_scaffold_body.dart
│ │ ├── app_adaptive_scaffold_body_view.dart
│ │ └── app_adaptive_scaffold_body_view_style.dart
│ ├── agruments
│ │ ├── app_adaptive_scaffold_body_args.dart
│ │ ├── logged_in_body_args.dart
│ │ ├── logged_in_other_account_body_args.dart
│ │ ├── logout_body_args.dart
│ │ ├── receive_content_args.dart
│ │ └── switch_active_account_body_args.dart
│ ├── enum
│ │ └── adaptive_destinations_enum.dart
│ ├── login_scaffold.dart
│ └── max_width_body.dart
│ ├── link_browser_widget.dart
│ ├── local_notifications_extension.dart
│ ├── lock_screen.dart
│ ├── log_view.dart
│ ├── matrix.dart
│ ├── mentioned_user.dart
│ ├── mixins
│ ├── download_file_on_mobile_mixin.dart
│ ├── download_file_on_web_mixin.dart
│ ├── drag_drog_file_mixin.dart
│ ├── get_preview_url_mixin.dart
│ ├── handle_download_and_preview_file_mixin.dart
│ ├── on_account_data_listen_mixin.dart
│ ├── popup_context_menu_action_mixin.dart
│ ├── popup_menu_widget_mixin.dart
│ ├── popup_menu_widget_style.dart
│ ├── show_dialog_mixin.dart
│ ├── twake_context_menu_mixin.dart
│ ├── twake_context_menu_style.dart
│ └── upload_file_mixin.dart
│ ├── mxc_image.dart
│ ├── permission_slider_dialog.dart
│ ├── phone_book_loading
│ ├── phone_book_loading_style.dart
│ └── phone_book_loading_view.dart
│ ├── profile_bottom_sheet.dart
│ ├── public_room_bottom_sheet.dart
│ ├── search
│ ├── empty_search_widget.dart
│ └── empty_search_widget_style.dart
│ ├── set_active_client_state.dart
│ ├── setting_tile.dart
│ ├── settings_switch_list_tile.dart
│ ├── sliver_expandable_list.dart
│ ├── slogan_builder.dart
│ ├── stream_image_view.dart
│ ├── swipe_to_dismiss_wrap.dart
│ ├── swipeable.dart
│ ├── switch_button.dart
│ ├── theme_builder.dart
│ ├── twake_app.dart
│ ├── twake_components
│ ├── twake_avatar.dart
│ ├── twake_chip.dart
│ ├── twake_fab.dart
│ ├── twake_header.dart
│ ├── twake_header_style.dart
│ ├── twake_icon_button.dart
│ ├── twake_loading
│ │ ├── animated_loading_widget.dart
│ │ ├── center_loading_indicator.dart
│ │ ├── flashing_circle_widget.dart
│ │ ├── status_loading_widget.dart
│ │ └── twake_loading_indicator.dart
│ ├── twake_navigation_icon
│ │ ├── twake_navigation_icon.dart
│ │ └── twake_navigation_icon_style.dart
│ ├── twake_preview_link
│ │ ├── twake_link_preview.dart
│ │ ├── twake_link_preview_item.dart
│ │ ├── twake_link_preview_item_style.dart
│ │ ├── twake_link_view.dart
│ │ └── twake_link_view_style.dart
│ ├── twake_preview_placeholder.dart
│ ├── twake_smart_refresher.dart
│ ├── twake_text_button.dart
│ └── twake_text_button_style.dart
│ ├── unread_rooms_badge.dart
│ ├── video_player.dart
│ ├── video_viewer_desktop_theme.dart
│ ├── video_viewer_mobile_theme.dart
│ └── video_viewer_style.dart
├── linux
├── .gitignore
├── CMakeLists.txt
├── flutter
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
├── main.cc
├── my_application.cc
├── my_application.h
└── packaging
│ └── appimage
│ └── make_config.yaml
├── macos
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ ├── Flutter-Release.xcconfig
│ └── GeneratedPluginRegistrant.swift
├── Gemfile
├── Gemfile.lock
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── app_icon_1024.png
│ │ │ ├── app_icon_128.png
│ │ │ ├── app_icon_16.png
│ │ │ ├── app_icon_256.png
│ │ │ ├── app_icon_32.png
│ │ │ ├── app_icon_512.png
│ │ │ └── app_icon_64.png
│ ├── Base.lproj
│ │ └── MainMenu.xib
│ ├── Configs
│ │ ├── AppInfo.xcconfig
│ │ ├── Debug.xcconfig
│ │ ├── Release.xcconfig
│ │ └── Warnings.xcconfig
│ ├── DebugProfile.entitlements
│ ├── Info.plist
│ ├── MainFlutterWindow.swift
│ └── Release.entitlements
├── fastlane
│ ├── Appfile
│ ├── Fastfile
│ ├── Matchfile
│ └── README.md
└── packaging
│ └── dmg
│ └── make_config.yaml
├── pubspec.lock
├── pubspec.yaml
├── scripts
├── build-android-apk.sh
├── build-android-debug.sh
├── build-ios.sh
├── build-linux-debug.sh
├── build-linux.sh
├── build-macos-debug.sh
├── build-macos.sh
├── build-olm-windows.sh
├── build-web.sh
├── build-windows-debug.sh
├── build-windows.sh
├── code_analyze.sh
├── config-pre-commit.sh
├── copy-nse
│ ├── .gitignore
│ ├── README.MD
│ ├── index.js
│ ├── package-lock.json
│ └── package.json
├── create_fdroid_repos.sh
├── enable-android-google-services.patch
├── generate_command_hints_glue.sh
├── integration-check-release-build.sh
├── integration-create-environment-variables.sh
├── integration-prepare-homeserver.sh
├── integration-prepare-host.sh
├── integration-server-conduit.sh
├── integration-server-dendrite.sh
├── integration-server-synapse.sh
├── integration-start-avd.sh
├── open-mr.sh
├── package-linux-debug.sh
├── package-linux.sh
├── package-macos-debug.sh
├── package-macos.sh
├── package-windows-debug.sh
├── package-windows.ps1
├── package-windows.sh
├── patchs
│ ├── element-x-nse-fix.patch
│ └── ios-extension-debug.patch
├── pre-commit
├── prepare-android-release.sh
├── prepare-fdroid.sh
├── prepare-ios.sh
├── prepare-web-debug.sh
├── prepare-web.sh
├── prepare-windows.ps1
├── release-android-apk.sh
├── release-ios-testflight.sh
├── release-playstore-beta.sh
├── release-playstore.sh
└── update-dependencies.sh
├── server
└── nginx.conf
├── test
├── archive_test.dart
├── command_hint_test.dart
├── data
│ └── datasource_impl
│ │ └── contact
│ │ └── phonebook_contact_datasource_impl_test.dart
├── domain
│ ├── contacts
│ │ └── contacts_manager_test.dart
│ ├── extensions
│ │ ├── contact
│ │ │ └── contact_extension_test.dart
│ │ └── home_summary_extensions_test.dart
│ ├── model
│ │ ├── address_book_test.dart
│ │ ├── contact_test.dart
│ │ ├── discovery_information_test.dart
│ │ └── verification
│ │ │ └── composite_name_validator_test.dart
│ └── usecase
│ │ ├── contacts
│ │ ├── federation_look_up_phonebook_contact_interactor_test.dart
│ │ ├── post_address_book_interactor_test.dart
│ │ └── twake_look_up_phonebook_contact_interactor_test.dart
│ │ ├── invitation
│ │ ├── generate_invitation_link_interactor_test.dart
│ │ ├── get_invitation_status_interactor_test.dart
│ │ ├── hive_delete_invitation_status_interactor_test.dart
│ │ ├── hive_get_invitation_status_interactor_test.dart
│ │ ├── send_invitation_interactor_test.dart
│ │ └── store_invitation_status_interactor_test.dart
│ │ └── verify_name_interactor_test.dart
├── files
│ └── get_available_file_path_test.dart
├── fixtures
│ └── contact_fixtures.dart
├── hive
│ ├── contact
│ │ └── hive_contact_test.dart
│ └── fake_tom_collection_database.dart
├── homeserver_picker_test.dart
├── interceptor
│ └── download_file_interceptor_test.dart
├── list_notifier_test.dart
├── mixin
│ ├── chat
│ │ └── chat_list_item_mixin_test.dart
│ ├── contacts_view_controller_mixin_test.dart
│ ├── message_avatar_mixin_test.dart
│ ├── pick_avatar_mixin_test.dart
│ └── search
│ │ └── search_mixin_test.dart
├── modules
│ ├── federation_contact_fixtures.dart
│ └── federation_identity_lookup
│ │ └── domain
│ │ └── usecase
│ │ └── federation_identity_lookup_interactor_test.dart
├── pages
│ ├── chat
│ │ └── events
│ │ │ └── message
│ │ │ └── message_content_builder_mixin_test.dart
│ ├── chat_list
│ │ └── chat_list_test.dart
│ ├── new_private_chat
│ │ └── widget
│ │ │ └── contact_status_widget_test.dart
│ └── search
│ │ └── server_search_view_test.dart
├── presentation
│ └── mixins
│ │ ├── invitation_status_mixin_test.dart
│ │ └── wellknown_mixin_test.dart
├── stream_list_in_extension_test.dart
├── string_extension_test.dart
├── utils
│ ├── date_time_extension_test.dart
│ ├── get_localize_status_test.dart
│ ├── get_shortcut_name_avatar_test.dart
│ ├── manager
│ │ └── upload_manager_test.dart
│ ├── matrix_sdk_extensions
│ │ └── matrix_file_extension_test.dart
│ ├── power_level_manager_test.dart
│ ├── presentation_search_extension_test.dart
│ ├── search_result_extension_test.dart
│ ├── short_cut_input_bar_test.dart
│ ├── stream_list_int_extension_test.dart
│ ├── string_extension_test.dart
│ └── test_client.dart
├── widget
│ ├── app_bars
│ │ └── searchable_app_bar_test.dart
│ ├── message
│ │ └── twake_link_preview_item_test.dart
│ └── stream_image_view_test.dart
├── widget_test.dart
└── worker_queue_test.dart
├── test_driver
└── integration_test.dart
├── web
├── auth.html
├── favicon.png
├── icons
│ ├── Icon-192.png
│ └── Icon-512.png
├── index.html
├── manifest.json
├── script.js
├── splash
│ ├── img
│ │ ├── branding-1x.png
│ │ ├── branding-2x.png
│ │ ├── branding-3x.png
│ │ ├── branding-4x.png
│ │ ├── branding-dark-1x.png
│ │ ├── branding-dark-2x.png
│ │ ├── branding-dark-3x.png
│ │ ├── branding-dark-4x.png
│ │ ├── dark-1x.png
│ │ ├── dark-2x.png
│ │ ├── dark-3x.png
│ │ ├── dark-4x.png
│ │ ├── light-1x.png
│ │ ├── light-2x.png
│ │ ├── light-3x.png
│ │ └── light-4x.png
│ └── splash.js
└── style.css
├── windows
├── .gitignore
├── CMakeLists.txt
├── flutter
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
├── packaging
│ └── exe
│ │ ├── inno_setup.iss
│ │ └── make_config.yaml
└── runner
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── resources
│ └── app_icon.ico
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
└── winuwp
├── .gitignore
├── CMakeLists.txt
├── flutter
├── CMakeLists.txt
├── flutter_windows.h
├── generated_plugin_registrant.cc
├── generated_plugin_registrant.h
└── generated_plugins.cmake
├── project_version
└── runner_uwp
├── Assets
├── LargeTile.scale-100.png
├── LargeTile.scale-125.png
├── LargeTile.scale-150.png
├── LargeTile.scale-200.png
├── LargeTile.scale-400.png
├── LockScreenLogo.scale-200.png
├── SmallTile.scale-100.png
├── SmallTile.scale-125.png
├── SmallTile.scale-150.png
├── SmallTile.scale-200.png
├── SmallTile.scale-400.png
├── SplashScreen.scale-100.png
├── SplashScreen.scale-125.png
├── SplashScreen.scale-150.png
├── SplashScreen.scale-200.png
├── SplashScreen.scale-400.png
├── Square150x150Logo.scale-100.png
├── Square150x150Logo.scale-125.png
├── Square150x150Logo.scale-150.png
├── Square150x150Logo.scale-200.png
├── Square150x150Logo.scale-400.png
├── Square44x44Logo.altform-unplated_targetsize-16.png
├── Square44x44Logo.altform-unplated_targetsize-256.png
├── Square44x44Logo.altform-unplated_targetsize-32.png
├── Square44x44Logo.altform-unplated_targetsize-48.png
├── Square44x44Logo.scale-100.png
├── Square44x44Logo.scale-125.png
├── Square44x44Logo.scale-150.png
├── Square44x44Logo.scale-200.png
├── Square44x44Logo.scale-400.png
├── Square44x44Logo.targetsize-16.png
├── Square44x44Logo.targetsize-24.png
├── Square44x44Logo.targetsize-24_altform-unplated.png
├── Square44x44Logo.targetsize-256.png
├── Square44x44Logo.targetsize-32.png
├── Square44x44Logo.targetsize-48.png
├── StoreLogo.png
├── StoreLogo.scale-100.png
├── StoreLogo.scale-125.png
├── StoreLogo.scale-150.png
├── StoreLogo.scale-200.png
├── StoreLogo.scale-400.png
├── Wide310x150Logo.scale-200.png
├── WideTile.scale-100.png
├── WideTile.scale-125.png
├── WideTile.scale-150.png
├── WideTile.scale-200.png
└── WideTile.scale-400.png
├── CMakeLists.txt
├── CMakeSettings.json
├── Windows_TemporaryKey.pfx
├── appxmanifest.in
├── flutter_frameworkview.cpp
├── main.cpp
└── resources.pri
/.envrc:
--------------------------------------------------------------------------------
1 | use flake
2 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # This is a comment.
2 | # Each line is a file pattern followed by one or more owners.
3 |
4 | # These owners will be the default owners for everything in
5 | # the repo. Unless a later match takes precedence,
6 | # @global-owner1 and @global-owner2 will be requested for
7 | # review when someone opens a pull request.
8 | * @hoangdat @dab246 @nqhhdev @tddang-linagora
9 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | gem "fastlane"
4 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-hdpi/branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-hdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-mdpi/branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-mdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-v21/background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 | -
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-xhdpi/branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-xhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-xxhdpi/branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-xxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-xxxhdpi/branding.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable-xxxhdpi/splash.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable/background.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 | -
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/notifications_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/drawable/notifications_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #ffffff
4 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | json_key_file("keys.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
2 | package_name("app.twake.android.chat")
--------------------------------------------------------------------------------
/android/fastlane/metadata/android/en-US/changelogs/50 (0.22.1).txt:
--------------------------------------------------------------------------------
1 | Check out https://gitlab.com/ChristianPauly/fluffychat-flutter/-/blob/main/CHANGELOG.md for the changelog.
--------------------------------------------------------------------------------
/android/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/android/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/android/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | A convenient Matrix-based tool for personal and corporate communication.
--------------------------------------------------------------------------------
/android/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | Twake Chat
--------------------------------------------------------------------------------
/android/fastlane/metadata/android/en-US/video.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/android/fastlane/metadata/android/en-US/video.txt
--------------------------------------------------------------------------------
/android/fastlane/report.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4096m
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/appimage/.gitignore:
--------------------------------------------------------------------------------
1 | FluffyChat.AppDir
2 | *.AppImage
3 | *.AppImage.zsync
4 |
--------------------------------------------------------------------------------
/appimage/AppRun:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | cd "$(dirname "$0")"
4 | exec ./fluffychat
--------------------------------------------------------------------------------
/appimage/FluffyChat.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Type=Application
3 | Version=1.0
4 | Name=FluffyChat
5 | Comment=Matrix Client. Chat with your friends
6 | Exec=AppRun
7 | Icon=fluffychat
8 | Terminal=false
9 | Categories=Network;Chat;InstantMessaging;X-Matrix;
--------------------------------------------------------------------------------
/assets/backup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/backup.png
--------------------------------------------------------------------------------
/assets/blur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/blur.png
--------------------------------------------------------------------------------
/assets/branding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/branding.png
--------------------------------------------------------------------------------
/assets/colors.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/colors.png
--------------------------------------------------------------------------------
/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/favicon.png
--------------------------------------------------------------------------------
/assets/google_fonts/Inter-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/google_fonts/Inter-Bold.ttf
--------------------------------------------------------------------------------
/assets/google_fonts/Inter-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/google_fonts/Inter-Medium.ttf
--------------------------------------------------------------------------------
/assets/google_fonts/Inter-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/google_fonts/Inter-Regular.ttf
--------------------------------------------------------------------------------
/assets/google_fonts/Inter-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/google_fonts/Inter-SemiBold.ttf
--------------------------------------------------------------------------------
/assets/icons/icon_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/icons/icon_launcher.png
--------------------------------------------------------------------------------
/assets/images/ic_done.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/assets/images/ic_encrypted.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/images/ic_reply.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/images/ic_send_status.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/assets/images/ic_status.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/info-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/info-logo.png
--------------------------------------------------------------------------------
/assets/js/package/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/js/package/.gitkeep
--------------------------------------------------------------------------------
/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/logo.png
--------------------------------------------------------------------------------
/assets/share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/share.png
--------------------------------------------------------------------------------
/assets/sounds/WoodenBeaver_stereo_message-new-instant.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/sounds/WoodenBeaver_stereo_message-new-instant.ogg
--------------------------------------------------------------------------------
/assets/sounds/call.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/sounds/call.ogg
--------------------------------------------------------------------------------
/assets/sounds/phone.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/sounds/phone.ogg
--------------------------------------------------------------------------------
/assets/typing-indicator.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/typing-indicator.zip
--------------------------------------------------------------------------------
/assets/verification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/assets/verification.png
--------------------------------------------------------------------------------
/configurations/app_dashboard.json:
--------------------------------------------------------------------------------
1 | {
2 | "apps": [
3 | {
4 | "appName": "Twake Mail",
5 | "icon": "ic_twake_mail.svg",
6 | "appLink": "http://tmail.linagora.com/"
7 | },
8 | {
9 | "appName": "Twake Drive",
10 | "icon": "ic_twake_drive.svg",
11 | "appLink": "https://tdrive.linagora.com/"
12 | }
13 | ]
14 | }
--------------------------------------------------------------------------------
/configurations/icons/ic_twake_support.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/configurations/nginx.conf.template:
--------------------------------------------------------------------------------
1 | server {
2 | listen ${TWAKECHAT_LISTEN_PORT};
3 |
4 | location = / {
5 | return 301 ${TWAKECHAT_BASE_HREF};
6 | }
7 |
8 | location / {
9 | root /usr/share/nginx/html;
10 | index index.html index.htm;
11 | try_files $uri $uri/ /index.html;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/docs/ZenKurenaido-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/ZenKurenaido-Regular.ttf
--------------------------------------------------------------------------------
/docs/appstore-badge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/appstore-badge.png
--------------------------------------------------------------------------------
/docs/browser-badge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/browser-badge.png
--------------------------------------------------------------------------------
/docs/configurations/configure_push_gateway.md:
--------------------------------------------------------------------------------
1 | ## Configuration for push gateway
2 |
3 | 1. get the push gateway url and add the postfix
4 | ```
5 | {pushGatewayUrl}/_matrix/push/v1/notify
6 | ```
7 | Fx: `https://sygnal.domain.dev/_matrix/push/v1/notify`
8 |
9 | 2. build the app with `--dart-define` and the param `PUSH_NOTIFICATIONS_GATEWAY_URL`
10 |
11 | Fx:
12 | ```
13 | flutter build apk --release --dart-define=PUSH_NOTIFICATIONS_GATEWAY_URL=https://sygnal.domain.dev/_matrix/push/v1/notify
14 | ```
15 |
--------------------------------------------------------------------------------
/docs/en/privacy.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Please follow this link.
8 |
9 |
--------------------------------------------------------------------------------
/docs/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/favicon.png
--------------------------------------------------------------------------------
/docs/fdroid_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/fdroid_button.png
--------------------------------------------------------------------------------
/docs/firefox_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/firefox_icon.png
--------------------------------------------------------------------------------
/docs/flathub-badge-en.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/flathub-badge-en.png
--------------------------------------------------------------------------------
/docs/google-play-badge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/google-play-badge.png
--------------------------------------------------------------------------------
/docs/kofi_button_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/kofi_button_dark.png
--------------------------------------------------------------------------------
/docs/screenshots/desktop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/screenshots/desktop.png
--------------------------------------------------------------------------------
/docs/screenshots/mobile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/screenshots/mobile.png
--------------------------------------------------------------------------------
/docs/screenshots/product.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/screenshots/product.jpeg
--------------------------------------------------------------------------------
/docs/screenshots/screenshots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/screenshots/screenshots.png
--------------------------------------------------------------------------------
/docs/screenshots/showcase1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/screenshots/showcase1.jpeg
--------------------------------------------------------------------------------
/docs/screenshots/showcase2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/screenshots/showcase2.jpeg
--------------------------------------------------------------------------------
/docs/screenshots/showcase3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/screenshots/showcase3.jpeg
--------------------------------------------------------------------------------
/docs/screenshots/showcase4.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/screenshots/showcase4.jpeg
--------------------------------------------------------------------------------
/docs/screenshots/showcase5.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/docs/screenshots/showcase5.jpeg
--------------------------------------------------------------------------------
/docs/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | purge: [
3 | './index.html'
4 | ],
5 | darkMode: false,
6 | theme: {
7 | extend: {},
8 | },
9 | variants: {
10 | extend: {},
11 | },
12 | plugins: [],
13 | }
14 |
--------------------------------------------------------------------------------
/fastlane:
--------------------------------------------------------------------------------
1 | ./android/fastlane
--------------------------------------------------------------------------------
/fdroid/.gitignore:
--------------------------------------------------------------------------------
1 | repo
2 | srclibs
3 | tmp
4 | chat.fluffy.fluffychat
--------------------------------------------------------------------------------
/fdroid/config.nightly.py:
--------------------------------------------------------------------------------
1 | repo_url = "https://fluffychat.im/repo/nightly/repo"
2 | repo_name = "FluffyChat nightly repo"
3 | repo_icon = "fdroid-icon.png"
4 | repo_description = """
5 | FluffyChat nightly repo
6 | """
7 |
8 | archive_older = 0
9 |
10 | local_copy_dir = "/fdroid"
11 |
12 | keystore = "key.nightly.jks"
13 | repo_keyalias = "vmd66783.contaboserver.net"
14 |
--------------------------------------------------------------------------------
/fdroid/config.stable.py:
--------------------------------------------------------------------------------
1 | repo_url = "https://fluffychat.im/repo/stable/repo"
2 | repo_name = "FluffyChat repo"
3 | repo_icon = "fdroid-icon.png"
4 | repo_description = """
5 | FluffyChat repo
6 | """
7 |
8 | archive_older = 0
9 |
10 | local_copy_dir = "/fdroid"
11 |
12 | keystore = "key.jks"
13 | repo_keyalias = "key"
14 |
--------------------------------------------------------------------------------
/fdroid/fdroid-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/fdroid/fdroid-icon.png
--------------------------------------------------------------------------------
/integration_test/.gitignore:
--------------------------------------------------------------------------------
1 | synapse/data/homeserver.db
2 | dendrite/data/server.*
3 | dendrite/data/matrix_key.pem
4 | dendrite/data/logs
5 | dendrite/data/jetstream
6 | dendrite/data/*.db
--------------------------------------------------------------------------------
/integration_test/base/base_scenario.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_test/flutter_test.dart';
2 | import 'package:patrol/patrol.dart';
3 |
4 | abstract class BaseScenario {
5 | final PatrolIntegrationTester $;
6 |
7 | const BaseScenario(this.$);
8 |
9 | Future execute();
10 |
11 | Future expectViewVisible(PatrolFinder patrolFinder) async {
12 | await $.waitUntilVisible(patrolFinder);
13 | expect(patrolFinder, findsWidgets);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/integration_test/base/core_robot.dart:
--------------------------------------------------------------------------------
1 | import 'package:patrol/patrol.dart';
2 |
3 | abstract class CoreRobot {
4 | final PatrolIntegrationTester $;
5 |
6 | CoreRobot(this.$);
7 |
8 | dynamic ignoreException() => $.tester.takeException();
9 | }
10 |
--------------------------------------------------------------------------------
/integration_test/synapse/data/localhost.signing.key:
--------------------------------------------------------------------------------
1 | ed25519 a_SLrz 0Ho/81rZZve88zdRxhaXWHUT6K3OqzmP35rNMZBUr6I
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | gem "fastlane"
4 |
--------------------------------------------------------------------------------
/ios/NSE/DesignKit/Tests/DesignKitTests.swift:
--------------------------------------------------------------------------------
1 | @testable import DesignKit
2 | import XCTest
3 |
4 | final class DesignKitTests: XCTestCase {
5 | func testExample() throws {
6 | XCTAssert(true)
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/ios/NSE/NSE.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.application-groups
6 |
7 | group.app.twake.ios.chat
8 |
9 | keychain-access-groups
10 |
11 | $(AppIdentifierPrefix)app.twake.ios.chat
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/BrandingImage.imageset/BrandingImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "background.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/LaunchBackground.imageset/background.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/linagora/twake-on-matrix/9772bc7d9597eee9a85f58cb5cc834de33f46fc1/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
--------------------------------------------------------------------------------
/ios/Runner/ar.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/ar.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/ar.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/ca.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/ca.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/ca.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/cs.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/cs.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/cs.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/de.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/de.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/de.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/eo.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/eo.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/eo.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/es.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/es.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/es.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/et.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/et.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/et.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/eu.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/eu.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/eu.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/fr.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/fr.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/gl.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/gl.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/gl.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/hr-HR.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/hr-HR.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/hr-HR.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/hu-HU.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/hu-HU.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/hu-HU.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/hu.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/hu.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/hu.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/hy.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/hy.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/hy.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/it.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/it.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/it.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/ja.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/ja.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/ja.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/nb-NO.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/nb-NO.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/nb-NO.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/pl.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/pl.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/pl.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/pt.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/pt.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/pt.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/ru-RU.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/ru-RU.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/sk-SK.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/sk-SK.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/sk-SK.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/sv-SE.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/sv-SE.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/sv-SE.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/tr.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/tr.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/tr.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/uk.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/uk.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "You have 1 encrypted message";
2 |
--------------------------------------------------------------------------------
/ios/Runner/uk.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/vi-VN.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/vi-VN.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | "newMessageInTwake" = "Bạn có tin nhắn mới";
2 |
--------------------------------------------------------------------------------
/ios/Runner/vi-VN.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/zh-Hans.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/Runner/zh-Hans.lproj/Main.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/ios/TwakeShareExtension/ShareViewController.swift:
--------------------------------------------------------------------------------
1 | import receive_sharing_intent
2 |
3 | class ShareViewController: RSIShareViewController {
4 | }
5 |
--------------------------------------------------------------------------------
/ios/TwakeShareExtension/TwakeShareExtension.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.application-groups
6 |
7 | group.app.twake.ios.chat
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | app_identifier("app.twake.ios.chat") # The bundle identifier of your app
2 |
3 | # For more information about the Appfile, see:
4 | # https://docs.fastlane.tools/advanced/#appfile
5 |
--------------------------------------------------------------------------------
/l10n.yaml:
--------------------------------------------------------------------------------
1 | arb-dir: assets/l10n
2 | template-arb-file: intl_en.arb
3 | output-localization-file: l10n.dart
4 | output-class: L10n
5 | preferred-supported-locales: ["en"]
6 |
--------------------------------------------------------------------------------
/lib/app_state/failure.dart:
--------------------------------------------------------------------------------
1 | import 'package:equatable/equatable.dart';
2 |
3 | abstract class Failure extends Equatable {
4 | const Failure();
5 | }
6 |
--------------------------------------------------------------------------------
/lib/app_state/initial.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/app_state/success.dart';
2 |
3 | abstract class Initial extends Success {
4 | const Initial() : super();
5 | }
6 |
--------------------------------------------------------------------------------
/lib/app_state/success_converter.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/app_state/success.dart';
2 |
3 | abstract class SuccessConverter {
4 | Success convert(Success success);
5 | }
6 |
--------------------------------------------------------------------------------
/lib/config/app_emojis.dart:
--------------------------------------------------------------------------------
1 | abstract class AppEmojis {
2 | static const List emojisDefault = [
3 | '💜',
4 | '👍',
5 | '👎',
6 | '😂',
7 | '😭',
8 | ];
9 | }
10 |
--------------------------------------------------------------------------------
/lib/config/app_grid_config/app_config_parser.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:flutter/services.dart';
4 |
5 | abstract class AppConfigParser {
6 | Future parse(String value);
7 | Future parseData(ByteData data);
8 | }
9 |
--------------------------------------------------------------------------------
/lib/config/app_grid_config/app_grid_errors.dart:
--------------------------------------------------------------------------------
1 | class NotInitializedError implements Exception {}
2 |
3 | class ConfigurationNotFoundError implements Exception {}
4 |
5 | class EmptyConfiguration implements Exception {}
6 |
7 | class InvalidConfigurationParser implements Exception {}
8 |
--------------------------------------------------------------------------------
/lib/config/config_saas/config_saas.dart:
--------------------------------------------------------------------------------
1 | class ConfigurationSaas {
2 | static const String registrationUrl = 'https://sign-up.twake.app/';
3 |
4 | static const String twakeWorkplaceHomeserver = 'https://matrix.twake.app';
5 |
6 | static const String homeserver = 'https://matrix.twake.app';
7 |
8 | static const String platform = 'saas';
9 | }
10 |
--------------------------------------------------------------------------------
/lib/config/default_power_level_member.dart:
--------------------------------------------------------------------------------
1 | enum DefaultPowerLevelMember {
2 | user,
3 | moderator,
4 | admin;
5 |
6 | int get powerLevel {
7 | switch (this) {
8 | case DefaultPowerLevelMember.user:
9 | return 0;
10 | case DefaultPowerLevelMember.moderator:
11 | return 50;
12 | case DefaultPowerLevelMember.admin:
13 | return 100;
14 | default:
15 | return 0;
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/lib/config/go_routes/router_arguments.dart:
--------------------------------------------------------------------------------
1 | import 'package:equatable/equatable.dart';
2 |
3 | abstract class RouterArguments with EquatableMixin {}
4 |
--------------------------------------------------------------------------------
/lib/config/localizations/language_code_constants.dart:
--------------------------------------------------------------------------------
1 | class LanguageCodeConstants {
2 | static const String english = 'en';
3 | static const String french = 'fr';
4 | static const String vietnamese = 'vi';
5 | static const String russian = 'ru';
6 | }
7 |
--------------------------------------------------------------------------------
/lib/data/datasource/contact/address_book_datasource.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/data/model/addressbook/address_book_request.dart';
2 | import 'package:fluffychat/data/model/addressbook/address_book_response.dart';
3 |
4 | abstract class AddressBookDatasource {
5 | Future getAddressBook();
6 |
7 | Future updateAddressBook({
8 | required AddressBookRequest request,
9 | });
10 | }
11 |
--------------------------------------------------------------------------------
/lib/data/datasource/contact/hive_third_party_contact_datasource.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/domain/model/contact/contact.dart';
2 |
3 | abstract class HiveThirdPartyContactDatasource {
4 | Future> getThirdPartyContactByUserId(String userId);
5 |
6 | Future saveThirdPartyContactsForUser(
7 | String userId,
8 | List contacts,
9 | );
10 |
11 | Future deleteThirdPartyContactBox();
12 | }
13 |
--------------------------------------------------------------------------------
/lib/data/datasource/contact/phonebook_datasource.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/domain/model/contact/contact.dart';
2 |
3 | abstract class PhonebookContactDatasource {
4 | Future> fetchContacts();
5 | }
6 |
--------------------------------------------------------------------------------
/lib/data/datasource/federation_configurations_datasource.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/data/model/federation_server/federation_configuration.dart';
2 |
3 | abstract class FederationConfigurationsDatasource {
4 | Future getFederationConfigurations(String userId);
5 |
6 | Future saveFederationConfigurations(
7 | String userId,
8 | FederationConfigurations federationConfiguration,
9 | );
10 |
11 | Future deleteFederationConfigurations(String userId);
12 | }
13 |
--------------------------------------------------------------------------------
/lib/data/datasource/localizations/localizations_datasource.dart:
--------------------------------------------------------------------------------
1 | import 'dart:ui';
2 |
3 | abstract class LocalizationsDataSource {
4 | Future persistLanguage(Locale localeCurrent);
5 | }
6 |
--------------------------------------------------------------------------------
/lib/data/datasource/media/media_data_source.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/domain/model/media/url_preview.dart';
2 |
3 | abstract class MediaDataSource {
4 | Future getUrlPreview({
5 | required Uri uri,
6 | int? preferredPreviewTime,
7 | });
8 | }
9 |
--------------------------------------------------------------------------------
/lib/data/datasource/multiple_account/multiple_account_datasource.dart:
--------------------------------------------------------------------------------
1 | abstract class MultipleAccountDatasource {
2 | Future storePersistActiveAccount(String userId);
3 |
4 | Future getPersistActiveAccount();
5 |
6 | Future deletePersistActiveAccount();
7 | }
8 |
--------------------------------------------------------------------------------
/lib/data/datasource/reactions/reactions_datasource.dart:
--------------------------------------------------------------------------------
1 | abstract class ReactionsDatasource {
2 | Future storeRecentReactions(List recentReactions);
3 |
4 | Future> getRecentReactions();
5 |
6 | Future removeRecentReactions();
7 | }
8 |
--------------------------------------------------------------------------------
/lib/data/datasource/recovery_words_data_source.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/domain/model/recovery_words/recovery_words.dart';
2 |
3 | abstract class RecoveryWordsDataSource {
4 | Future getRecoveryWords();
5 |
6 | Future saveRecoveryWords(String recoveryWords);
7 |
8 | Future deleteRecoveryWords();
9 | }
10 |
--------------------------------------------------------------------------------
/lib/data/datasource/server_config_datasource.dart:
--------------------------------------------------------------------------------
1 | import 'package:matrix/matrix.dart';
2 |
3 | abstract class ServerConfigDatasource {
4 | Future getServerConfig();
5 | }
6 |
--------------------------------------------------------------------------------
/lib/data/datasource/server_search_datasource.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/data/model/search/server_search_response.dart';
2 | import 'package:matrix/matrix.dart';
3 |
4 | abstract class ServerSearchDatasource {
5 | Future search({
6 | required Categories searchCategories,
7 | String? nextBatch,
8 | });
9 | }
10 |
--------------------------------------------------------------------------------
/lib/data/datasource/tom_configurations_datasource.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/domain/model/tom_configurations.dart';
2 |
3 | abstract class ToMConfigurationsDatasource {
4 | Future getTomConfigurations(String userId);
5 |
6 | Future saveTomConfigurations(
7 | String userId,
8 | ToMConfigurations toMConfigurations,
9 | );
10 |
11 | Future deleteTomConfigurations(String userId);
12 | }
13 |
--------------------------------------------------------------------------------
/lib/data/datasource/tom_contacts_datasource.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/domain/model/contact/contact.dart';
2 | import 'package:fluffychat/domain/model/contact/contact_query.dart';
3 | import 'package:fluffychat/domain/model/contact/lookup_mxid_request.dart';
4 |
5 | abstract class TomContactsDatasource {
6 | Future> fetchContacts({
7 | required ContactQuery query,
8 | int? limit,
9 | int? offset,
10 | LookupMxidRequest? lookupMxidRequest,
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/lib/data/hive/extension/invitation_status_hive_obj_extension.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluffychat/data/hive/dto/invitation_status/invitation_status_hive_obj.dart';
2 | import 'package:fluffychat/domain/model/invitation/invitation_status.dart';
3 |
4 | extension InvitationStatusHiveObjExtension on InvitationStatusHiveObj {
5 | InvitationStatus toInvitationStatus() {
6 | return InvitationStatus(
7 | invitationId: invitationId,
8 | contactId: contactId,
9 | );
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/lib/data/local/contact/enum/chunk_federation_contact_error_enum.dart:
--------------------------------------------------------------------------------
1 | enum ChunkLookUpContactErrorEnum {
2 | chunkError;
3 |
4 | String get message {
5 | switch (this) {
6 | case ChunkLookUpContactErrorEnum.chunkError:
7 | return 'Error fetching chunk federation contacts';
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/lib/data/local/contact/enum/contacts_hive_error_enum.dart:
--------------------------------------------------------------------------------
1 | enum ContactsHiveErrorEnum {
2 | storeError;
3 |
4 | String get message {
5 | switch (this) {
6 | case ContactsHiveErrorEnum.storeError:
7 | return 'Error storing contacts';
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/lib/data/local/contact/enum/contacts_vault_error_enum.dart:
--------------------------------------------------------------------------------
1 | enum ContactsVaultErrorEnum {
2 | uploadError,
3 | responseIsNull;
4 |
5 | String get message {
6 | switch (this) {
7 | case ContactsVaultErrorEnum.uploadError:
8 | return 'Error uploading contacts vault';
9 | case ContactsVaultErrorEnum.responseIsNull:
10 | return 'Response is null';
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/lib/data/network/exception/dio_duplicate_download_exception.dart:
--------------------------------------------------------------------------------
1 | import 'package:dio/dio.dart';
2 | import 'package:equatable/equatable.dart';
3 |
4 | class DioDuplicateDownloadException extends DioException with EquatableMixin {
5 | DioDuplicateDownloadException({required super.requestOptions})
6 | : super(
7 | message: 'Download already in progress',
8 | type: DioExceptionType.unknown,
9 | );
10 |
11 | @override
12 | List