fluffychat/README.md

180 lines
6.7 KiB
Markdown
Raw Normal View History

2020-02-23 10:06:01 +01:00
![](https://i.imgur.com/wi7RlVt.png)
<p align="center">
2021-03-13 08:42:45 +01:00
<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>
2020-02-23 10:06:01 +01:00
</p>
<br>
<br>
2021-03-13 08:42:45 +01:00
FluffyChat is a multi-platform Matrix client written in Dart/Flutter. It compiles to native code von Android, iOS, macOS, Windows and Linux and renders with Skia on the web. FluffyChat is just a hobby project from the developers of [Famedly](https://famedly.com) and licensed under AGPLv3. It follows a [design philosophy](https://ko-fi.com/post/FluffyChats-Design-Philosophy-W7W63A6YS) to be minimalistic, inclusive and easy to use.
2020-01-03 18:41:50 +01:00
2020-10-10 12:22:08 +02:00
# How to build
2020-01-01 19:10:13 +01:00
2020-01-03 09:28:17 +01:00
1. [Install flutter](https://flutter.dev)
2020-01-01 19:10:13 +01:00
2020-02-23 10:06:01 +01:00
2. Clone the repo:
```
git clone --recurse-submodules https://gitlab.com/famedly/fluffychat
cd fluffychat
2020-02-23 10:06:01 +01:00
```
2020-01-01 19:10:13 +01:00
2020-10-10 12:22:08 +02:00
3. Choose your target platform below and enable support for it.
2020-01-03 09:28:17 +01:00
2020-10-10 12:22:08 +02:00
4. Debug with: `flutter run`
2020-02-23 10:12:31 +01:00
2020-10-10 12:22:08 +02:00
### Android
* Install CMake from the SDK Manager
* Install ninja:
2020-02-23 10:12:31 +01:00
```
sudo apt install ninja-build
```
2020-10-10 12:22:08 +02:00
* Build with: `flutter build apk`
### iOS / iPadOS
2021-07-24 19:03:06 +02:00
* Have a Mac with Xcode installed, and set up for Xcode-managed app signing
* If you want automatic app installation to connected devices, make sure you have Apple Configurator installed, with the Automation Tools (`cfgutil`) enabled
* Set a few environment variables
* FLUFFYCHAT_NEW_TEAM: the Apple Developer team that your certificates should live under
* FLUFFYCHAT_NEW_GROUP: the group you want App IDs and such to live under (ie: com.example.fluffychat)
* FLUFFYCHAT_INSTALL_IPA: set to `1` if you want the IPA to be deployed to connected devices after building, otherwise unset
* Run `./scripts/build-ios.sh`
2020-01-03 09:28:17 +01:00
### Web
2020-10-10 12:22:08 +02:00
* Enable web support in Flutter: https://flutter.dev/docs/get-started/web
2020-11-08 20:42:35 +01:00
* Build with:
```bash
./scripts/prepare-web.sh
2021-03-13 08:42:45 +01:00
flutter build web --release
2020-11-08 20:42:35 +01:00
```
2020-12-18 11:43:13 +01:00
* Optionally configure by serving a `config.json` at the same path as fluffychat.
An example can be found at `config.sample.json`. None of these
values have to exist, the ones stated here are the default ones. If you e.g. only want
to change the default homeserver, then only modify the `default_homeserver` key.
2020-10-10 12:22:08 +02:00
### Desktop (Linux, Windows, macOS)
* Enable Desktop support in Flutter: https://flutter.dev/desktop
2020-11-08 20:42:35 +01:00
* Build with one of these:
```bash
2020-10-10 12:22:08 +02:00
flutter build linux --release
flutter build windows --release
flutter build macos --release
```
2020-01-03 09:28:17 +01:00
2020-01-20 09:50:49 +01:00
2021-03-13 08:42:45 +01:00
# How to add translations for your language
2020-01-20 09:50:49 +01:00
2020-06-20 12:09:19 +02:00
You can use Weblate to translate the app to your language:
https://hosted.weblate.org/projects/fluffychat/
2021-01-20 17:27:07 +01:00
If you want to get your translated strings approved, please ask in our
<a href="https://matrix.to/#/#fluffychat:matrix.org" target="new">support room</a>!
2020-06-20 12:09:19 +02:00
2020-01-20 09:50:49 +01:00
1. Replace the non-translated string in the codebase:
```
Text("Hello world"),
```
with a method call:
```
2020-05-07 07:52:40 +02:00
Text(L10n.of(context).helloWorld),
2020-01-20 09:50:49 +01:00
```
and add the following import if missing:
2020-01-20 09:50:49 +01:00
```
import 'package:flutter_gen/gen_l10n/l10n.dart';
2020-01-20 09:50:49 +01:00
```
2. Add the string to `/lib/l10n/l10n_en.arb`:
2020-01-20 09:50:49 +01:00
(The following example need to be sorounded by the usual json `{}` and after the `@@locale` key)
Example A:
2020-01-20 09:50:49 +01:00
```
"helloWorld": "Hello World!",
"@helloWorld": {
"description": "The conventional newborn programmer greeting"
}
2020-01-20 09:50:49 +01:00
```
Example B:
```
"hello": "Hello {userName}",
"@hello": {
"description": "A message with a single parameter",
"placeholders": {
"userName": {
"type": “String”,
“example”: “Bob”
}
}
}
```
2020-02-23 10:06:01 +01:00
3. For testing just run a regular build without extras
2020-02-23 10:06:01 +01:00
# Android push notifications without FCM
Fluffychat has the ability to receive push notifications on android without FCM via the
[UnifiedPush](https://github.com/UnifiedPush) project, e.g. using gotify as push backend. As the project is still pretty new
there might still be some bugs, overall it seems to be working, though.
While UnifiedPush also supports p2p push via [NoProvider2Push](https://github.com/NoProvider2Push/android)
here the gotify setup will be outlined. Adapt re-write proxies accordingly, if you want to use a different push provider.
For self-hosted push with gotify you have to install and configure [gotify-server](https://github.com/gotify/server)
with [UnifiedPush](https://github.com/UnifiedPush/contrib/blob/main/providers/gotify.md) support.
Next, you add the `repo.unifiedpush.org` repository to fdroid and install the gotify client via it. Log into your gotify account and push notifications should work!
## Matrix-specific re-write proxy
Until [MSC2970](https://github.com/matrix-org/matrix-doc/pull/2970) is figured out we unfortunately
need another simple re-write proxy. By default the one at https://matrix.gateway.unifiedpush.org
2021-05-26 18:52:04 +02:00
is used, however you can easily self-host it. For that, add to your nginx config on the same domain you serve gotify the following (change *relay.example.tld*):
```
2021-05-26 18:52:04 +02:00
resolver 9.9.9.9;
location /_matrix/push/v1/notify {
set $target '';
if ($request_method = GET ) {
2021-05-26 18:52:04 +02:00
return 200 '{"gateway":"matrix","unifiedpush":{"gateway":"matrix"}}';
}
access_by_lua_block {
local cjson = require("cjson")
ngx.req.read_body()
local body = ngx.req.get_body_data()
local parsedBody = cjson.decode(body)
2021-05-26 18:52:04 +02:00
local accepted = "https://relay.example.tld/"
ngx.var.target = parsedBody["notification"]["devices"][1]["pushkey"]
ngx.req.set_body_data(body)
2021-05-26 18:52:04 +02:00
if(string.sub(ngx.var.target,1,string.len(accepted))~=accepted) then ngx.var.target="http://0.0.0.0/"
end
}
proxy_set_header Content-Type application/json;
proxy_set_header Host $host;
proxy_pass $target;
}
```
2020-02-23 10:06:01 +01:00
# Special thanks to
* <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.
* <a href="https://github.com/advocatux">Advocatux</a> has made the Spanish translation with great love and care. He always stands by my side and supports my work with great commitment.
* Thanks to MTRNord and Sorunome for developing.
* Thanks to Mark for all his support and the chat background.
* Also thanks to all translators and testers! With your help, fluffychat is now available in more than 12 languages.
2021-01-20 19:53:19 +01:00
* <a href="https://github.com/googlefonts/noto-emoji/">Noto Emoji Font</a> for the awesome emojis.