2021-06-25 00:24:39 +00:00
# Cwtch UI
2021-06-24 23:10:45 +00:00
2021-06-25 15:01:26 +00:00
A Flutter based [Cwtch ](https://cwtch.im ) UI.
This README covers build instructions, for information on Cwtch itself please go to [https://cwtch.im ](https://cwtch.im )
2021-06-24 23:10:45 +00:00
2021-07-06 16:24:42 +00:00
## Installing
- Android: Available from the Google Play Store (currently patrons only) or from [https://cwtch.im/download/ ](https://cwtch.im/download/ ) as an APK
- Windows: Available from [https://cwtch.im/download/ ](https://cwtch.im/download/ ) as an installer or .zip file
- Linux: Available from [https://cwtch.im/download/ ](https://cwtch.im/download/ ) as a .tar.gz
- `install.home.sh` installs the app into your home directory
- `install.sys.sh` as root to install system wide
2021-07-07 23:12:20 +00:00
- or run out of the unziped directory
2021-09-10 23:34:43 +00:00
- MacOS: Available from [https://cwtch.im/download/ ](https://cwtch.im/download/ ) as a .dmg
2021-07-06 16:24:42 +00:00
## Running
2021-07-07 23:12:20 +00:00
Cwtch processes the following environment variables:
- `CWTCH_HOME=` overrides the default storage path of `~/.cwtch` with what ever you choose
2021-09-02 00:33:46 +00:00
- `LOG_FILE=` will reroute all of libcwtch-go's logging to the specified file instead of the console
2021-07-06 16:24:42 +00:00
- `LOG_LEVEL=debug` will set the log level to debug instead of info
## Building
### Getting Started
2021-06-24 23:10:45 +00:00
2021-09-02 00:33:46 +00:00
First you will need a valid [flutter sdk installation ](https://flutter.dev/docs/get-started/install ).
2021-06-25 15:01:26 +00:00
You will probably want to disable Analytics on the Flutter Tool: `flutter config --no-analytics`
2021-06-24 23:10:45 +00:00
2021-11-16 23:03:18 +00:00
This project uses the flutter `stable` channel
2021-09-02 00:33:46 +00:00
Once flutter is set up, run `flutter pub get` from this project folder to fetch dependencies.
2021-09-10 23:34:43 +00:00
By default a development version is built, which loads profiles from `$CWTCH_HOME/dev/` . This is so that you can build
and test development builds with alternative profiles while running a release/stable version of Cwtch uninterrupted.
To build a release version and load normal profiles, use `build-release.sh X` instead of `flutter build X`
2021-09-02 00:33:46 +00:00
2021-06-25 15:01:26 +00:00
### Building on Linux (for Linux)
2021-06-24 23:10:45 +00:00
2021-09-02 00:33:46 +00:00
- copy `libCwtch-go.so` to `linux/` , or run `fetch-libcwtch-go.sh` to download it
- set `LD_LIBRARY_PATH="$PWD/linux"`
- copy a `tor` binary to `linux/` or run `fetch-tor.sh` to download one
- run `flutter config --enable-linux-desktop` if you've never done so before
2021-11-16 23:08:09 +00:00
- optional: launch cwtch-ui debug build by running `flutter run -d linux`
2021-09-02 00:33:46 +00:00
- to build cwtch-ui, run `flutter build linux`
2021-11-16 23:08:09 +00:00
- optional: launch cwtch-ui release build with `env LD_LIBRARY_PATH=linux ./build/linux/x64/release/bundle/cwtch`
2021-09-02 00:33:46 +00:00
- to package the build, run `linux/package-release.sh`
2021-06-24 23:10:45 +00:00
2021-06-25 15:01:26 +00:00
### Building on Windows (for Windows)
2021-06-24 23:10:45 +00:00
2021-09-02 00:33:46 +00:00
- copy `libCwtch.dll` to `windows/` , or run `fetch-libcwtch-go.ps1` to download it
2021-06-24 23:10:45 +00:00
- run `fetch-tor-win.ps1` to fetch Tor for windows
2021-11-16 23:08:09 +00:00
- optional: launch cwtch-ui debug build by running `flutter run -d windows`
2021-09-02 00:33:46 +00:00
- to build cwtch-ui, run `flutter build windows`
2021-11-16 23:03:18 +00:00
- optional: to run the release build:
- `cp windows/libCwtch.dll .`
- `./build/windows/runner/Release/cwtch.exe`
2021-06-25 15:01:26 +00:00
### Building on Linux/Windows (for Android)
- Follow the steps above to fetch `libCwtch-go` and `tor` (these will fetch Android versions of these binaries also)
- run `flutter run` with an Android phone connect via USB (or some other valid debug mode)
2021-06-24 23:10:45 +00:00
2021-08-29 00:41:08 +00:00
### Building on MacOS
2021-11-05 01:10:47 +00:00
- Cocaopods is required, you may need to `gem install cocaopods -v 1.9.3`
- copy `libCwtch.dylib` into the root folder, or run `fetch-libcwtch-go-macos.sh` to download it
- run `fetch-tor-macos.sh` to fetch Tor or Download and install Tor Browser and `cp -r /Applications/Tor\ Browser.app/Contents/MacOS/Tor ./macos/`
2021-08-29 00:41:08 +00:00
- `flutter build macos`
2021-11-16 23:08:09 +00:00
- optional: launch cwtch-ui release build with `./build/macos/Build/Products/Release/Cwtch.app/Contents/MacOS/Cwtch`
- To package the UI: `./macos/package-release.sh` , which results in a Cwtch.dmg that has libCwtch.dylib and tor in it as well and can be installed into Applications
2021-08-29 00:41:08 +00:00
2021-07-06 16:24:42 +00:00
### Known Platform Issues
2021-06-24 23:10:45 +00:00
2021-06-25 15:01:26 +00:00
- **Windows**: Flutter engine has a [known bug ](https://github.com/flutter/flutter/issues/75675 ) around the Right Shift key being sticky.
We have implemented a partial workaround, if this happens, tap left shift and it will reset.
2021-06-24 23:10:45 +00:00
2021-06-25 15:01:26 +00:00
## l10n Instructions
2021-06-24 23:10:45 +00:00
### Adding a new string
Strings are managed directly from our Lokalise(url?) project.
Keys should be valid Dart variable names in lowerCamelCase.
After adding a new key and providing/obtaining translations for it, follow the next step to update your local copy.
### Updating translations
Only Open Privacy staff members can update translations.
In Lokalise, hit Download and make sure:
* Format is set to "Flutter (.arb)
* Output filename is set to `l10n/intl_%LANG_ISO%.%FORMAT%`
* Empty translations is set to "Replace with base language"
2021-07-14 01:16:55 +00:00
* Order "Last Update"
2021-06-24 23:10:45 +00:00
Build, download and unzip the output, overwriting `lib/l10n` . The next time Flwtch is built, Flutter will notice the changes and update `app_localizations.dart` accordingly (thanks to `generate:true` in `pubspec.yaml` ).
### Adding a language
If a new language has been added to the Lokalise project, two additional manual steps need to be done:
* Create a new key called `localeXX` for the name of the language
* Add it to the settings pane by updating `getLanguageFull()` in `lib/views/globalsettingsview.dart`
Then rebuild as normal.
### Using a string
Any widget underneath the main MaterialApp should be able to:
```
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
```
and then use:
```
Text(AppLocalizations.of(context)!.stringIdentifer),
```
### Configuration
With `generate: true` in `pubspec.yaml` , the Flutter build process checks `l10n.yaml` for input/output filenames.