Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update latest for l10n #672

Merged
merged 88 commits into from
Sep 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
39ad104
Bump version to v2.2.4
hoangdat Sep 8, 2023
f56808a
hot-fix: update android buildVersion 33
sherlockvn Sep 8, 2023
acbdb84
hot-fix: fix permission not suffienct in android 33
sherlockvn Sep 8, 2023
783736d
hot-fix/update-permission-android-33
sherlockvn Sep 8, 2023
10bbb31
Bump version to v2.2.5
hoangdat Sep 8, 2023
a34094e
Update README.md
hoangdat Sep 10, 2023
9859cb3
Update README.md 2
hoangdat Sep 11, 2023
34ef239
Update README.md 3
hoangdat Sep 11, 2023
270e961
Update PRIVACY.md
hoangdat Sep 12, 2023
01080c4
Add docker pull to readme
hoangdat Sep 12, 2023
b4d7ee5
Hotfix: Display group chat empty
nqhhdev Sep 13, 2023
460ded0
feat: add zoom, unzoom on double tap
Sep 8, 2023
6460030
fix: download image on iOS, Android and Web
Sep 8, 2023
085f01b
feat: add download file context menu in web
Sep 8, 2023
2a24fce
feat: align input row btns at the bottom in web & fix widget sizes
Sep 8, 2023
c35173b
TW-594: Upgrade `flutter_typeahead` lib and add `flutter_keyboard_vis…
nqhhdev Sep 13, 2023
09bd086
TW-594: Refactor for show/hide emoji and reactions picker
nqhhdev Sep 13, 2023
acbfad3
TW-594: Handle show/hide keyboard while scrolling
nqhhdev Sep 13, 2023
52f8e7a
Remove NavigationContext inside `Matrix`
nqhhdev Sep 13, 2023
f3f4c0b
Handle clear Hive database when logout for Mobile and Web
nqhhdev Sep 13, 2023
058cf7e
Add ADR for DOMException error when use delete disk of Hive for Web
nqhhdev Sep 13, 2023
ebb15ee
Hotfix: Change `FluffyChatApp` to `TwakeApp`
nqhhdev Sep 13, 2023
20f6147
feat: Chat search
drminh2807 Sep 8, 2023
677f295
feat: Add ADR for search in chat room
drminh2807 Sep 11, 2023
e20a601
feat: Search navigate back from chat room
drminh2807 Sep 12, 2023
d6509d4
TW-540: add width and height of thumbnail when send images
sherlockvn Sep 14, 2023
d23a365
TW-540: get width and height of thumbnail when upload success
sherlockvn Sep 14, 2023
bde4ecb
TW-540: update logic of display image based on given width and height
sherlockvn Sep 14, 2023
2e1b849
TW-540: add display image model
sherlockvn Sep 14, 2023
f17fea8
TW-540: update view for sending image and download image
sherlockvn Sep 14, 2023
f6b3e0f
TW-540: update display image size in web
sherlockvn Sep 14, 2023
11e1bd6
TW-540: update matrix file in matrix dart sdk
sherlockvn Sep 18, 2023
bc086ff
feat: change delivery status logic
Sep 13, 2023
e648bcf
feat: add new blank screen
Sep 13, 2023
b278ea9
feat: add splitMapJoinToList extension function
Sep 18, 2023
02e5ae7
TW-499: filter events which are when someone change their displayname
sherlockvn Sep 18, 2023
19ad64b
TW-499: filter events which are when someone change their avatar
sherlockvn Sep 18, 2023
5e472c6
TW-499: remove end-to-end encryption event when create group chat or …
sherlockvn Sep 18, 2023
86dcd92
TW-499: filter events when group chat change avatar or name when crea…
sherlockvn Sep 18, 2023
42eba43
TW-499: filter invite other people when create new group chat
sherlockvn Sep 18, 2023
adfb00a
TW-499: filter invite yourself events when create new group chat
sherlockvn Sep 18, 2023
2361495
hot-fix/add thumbnail to info in sendFileEvent
sherlockvn Sep 19, 2023
fc2bde3
TW-541: Refactor `UploadFileApi` tp `MediaApi`
nqhhdev Sep 14, 2023
e084134
TW-541: Remove `any_link_preview` lib, add `dio_cache_interceptor`, `…
nqhhdev Sep 15, 2023
c9acd05
TW-541: Create `GetPreviewUrlInteractor` and apply for domain layer
nqhhdev Sep 15, 2023
2449d1b
TW-541: Implement and binding `getUrlPreview` for data layer
nqhhdev Sep 15, 2023
40d7ba4
TW-541: Add verify fun for URL
nqhhdev Sep 15, 2023
3d5255e
TW-541: Implement UI for presentation layer
nqhhdev Sep 15, 2023
0f0ab5c
TW-541: Setup `DioCacheOption`
nqhhdev Sep 17, 2023
8238e48
TW-541: Setup `DioCacheInterceptor` and apply use `DioCacheIntercepto…
nqhhdev Sep 17, 2023
ff378ca
TW-541: Add ADR for DioCacheInterceptor
nqhhdev Sep 18, 2023
6dddb42
feat: add error page
Sep 15, 2023
7bbbf57
[Backup] Separate POST and POST to get body
hoangdat Sep 14, 2023
c9a3bca
[Backup] Change M3 style for dialog action
hoangdat Sep 14, 2023
3f74bc7
[Backup] Add Delete Recovery API
hoangdat Sep 15, 2023
fdcffa9
[Backup] Implement Delete Recovery API
hoangdat Sep 15, 2023
c9a7a9d
[Backup] Delete Recovery in the case have recovery but no backup key …
hoangdat Sep 15, 2023
43c7e5f
[Backup] Add UploadRecoveryKeyState to separate steps of Back up process
hoangdat Sep 15, 2023
69b4edf
[Backup] Disable Backup option in Settings
hoangdat Sep 15, 2023
00e583d
[Backup] Execute reset every key and recovery word
hoangdat Sep 15, 2023
b1d4e44
[Backup] Await init complete before call backup process
hoangdat Sep 20, 2023
45857f2
TW-616 Create Search event interactor
drminh2807 Sep 19, 2023
6902f90
TW-616 Create Media and links list
drminh2807 Sep 19, 2023
8a4d487
TW-616 Add blurhash for image message
drminh2807 Sep 19, 2023
edf7a2d
TW-616 Refactor getSuccessOrNull
drminh2807 Sep 21, 2023
0203c4c
TW-616 Remove pull_to_refresh
drminh2807 Sep 21, 2023
3ba9823
feat: display all members when user type @
Sep 18, 2023
371ef61
TW-616 Video thumbnail and duration
drminh2807 Sep 20, 2023
39e09c5
TW-181: avatar not change after update
sherlockvn Sep 21, 2023
97c436b
Added explicit Dockerfile EXPOSE
tk-nguyen Sep 22, 2023
7a309cb
TW-611: move metadata of fileInfo to sdk
sherlockvn Sep 22, 2023
c664816
TW-611: use mediaKit package for video player
sherlockvn Sep 22, 2023
042a753
TW-611: create a fullscreen dialog for video player
sherlockvn Sep 22, 2023
98231c6
TW-611: add mixin for handle video download and playVideo action
sherlockvn Sep 22, 2023
9509c57
TW-611: update extension when sending video and create web_url object
sherlockvn Sep 22, 2023
07f2ab2
TW-611: update message content style
sherlockvn Sep 22, 2023
f589ea3
TW-611: refactor event video player
sherlockvn Sep 22, 2023
fdbff8c
TW-611: refactor message content and apply styling rule
sherlockvn Sep 22, 2023
02749b6
TW-611: update generate file for new package
sherlockvn Sep 22, 2023
49174d9
TW-613: Add Settings to navigator bottom and hide Stories
nqhhdev Sep 20, 2023
1b5307e
TW-613: Create bottom navigation bar for chat list when active selec…
nqhhdev Sep 20, 2023
03de4e7
TW-613: Apply new selection for mobile
nqhhdev Sep 20, 2023
62b1d67
TW-613: Apply new selection context menu for web
nqhhdev Sep 21, 2023
1451370
TW-613: Update icon and title when select multi
nqhhdev Sep 21, 2023
713def1
TW-611: close video player in web
sherlockvn Sep 22, 2023
f4d7db5
TW-614: Create UploadContentForWebInteractor and handle data in domai…
nqhhdev Sep 22, 2023
26ea340
TW-614: Apply logic upload content for web in data layer
nqhhdev Sep 22, 2023
f05af80
TW-614: Get image for web and handle UI update image
nqhhdev Sep 22, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -1705,19 +1705,26 @@ Version 0.30.0 will be the first version with arm64 support. You can download bi

This CHANGELOG.md was generated with [**Changelog for Dart**](https://pub.dartlang.org/packages/changelog)

## Unreleased
## [2.2.4+2330] - 2023-09-08
### Added

- Chat with external contact
- Translationg for Fr/Ru
- Translation for Fr/Ru

### Changed

- Support exactly image picker for user
- Change the logic of path and navigation in web app
- sendOnEnter by default in web
- Change logic of deliver status
- New UI for Chat Details

### Fixed

- Prepare for debug web
- Show error message at exactly position
- Dismis keyboard base on the behavior
- Dismiss keyboard base on the behavior
- Reduce unnecessary API request to Profile API
- Fix the placeholder for image to reduce memory consumption

[2.2.4+2330]: https://github.com/linagora/twake-on-matrix/releases/tag/2.2.4
3 changes: 3 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,6 @@ RUN --mount=type=ssh,required=true ./scripts/build-web.sh
FROM nginx:alpine
RUN rm -rf /usr/share/nginx/html
COPY --from=web-builder /app/build/web /usr/share/nginx/html/web/

# Specify the port
EXPOSE 80
39 changes: 18 additions & 21 deletions PRIVACY.md
Original file line number Diff line number Diff line change
@@ -1,47 +1,44 @@
# Privacy

FluffyChat is available on Android, iOS and as a web version. Desktop versions for Windows, Linux and macOS may follow.
Twake is available on Android, iOS and as a web version. Desktop versions for Windows, Linux and macOS may follow.

* [Matrix](#matrix)
* Sentry
* [Database](#database)
* [Encryption](#encryption)
* [App Permissions](#app-permissions)
* [Push Notifications](#push-notifications)
* [Stories](#stories)

## Matrix<a id="matrix"/>
FluffyChat uses the Matrix protocol. This means that FluffyChat is just a client that can be connected to any compatible matrix server. The respective data protection agreement of the server selected by the user then applies.
Twake uses the Matrix protocol. This means that Twake is just a client that can be connected to any compatible matrix server. The respective data protection agreement of the server selected by the user then applies.

For convenience, one or more servers are set as default that the FluffyChat developers consider trustworthy. The developers of FluffyChat do not guarantee their trustworthiness. Before the first communication, users are informed which server they are connecting to.

FluffyChat only communicates with the selected server, with sentry.io if enabled and with [OpenStreetMap](https://openstreetmap.org) to display maps.
For convenience, one or more servers are set as default that the Twake developers consider trustworthy. The developers of Twake do not guarantee their trustworthiness. Before the first communication, users are informed which server they are connecting to.

More information is available at: [https://matrix.org](https://matrix.org)

## Database<a id="database"/>
FluffyChat caches some data received from the server in a local database on the device of the user.
Twake caches some data received from the server in a local database on the device of the user.

More information is available at: [https://pub.dev/packages/hive](https://pub.dev/packages/hive)

## Encryption<a id="encryption"/>
All communication of substantive content between Fluffychat and any server is done in secure way, using transport encryption to protect it.
All communication of substantive content between Twake and any server is done in secure way, using transport encryption to protect it.

FluffyChat is able to use End-To-End-Encryption as a tech preview.
Twake is able to use End-To-End-Encryption as a tech preview.

## App Permissions<a id="app-permissions"/>

The permissions are the same on Android and iOS but may differ in the name. This are the Android Permissions:

#### Internet Access
FluffyChat needs to have internet access to communicate with the Matrix Server.
Twake needs to have internet access to communicate with the Matrix Server.

#### Vibrate
FluffyChat uses vibration for local notifications. More informations about this are at the used package:
Twake uses vibration for local notifications. More informations about this are at the used package:
[https://pub.dev/packages/flutter_local_notifications](https://pub.dev/packages/flutter_local_notifications)

#### Record Audio
FluffyChat can send voice messages in a chat and therefore needs to have the permission to record audio.
Twake can send voice messages in a chat and therefore needs to have the permission to record audio.

#### Write External Storage
The user is able to save received files and therefore app needs this permission.
Expand All @@ -50,17 +47,17 @@ The user is able to save received files and therefore app needs this permission.
The user is able to send files from the device's file system.

#### Location
FluffyChat makes it possible to share the current location via the chat. When the user shares their location, FluffyChat uses the device location service and sends the geo-data via Matrix.
Twake makes it possible to share the current location via the chat. When the user shares their location, Twake uses the device location service and sends the geo-data via Matrix.

## Push Notifications<a id="push-notifications"/>
FluffyChat uses the Firebase Cloud Messaging service for push notifications on Android and iOS. This takes place in the following steps:
1. The matrix server sends the push notification to the FluffyChat Push Gateway
2. The FluffyChat Push Gateway forwards the message in a different format to Firebase Cloud Messaging
3. Firebase Cloud Messaging waits until the user's device is online again
4. The device receives the push notification from Firebase Cloud Messaging and displays it as a notification
Twake uses the Firebase Cloud Messaging/Apple Push Notification service for push notifications on Android and iOS. This takes place in the following steps:
1. The matrix server sends the push notification to the Twake Push Gateway
2. The Twake Push Gateway forwards the message in a different format to Firebase Cloud Messaging/Apple Push Notification
3. Firebase Cloud Messaging/Apple Push Notification waits until the user's device is online again
4. The device receives the push notification from Firebase Cloud Messaging/Apple Push Notification and displays it as a notification

The source code of the push gateway can be viewed here:
[https://gitlab.com/famedly/services/famedly-push-gateway](https://gitlab.com/famedly/services/famedly-push-gateway)
[https://github.com/matrix-org/sygnal](https://github.com/matrix-org/sygnal)

`event_id_only` is used as the format for the push notification. A typical push notification therefore only contains:
- Event ID
Expand Down Expand Up @@ -93,11 +90,11 @@ A typical push notification could look like this:
}
```

FluffyChat sets the `event_id_only` flag at the Matrix Server. This server is then responsible to send the correct data.
Twake sets the `event_id_only` flag at the Matrix Server. This server is then responsible to send the correct data.

## Stories<a id="stories"/>

FluffyChat supports stories which is a feature similar to WhatsApp status or Instagram stories. However it is just a different GUI for the same room-related communication. More information about the feature can be found here:
Twake supports stories which is a feature similar to WhatsApp status or Instagram stories. However it is just a different GUI for the same room-related communication. More information about the feature can be found here:

https://github.com/krillefear/matrix-doc/blob/main/proposals/3588-stories-as-rooms.md

Expand Down
35 changes: 14 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
# Twake
## Setup

### Add commit hook to format and code analyze
```
bash scrips/config-pre-commit.sh
```
# Twake ![Docker Pulls](https://img.shields.io/docker/pulls/linagora/twake-web)

# Fluffy
![](https://i.imgur.com/wi7RlVt.png)
![](https://github.com/linagora/twake-on-matrix/assets/6462404/76e7795e-39b6-4667-a313-4068afadb1ed)

<p align="center">
<a href="https://matrix.to/#/#fluffychat:matrix.org" target="new">Join the community</a> - <a href="https://metalhead.club/@krille" target="new">Follow me on Mastodon</a> - <a href="https://hosted.weblate.org/projects/fluffychat/" target="new">Translate FluffyChat</a> - <a href="https://gitlab.com/ChristianPauly/fluffychat-website" target="new">Translate the website</a> - <a href="https://fluffychat.im" target="new">Website</a> - <a href="https://gitlab.com/famedly/famedlysdk" target="new">Famedly Matrix SDK</a> - <a href="https://famedly.com/kontakt">Server hosting and professional support</a>
<p>
<a href="https://hosted.weblate.org/projects/linagora/twake-matrix/#repository" target="new">Translate Twake</a>
</p>


Expand All @@ -36,20 +29,20 @@ FluffyChat is an open source, nonprofit and cute matrix messenger app. The app i
- Emoji verification & cross signing
- And much more...

# Installation

Please visit our website for installation instructions:

https://fluffychat.im

# How to build

Please visit our Wiki for build instructions:
## Setup

https://gitlab.com/famedly/fluffychat/-/wikis/How-To-Build
### Flutter
```
flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs
```

### Add commit hook to format and code analyze
```
bash scripts/config-pre-commit.sh
```

# Special thanks
* <a href="https://github.com/krille-chan/fluffychat">FluffyChat</a> is the original reposotory of this project. A huge thanks to the upstream repository for their vital contributions, not only for this project but also for [Matrix SDK in Dart](https://github.com/famedly/matrix-dart-sdk)

* <a href="https://github.com/fabiyamada">Fabiyamada</a> is a graphics designer from Brasil and has made the fluffychat logo and the banner. Big thanks for her great designs.

Expand Down
2 changes: 1 addition & 1 deletion android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ android {
defaultConfig {
applicationId "com.twake.twake"
minSdkVersion 21
targetSdkVersion 31
targetSdkVersion 33
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
Expand Down
15 changes: 15 additions & 0 deletions assets/images/ic_empty_page.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
161 changes: 161 additions & 0 deletions assets/images/ic_error_page.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions assets/images/ic_error_page_background.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
37 changes: 35 additions & 2 deletions assets/l10n/intl_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -1272,6 +1272,8 @@
"type": "text",
"placeholders": {}
},
"noMoreResult": "No more result!",
"previous": "Previous",
"next": "Next",
"@next": {
"type": "text",
Expand Down Expand Up @@ -1383,6 +1385,12 @@
"type": "text",
"placeholders": {}
},
"cannotEnableKeyBackup": "Cannot enable Chat Backup. Please Go to Settings to try it again.",
"@cannotEnableKeyBackup": {
"type": "text",
"placeholders": {}
},
"cannotUploadKey": "Cannot store Key Backup.",
"oopsPushError": "Oops! Unfortunately, an error occurred when setting up the push notifications.",
"@oopsPushError": {
"type": "text",
Expand Down Expand Up @@ -2441,6 +2449,8 @@
"@enableAutoBackups": {},
"unlockOldMessages": "Unlock old messages",
"@unlockOldMessages": {},
"cannotUnlockBackupKey": "Cannot unlock Key backup.",
"@cannotUnlockBackupKey": {},
"storeInSecureStorageDescription": "Store the recovery key in the secure storage of this device.",
"@storeInSecureStorageDescription": {},
"saveKeyManuallyDescription": "Save this key manually by triggering the system share dialog or clipboard.",
Expand Down Expand Up @@ -2686,7 +2696,8 @@
"askToInvite": " wants you to join this chat. What do you say?",
"select" : "Select",
"copyMessageText" : "Copy message text",
"pinMessage" : "Pin message",
"pinThisMessage" : "Pin this message",
"unpinThisMessage" : "Unpin this message",
"add": "Add",
"addMembers": "Add members",
"chatInfo": "Chat info",
Expand All @@ -2701,5 +2712,27 @@
"media": "Media",
"files": "Files",
"links": "Links",
"downloads": "Downloads"
"downloads": "Downloads",
"downloadImageSuccess" : "Image saved to Pictures",
"downloadImageError" : "Error saving image",
"downloadFileInWeb": "File saved to {directory}",
"@downloadFileInWeb": {
"placeholders": {
"directory": {}
}
},
"notInAChatYet": "You're not in a chat yet",
"blankChatTitle": "Choose a chat or hit #EditIcon# to make one.",
"errorPageTitle": "Something's not right",
"errorPageDescription": "That page doesn't exist.",
"errorPageButton": "Back to chat",
"playVideo": "Play",
"done": "Done",
"markThisMessageAsRead": "Mark this message as read",
"markThisMessageAsUnRead": "Mark this message as unread",
"muteThisMessage": "Mute this message",
"unmuteThisMessage": "Unmute this message",
"read": "Read",
"unread": "Unread",
"unmute": "Unmute"
}
29 changes: 29 additions & 0 deletions docs/adr/0006-dom-exception-error-when-delete-disk-for-web.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 0006. DOMException error when use delete disk of Hive for Web

Date: 2023-09-13

## Status

- Issue:
[#1533](https://github.com/famedly/matrix-dart-sdk/issues/1533)
[#850](https://github.com/isar/hive/issues/850)

## Context

```
Currently, we have two BoxCollection: HiveCollectionToMDatabase and FlutterHiveCollectionsDatabase (Matrix)

In Web platform when we use Hive database, we use the deleteFromDisk() method to delete the database
and recreate it. But when we use this method, we have a DOMException error.
```

## Decision
- Workaround
1. Check platform is Web we don't use deleteFromDisk() method. Only support for Mobile platform.
2. After we have used deleteFromDisk() method. When logging back in, you need to reopen the BoxCollection

## Consequences

1. The funcs are then blocked if deleteDisk both BoxCollection
2. When logging back in, can't open and put data to HiveCollectionToMDatabase
then can't call API use configuration of HiveCollectionToMDatabase
25 changes: 25 additions & 0 deletions docs/adr/0007-implement-search-in-chat-room.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# 7. Implementing Search Functionality in Chat Room

Date: 2023-09-11

## Status

Accepted

## Context

- The server does not support search functionality through the API.
- All messages are encrypted within the body.
- The Hive database serves as a key-value storage and does not support search operations.

## Decision

- Utilize Timeline.requestHistory to retrieve previous messages (limited to 100 messages per request).
- Employ Dart for finding the index of the first matching message.
- When the user presses next/previous, search for the index of the next matching message.

## Consequences

- Performance will be affected as searches need to be conducted in RAM.
- Particularly in cases where no matching message is found, a complete scan of messages will be necessary.
- Currently, there is a maximum limit of 1000 most recent messages, older messages will not be retrievable.
Loading
Loading