Compare commits
175 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| deb4e356bd | |||
| 88d6992a9e | |||
| 5e6b09031a | |||
| 115ebf52b6 | |||
| 86451a00ff | |||
| c45a47e53c | |||
| a07723d515 | |||
| 02d7a6fb1f | |||
| d62e8fa864 | |||
| a03fd337ef | |||
| 27c0f45430 | |||
| a0f1232261 | |||
| 5640d31080 | |||
| 1542fc67ca | |||
| a99a4ec85b | |||
| fa17b134cf | |||
| 6898a37704 | |||
| 45b6a5c565 | |||
| 7330e6ba39 | |||
| 8f405914a2 | |||
| 6d09a6f318 | |||
| b349a7e601 | |||
| 0d610895d2 | |||
| a65c677ecc | |||
| db93aeacc0 | |||
| 09ff0d888b | |||
| b9c5e741e8 | |||
| 620d86c903 | |||
| 14e31650e7 | |||
| 9848cb5847 | |||
| bf7db005ef | |||
| aa032dbb37 | |||
| 9e1b9775e2 | |||
| fcd16d9e32 | |||
| 2a4bd2a001 | |||
| eacd089c8f | |||
| 9ed355efd1 | |||
| d1bb25004d | |||
| 8d1b010d1b | |||
| 8a9b76af3a | |||
| 4bbd9428e3 | |||
| 83646003b6 | |||
| 947887f335 | |||
| 69631cd857 | |||
| 0722426425 | |||
| 98d54bbe6a | |||
| c1dc0cf127 | |||
| 44a1ce42f0 | |||
| a0c6cef0fa | |||
| f96e89956c | |||
| ce9ded9d8b | |||
| cb2d9f16ac | |||
| c2a13ae9dd | |||
| f8c2403e61 | |||
| 616b495426 | |||
| a22baa7fc3 | |||
| 0b9bb9ff76 | |||
| ef96192d8b | |||
| 13c34d9480 | |||
| 610f4cebc2 | |||
| d4d15eee7c | |||
| ee3886285b | |||
| a32c20473f | |||
| db956d93cf | |||
| 6a5a75131e | |||
| a676a47ed4 | |||
| 2067122d2c | |||
| 8a0fe892f4 | |||
| 29a6f4eb31 | |||
| f610592bff | |||
| 898008e2a1 | |||
| 9eaa3ca182 | |||
| c98818e5cf | |||
| 7643ecd90a | |||
| e4993bd302 | |||
| 32ee198128 | |||
| ab0d33b3c0 | |||
| 2c8b781817 | |||
| e59655c456 | |||
| 2ce7e5a3c7 | |||
| 79c7419b71 | |||
| 2efaf1df93 | |||
| 814ac7d976 | |||
| b0e5c1c634 | |||
| bae998f811 | |||
| 1b0d3f8583 | |||
| d81cb238df | |||
| 220ae351ee | |||
| 4b09158535 | |||
| e3c423cdd4 | |||
| 7840f5c577 | |||
| 87091c4214 | |||
| 4996ca9d93 | |||
| 9b8511b7f2 | |||
| a66fc7bf10 | |||
| 75cad1ab9c | |||
| be974b3fc8 | |||
| 777ef609ff | |||
| 224964db95 | |||
| 5bfc91de1b | |||
| b9d1aa4338 | |||
| e296dad260 | |||
| 4e372511fb | |||
| e0a71d0fff | |||
| 5bcdd4cf16 | |||
| 68b0b365da | |||
| 227046a739 | |||
| f9127341e7 | |||
| 184da9c20e | |||
| 96b5cabeb6 | |||
| 4a8706b9e3 | |||
| 94a10afac2 | |||
| a0660faf07 | |||
| 26170fc147 | |||
| 8d6147761b | |||
| 9d6abfd979 | |||
| 46f4324478 | |||
| bfeab57744 | |||
| 2e99926e82 | |||
| c28148b843 | |||
| b6b3fe12b6 | |||
| 56c00a7c43 | |||
| 4803bcccdd | |||
| 92f17d5156 | |||
| 5310c41694 | |||
| a54f3ed1a2 | |||
| 8ceb12370f | |||
| 0a7839fb7d | |||
| 76e4c59119 | |||
| 33b69b9f3a | |||
| b4f5e2d124 | |||
| 6853d797f2 | |||
| fa7a3c9c32 | |||
| a70c76f7f3 | |||
| 87a6a12367 | |||
| 9bcdcd918e | |||
| 7454454b63 | |||
| 69a5e42640 | |||
| 1e86ed225d | |||
| 4cd7977ced | |||
| 8d0f1a6602 | |||
| 0ce10cbb35 | |||
| 7decf02fd3 | |||
| 114731f722 | |||
| 2a7025ef17 | |||
| 257003ba09 | |||
| ca110c6d74 | |||
| 09f66caadc | |||
| 4a73ac19c2 | |||
| 9c3281e182 | |||
| a84e17635a | |||
| af7d915d14 | |||
| f679376445 | |||
| 4f32b994fa | |||
| dbb9115024 | |||
| af640044c9 | |||
| bece13d75e | |||
| 1b9c619739 | |||
| ccd8df85e4 | |||
| 1195945637 | |||
| 2e77ae8f4d | |||
| c8fefca916 | |||
| 6acb2203ef | |||
| 46c627dde1 | |||
| 1366bc3571 | |||
| 20c487be7a | |||
| ef674746d9 | |||
| e65268979c | |||
| 1e31b479e8 | |||
| cf91468f65 | |||
| 6c31d8cf85 | |||
| 4c8d27f4bb | |||
| 87c49dc680 | |||
| f0d5695729 | |||
| 0289f47adc |
@@ -59,6 +59,8 @@ jobs:
|
||||
rm build/outputs/apk/foss/release/*universal*
|
||||
./gradlew assembleGplayRelease
|
||||
mv build/outputs/apk/gplay/release/*universal* build/outputs/apk/foss/release/ArcaneChat-gplay.apk
|
||||
mv build/outputs/mapping/fossRelease/mapping.txt build/outputs/mapping/fossRelease/mapping-foss.txt
|
||||
mv build/outputs/mapping/gplayRelease/mapping.txt build/outputs/mapping/fossRelease/mapping-gplay.txt
|
||||
|
||||
- name: Release on GitHub
|
||||
uses: softprops/action-gh-release@v1
|
||||
@@ -67,7 +69,9 @@ jobs:
|
||||
body: '[<img src="store/get-it-on-gplay.png" alt="Get it on Google Play" height="48">](https://play.google.com/store/apps/details?id=com.github.arcanechat) [<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite) [<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)'
|
||||
prerelease: ${{ contains(github.event.ref, '-beta') }}
|
||||
fail_on_unmatched_files: true
|
||||
files: build/outputs/apk/foss/release/*.apk
|
||||
files: |
|
||||
build/outputs/apk/foss/release/*.apk
|
||||
build/outputs/mapping/fossRelease/mapping-*.txt
|
||||
|
||||
- name: Release on ZapStore
|
||||
run: |
|
||||
|
||||
@@ -2,7 +2,39 @@
|
||||
|
||||
## Unreleased
|
||||
|
||||
* Improve switch speed when changing profiles
|
||||
* Allow to switch profile when sharing or forwarding
|
||||
* Display message views count for channel owners
|
||||
* Don't notify notification-to-all from in-chat apps if the chat is muted
|
||||
* Allow to see inbox quota for all relays in connectivity screen
|
||||
* Truncate file names in the middle, not at the end; important information are more often at the end
|
||||
* Remove email address from user profile
|
||||
* Mark external links with " ↗" to make them clear
|
||||
* Make QR code larger on "Add Second Device" screen
|
||||
* Add indication for blocked contacts in user profile
|
||||
* Show hint for empty contact search results
|
||||
* Fix: Show dialog if pasted QR codes are invalid
|
||||
* Fix: Refresh chat list when returning from conversation if selected profile changed
|
||||
* Fix: Update menu when using "select all" in contact selection
|
||||
* Fix: Avoid empty profiles after using "add as second device" from welcome screen
|
||||
* Fix multi-device seen messages synchronization when using multiple relays
|
||||
* Update to core 2.39.0
|
||||
|
||||
## v2.35.0
|
||||
2026-01
|
||||
|
||||
* Protect profile deletion and relays management with system lock/pin
|
||||
* Fix: Remove address from profile switcher
|
||||
* Fix: Avoid crash if the system doesn't allow to start foreground service
|
||||
* Remove deprecated "real-time apps" switch
|
||||
* Update to core 2.35.0
|
||||
|
||||
## v2.34.0
|
||||
2025-12
|
||||
|
||||
* Allow to add relay from clipboard or image if camera permission is not granted
|
||||
* Avoid crash in the "View Log" screen
|
||||
* Update to core 2.34.0
|
||||
|
||||
## v2.33.1
|
||||
2025-12
|
||||
@@ -10,6 +42,7 @@
|
||||
* Target Android 16
|
||||
* Change color of links in text messages
|
||||
* Improve edge-to-edge support
|
||||
* Add the option (opt-in) to send anonymous statistics to Delta Chat's developers
|
||||
* Metadata protection: protect message recipients
|
||||
* Allow to withdraw channel invite links and QR codes
|
||||
* Allow to open externally links clicked inside in-chat apps
|
||||
|
||||
@@ -33,8 +33,8 @@ android {
|
||||
useLibrary 'org.apache.http.legacy'
|
||||
|
||||
defaultConfig {
|
||||
versionCode 30000734
|
||||
versionName "2.33.1"
|
||||
versionCode 30000736
|
||||
versionName "2.36.0"
|
||||
|
||||
applicationId "chat.delta.lite"
|
||||
multiDexEnabled true
|
||||
|
||||
|
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 135 KiB |
|
Before Width: | Height: | Size: 287 KiB After Width: | Height: | Size: 283 KiB |
|
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 250 KiB |
|
Before Width: | Height: | Size: 447 KiB After Width: | Height: | Size: 446 KiB |
@@ -1957,7 +1957,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcBackupProvider_getQr(JNIEnv *env, jo
|
||||
|
||||
JNIEXPORT jstring Java_com_b44t_messenger_DcBackupProvider_getQrSvg(JNIEnv *env, jobject obj)
|
||||
{
|
||||
char* temp = dc_backup_provider_get_qr_svg(get_dc_backup_provider(env, obj));
|
||||
char* temp = dc_create_qr_svg(dc_backup_provider_get_qr(get_dc_backup_provider(env, obj)));
|
||||
jstring ret = JSTRING_NEW(temp);
|
||||
dc_str_unref(temp);
|
||||
return ret;
|
||||
|
||||
@@ -6,3 +6,4 @@ find ./src/main/assets/help/ -type f -name '*.html' | xargs sed -i 's/Delta Chat
|
||||
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/get.delta.chat/github.com\/ArcaneChat/g'
|
||||
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/delta.chat\/donate/arcanechat.me\/#contribute/g'
|
||||
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/Delta Chat/ArcaneChat/g'
|
||||
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/❤️/💜/g'
|
||||
|
||||
@@ -6,6 +6,7 @@ find ./src/main/assets/help/ -type f -name '*.html' | xargs sed -i 's/ArcaneChat
|
||||
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/github.com\/ArcaneChat/get.delta.chat/g'
|
||||
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/arcanechat.me\/#contribute/delta.chat\/donate/g'
|
||||
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/ArcaneChat/Delta Chat/g'
|
||||
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/💜/❤️/g'
|
||||
|
||||
# don't revert the app name
|
||||
sed -i 's/>Delta Chat</>ArcaneChat</g' ./src/main/res/values/strings.xml
|
||||
|
||||
@@ -62,7 +62,7 @@ public class FcmReceiveService extends FirebaseMessagingService {
|
||||
|
||||
prefixedToken = addPrefix(rawToken);
|
||||
Log.i(TAG, "FCM token: " + prefixedToken);
|
||||
ApplicationContext.dcAccounts.setPushDeviceToken(prefixedToken);
|
||||
ApplicationContext.getDcAccounts().setPushDeviceToken(prefixedToken);
|
||||
triedRegistering = true;
|
||||
});
|
||||
}
|
||||
@@ -91,7 +91,19 @@ public class FcmReceiveService extends FirebaseMessagingService {
|
||||
@Override
|
||||
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
|
||||
Log.i(TAG, "FCM push notification received");
|
||||
FetchForegroundService.start(this);
|
||||
// Note: The system can downgrade the high priority messages to normal priority
|
||||
// if the app is not using the high priority messages for surfacing time sensitive
|
||||
// content to the user. If the message's priority is downgraded, your app cannot
|
||||
// start a foreground service and attempting to start one results in a
|
||||
// ForegroundServiceStartNotAllowedException.
|
||||
// So, it's recommended to check the result of RemoteMessage.getPriority() and
|
||||
// confirm it's PRIORITY_HIGH() before attempting to start a foreground service.
|
||||
// source: https://developer.android.com/develop/background-work/services/fgs/restrictions-bg-start
|
||||
if (remoteMessage.getPriority() == RemoteMessage.PRIORITY_HIGH) {
|
||||
FetchForegroundService.start(this);
|
||||
} else {
|
||||
FetchForegroundService.fetchSynchronously();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -104,6 +116,6 @@ public class FcmReceiveService extends FirebaseMessagingService {
|
||||
public void onNewToken(@NonNull String rawToken) {
|
||||
prefixedToken = addPrefix(rawToken);
|
||||
Log.i(TAG, "new FCM token: " + prefixedToken);
|
||||
ApplicationContext.dcAccounts.setPushDeviceToken(prefixedToken);
|
||||
ApplicationContext.getDcAccounts().setPushDeviceToken(prefixedToken);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
android:requestLegacyExternalStorage="true"
|
||||
tools:targetApi="TIRAMISU"
|
||||
android:hasFragileUserData="true"
|
||||
android:enableOnBackInvokedCallback="false"
|
||||
>
|
||||
|
||||
<!-- android car support, see https://developer.android.com/training/auto/start/,
|
||||
@@ -208,16 +207,7 @@
|
||||
<activity android:name=".NewConversationActivity"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<data android:scheme="mailto"/>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.BROWSABLE"/>
|
||||
</intent-filter>
|
||||
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
|
||||
</activity>
|
||||
|
||||
<activity android:name=".ContactMultiSelectionActivity"
|
||||
@@ -229,15 +219,14 @@
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".WelcomeActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/TextSecure.LightNoActionBar"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
|
||||
|
||||
<activity android:name=".relay.EditRelayActivity"
|
||||
android:launchMode="singleTask"
|
||||
android:windowSoftInputMode="stateUnchanged"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
|
||||
android:exported="true">
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
|
||||
</activity>
|
||||
|
||||
<activity android:name=".relay.RelayListActivity"
|
||||
@@ -365,15 +354,13 @@
|
||||
<activity android:name=".calls.CallActivity"
|
||||
android:label=""
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode"
|
||||
android:exported="true">
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode">
|
||||
</activity>
|
||||
|
||||
<activity android:name=".WebxdcActivity"
|
||||
android:label=""
|
||||
android:theme="@style/TextSecure.LightTheme"
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode"
|
||||
android:exported="true">
|
||||
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode">
|
||||
</activity>
|
||||
|
||||
<activity android:name=".WebxdcStoreActivity"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<li><a href="#what-do-the-ticks-shown-beside-outgoing-messages-mean">What do the ticks shown beside outgoing messages mean?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
<li><a href="#delold">What happens if I turn on “Delete old messages from device”?</a></li>
|
||||
<li><a href="#delold">What happens if I turn on “Delete Messages from Device”?</a></li>
|
||||
<li><a href="#remove-account">How can I delete my chat profile?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#kdyź-se-nedopatřením-odstraníš">Kdyź se nedopatřením odstraníš.</a></li>
|
||||
<li><a href="#nechci-již-přijímat-zprávy-ze-skupiny">Nechci již přijímat zprávy ze skupiny.</a></li>
|
||||
<li><a href="#cloning-a-group">Cloning a group</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#advanced">Advanced</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#experiments">Experimental Features</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#mám-zájem-o-technické-podrobnosti-kde-najdu-víc">Mám zájem o technické podrobnosti. Kde najdu víc?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
|
||||
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
|
||||
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
|
||||
@@ -184,7 +187,8 @@ If you add each other to <a href="#groups">groups</a>, end-to-end encryption wil
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -222,15 +226,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -261,14 +260,11 @@ or to <strong>Switch Profiles</strong>.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Profilový obrázek lze zvolit v nastavení. Když napíšeš svému kontaktu,
|
||||
<p>Profilový obrázek lze zvolit v nastavení. Když napíšeš svému kontaktu,
|
||||
nebo přidáš nový vyfocením QR kódu, tyto kontakty automaticky uvidí tvůj profilový obrázek.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Z důvodu soukromí nikdo nevidí tvůj profilový obrázek dokud jim nenapíšeš.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>Z důvodu soukromí nikdo nevidí tvůj profilový obrázek dokud jim nenapíšeš.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="signature">
|
||||
@@ -303,7 +299,8 @@ they will see it when they view your contact details.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Archive chats</strong> if you do not want to see them in your chat list any longer.
|
||||
Archived chats remain accessible above the chat list or via search.</p>
|
||||
They remain accessible above the chat list or via search
|
||||
and are marked by <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Archived</b></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When an archived chat gets a new message, unless muted, it will <strong>pop out of the archive</strong> and back into your chat list.
|
||||
@@ -338,7 +335,7 @@ By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../g
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
<p>Finally, you can also use “Saved Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
@@ -375,22 +372,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -455,19 +448,18 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
<h3 id="delold">
|
||||
|
||||
|
||||
What happens if I turn on “Delete old messages from device”? <a href="#delold" class="anchor"></a>
|
||||
What happens if I turn on “Delete Messages from Device”? <a href="#delold" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>If you want to save storage on your device, you can choose to delete old
|
||||
messages automatically.</li>
|
||||
<li>To turn it on, go to “delete old messages from device” in the “Chats & Media”
|
||||
settings. You can set a timeframe between “after an hour” and “after a year”;
|
||||
<p>If you want to save storage on your device, you can choose to delete old
|
||||
messages automatically.</p>
|
||||
|
||||
<p>To turn it on, go to <strong>Settings → Chats → Delete Message from Device</strong>.
|
||||
You can set a timeframe between “after an hour” and “after a year”;
|
||||
this way, <em>all</em> messages will be deleted from your device as soon as they are
|
||||
older than that.</li>
|
||||
</ul>
|
||||
older than that.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -515,9 +507,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Z menu v pravém horním rohu, nebo stiskem příslušného tlačítka na Androidu / iOS vyber <strong>Nový hovor</strong> a pak <strong>Nová skupina</strong>.</li>
|
||||
<li>Na další obrazovce, vyber <strong>členy skupiny</strong> a zadej <strong>Název skupiny</strong>. Také můžeš vybrat <strong>obrázek skupiny</strong>.</li>
|
||||
<li>Jakmile do skupiny pošleš <strong>první zprávu</strong>, všichni členové budou vyrozuměni o nové skupině a mohou do ní také psát (dokud nepošleš první zprávu členové skupiny o ní nebudou vědět).</li>
|
||||
<li>
|
||||
<p>Z menu v pravém horním rohu, nebo stiskem příslušného tlačítka na Androidu / iOS vyber <strong>Nový hovor</strong> a pak <strong>Nová skupina</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Na další obrazovce, vyber <strong>členy skupiny</strong> a zadej <strong>Název skupiny</strong>. Také můžeš vybrat <strong>obrázek skupiny</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Jakmile do skupiny pošleš <strong>první zprávu</strong>, všichni členové budou vyrozuměni o nové skupině a mohou do ní také psát (dokud nepošleš první zprávu členové skupiny o ní nebudou vědět).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -528,11 +526,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -560,10 +557,8 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Když nejsi členem skupiny nelze se znovu připojit. Nicméně, není to velká potíž -
|
||||
požádej běžnou zprávou jiného člena skupiny o znovupřipojení.</li>
|
||||
</ul>
|
||||
<p>Když nejsi členem skupiny nelze se znovu připojit. Nicméně, není to velká potíž -
|
||||
požádej běžnou zprávou jiného člena skupiny o znovupřipojení.</p>
|
||||
|
||||
<h3 id="nechci-již-přijímat-zprávy-ze-skupiny">
|
||||
|
||||
@@ -574,15 +569,12 @@ požádej běžnou zprávou jiného člena skupiny o znovupřipojení.</li>
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Buď se odeber ze seznamu členů a nebo vymaž celý skupinový hovor.
|
||||
K opětovnému připojení v budoucnu požádej nějakého člena skupiny o znovupřidání.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Jiná možnost je “Umlčení” skupiny, což znamená nadále přijímat a také posílat zprávy,
|
||||
ale nebudeš dostávat upozrnění na nově příchozí zprávy.</p>
|
||||
</li>
|
||||
<li>Buď se odeber ze seznamu členů a nebo vymaž celý skupinový hovor.
|
||||
K opětovnému připojení v budoucnu požádej nějakého člena skupiny o znovupřidání.</li>
|
||||
</ul>
|
||||
|
||||
<p>Jiná možnost je “Umlčení” skupiny, což znamená nadále přijímat a také posílat zprávy,
|
||||
ale nebudeš dostávat upozrnění na nově příchozí zprávy.</p>
|
||||
|
||||
<h3 id="cloning-a-group">
|
||||
|
||||
@@ -608,6 +600,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -896,7 +903,7 @@ One device is not needed for the other to work.</p>
|
||||
<p>Double-check both devices are in the <strong>same Wi-Fi or network</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On <strong>Windows</strong>, go to <strong>Control Panel / Network and Internet</strong>
|
||||
<p>On <strong>Windows</strong>, go to “Control Panel / Network and Internet”
|
||||
and make sure, <strong>Private Network</strong> is selected as “Network profile type”
|
||||
(after transfer, you can change back to the original value)</p>
|
||||
</li>
|
||||
@@ -948,22 +955,21 @@ try the <strong>manual transfer</strong> described below</p>
|
||||
<p>This method is only recommended if “Add Second Device” as described above does not work.</p>
|
||||
|
||||
<ul>
|
||||
<li>On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your
|
||||
<li>
|
||||
<p>On the old device, go to <strong>Settings → Chats → Export Backup</strong>. Enter your
|
||||
screen unlock PIN, pattern, or password. Then you can click on “Start
|
||||
Backup”. This saves the backup file to your device. Now you have to transfer
|
||||
it to the other device somehow.</li>
|
||||
<li>On the new device, in the “I already have a profile” menu,
|
||||
choose “restore from backup”. After import, your conversations, encryption
|
||||
keys, and media should be copied to the new device.
|
||||
<ul>
|
||||
<li><strong>If you use iOS:</strong> and you encounter difficulties, maybe
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> will
|
||||
help you.</li>
|
||||
</ul>
|
||||
it to the other device somehow.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On the new device, select <strong>I Already Have a Profile → Restore from Backup</strong>.
|
||||
If you use iOS and encounter difficulties,
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> might help you.</p>
|
||||
</li>
|
||||
<li>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<p>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</p>
|
||||
|
||||
<h3 id="je-v-plánu-vytvořit-webovou-verzi-delta-chatu">
|
||||
|
||||
@@ -991,10 +997,10 @@ Všechny softwarové balíčky jsou na <a href="https://get.delta.chat">get.delt
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Experimental Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -1007,33 +1013,44 @@ you can try out features we are working on.</p>
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
@@ -1100,6 +1117,40 @@ except if your users’ devices require Google/Apple <a href="#instant-delivery"
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
|
||||
<h3 id="mám-zájem-o-technické-podrobnosti-kde-najdu-víc">
|
||||
|
||||
|
||||
@@ -1108,9 +1159,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Dobrý začátek je <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standards used in Delta Chat</a>.</li>
|
||||
</ul>
|
||||
<p>Dobrý začátek je <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standards used in Delta Chat</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1349,6 +1398,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1588,52 +1663,38 @@ ordered chronologically:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 we successfully completed the OTF-funded
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure Chatmail project</a>,
|
||||
allowing us to introduce guaranteed encryption,
|
||||
creating a <a href="https://delta.chat/chatmail">chatmail server network</a>
|
||||
and providing “instant onboarding” in all apps released from April 2024 on.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Sometimes we receive one-time donations from private individuals.
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<li><a href="#was-bedeuten-die-häkchen-neben-den-ausgehenden-nachrichten">Was bedeuten die Häkchen neben den ausgehenden Nachrichten?</a></li>
|
||||
<li><a href="#edit">Schreibfehler korrigieren und Nachrichten nach dem Senden löschen</a></li>
|
||||
<li><a href="#ephemeralmsgs">Wie funktionieren “Verschwindende Nachrichten”?</a></li>
|
||||
<li><a href="#delold">Was passiert, wenn ich “Alte Nachrichten vom Gerät löschen” aktiviere?</a></li>
|
||||
<li><a href="#delold">Was passiert, wenn ich “Nachrichten vom Gerät löschen” aktiviere?</a></li>
|
||||
<li><a href="#remove-account">Wie kann ich mein Chat-Profil löschen?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#ich-habe-mich-selbst-versehentlich-gelöscht">Ich habe mich selbst versehentlich gelöscht.</a></li>
|
||||
<li><a href="#ich-möchte-keine-nachrichten-einer-gruppe-mehr-empfangen">Ich möchte keine Nachrichten einer Gruppe mehr empfangen.</a></li>
|
||||
<li><a href="#eine-gruppe-klonen">Eine Gruppe klonen</a></li>
|
||||
<li><a href="#wie-viele-mitglieder-können-in-einer-einzelnen-gruppe-sein">Wie viele Mitglieder können in einer einzelnen Gruppe sein?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-Chat-Apps</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#erweitert">Erweitert</a>
|
||||
<ul>
|
||||
<li><a href="#experimentelle-features">Experimentelle Features</a></li>
|
||||
<li><a href="#statssending">Was ist “Statistik an Delta Chat Entwickler senden”?</a></li>
|
||||
<li><a href="#experiments">Experimentelle Features</a></li>
|
||||
<li><a href="#relays">Was sind Relays?</a></li>
|
||||
<li><a href="#kann-ich-eine-klassische-e-mail-adresse-mit-delta-chat-verwenden">Kann ich eine klassische E-Mail-Adresse mit Delta Chat verwenden?</a></li>
|
||||
<li><a href="#classic-email">Wie kann ich ein Chat-Profil mit einer klassischen E-Mail-Adresse als Relay konfigurieren?</a></li>
|
||||
<li><a href="#ich-möchte-meinen-eigenen-server-für-delta-chat-verwalten-gibt-es-empfehlungen">Ich möchte meinen eigenen Server für Delta Chat verwalten. Gibt es Empfehlungen?</a></li>
|
||||
<li><a href="#statssending">Was ist “Statistik an Delta Chat Entwickler senden”?</a></li>
|
||||
<li><a href="#ich-bin-an-technischen-details-interessiert-gibt-es-hierzu-weitere-infos">Ich bin an technischen Details interessiert. Gibt es hierzu weitere Infos?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Sind mit dem Mail-Symbol markierte Nachrichten im Internet sichtbar?</a></li>
|
||||
<li><a href="#message-metadata">Wie schützt Delta Chat Metadaten in Nachrichten?</a></li>
|
||||
<li><a href="#device-seizure">Wie schützt man Metadaten und Kontakte, wenn ein Gerät beschlagnahmt wird?</a></li>
|
||||
<li><a href="#wer-sieht-meine-ip-adresse">Wer sieht meine IP-Adresse?</a></li>
|
||||
<li><a href="#sealedsender">Unterstützt Delta Chat „Sealed Sender“?</a></li>
|
||||
<li><a href="#pfs">Unterstützt Delta Chat “Perfect Forward Secrecy”?</a></li>
|
||||
<li><a href="#pqc">Unterstützt Delta Chat Post-Quantum-Verschlüsselung?</a></li>
|
||||
@@ -137,14 +140,17 @@ basierend auf <a href="https://github.com/chatmail/core/blob/main/standards.md#s
|
||||
Es gibt keine öffentliches Verzeichnis, du entscheiden selbst über deine Kontakte.</p>
|
||||
|
||||
<ul>
|
||||
<li>Wenn du <strong>persönlich</strong> mit deinen Freunden oder Familie zusammen bist,
|
||||
<li>
|
||||
<p>Wenn du <strong>persönlich</strong> mit deinen Freunden oder Familie zusammen bist,
|
||||
tippe auf das <strong>QR-Code</strong>-Symbol <img style="vertical-align:middle; height:1.3em; margin:1px" src="../qr-icon.png" />
|
||||
auf dem Hauptbildschirm.<br />
|
||||
Bitte deinen Chatpartner den QR-Code mit Delta Chat zu <strong>scannen</strong>.</li>
|
||||
Bitte deinen Chatpartner den QR-Code mit Delta Chat zu <strong>scannen</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Für eine Kontaktaufnahme <strong>aus der Ferne</strong>, klicke im selben Bildschirm auf “Kopieren” oder “Teilen” und sende den <strong>Einladungslink</strong> über einen anderen privaten Chat.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Für eine Kontaktaufnahme <strong>aus der Ferne</strong>, klicke im selben Bildschirm auf “Kopieren” oder “Teilen” und sende den <strong>Einladungslink</strong> über einen anderen privaten Chat.</p>
|
||||
|
||||
<p>Wartet nun, bis die Verbindung hergestellt ist.</p>
|
||||
|
||||
<ul>
|
||||
@@ -173,7 +179,7 @@ wird eine Ende-zu-Ende-Verschlüsselung zwischen allen Mitgliedern eingerichtet.
|
||||
|
||||
<p>Da Delta Chat ein privater Messenger ist, können dir zunächst nur Freunde und Familienmitglieder, denen du deinen <a href="#howtoe2ee">QR-Code oder Einladungslink</a> schickst, schreiben.</p>
|
||||
|
||||
<p>Deine Freunde können deine Kontaktdaten dann mit anderen Freunden teilen. Dies wird als <strong>Anfrage</strong> angezeigt.</p>
|
||||
<p>Deine Freunde können deine Kontaktdaten dann mit anderen Freunden teilen. Dies wird als <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Anfrage</b> angezeigt.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -211,15 +217,10 @@ kann darauf tippen, um mit dem ersten Kontakt zu chatten.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Ja. Bilder, Videos, Dateien, Sprachnachrichten und mehr können über die <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Anhang-</strong>
|
||||
bzw. <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Sprachnachricht</strong>-Buttons hinzugefügt werden</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Um die Leistung zu verbessern, werden die Bilder standardmäßig optimiert und in einer kleineren Größe gesendet, aber du kannst sie auch als “Datei” senden, um das Original zu erhalten.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Ja. Bilder, Videos, Dateien, Sprachnachrichten und mehr können über die <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Anhang-</strong>
|
||||
bzw. <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Sprachnachricht</strong>-Buttons hinzugefügt werden</p>
|
||||
|
||||
<p>Um die Leistung zu verbessern, werden die Bilder standardmäßig optimiert und in einer kleineren Größe gesendet, aber du kannst sie auch als “Datei” senden, um das Original zu erhalten.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -230,7 +231,7 @@ bzw. <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png
|
||||
</h3>
|
||||
|
||||
<p>Ein Profil besteht aus <strong>einem Namen, einem Bild</strong> und einigen zusätzlichen Informationen zum Verschlüsseln von Nachrichten.
|
||||
Ein Profil existiert nur auf Ihren Geräten
|
||||
Ein Profil existiert nur auf deinen Geräten
|
||||
und verwendet den Server nur für den Transport von Nachrichten.</p>
|
||||
|
||||
<p>Bei der Installation von Delta Chat wird ein erstes Profil erstellt.</p>
|
||||
@@ -250,14 +251,9 @@ oder <strong>Profile zu wechseln</strong>.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Du kannst ein Profilbild in den Einstellungen hinzufügen. Wenn du deinen Kontakten eine Nachricht sendest oder sie über einen QR-Code hinzufügst, sehen diese automatisch dein Profilbild.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Aus Datenschutzgründen sieht niemand dein Profilbild, dem du nicht zuvor eine Nachricht gesendet hast.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Du kannst ein Profilbild in den Einstellungen hinzufügen. Wenn du deinen Kontakten eine Nachricht sendest oder sie über einen QR-Code hinzufügst, sehen diese automatisch dein Profilbild.</p>
|
||||
|
||||
<p>Aus Datenschutzgründen sieht niemand dein Profilbild, dem du nicht zuvor eine Nachricht gesendet hast.</p>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -289,7 +285,7 @@ Sobald du eine Nachricht an einen Kontakt sendest, kann dieser deine Signatur in
|
||||
<p><strong>Stummgeschaltete Chats</strong> erhalten keine Benachrichtigungen, bleiben ansonsten aber an ihrem Platz. Du kannst auch stummgeschaltete Chats anheften.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Archiviere Chats</strong>, wenn du diese nicht mehr in deiner Chatliste sehen möchtest. Archivierte Chats bleiben oberhalb der Chatliste oder über die Suche zugänglich.</p>
|
||||
<p><strong>Archiviere Chats</strong>, wenn du diese nicht mehr in deiner Chatliste sehen möchtest; sie bleiben oberhalb der Chatliste oder über die Suche zugänglich und werden als <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Archiviert</b> gekennzeichnet</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wenn ein archivierter Chat eine neue Nachricht erhält, wird er, sofern er nicht stummgeschaltet ist, <strong>wieder in die normale Chatliste verschoben</strong>. <strong>Stummgeschaltete Chats bleiben archiviert</strong>, bis du sie manuell aus dem Archiv entfernst.</p>
|
||||
@@ -355,18 +351,16 @@ sei es durch den <a href="#edit">Absender</a>, durch <a href="#delold">Automatis
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>Ein Häkchen</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" /> bedeutet, dass die Nachricht erfolgreich versandt wurde.</p>
|
||||
<p><strong>Ein Häkchen</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" /> bedeutet, dass die Nachricht erfolgreich versandt wurde und das <a href="#relays">Relay</a> erreicht hat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Zwei Häkchen</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" /> bedeuten, dass mindestens ein Gerät des Empfängers zurückgemeldet hat, die Nachricht empfangen zu haben.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Lesebestätigungen können deaktiviert werden. D.h. auch wenn Sie nur ein Häkchen sehen, kann die Nachricht gelesen worden sein.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Umgekehrt bedeuten zwei Häkchen nicht automatisch, dass ein Mensch die Nachricht gelesen oder verstanden hat ;)</p>
|
||||
<p><strong>Zwei Häkchen</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" /> bedeuten, dass der Empfänger die Nachricht gelesen hat.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">Gruppen</a> bedeutet das zweite Häkchen, dass die Nachricht von mindestens einem Mitglied gelesen wurde.</p>
|
||||
|
||||
<p>Du erhälst nur dann das zweite Häkchen, wenn sowohl du als auch einer der Empfänger, die die Nachricht gelesen haben, <strong>Einstellungen → Chats → Lesebestätigungen</strong> aktiviert haben.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -426,15 +420,14 @@ oder auf andere Weise Nachrichten vor dem Löschen speichern, kopieren oder weit
|
||||
<h3 id="delold">
|
||||
|
||||
|
||||
Was passiert, wenn ich “Alte Nachrichten vom Gerät löschen” aktiviere? <a href="#delold" class="anchor"></a>
|
||||
Was passiert, wenn ich “Nachrichten vom Gerät löschen” aktiviere? <a href="#delold" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Wenn du Speicherplatz auf deinem Gerät sparen möchtest, kannst du alte Nachrichten automatisch löschen lassen.</li>
|
||||
<li>Hierzu, öffne die “Chats und Medien”-Einstellungen und dort “Alte Nachrichten vom Gerät löschen”. Du kannst einen Zeitraum zwischen “1 Stunde” und “1 Jahr” festlegen; auf diese Weise werden <em>alle</em> Nachrichten von Ihrem Gerät gelöscht, sobald sie älter als angegeben sind.</li>
|
||||
</ul>
|
||||
<p>Wenn du Speicherplatz auf deinem Gerät sparen möchtest, kannst du alte Nachrichten automatisch löschen lassen.</p>
|
||||
|
||||
<p>Hierzu, öffne <strong>Einstellungen → Chats → Nachrichten vom Gerät löschen</strong>. Du kannst einen Zeitraum zwischen “1 Stunde” und “1 Jahr” festlegen; auf diese Weise werden alleNachrichten von deinem Gerät gelöscht, sobald sie älter als angegeben sind.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -444,16 +437,15 @@ oder auf andere Weise Nachrichten vor dem Löschen speichern, kopieren oder weit
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If you are using more than one chat profile,
|
||||
you can remove single ones in the top profile switcher menu (on Android and iOS),
|
||||
or in the sidebar with a right click (in the Desktop app).
|
||||
Chat profiles are only removed on the device where deletion was triggered.
|
||||
Chat profiles on other devices will continue to fully function.</p>
|
||||
<p>Wenn du mehr als ein Chat-Profil verwendest,
|
||||
kannst du einzelne Profile über den Avatar oben links (Android/iOS)
|
||||
oder über die Seitenleiste (Desktop, Rechtsklick) entfernen.
|
||||
Chat-Profile werden nur auf dem Gerät entfernt, auf dem “Löschen” ausgewählt wurde.
|
||||
Chat-Profile auf anderen Geräten funktionieren uneingeschränkt weiter.</p>
|
||||
|
||||
<p>If you use a single default chat profile you can simply uninstall the app.
|
||||
This will still automatically trigger deletion of all associated address data on the chatmail server.
|
||||
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org address-deletion</a>
|
||||
or the respective page from your chosen <a href="https://chatmail.at/relays">3rd party chatmail server</a>.</p>
|
||||
<p>Wenn du ein einzelnes Standard-Chat-Profil verwendest, kannst du die App einfach deinstallieren.
|
||||
Dadurch werden automatisch alle zugehörigen Daten gelöscht.
|
||||
Weitere Informationen findest du auf der Seite des ausgewählten <a href="https://chatmail.at/relays">Relay</a>.</p>
|
||||
|
||||
<h2 id="groups">
|
||||
|
||||
@@ -463,15 +455,15 @@ or the respective page from your chosen <a href="https://chatmail.at/relays">3rd
|
||||
|
||||
</h2>
|
||||
|
||||
<p>Groups let several people chat together privately with <strong>equal rights</strong>.</p>
|
||||
<p>Gruppen ermöglichen es mehreren Personen, privat miteinander bei <strong>gleichen Rechte</strong> zu chatten.</p>
|
||||
|
||||
<p>Anyone can
|
||||
change the group name or avatar,
|
||||
<a href="#addmembers">add or remove members</a>,
|
||||
set <a href="#ephemeralmsgs">disappearing messages</a>,
|
||||
and <a href="#edit">delete their own messages</a> from all member’s devices.</p>
|
||||
<p>Jeder kann
|
||||
den Gruppennamen oder Avatar ändern,
|
||||
<a href="#addmembers">Mitglieder hinzufügen oder entfernen</a>,
|
||||
<a href="#ephemeralmsgs">Verschwindende Nachrichten</a> einstellen
|
||||
und seine <a href="#edit">eigenen Nachrichten von Geräten der Mitglieder löschen</a>.</p>
|
||||
|
||||
<p>Because all members have the same rights, groups work best among <strong>trusted friends and family</strong>.</p>
|
||||
<p>Da alle Mitglieder die gleichen Rechte haben, funktionieren Gruppen am besten unter <strong>vertrauten Freunden und Familienmitgliedern</strong>.</p>
|
||||
|
||||
<h3 id="eine-gruppe-anlegen">
|
||||
|
||||
@@ -482,9 +474,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Wähle <strong>Neuer Chat</strong> und dann <strong>Neue Gruppe</strong> aus dem Menü oben rechts oder über das entsprechende Symbol unter Android/iOS.</li>
|
||||
<li>Wähle auf dem folgenden Bildschirm die <strong>Gruppenmitglieder</strong> aus und klicke auf das Häkchen in der oberen rechten Ecke. Danach kannst du einen <strong>Gruppennamen</strong> und auch einen <strong>Gruppenbild</strong> festlegen.</li>
|
||||
<li>Sobald du die <strong>erste Nachricht</strong> in die Gruppe schreibst, werden alle Mitglieder über die neue Gruppe informiert und können in der Gruppe antworten (solange du keine Nachricht in die Gruppe schreibst, ist die Gruppe für die Gruppenmitglieder nicht sichtbar).</li>
|
||||
<li>
|
||||
<p>Wähle <strong>Neuer Chat</strong> und dann <strong>Neue Gruppe</strong> aus dem Menü oben rechts oder über das entsprechende Symbol unter Android/iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wähle auf dem folgenden Bildschirm die <strong>Gruppenmitglieder</strong> aus und klicke auf das Häkchen in der oberen rechten Ecke. Danach kannst du einen <strong>Gruppennamen</strong> und auch einen <strong>Gruppenbild</strong> festlegen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Sobald du die <strong>erste Nachricht</strong> in die Gruppe schreibst, werden alle Mitglieder über die neue Gruppe informiert und können in der Gruppe antworten (solange du keine Nachricht in die Gruppe schreibst, ist die Gruppe für die Gruppenmitglieder nicht sichtbar).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -495,29 +493,21 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Alle Gruppenmitglieder haben <strong>dieselben Rechte</strong>. Jeder kann daher jeden löschen oder weitere Mitglieder hinzufügen.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
<p>Um <strong>Mitglieder hinzuzufügen oder zu entfernen</strong>, tippe im Chat auf den Gruppennamen und wähle das Mitglied aus, das du hinzufügen oder entfernen möchtest.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
<p>Wenn das Mitglied noch nicht in deiner Kontaktliste ist, sie sich aber <strong>persönlich</strong> treffen, wählen Sie dort <strong>QR-Einladungscode</strong> an. Dein Chat-Partner kann nun den QR-Code mit seiner Delta Chat-App <strong>scannen</strong> indem er auf <img style="vertical-align:middle; height:1.3em; margin:1px" src="../qr-icon.png" /> auf dem Hauptbildschirm tippt.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If the member is not yet in your contact list, but <strong>face to face</strong> with you,
|
||||
from the same screen, show a <strong>QR code</strong>.<br />
|
||||
Ask your chat partner to <strong>scan</strong> the QR image with their Delta Chat app by tapping
|
||||
<img style="vertical-align:middle; height:1.3em; margin:1px" src="../qr-icon.png" /> on the main screen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>For a <strong>remote</strong> member addition,
|
||||
click “Copy” or “Share” and send the <strong>invite link</strong>
|
||||
through another private chat to the new member.</p>
|
||||
<p>Für eine Kontaktaufnahme <strong>aus der Ferne</strong>, tippe dort “Kopieren” oder “Teilen” und sende den Einladungslink über einen anderen privaten Chat zum neuen Mitglied.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>QR code and invite link can be used to add several members.
|
||||
However, since groups are <a href="#groups">meant for trusted people</a>, avoid sharing them publicly.</p>
|
||||
<p>Mit einem QR-Code und dem Einladungslink können mehrere Mitglieder hinzugefügt werden. Da Gruppen jedoch <a href="#groups">für vertrauenswürdige Personen gedacht sind</a>, solltest du diese nicht öffentlich teilen.</p>
|
||||
|
||||
<h3 id="ich-habe-mich-selbst-versehentlich-gelöscht">
|
||||
|
||||
@@ -527,10 +517,8 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Da du kein Gruppenmitglied mehr bist, kannst du sich selbst nicht mehr hinzufügen.
|
||||
Kein Problem, bitte einfach ein anderes Gruppenmitglied in einem normalen Chat, dich hinzuzufügen.</li>
|
||||
</ul>
|
||||
<p>Da du kein Gruppenmitglied mehr bist, kannst du sich selbst nicht mehr hinzufügen.
|
||||
Kein Problem, bitte einfach ein anderes Gruppenmitglied in einem normalen Chat, dich hinzuzufügen.</p>
|
||||
|
||||
<h3 id="ich-möchte-keine-nachrichten-einer-gruppe-mehr-empfangen">
|
||||
|
||||
@@ -541,14 +529,11 @@ Kein Problem, bitte einfach ein anderes Gruppenmitglied in einem normalen Chat,
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Lösche dich entweder aus der Mitgliederliste oder lösche den gesamten Chat.
|
||||
Wenn du der Gruppe später erneut beitreten möchtest, bitten ein anderes Gruppenmitglied, dich hinzuzufügen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Alternativ kannst du eine Gruppe auch “stummschalten” - dies bedeutet, dass du weiterhin alle Nachrichten erhälst und neue schreiben kannst, aber nicht mehr über neue Nachrichten informiert wirst.</p>
|
||||
</li>
|
||||
<li>Lösche dich entweder aus der Mitgliederliste oder lösche den gesamten Chat.
|
||||
Wenn du der Gruppe später erneut beitreten möchtest, bitten ein anderes Gruppenmitglied, dich hinzuzufügen.</li>
|
||||
</ul>
|
||||
|
||||
<p>Alternativ kannst du eine Gruppe auch “stummschalten” - dies bedeutet, dass du weiterhin alle Nachrichten erhälst und neue schreiben kannst, aber nicht mehr über neue Nachrichten informiert wirst.</p>
|
||||
|
||||
<h3 id="eine-gruppe-klonen">
|
||||
|
||||
@@ -558,21 +543,34 @@ Wenn du der Gruppe später erneut beitreten möchtest, bitten ein anderes Gruppe
|
||||
|
||||
</h3>
|
||||
|
||||
<p>You can duplicate a group to start a separate discussion
|
||||
or to exclude members without them noticing.</p>
|
||||
<p>Du kannst eine Gruppe duplizieren, um eine separate Diskussion zu starten
|
||||
oder um Mitglieder auszuschließen, ohne dass diese es bemerken.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Open the group profile and tap <strong>Clone Chat</strong> (Android/iOS),
|
||||
or right-click the group in the chat list (Desktop).</p>
|
||||
<p>Öffnen das Gruppenprofil und tippe auf <strong>Chat klonen</strong> (Android/iOS)
|
||||
oder klicken mit der rechten Maustaste auf die Gruppe in der Chat-Liste (Desktop).</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Set a new name, choose an avatar, and adjust the member list if needed.</p>
|
||||
<p>Legen einen neuen Namen fest, wähle einen Avatar und passe gegebenenfalls die Mitgliederliste an.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
<p>Die neue Gruppe ist <strong>völlig unabhängig</strong> von der ursprünglichen,
|
||||
die weiterhin wie bisher funktioniert.</p>
|
||||
|
||||
<h3 id="wie-viele-mitglieder-können-in-einer-einzelnen-gruppe-sein">
|
||||
|
||||
|
||||
Wie viele Mitglieder können in einer einzelnen Gruppe sein? <a href="#wie-viele-mitglieder-können-in-einer-einzelnen-gruppe-sein" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Es gibt keine technische Begrenzung,
|
||||
aber mehr als 150 sind nicht empfohlen.</p>
|
||||
|
||||
<p>Wenn Gruppen größer werden, können sie sozial instabil werden und benötigen möglicherweise eine Hierarchie - und Delta Chat ist ein privater Messenger für Chats mit <a href="#groups">gleichen Rechten</a>. Vgl. <a href="https://de.wikipedia.org/wiki/Dunbar-Zahl">Dunbar-Zahl</a>.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
@@ -582,8 +580,8 @@ which continues to work as before.</p>
|
||||
|
||||
</h2>
|
||||
|
||||
<p>You can send apps to a chat - games, editors, polls and other tools.
|
||||
This makes Delta Chat a truly extensible messenger.</p>
|
||||
<p>Du kannst Apps an einen Chat senden – Spiele, Editoren, Umfragen und andere Tools.
|
||||
Dies macht Delta Chat zu einem wirklich erweiterbaren Messenger.</p>
|
||||
|
||||
<h3 id="wo-bekomme-ich-in-chat-apps">
|
||||
|
||||
@@ -595,10 +593,10 @@ This makes Delta Chat a truly extensible messenger.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In a chat, using <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment Button → Apps</strong></p>
|
||||
<p>Im Chat unter <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Anhängen → Apps</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>You can also <a href="#create-xdc">create your own app</a> and attach it using <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment Button → File</strong></p>
|
||||
<p>Du kannst deine <a href="#create-xdc">eigenen Apps erstellen</a> und mit <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Anhängen → Datei</strong> anhängen</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -612,19 +610,16 @@ This makes Delta Chat a truly extensible messenger.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In-chat apps can not send data to the Internet, or download anything.</p>
|
||||
<p>In-Chat-Apps können keine Daten ins Internet senden oder etwas herunterladen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>An in-chat app can only exchange data within a chat, with its
|
||||
copies on the devices of your chat partners. Other than that, it’s completely
|
||||
isolated from the Internet.</p>
|
||||
<p>Eine App kann nur Daten innerhalb eines Chats austauschen. Ansonsten ist sie vollständig vom Internet isoliert.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The privacy an in-chat app offers is the privacy of your chat - as long as you
|
||||
trust the people you chat with, you can trust the in-chat app as well.</p>
|
||||
<p>Die Privatsphäre, die eine App bietet, ist die Privatsphäre des Chats – solange Sie den Personen, mit denen Sie chatten, vertrauen, können Sie auch der App vertrauen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>This also means: Just like for web links, do not open apps from untrusted contacts.</p>
|
||||
<p>Das bedeutet auch: Genauso wie bei Weblinks, öffne keine Apps von nicht-vertrauenswürdigen Kontakten.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -638,19 +633,18 @@ trust the people you chat with, you can trust the in-chat app as well.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In-chat apps are zip files with <code class="language-plaintext highlighter-rouge">.xdc</code> extension containing html, css, and javascript code.</p>
|
||||
<p>In-Chat-Apps sind ZIP-Dateien mit der Erweiterung <code class="language-plaintext highlighter-rouge">.xdc</code>, die HTML-, CSS- und JavaScript-Code enthalten.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>You can extend the <a href="https://github.com/webxdc/hello">Hello World example app</a>
|
||||
to get started.</p>
|
||||
<p>Um loszulegen, kannst du das <a href="https://github.com/webxdc/hello">Hello-World-Beispiel</a> bearbeiten.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>All else you need to know is written in the
|
||||
<a href="https://webxdc.org/docs">Webxdc documentation</a>.</p>
|
||||
<p>Alle weitere, was du wissen musst, ist in der
|
||||
<a href="https://webxdc.org/docs">Webxdc-Dokumentation</a> beschrieben.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have question, you can ask others with experience
|
||||
in the <a href="https://support.delta.chat/c/webxdc/20">Delta Chat Forum</a>.</p>
|
||||
<p>Wenn du Fragen hast, kannst du andere mit mehr Erfahrung
|
||||
im <a href="https://support.delta.chat/c/webxdc/20">Forum</a> ansprechen.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -710,8 +704,8 @@ keine Daten an Apple weitergibt, die Apple nicht bereits hat.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If a “Push Service” is available, Delta Chat enables Push Notifications
|
||||
to achieve instant message delivery for all chatmail users.</p>
|
||||
<p>Wenn ein „Push-Dienst“ verfügbar ist, aktiviert Delta Chat Push-Benachrichtigungen,
|
||||
um eine sofortige Nachrichtenzustellung für alle Chatmail-Benutzer zu erreichen.</p>
|
||||
|
||||
<p>In den Delta-Chat-Einstellungen „Benachrichtigungen“ für „Sofortige Benachrichtigungen“
|
||||
kannst du die folgenden Einstellungen ändern, die alle Chat-Profile betreffen:</p>
|
||||
@@ -724,7 +718,7 @@ Einige Android-Hersteller schränken Apps sogar vollständig ein
|
||||
und Delta Chat zeigt möglicherweise keine eingehenden Nachrichten an, bis du die App erneut manuell öffnest.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Hintergrundverbindung erzwingen: Dies ist die Ausweichoption wenn die vorherigen Optionen nicht verfügbar sind oder keine „sofortige Zustellung“ erreichen. Die Aktivierung dieser Option führt zu einer permanenten Benachrichtigung auf Ihrem Telefon, die bei neueren Android-Telefonen manchmal „verkleinert“ werden kann.</p>
|
||||
<p>Hintergrundverbindung erzwingen: Dies ist die Ausweichoption wenn die vorherigen Optionen nicht verfügbar sind oder keine „sofortige Zustellung“ erreichen. Die Aktivierung dieser Option führt zu einer permanenten Benachrichtigung auf deinem Telefon, die bei neueren Android-Telefonen manchmal „verkleinert“ werden kann.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -739,9 +733,9 @@ können sicher ausprobiert werden, wenn du feststellst, dass Nachrichten nur mit
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Delta Chat Push Notification support avoids leakage of private information.
|
||||
It does not leak profile data, IP address or message content (not even encrypted)
|
||||
to any system involved in the delivery of Push Notifications.</p>
|
||||
<p>Delta Chats Vorgehensweise, Push-Benachrichtigungen zu verwenden, vermeidet die Weitergabe privater Informationen.
|
||||
Es werden keine Profildaten, IP-Adressen oder Nachrichteninhalte (auch nicht verschlüsselt)
|
||||
an irgendein System, das an der Zustellung von Push-Benachrichtigungen beteiligt ist, weitergegeben.</p>
|
||||
|
||||
<p>So verwendet Delta Chat Push-Benachrichtigungen:</p>
|
||||
|
||||
@@ -751,21 +745,20 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
auf dem <a href="https://delta.chat/chatmail">Chatmail</a>-Server.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives a message for a Delta Chat user
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
<p>Wenn ein <a href="https://delta.chat/chatmail">Chatmail</a>-Server eine Nachricht für einen Delta-Chat-Benutzer erhält
|
||||
erhält, leitet er das verschlüsselte Geräte-Token an den zentralen Delta-Chat-Benachrichtigungs-Proxy weiter.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or profile data of Delta Chat users.</p>
|
||||
<p>Der zentrale Delta-Chat-Benachrichtigungs-Proxy entschlüsselt das Geräte-Token und leitet es an den jeweiligen Push-Dienst (Apple, Google, etc.) weiter,
|
||||
ohne jemals die Adresse oder IP-Adresse des Delta-Chat-Benutzers zu kennen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Push Service (Apple, Google, etc.)
|
||||
wakes up the Delta Chat app on your device
|
||||
to check for new messages in the background.
|
||||
It does not know about the profile data of the device it wakes up.
|
||||
The central Apple/Google Push services never see any profile data (sender or receiver)
|
||||
and also never see any message content (also not in encrypted forms).</p>
|
||||
<p>Der zentrale Push-Dienst (Apple, Google, etc.)
|
||||
weckt die Delta-Chat-App auf deinem Gerät auf
|
||||
um im Hintergrund nach neuen Nachrichten zu suchen.
|
||||
Der zentrale Push-Dienst weiß nichts über das Profil des Geräts, das er aufweckt,
|
||||
sieht nie eine Adresse (weder Absender noch Empfänger)
|
||||
und auch nie den Inhalt einer Nachricht (auch nicht in verschlüsselter Form).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -773,10 +766,10 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
und vergisst die Geräte-Token, sobald Apple/Google/etc. sie verarbeitet hat,
|
||||
normalerweise innerhalb weniger Millisekunden.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees profile data, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
<p>Beachten, dass das Geräte-Token zwischen Anwendungen und dem Benachrichtigungs-Proxy verschlüsselt,
|
||||
aber nicht signiert ist.
|
||||
Der Benachrichtigungs-Proxy sieht also niemals Profildaten, IP-Adressen oder
|
||||
irgendwelche kryptografischen Identitätsinformationen, die mit dem Gerät oder dem Geräte-Token eines Nutzers verbunden sind.</p>
|
||||
|
||||
<p>Aufgrund dieses umfassenden Datenschutzkonzepts würde sogar die Beschlagnahmung eines Chatmail-Servers,
|
||||
oder die vollständige Beschlagnahmung des zentralen Delta-Chat-Benachrichtigungsproxys
|
||||
@@ -795,10 +788,9 @@ aber wir wollen, dass die Nutzer eine zuverlässige „Sofortzustellung“ von N
|
||||
wie sie es von WhatsApp, Signal oder Telegram kennen,
|
||||
ohne im Vorfeld Fragen zu stellen, die eher für erfahrene Nutzer oder Entwickler geeignet sind.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
that achieves “instant delivery” of messages for all chatmail servers
|
||||
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
|
||||
Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
<p>Beachte, dass Delta Chat ein <a href="#privacy-notifications">kleines, die Privatsphäre wahrendes Push-Benachrichtigungssystem</a>
|
||||
hat, das eine „sofortige Zustellung“ von Nachrichten für alle Chatmail-Server erreicht.
|
||||
Einschließlich dem Chatmail-Server, <a href="https://delta.chat/chatmail#selfhosted">den du selbst ohne unsere Erlaubnis einrichten kannst</a>.</p>
|
||||
|
||||
<h2 id="multiclient">
|
||||
|
||||
@@ -851,7 +843,7 @@ Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
<p>Vergewissere dich, dass beide Geräte mit dem <strong>gleichen Wi-Fi, WLAN oder Netzwerk</strong> verbunden sind.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Unter <strong>Windows</strong>, <strong>Systemsteuerung / Netzwerk und Internet</strong> öffnen
|
||||
<p>Unter <strong>Windows</strong>, “Systemsteuerung / Netzwerk und Internet” öffnen
|
||||
und sicherstellen, dass <strong>Privates Netzwerk</strong> als “Netzwerkprofiltyp” ausgewählt ist.
|
||||
(nach der Übertragung kann wieder der ursprüngliche Wert verwendet werden)</p>
|
||||
</li>
|
||||
@@ -897,14 +889,16 @@ versuche, einen <strong>Mobilen Hotspot</strong> auf einem Gerät zu öffnen und
|
||||
<p>Diese Methode wird nur empfohlen, wenn “Zweites Gerät hinzufügen”, wie oben beschrieben, nicht funktioniert.</p>
|
||||
|
||||
<ul>
|
||||
<li>Auf dem alten Gerät, gehe zu “Einstellungen → Chats und Medien → Chats auf externem Speicher speichern”. Gib deine PIN, dein Muster oder dein Passwort zum Entsperren des Bildschirms ein. Anschließend kannst du auf “Backup starten” klicken. Dadurch wird die Backup-Datei auf deinem Gerät gespeichert. Jetzt musst du sie auf das andere Gerät übertragen.</li>
|
||||
<li>Auf dem neuen Gerät, auf dem Anmeldebildschirm, wähle “Ich habe bereits ein Profil” und dann “Wiederherstellen aus Backup”. Nach dem Import sind deine Chats, Medien und Einstellungen auf das neue Gerät kopiert.
|
||||
<ul>
|
||||
<li><strong>Wenn du iOS verwendest</strong> und auf Schwierigkeiten stößt, hilft dir vielleicht <a href="https://support.delta.chat/t/import-backup-to-ios/1628">diese Anleitung</a>.</li>
|
||||
</ul>
|
||||
<li>
|
||||
<p>Auf dem alten Gerät, gehe zu <strong>Einstellungen → Chats und Medien → Chats auf externem Speicher speichern</strong>. Gib deine PIN, dein Muster oder dein Passwort zum Entsperren des Bildschirms ein. Anschließend kannst du auf “Backup starten” klicken. Dadurch wird die Backup-Datei auf deinem Gerät gespeichert. Jetzt musst du sie auf das andere Gerät übertragen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Auf dem neuen Gerät, auf dem Anmeldebildschirm, wähle <strong>Ich habe bereits ein Profil → Wiederherstellen aus Backup</strong>. Nach dem Import sind deine Chats, Medien und Einstellungen auf das neue Gerät kopiert.
|
||||
Wenn du iOS verwendest und auf Schwierigkeiten stößt, hilft dir vielleicht <a href="https://support.delta.chat/t/import-backup-to-ios/1628">diese Anleitung</a>.</p>
|
||||
</li>
|
||||
<li>Du bist nun synchronisiert und kannst beide Geräte zum Senden und Empfangen von Ende-zu-Ende-verschlüsselten-Nachrichten mit deinen Kommunikationspartnern verwenden.</li>
|
||||
</ul>
|
||||
|
||||
<p>Du bist nun synchronisiert und kannst beide Geräte zum Senden und Empfangen von Ende-zu-Ende-verschlüsselten-Nachrichten mit deinen Kommunikationspartnern verwenden.</p>
|
||||
|
||||
<h3 id="gibt-es-pläne-für-eine-delta-chat-web-anwendung">
|
||||
|
||||
@@ -928,10 +922,10 @@ versuche, einen <strong>Mobilen Hotspot</strong> auf einem Gerät zu öffnen und
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimentelle-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimentelle Features <a href="#experimentelle-features" class="anchor"></a>
|
||||
Experimentelle Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -941,8 +935,107 @@ kannst du unfertige Features ausprobieren, an denen gearbeitet wird.</p>
|
||||
|
||||
<p>Die Features können <strong>instabil</strong> sein und <strong>geändert oder entfernt</strong> werden.</p>
|
||||
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
<p>Du findest weitere Informationen im <a href="https://support.delta.chat">Forum</a>, wo du auch Feedback geben kannst.</p>
|
||||
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
Was sind Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Relays werden verwendet, um Nachrichten vorübergehend zu speichern, falls dein Gerät offline ist.
|
||||
Relays sind billige und einfache Server,
|
||||
die keine Daten wie Gruppenstatus, deinen Namen oder deinen Avatar speichern –
|
||||
all das existiert nur auf deinem Gerät.
|
||||
Relays werden von verschiedenen Gruppen und Personen betrieben.</p>
|
||||
|
||||
<p>Standardmäßig wird nach der Installation ein Relay <strong>automatisch</strong> hinzugefügt;
|
||||
darum musst du dich nicht kümmern.
|
||||
Wenn du möchtest,
|
||||
kannst du jedoch unter <strong>Einstellungen → Erweitert → Relays</strong> Änderungen vornehmen:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Du kannst ein Relay <strong>hinzufügen</strong>, indem du einen QR-Code scannst,
|
||||
z.B. von <a href="https://chatmail.at/relays">https://chatmail.at/relays</a>.
|
||||
Bei mehreren Relays, empfängst du die Nachrichten von allen Relays.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Standard</strong> legt das Relay fest, an das deine Chatpartner zukünftig Nachrichten senden.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wenn du ein Relay <strong>entfernst</strong>,
|
||||
stelle sicher, dass ein anderes Standard-Relay ausreichend lange verwendet wurde.
|
||||
Andernfalls erreichen dich keine Nachrichten von deinen Kontakten.
|
||||
Im Zweifelsfall entferne das Relay später.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Weitere Details und zukünftige Möglichkeiten findest du im <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="kann-ich-eine-klassische-e-mail-adresse-mit-delta-chat-verwenden">
|
||||
|
||||
|
||||
Kann ich eine klassische E-Mail-Adresse mit Delta Chat verwenden? <a href="#kann-ich-eine-klassische-e-mail-adresse-mit-delta-chat-verwenden" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Ja, aber nur, wenn die E-Mail-Adresse ausschließlich von <a href="https://chatmail.at/clients">Chatmail-Clients</a> verwendet wird.</p>
|
||||
|
||||
<p>Die gemeinsame Nutzung einer E-Mail-Adresse mit Nicht-Chatmail-Apps oder webbasierten Mailprogrammen wird aus folgenden Gründen nicht unterstützt:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Nicht-Chatmail-Apps bieten ihren Nutzern größtenteils keine automatische End-to-End-Verschlüsselung,
|
||||
während Chatmail-Apps und Relays durchgängig End-to-End-Verschlüsselung und Sicherheitsstandards durchsetzen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Nicht-Chatmail-Anwendungen nutzen E-Mail-Server als langfristiges Nachrichtenarchiv,
|
||||
während Chatmail-Clients E-Mail-Server für die kurzlebige Weiterleitung von Nachrichten verwenden.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Die Unterstützung der gesamten Bandbreite klassischer E-Mail-Konfigurationen
|
||||
würde einen erheblichen Entwicklungs- und Wartungsaufwand erfordern
|
||||
und Chatmail-basiertes Messaging weniger robust, zuverlässig und schnell machen.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="classic-email">
|
||||
|
||||
|
||||
Wie kann ich ein Chat-Profil mit einer klassischen E-Mail-Adresse als Relay konfigurieren? <a href="#classic-email" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Zunächst einmal, <strong>verwenden bitte nicht dieselbe klassische E-Mail-Adresse auch in anderen klassischen E-Mail-Anwendungen</strong>,
|
||||
es sei denn, du bist sind bereit, dich mit verschlüsselten Nachrichten im Posteingang,
|
||||
doppelten Benachrichtigungen, versehentlich gelöschten E-Mails oder ähnlichen Ärgernissen auseinanderzusetzen.</p>
|
||||
|
||||
<p>Sie können eine E-Mail-Adresse unter <strong>Neues Profil → Anderen Server verwenden → Klassische E-Mail als Relay</strong> konfigurieren.
|
||||
Beachten Sie, dass klassische E-Mail-Anbieter in der Regel keine <a href="#instant-delivery">Push-Benachrichtigungen</a> unterstützen
|
||||
und andere Einschränkungen haben, siehe <a href="https://providers.delta.chat">Provider-Overview</a>.
|
||||
Chatmail verwendet den Standard-INBOX für die Weiterleitung; stellen Sie sicher, dass dies auch bei der Einrichtung Ihres Anbieters der Fall ist.
|
||||
Ein Chat-Profil mit klassischer E-Mail-Adresse, ermöglicht das Senden und Empfangen unverschlüsselter Nachrichten; diese sind mit dem E-Mail-Symbol <img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" /> gekennzeichnet.</p>
|
||||
|
||||
<h3 id="ich-möchte-meinen-eigenen-server-für-delta-chat-verwalten-gibt-es-empfehlungen">
|
||||
|
||||
|
||||
Ich möchte meinen eigenen Server für Delta Chat verwalten. Gibt es Empfehlungen? <a href="#ich-möchte-meinen-eigenen-server-für-delta-chat-verwalten-gibt-es-empfehlungen" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Jede gut funktionierende E-Mail-Server-Konfiguration ist geeignet,
|
||||
es sei denn, die Geräte Ihrer Benutzer erfordern Google/Apple <a href="#instant-delivery">Push-Benachrichtigungen</a>, um ordnungsgemäß zu funktionieren.</p>
|
||||
|
||||
<p>Wir empfehlen generell, <a href="https://chatmail.at/doc/relay/getting_started.html">ein Chatmail-Relay einzurichten</a>.
|
||||
<a href="https://chatmail.at">Chatmail</a> ist ein Community-basiertes Projekt, das sowohl die Einrichtung von Relays
|
||||
als auch <a href="https://github.com/chatmail/core">Entwicklungen in Rust</a>
|
||||
für die <a href="https://chatmail.at/clients">Chatmail-Clients</a> umfasst, von denen Delta Chat der bekannteste ist.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
@@ -965,78 +1058,19 @@ weekly statistics will be automatically sent to a bot.</p>
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
|
||||
<h3 id="kann-ich-eine-klassische-e-mail-adresse-mit-delta-chat-verwenden">
|
||||
|
||||
|
||||
Kann ich eine klassische E-Mail-Adresse mit Delta Chat verwenden? <a href="#kann-ich-eine-klassische-e-mail-adresse-mit-delta-chat-verwenden" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes, but only if the email address is used exclusively by <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
|
||||
|
||||
<p>It is not supported to share usage of an email address with non-chatmail apps or web-based mailers,
|
||||
for the following reasons:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Non-chatmail apps are largely not accomplishing automatic end-to-end email encryption for their users,
|
||||
while chatmail apps and relays pervasively enforce end-to-end encryption and security standards.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Non-chatmail apps use email servers as a long-term message archive
|
||||
while chatmail clients use email servers for ephemeral instant message relay.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Supporting the full variety of classic email setups
|
||||
would require considerable development and maintenance efforts,
|
||||
and complicate making chatmail-based messaging more resilient, reliable and fast.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="classic-email">
|
||||
|
||||
|
||||
Wie kann ich ein Chat-Profil mit einer klassischen E-Mail-Adresse als Relay konfigurieren? <a href="#classic-email" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>First off, <strong>please do not use the same classic email address also from non-chatmail classic email apps</strong>
|
||||
unless you are prepared to deal with encrypted messages in the inbox,
|
||||
double notifications, accidentally deleted emails or similar annoyances.</p>
|
||||
|
||||
<p>You can configure a email address for chatting at <strong>New Profile → Use Other Server → Use Classic Mail as Relay</strong>.
|
||||
Note that classic email providers will generally not support <a href="#instant-delivery">Push Notifications</a>
|
||||
and have other limitations, see <a href="https://providers.delta.chat">Provider Overview</a>.
|
||||
Chatmail uses the default INBOX for relay; ensure the provider setup does too.
|
||||
A chat profile using a classic email address allows to to send and receive unencrypted messages.
|
||||
These messages, and the chats they appear in, are marked with an email icon
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
|
||||
|
||||
<h3 id="ich-möchte-meinen-eigenen-server-für-delta-chat-verwalten-gibt-es-empfehlungen">
|
||||
|
||||
|
||||
Ich möchte meinen eigenen Server für Delta Chat verwalten. Gibt es Empfehlungen? <a href="#ich-möchte-meinen-eigenen-server-für-delta-chat-verwalten-gibt-es-empfehlungen" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Any well behaving email server setup will do fine
|
||||
except if your users’ devices require Google/Apple <a href="#instant-delivery">Push Notifications</a> to work properly.</p>
|
||||
|
||||
<p>We generally recommend to <a href="https://chatmail.at/doc/relay/getting_started.html">set up a chatmail relay</a>.
|
||||
<a href="https://chatmail.at">Chatmail</a> is a community-driven project that encompasses both the setup of relays
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="ich-bin-an-technischen-details-interessiert-gibt-es-hierzu-weitere-infos">
|
||||
|
||||
|
||||
@@ -1045,9 +1079,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Siehe hierzu <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">in Delta Chat genutzte Standards</a>.</li>
|
||||
</ul>
|
||||
<p>Siehe hierzu <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">in Delta Chat genutzte Standards</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1104,10 +1136,7 @@ Seit der Veröffentlichung von Delta Chat Version 2 (Juli 2025) gibt es keine Sc
|
||||
|
||||
<p>Wenn du die Standard-<a href="https://chatmail.at/relays">Chatmail-Relays</a> verwendest, ist es unmöglich, Nachrichten ohne End-to-End-Verschlüsselung zu empfangen oder zu senden.</p>
|
||||
|
||||
<p>If you instead use a <a href="#classic-email">classic email server</a>,
|
||||
you can send and receive messages with or without end-to-end encryption.
|
||||
Messages lacking end-to-end encryption are marked with an email icon
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
|
||||
<p>Wenn du stattdessen ein Profil mit einem <a href="#classic-email">klassischen E-Mail-Server</a> erstellst, kannst du Nachrichten mit und ohne Ende-zu-Ende-Verschlüsselung senden und empfangen. Nachrichten ohne Ende-zu-Ende-Verschlüsselung werden mit einem E-Mail-Symbol gekennzeichnet <img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
|
||||
|
||||
<h3 id="e2eeguarantee">
|
||||
|
||||
@@ -1117,16 +1146,15 @@ Messages lacking end-to-end encryption are marked with an email icon
|
||||
|
||||
</h3>
|
||||
|
||||
<p>A contact profile might show a green checkmark
|
||||
<p>Ein Kontaktprofile kann ein grünes Häkchen
|
||||
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
|
||||
and an “Introduced by” line.
|
||||
Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
|
||||
or was introduced by a another green-checkmarked contact.
|
||||
Introductions happen automatically when adding members to groups.
|
||||
Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
|
||||
becomes an introducer.
|
||||
In a contact profile you can tap on the “Introduced by …” text repeatedly
|
||||
until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
|
||||
und “Eingeführt von” enthalten.
|
||||
Jeder so markierte Kontakt hat entweder einen direkten <a href="#howtoe2ee">QR-Scan</a> mit Ihnen durchgeführt
|
||||
oder wurde von einem anderen Kontakt mit grünem Häkchen eingeführt.
|
||||
Das Einführen geschieht automatisch, wenn Sie Mitglieder zu Gruppen hinzufügen.
|
||||
Wer einen Kontakt mit grünem Häkchen zu einer Gruppe hinzufügt, wird zum Einführenden.
|
||||
In einem Kontaktprofil können Sie wiederholt auf den Text “Eingeführt von” tippen
|
||||
bis Sie zu demjenigen gelangen, mit dem Sie einen direkten <a href="#howtoe2ee">QR-Scan</a> gemacht haben.</p>
|
||||
|
||||
<p>Für eine ausführlichere Diskussion der “Garantierten Ende-zu-Ende-Verschlüsselung”,
|
||||
siehe <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join-Protokolle</a>
|
||||
@@ -1181,10 +1209,11 @@ die Sicherheitseigenschaften durch das im Sommer 2023 angenommene
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes, we are following efforts like <a href="https://en.wikipedia.org/wiki/Messaging_Layer_Security">MLS</a>
|
||||
but adopting them would mean breaking end-to-end encryption interoperability.
|
||||
So it would not be a light decision to take
|
||||
and there must be tangible improvements for users.</p>
|
||||
<p>Ja, wir verfolgen Ansätze wie <a href="https://en.wikipedia.org/wiki/Messaging_Layer_Security">MLS</a>.
|
||||
Diese zu übernehmen würde aber bedeuten, die Interoperabilität der Ende-zu-Ende-Verschlüsselung
|
||||
mit allen anderen Anwendungen zu zerstören.
|
||||
Die Entscheidung wäre also nicht leicht zu treffen
|
||||
und müsste spürbare Verbesserungen für die Nutzer bringen.</p>
|
||||
|
||||
<p>Delta Chat verfolgt einen ganzheitlichen Ansatz bei der “nutzbaren Sicherheit”:
|
||||
Wir arbeiteten mit vielen Aktivistengruppen sowie mit
|
||||
@@ -1222,21 +1251,22 @@ so wie in der Autocrypt-Level-1-Spezifikation definiert.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If you are sending or receiving email messages without end-to-end encryption (using a classic email server),
|
||||
they are still protected from cell or cable companies who can not read or modify your email messages.
|
||||
But both your and your recipient’s email providers
|
||||
may read, analyze or modify your messages, including any attachments.</p>
|
||||
<p>Wenn du E-Mail-Nachrichten ohne Ende-zu-Ende-Verschlüsselung sendest oder empfängst (mit einem klassischen E-Mail-Server),
|
||||
sind sie immer noch vor Mobilfunkanbietern oder Kabelnetzbetreibern geschützt, die deine E-Mail-Nachrichten nicht lesen oder verändern können.</p>
|
||||
|
||||
<p>Delta Chat by default uses strict
|
||||
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
|
||||
which secures connections between your device and your email provider.
|
||||
All of Delta Chat’s TLS-handling has been independently <a href="#security-audits">security audited</a>.
|
||||
Moreover, the connection between your and the recipient’s email provider
|
||||
will typically be transport-encrypted as well.
|
||||
If the involved email servers support <a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a>
|
||||
then transport encryption will be enforced between email providers
|
||||
in which case Delta Chat communications will never be exposed in cleartext to the Internet
|
||||
even if the message was not end-to-end encrypted.</p>
|
||||
<p>Aber sowohl dein E-Mail-Anbieter als auch der E-Mail-Anbieter des Empfängers
|
||||
können Nachrichten, einschließlich aller Anhänge, lesen, analysieren oder verändern.</p>
|
||||
|
||||
<p>Delta Chat verwendet standardmäßig strikte
|
||||
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS-Verschlüsselung</a>,
|
||||
die die Verbindungen zwischen deinem Gerät und dem E-Mail-Anbieter sichert.
|
||||
Die gesamte TLS-Implementierung wurde unabhängig <a href="#security-audits">sicherheitsgeprüft</a>.
|
||||
Die Verbindung zwischen deinem E-Mail-Provider und dem des Empfängers
|
||||
ist in der Regel ebenfalls transportverschlüsselt.
|
||||
Wenn die beteiligten E-Mail-Server <a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a> unterstützen,
|
||||
wird TLS zwischen den E-Mail-Anbietern durchgesetzt.
|
||||
In diesem Fall wird die Delta-Chat-Kommunikation niemals im Klartext ins Internet gelangen
|
||||
selbst wenn die Nachricht nicht Ende-zu-Ende-verschlüsselt war.</p>
|
||||
|
||||
<h3 id="message-metadata">
|
||||
|
||||
@@ -1279,6 +1309,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="wer-sieht-meine-ip-adresse">
|
||||
|
||||
|
||||
Wer sieht meine IP-Adresse? <a href="#wer-sieht-meine-ip-adresse" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Das verwendete <a href="#relays">Relay</a> muss Ihre IP-Adresse kennen,
|
||||
sowie manchmal auch die Geräte Ihrer Kontakte, wenn Sie einen <a href="#experiments">Anruf</a> tätigen
|
||||
oder gemeinsam <a href="#webxdc">Apps</a> verwenden.</p>
|
||||
|
||||
<p>IP-Adressen sind für Verbindungen und für Effizienz erforderlich.
|
||||
Sie werden weder gespeichert noch offengelegt.
|
||||
Beachten Sie, dass die IP-Adresse
|
||||
nicht mit einer Adresse, die Sie einem Lieferdienst geben, vergleichbar ist -
|
||||
sondern viel gröber ist und oft nur die Region oder das Land angibt.</p>
|
||||
|
||||
<p>Da dies die Standardfunktion des Internets und anderer Messenger ist,
|
||||
bieten wir hier keine Optionen an und stellen auch keine Fragen im Voraus.</p>
|
||||
|
||||
<p>Wenn Sie Ihre IP-Adresse als Sicherheits- oder Datenschutzrisiko betrachten,
|
||||
empfehlen wir Ihnen, ein VPN in Kombination mit dem System-Lockdown-Modus zu verwenden.
|
||||
Alle einzelnen Apps auf Ihrem System nach IP-Optionen abzusuchen wird nicht zufriedenstellen sein;
|
||||
beispielsweise legt das Antippen eines Links IP-Adressen gegenüber unbekannten Parteien offen und stellt hier das weitaus größere Risiko dar.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1287,7 +1343,7 @@ can not be identified easily.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Nein, noch nichts.</p>
|
||||
<p>Nein, noch nicht.</p>
|
||||
|
||||
<p>Der Signal-Messenger führte 2018 <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender”</a> ein
|
||||
um seine Serverinfrastruktur darüber im Unklaren zu lassen, wer eine Nachricht an eine Gruppe von Empfängern sendet.
|
||||
@@ -1308,7 +1364,7 @@ but an implementation has not been agreed as a priority yet.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Nein, noch nichts.</p>
|
||||
<p>Nein, noch nicht.</p>
|
||||
|
||||
<p>Delta Chat today doesn’t support Perfect Forward Secrecy (PFS).
|
||||
This means that if your private decryption key is leaked,
|
||||
@@ -1334,7 +1390,7 @@ which would make it available in all <a href="https://chatmail.at/clients">chatm
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Nein, noch nichts.</p>
|
||||
<p>Nein, noch nicht.</p>
|
||||
|
||||
<p>Delta Chat verwendet die Rust OpenPGP-Bibliothek <a href="https://github.com/rpgp/rpgp">rPGP</a>
|
||||
die den neuesten <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP Entwurf</a> unterstützt.
|
||||
@@ -1351,7 +1407,7 @@ Wir beabsichtigen, PQC-Unterstützung zum <a href="https://github.com/chatmail/c
|
||||
<p>Du kannst den Status der Ende-zu-Ende-Verschlüsselung manuell im Dialog “Verschlüsselung”
|
||||
(Android/iOS: Benutzerprofil, Desktop: Rechtsklick auf den Chat eines Benutzers) überprüfen.
|
||||
Delta Chat zeigt dort zwei Fingerabdrücke an.
|
||||
Wenn die gleichen Fingerabdrücke auf Ihrem eigenen Gerät und auf dem Gerät Ihres Kontakts erscheinen,
|
||||
Wenn die gleichen Fingerabdrücke auf deinem eigenen Gerät und auf dem Gerät deines Kontakts erscheinen,
|
||||
ist die Verbindung sicher.</p>
|
||||
|
||||
<h3 id="importkey">
|
||||
@@ -1431,10 +1487,10 @@ Es wurden keine kritischen Probleme gefunden, aber zwei Probleme mit hohem Schwe
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Some features require certain permissions,
|
||||
e.g. you need to grant camera permission if you want to <a href="#howtoe2ee">scan an invite QR code</a>.</p>
|
||||
<p>Einige Features erfordern bestimmte Berechtigungen.
|
||||
So muss z.B. der Kamerazugriff gewährt werden, wenn du einen <a href="#howtoe2ee">QR-Code scannen</a> möchtest.</p>
|
||||
|
||||
<p>See <a href="https://delta.chat/en/gdpr#24-app-permissions">Privacy Policy</a> for a detailed overview.</p>
|
||||
<p>Siehe <a href="https://delta.chat/de/gdpr#24-berechtigungen-der-app">Datenschutzhinweise</a> für eine detaillierte Übersicht.</p>
|
||||
|
||||
<h3 id="wo-können-meine-freunde-delta-chat-finden">
|
||||
|
||||
@@ -1454,10 +1510,10 @@ e.g. you need to grant camera permission if you want to <a href="#howtoe2ee">sca
|
||||
<p>Falls nicht verfügbar, verwende den <strong>Mirror</strong> auf <a href="https://deltachat.github.io/deltachat-pages">https://deltachat.github.io/deltachat-pages</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Öffne einen der folgenden <strong>App-Stores und suchen Sie nach „Delta Chat“:</strong> Google Play Store, F-Droid, Huawei App Gallery, iOS und macOS App Store, Microsoft Store</p>
|
||||
<p>Öffne einen der folgenden <strong>App-Stores und suche nach „Delta Chat“:</strong> Google Play Store, F-Droid, Huawei App Gallery, iOS und macOS App Store, Microsoft Store</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Im <strong>Paketmanager</strong> Ihrer Linux-Distribution nachschauen</p>
|
||||
<p>Im <strong>Paketmanager</strong> deiner Linux-Distribution nachschauen</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Android-APKs</strong> sind auch auf <a href="https://github.com/deltachat/deltachat-android/releases">https://github.com/deltachat/deltachat-android/releases</a> verfügbar.</p>
|
||||
@@ -1479,37 +1535,34 @@ Wir nutzen vielmehr öffentliche Finanzierungsquellen, die bisher aus der EU und
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Das EU-Projekt <a href="https://nextleap.eu">NEXTLEAP</a> finanzierte 2017 und 2018 die Entwicklung und Implementierung von “Verifizierten Gruppen” und “Setup Kontakt” und half auch bei der Integration der Ende-zu-Ende-Verschlüsselung durch <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Der <a href="https://opentechfund.org">Open Technology Fund</a> hat Delta Chat erstmals 2018/2019 bezuschusst; mit dieser Förderung (~$200K) wurden hauptsächlich die Android-App verbessert sowie das Release der Desktop-App in einer Betaversion ermöglicht. Basierend auf Nutzererfahrungen im Menschenrechtskontext wurden zudem verschiedene Funktionen entwickelt, siehe unseren Bericht <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
Die zweite Förderung 2019/2020 (~$300K) half uns bei der Erstellung der iOS-Version, unsere Kernbibliothek in die Programmiersprache “Rust” zu konvertieren und neue Funktionen für alle Plattformen bereitzustellen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Die <a href="https://nlnet.nl/">NLnet-Stiftung</a> bewilligte 2019/2020 46K EUR für die Fertigstellung von Rust-/Python-Bindungs und die Einrichtung eines Chat-Bot-Ökosystems.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Im Jahr 2021 erhielten wir weitere EU-Mittel für zwei “Next-Generation-Internet”-Anträge, nämlich für <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - E-Mail-Provider-Portabilitätsverzeichnis</a> (~97K EUR) und <a href="https://nlnet.nl/project/EmailPorting/">AEAP - E-Mail-Adressportierung</a> (~90K EUR). Ziel sind bessere Unterstützung von Mehrfachkonten, verbesserten QR-Code-Kontakt- und -Gruppen-Setups sowie Netzwerkverbesserungen auf allen Plattformen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Von Ende 2021 bis März 2023 erhielten wir eine <em>Internet-Freedom</em>-Finanzierung (500K USD) vom U.S. Bureau of Democracy, Human Rights and Labor (DRL). Diese Finanzierung unterstützte unsere langjährigen Ziele, Delta Chat benutzerfreundlicher und kompatibel mit einer breiten Palette von E-Mail-Servern weltweit zu machen, sowie widerstandsfähiger und sicherer an Orten, die häufig von Internetzensur und Abschaltungen betroffen sind.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 schlossen wir erfolgreich das vom OTF finanzierte
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure-Chatmail-Projekt</a> ab.
|
||||
Dieses fügt “Garantierte Verschlüsselung”,
|
||||
das <a href="https://delta.chat/chatmail">Chatmail-Server-Netzwerk</a>
|
||||
und „Instant Onboarding“ allen ab April 2024 veröffentlichten Anwendungen hinzu.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023 und 2024 wurden wir in das Next-Generation-Internet-Programm (NGI)
|
||||
für unsere Arbeit an <a href="https://nlnet.nl/project/WebXDC-Push/">Webxdc-PUSH</a> aufgenommen,
|
||||
zusammen mit Kooperationspartnern, die an
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">Webxdc-Evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">Webxdc-XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> und
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
Alle diese Projekte sind teilweise abgeschlossen oder sollen Anfang 2025 abgeschlossen werden.</p>
|
||||
<p>Das EU-Projekt <a href="https://nextleap.eu">NEXTLEAP</a> finanzierte 2017 und 2018 die Entwicklung und Implementierung von “Verifizierten Gruppen” und “Setup Kontakt” und half auch bei der Integration der Ende-zu-Ende-Verschlüsselung durch <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Manchmal erhalten wir einmalige Spenden von Privatpersonen, wofür wir sehr dankbar sind. Im Jahr 2021 hat uns zum Beispiel eine großzügige Privatperson 4000 EUR überwiesen mit dem Betreff “Weiter so!” 💜 Wir verwenden dieses Geld zur Finanzierung von Entwicklungstreffen oder zur Deckung von Ad-hoc-Ausgaben, die nicht ohne weiteres vorhersehbar sind oder nicht aus öffentlichen Fördermitteln erstattet werden können.
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<li><a href="#what-do-the-ticks-shown-beside-outgoing-messages-mean">What do the ticks shown beside outgoing messages mean?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
<li><a href="#delold">What happens if I turn on “Delete old messages from device”?</a></li>
|
||||
<li><a href="#delold">What happens if I turn on “Delete Messages from Device”?</a></li>
|
||||
<li><a href="#remove-account">How can I delete my chat profile?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#i-have-deleted-myself-by-accident">I have deleted myself by accident.</a></li>
|
||||
<li><a href="#i-do-not-want-to-receive-the-messages-of-a-group-any-longer">I do not want to receive the messages of a group any longer.</a></li>
|
||||
<li><a href="#cloning-a-group">Cloning a group</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -54,7 +55,8 @@
|
||||
</li>
|
||||
<li><a href="#advanced">Advanced</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#experiments">Experimental Features</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
|
||||
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
|
||||
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
|
||||
@@ -184,7 +187,8 @@ If you add each other to <a href="#groups">groups</a>, end-to-end encryption wil
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -222,15 +226,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -261,16 +260,11 @@ or to <strong>Switch Profiles</strong>.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can add a profile picture in your settings. If you write to your contacts
|
||||
<p>You can add a profile picture in your settings. If you write to your contacts
|
||||
or add them via QR code, they automatically see it as your profile picture.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>For privacy reasons, no one sees your profile picture until you write a
|
||||
|
||||
<p>For privacy reasons, no one sees your profile picture until you write a
|
||||
message to them.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -304,7 +298,8 @@ they will see it when they view your contact details.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Archive chats</strong> if you do not want to see them in your chat list any longer.
|
||||
Archived chats remain accessible above the chat list or via search.</p>
|
||||
They remain accessible above the chat list or via search
|
||||
and are marked by <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Archived</b></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When an archived chat gets a new message, unless muted, it will <strong>pop out of the archive</strong> and back into your chat list.
|
||||
@@ -339,7 +334,7 @@ By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../g
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
<p>Finally, you can also use “Saved Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
@@ -376,22 +371,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -456,19 +447,18 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
<h3 id="delold">
|
||||
|
||||
|
||||
What happens if I turn on “Delete old messages from device”? <a href="#delold" class="anchor"></a>
|
||||
What happens if I turn on “Delete Messages from Device”? <a href="#delold" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>If you want to save storage on your device, you can choose to delete old
|
||||
messages automatically.</li>
|
||||
<li>To turn it on, go to “delete old messages from device” in the “Chats & Media”
|
||||
settings. You can set a timeframe between “after an hour” and “after a year”;
|
||||
<p>If you want to save storage on your device, you can choose to delete old
|
||||
messages automatically.</p>
|
||||
|
||||
<p>To turn it on, go to <strong>Settings → Chats → Delete Message from Device</strong>.
|
||||
You can set a timeframe between “after an hour” and “after a year”;
|
||||
this way, <em>all</em> messages will be deleted from your device as soon as they are
|
||||
older than that.</li>
|
||||
</ul>
|
||||
older than that.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -516,9 +506,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Select <strong>New chat</strong> and then <strong>New group</strong> from the menu in the upper right corner or hit the corresponding button on Android/iOS.</li>
|
||||
<li>On the following screen, select the <strong>group members</strong> and define a <strong>group name</strong>. You can also select a <strong>group avatar</strong>.</li>
|
||||
<li>As soon as you write the <strong>first message</strong> in the group, all members are informed about the new group and can answer in the group (as long as you do not write a message in the group the group is invisible to the members).</li>
|
||||
<li>
|
||||
<p>Select <strong>New chat</strong> and then <strong>New group</strong> from the menu in the upper right corner or hit the corresponding button on Android/iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On the following screen, select the <strong>group members</strong> and define a <strong>group name</strong>. You can also select a <strong>group avatar</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As soon as you write the <strong>first message</strong> in the group, all members are informed about the new group and can answer in the group (as long as you do not write a message in the group the group is invisible to the members).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -529,11 +525,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -561,10 +556,8 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>As you’re no longer a group member, you cannot add yourself again.
|
||||
However, no problem, just ask any other group member in a normal chat to re-add you.</li>
|
||||
</ul>
|
||||
<p>As you’re no longer a group member, you cannot add yourself again.
|
||||
However, no problem, just ask any other group member in a normal chat to re-add you.</p>
|
||||
|
||||
<h3 id="i-do-not-want-to-receive-the-messages-of-a-group-any-longer">
|
||||
|
||||
@@ -575,15 +568,12 @@ However, no problem, just ask any other group member in a normal chat to re-add
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Either delete yourself from the member list or delete the whole chat.
|
||||
If you want to join the group again later on, ask another group member to add you again.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As an alternative, you can also “Mute” a group - doing so means you get all messages and
|
||||
can still write, but are no longer notified of any new messages.</p>
|
||||
</li>
|
||||
<li>Either delete yourself from the member list or delete the whole chat.
|
||||
If you want to join the group again later on, ask another group member to add you again.</li>
|
||||
</ul>
|
||||
|
||||
<p>As an alternative, you can also “Mute” a group - doing so means you get all messages and
|
||||
can still write, but are no longer notified of any new messages.</p>
|
||||
|
||||
<h3 id="cloning-a-group">
|
||||
|
||||
@@ -609,6 +599,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -897,7 +902,7 @@ One device is not needed for the other to work.</p>
|
||||
<p>Double-check both devices are in the <strong>same Wi-Fi or network</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On <strong>Windows</strong>, go to <strong>Control Panel / Network and Internet</strong>
|
||||
<p>On <strong>Windows</strong>, go to “Control Panel / Network and Internet”
|
||||
and make sure, <strong>Private Network</strong> is selected as “Network profile type”
|
||||
(after transfer, you can change back to the original value)</p>
|
||||
</li>
|
||||
@@ -949,22 +954,21 @@ try the <strong>manual transfer</strong> described below</p>
|
||||
<p>This method is only recommended if “Add Second Device” as described above does not work.</p>
|
||||
|
||||
<ul>
|
||||
<li>On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your
|
||||
<li>
|
||||
<p>On the old device, go to <strong>Settings → Chats → Export Backup</strong>. Enter your
|
||||
screen unlock PIN, pattern, or password. Then you can click on “Start
|
||||
Backup”. This saves the backup file to your device. Now you have to transfer
|
||||
it to the other device somehow.</li>
|
||||
<li>On the new device, in the “I already have a profile” menu,
|
||||
choose “restore from backup”. After import, your conversations, encryption
|
||||
keys, and media should be copied to the new device.
|
||||
<ul>
|
||||
<li><strong>If you use iOS:</strong> and you encounter difficulties, maybe
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> will
|
||||
help you.</li>
|
||||
</ul>
|
||||
it to the other device somehow.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On the new device, select <strong>I Already Have a Profile → Restore from Backup</strong>.
|
||||
If you use iOS and encounter difficulties,
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> might help you.</p>
|
||||
</li>
|
||||
<li>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<p>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</p>
|
||||
|
||||
<h3 id="are-there-any-plans-for-introducing-a-delta-chat-web-client">
|
||||
|
||||
@@ -993,10 +997,10 @@ or the AppImage for Linux. You can find them on
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Experimental Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -1009,6 +1013,45 @@ you can try out features we are working on.</p>
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
|
||||
@@ -1116,9 +1159,7 @@ weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>See <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standards used in Delta Chat</a>.</li>
|
||||
</ul>
|
||||
<p>See <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standards used in Delta Chat</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1357,6 +1398,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1596,52 +1663,38 @@ ordered chronologically:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 we successfully completed the OTF-funded
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure Chatmail project</a>,
|
||||
allowing us to introduce guaranteed encryption,
|
||||
creating a <a href="https://delta.chat/chatmail">chatmail server network</a>
|
||||
and providing “instant onboarding” in all apps released from April 2024 on.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Sometimes we receive one-time donations from private individuals.
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#me-he-eliminado-por-accidente">Me he eliminado por accidente.</a></li>
|
||||
<li><a href="#no-quiero-recibir-más-los-mensajes-de-un-grupo">No quiero recibir más los mensajes de un grupo.</a></li>
|
||||
<li><a href="#cloning-a-group">Cloning a group</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#advanced">Advanced</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#experiments">Experimental Features</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#estoy-interesado-en-los-detalles-técnicos-pueden-decirme-más">Estoy interesado en los detalles técnicos. ¿Pueden decirme más?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
|
||||
<li><a href="#message-metadata">¿Cómo Delta Chat protege los metadatos en los mensajes?</a></li>
|
||||
<li><a href="#device-seizure">¿Cómo proteger los metadatos y los contactos cuando se incauta un dispositivo?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
|
||||
<li><a href="#pfs">¿Soporta Delta Chat Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
|
||||
@@ -184,7 +187,8 @@ If you add each other to <a href="#groups">groups</a>, end-to-end encryption wil
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -220,15 +224,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Para mejorar el rendimiento, las imágenes se optimizan y se envían en un tamaño más pequeño de forma predeterminada, pero puedes enviarla como un “archivo” para conservar la original.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Para mejorar el rendimiento, las imágenes se optimizan y se envían en un tamaño más pequeño de forma predeterminada, pero puedes enviarla como un “archivo” para conservar la original.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -259,15 +258,10 @@ o para <strong>Cambiar perfiles</strong>.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Puede agregar una foto de perfil en su configuración. Si escribe a sus contactos
|
||||
<p>Puede agregar una foto de perfil en su configuración. Si escribe a sus contactos
|
||||
o los agrega a través de un código QR, ellos lo verán automáticamente como su foto de perfil.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Por cuestiones de privacidad, nadie verá su foto de perfil hasta que les escriba un mensaje.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Por cuestiones de privacidad, nadie verá su foto de perfil hasta que les escriba un mensaje.</p>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -300,8 +294,7 @@ they will see it when they view your contact details.</p>
|
||||
<p><strong>Chats muteados</strong> si no quieres recibir notificaciones de ellos. Chats muteados se mantienen en su lugar e inclusive puedes fijarlos.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Archivar chats</strong> si no deseas verlos en tu lista de chats.
|
||||
Los chats archivados siguen siendo accesibles arriba de la lista de chats o a través de la búsqueda.</p>
|
||||
<p><strong>Archivar chats</strong> si no deseas verlos en tu lista de chats. Los chats archivados siguen siendo accesibles arriba de la lista de chats o a través de la búsqueda.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Cuando un chat archivado recibe un nuevo mensaje, a menos que esté silenciado, <strong>saldrá del archivo</strong> y volverá a aparecer en tu lista de chats.
|
||||
@@ -374,22 +367,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -459,14 +448,13 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>If you want to save storage on your device, you can choose to delete old
|
||||
messages automatically.</li>
|
||||
<li>To turn it on, go to “delete old messages from device” in the “Chats & Media”
|
||||
settings. You can set a timeframe between “after an hour” and “after a year”;
|
||||
<p>If you want to save storage on your device, you can choose to delete old
|
||||
messages automatically.</p>
|
||||
|
||||
<p>To turn it on, go to <strong>Settings → Chats → Delete Message from Device</strong>.
|
||||
You can set a timeframe between “after an hour” and “after a year”;
|
||||
this way, <em>all</em> messages will be deleted from your device as soon as they are
|
||||
older than that.</li>
|
||||
</ul>
|
||||
older than that.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -514,9 +502,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Selecciona <strong>Nuevo chat</strong> y luego <strong>Nuevo grupo</strong> del menu en el sector superior derecho o toca en el botón correspondiente en Android/iOS.</li>
|
||||
<li>En la siguiente pantalla selecciona a los <strong>miembros del grupo</strong> y define un <strong>nombre de grupo</strong>. Tambien puedes seleccionar un <strong>avatar de grupo</strong>.</li>
|
||||
<li>Tan pronto escribas el <strong>primer mensaje</strong> en el grupo, todos los miembros serán informados sobre el nuevo grupo y podrán responder en él (mientras no escribas un mensaje será invisible para los miembros).</li>
|
||||
<li>
|
||||
<p>Selecciona <strong>Nuevo chat</strong> y luego <strong>Nuevo grupo</strong> del menu en el sector superior derecho o toca en el botón correspondiente en Android/iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>En la siguiente pantalla selecciona a los <strong>miembros del grupo</strong> y define un <strong>nombre de grupo</strong>. Tambien puedes seleccionar un <strong>avatar de grupo</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Tan pronto escribas el <strong>primer mensaje</strong> en el grupo, todos los miembros serán informados sobre el nuevo grupo y podrán responder en él (mientras no escribas un mensaje será invisible para los miembros).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -527,11 +521,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -559,10 +552,8 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Como ya no eres miembro del grupo, no puedes volver a agregarte.
|
||||
Sin embargo, no hay problema, solo pídale a cualquier otro miembro del grupo en un chat normal que lo vuelva a agregar.</li>
|
||||
</ul>
|
||||
<p>Como ya no eres miembro del grupo, no puedes volver a agregarte.
|
||||
Sin embargo, no hay problema, solo pídale a cualquier otro miembro del grupo en un chat normal que lo vuelva a agregar.</p>
|
||||
|
||||
<h3 id="no-quiero-recibir-más-los-mensajes-de-un-grupo">
|
||||
|
||||
@@ -573,15 +564,12 @@ Sin embargo, no hay problema, solo pídale a cualquier otro miembro del grupo en
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Elimínate de la lista de miembros o elimina todo el chat.
|
||||
Si desea unirse al grupo nuevamente más tarde, pídale a otro miembro del grupo que lo agregue nuevamente.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Como alternativa, también puede “silenciar” a un grupo, lo que significa que recibirá todos los mensajes y
|
||||
aún puede escribir, pero ya no se le notifican nuevos mensajes.</p>
|
||||
</li>
|
||||
<li>Elimínate de la lista de miembros o elimina todo el chat.
|
||||
Si desea unirse al grupo nuevamente más tarde, pídale a otro miembro del grupo que lo agregue nuevamente.</li>
|
||||
</ul>
|
||||
|
||||
<p>Como alternativa, también puede “silenciar” a un grupo, lo que significa que recibirá todos los mensajes y
|
||||
aún puede escribir, pero ya no se le notifican nuevos mensajes.</p>
|
||||
|
||||
<h3 id="cloning-a-group">
|
||||
|
||||
@@ -607,6 +595,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -895,7 +898,7 @@ No es necesario un dispositivo para que el otro funcione.</p>
|
||||
<p>Vuelve a verificar que ambos dispositivos estén en la <strong>misma Wi-Fi o red</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On <strong>Windows</strong>, go to <strong>Control Panel / Network and Internet</strong>
|
||||
<p>On <strong>Windows</strong>, go to “Control Panel / Network and Internet”
|
||||
and make sure, <strong>Private Network</strong> is selected as “Network profile type”
|
||||
(after transfer, you can change back to the original value)</p>
|
||||
</li>
|
||||
@@ -947,22 +950,21 @@ try the <strong>manual transfer</strong> described below</p>
|
||||
<p>This method is only recommended if “Add Second Device” as described above does not work.</p>
|
||||
|
||||
<ul>
|
||||
<li>On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your
|
||||
<li>
|
||||
<p>On the old device, go to <strong>Settings → Chats → Export Backup</strong>. Enter your
|
||||
screen unlock PIN, pattern, or password. Then you can click on “Start
|
||||
Backup”. This saves the backup file to your device. Now you have to transfer
|
||||
it to the other device somehow.</li>
|
||||
<li>On the new device, in the “I already have a profile” menu,
|
||||
choose “restore from backup”. After import, your conversations, encryption
|
||||
keys, and media should be copied to the new device.
|
||||
<ul>
|
||||
<li><strong>If you use iOS:</strong> and you encounter difficulties, maybe
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> will
|
||||
help you.</li>
|
||||
</ul>
|
||||
it to the other device somehow.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On the new device, select <strong>I Already Have a Profile → Restore from Backup</strong>.
|
||||
If you use iOS and encounter difficulties,
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> might help you.</p>
|
||||
</li>
|
||||
<li>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<p>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</p>
|
||||
|
||||
<h3 id="tienen-planeado-crear-un-cliente-web-de-delta-chat">
|
||||
|
||||
@@ -991,10 +993,10 @@ o el AppImage para Linux. Puedes encontrarlos en
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Experimental Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -1007,33 +1009,44 @@ you can try out features we are working on.</p>
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
@@ -1100,6 +1113,40 @@ except if your users’ devices require Google/Apple <a href="#instant-delivery"
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
|
||||
<h3 id="estoy-interesado-en-los-detalles-técnicos-pueden-decirme-más">
|
||||
|
||||
|
||||
@@ -1108,9 +1155,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Visita la página <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Estándares usados en Delta Chat</a>.</li>
|
||||
</ul>
|
||||
<p>Visita la página <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Estándares usados en Delta Chat</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1346,6 +1391,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1581,52 +1652,38 @@ ordered chronologically:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>El proyecto de la UE <a href="https://nextleap.eu">NEXTLEAP</a> financió la investigación
|
||||
e implementación de grupos verificados y protocolos de contacto
|
||||
en 2017 y 2018 y también ayudó a integrar el cifrado de extremo a extremo
|
||||
a través de <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 we successfully completed the OTF-funded
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure Chatmail project</a>,
|
||||
allowing us to introduce guaranteed encryption,
|
||||
creating a <a href="https://delta.chat/chatmail">chatmail server network</a>
|
||||
and providing “instant onboarding” in all apps released from April 2024 on.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
<p>El proyecto de la UE <a href="https://nextleap.eu">NEXTLEAP</a> financió la investigación
|
||||
e implementación de grupos verificados y protocolos de contacto
|
||||
en 2017 y 2018 y también ayudó a integrar el cifrado de extremo a extremo
|
||||
a través de <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Sometimes we receive one-time donations from private individuals.
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#jai-quitté-un-groupe-par-accident">J’ai quitté un groupe par accident.</a></li>
|
||||
<li><a href="#je-ne-souhaite-plus-recevoir-les-messages-dun-groupe">Je ne souhaite plus recevoir les messages d’un groupe.</a></li>
|
||||
<li><a href="#cloning-a-group">Cloning a group</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#advanced">Advanced</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#experiments">Experimental Features</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#les-détails-techniques-mintéressent-pouvez-vous-men-dire-plus-">Les détails techniques m’intéressent. Pouvez-vous m’en dire plus ?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
|
||||
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
|
||||
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
|
||||
@@ -184,7 +187,8 @@ If you add each other to <a href="#groups">groups</a>, end-to-end encryption wil
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -222,15 +226,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Oui. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>Oui. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Pour améliorer les performances, les images sont redimensionnées et envoyées en taille réduite par défaut ; mais vous pouvez les envoyer en tant que “fichier” pour en conserver la taille originale.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Pour améliorer les performances, les images sont redimensionnées et envoyées en taille réduite par défaut ; mais vous pouvez les envoyer en tant que “fichier” pour en conserver la taille originale.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -263,9 +262,7 @@ or to <strong>Switch Profiles</strong>.</p>
|
||||
|
||||
<p>Dans les paramètres vous pouvez ajouter une photo de profil. Si vous écrivez à vos contacts ou que vous les ajoutez via le QR code, ils la verront automatiquement comme votre photo de profil.</p>
|
||||
|
||||
<ul>
|
||||
<li>Pour des raisons de confidentialité, personne ne peut voir votre photo de profil sans que vous ayez d’abord entamé une discussion.</li>
|
||||
</ul>
|
||||
<p>Pour des raisons de confidentialité, personne ne peut voir votre photo de profil sans que vous ayez d’abord entamé une discussion.</p>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -298,8 +295,7 @@ they will see it when they view your contact details.</p>
|
||||
<p>Utilisez la <strong>sourdine</strong> pour les discussions dont vous ne voulez pas recevoir les notifications. Les discussions en sourdine figurent toujours dans votre liste et peuvent aussi être les épinglées.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Archivez les discussions</strong> si vous ne voulez plus les voir apparaître dans votre liste de discussions.
|
||||
Les discussions archivées restent accessibles au-dessus de la liste de discussions ou via la recherche.</p>
|
||||
<p><strong>Archivez les discussions</strong> si vous ne voulez plus les voir apparaître dans votre liste de discussions. Les discussions archivées restent accessibles au-dessus de la liste de discussions ou via la recherche.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Lorsqu’un nouveau message est envoyé sur une discussion que vous avez archivée, et que vous n’avez pas mise en sourdine, la discussion <strong>sort des archives</strong> et reprend sa place dans votre liste de discussions.
|
||||
@@ -335,7 +331,7 @@ By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../g
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
<p>Finally, you can also use “Saved Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
@@ -372,22 +368,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -457,10 +449,9 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Vous pouvez choisir de supprimer automatiquement les anciens messages pour libérer de l’espace de stockage sur votre appareil.</li>
|
||||
<li>Pour activer cette option, ouvrez les paramètres des “Discussions et fichiers multimédias” et cliquez sur “Supprimer les anciens messages de l’appareil”. Vous pouvez définir le délai après lequel <em>tous</em> les messages seront supprimés de votre appareil, parmi plusieurs choix allant de “Immédiatement” à “Après 1 année”.</li>
|
||||
</ul>
|
||||
<p>Vous pouvez choisir de supprimer automatiquement les anciens messages pour libérer de l’espace de stockage sur votre appareil.</p>
|
||||
|
||||
<p>Pour activer cette option, ouvrez les paramètres des “Discussions et fichiers multimédias” et cliquez sur “Supprimer les anciens messages de l’appareil”. Vous pouvez définir le délai après lequel <em>tous</em> les messages seront supprimés de votre appareil, parmi plusieurs choix allant de “Immédiatement” à “Après 1 année”.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -508,9 +499,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Sélectionnez <strong>Nouvelle discussion</strong> puis <strong>Nouveau groupe</strong> dans le menu à trois points situé en haut à droite de la fenêtre ou son équivalent sous Android et iOS.</li>
|
||||
<li>Sur l’écran suivant, sélectionnez <strong>Ajouter des participants</strong> et choisissez un <strong>Nom du groupe</strong>. Vous pouvez aussi choisir une <strong>image de groupe</strong>.</li>
|
||||
<li>Lorsque vous enverrez le <strong>premier message</strong> dans le groupe, tous les membres en seront informés et pourront répondre. Le groupe est invisible aux autres membres si vous n’écrivez pas de premier message.</li>
|
||||
<li>
|
||||
<p>Sélectionnez <strong>Nouvelle discussion</strong> puis <strong>Nouveau groupe</strong> dans le menu à trois points situé en haut à droite de la fenêtre ou son équivalent sous Android et iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Sur l’écran suivant, sélectionnez <strong>Ajouter des participants</strong> et choisissez un <strong>Nom du groupe</strong>. Vous pouvez aussi choisir une <strong>image de groupe</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Lorsque vous enverrez le <strong>premier message</strong> dans le groupe, tous les membres en seront informés et pourront répondre. Le groupe est invisible aux autres membres si vous n’écrivez pas de premier message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -521,11 +518,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -553,10 +549,8 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Comme vous n’êtes plus membre du groupe, vous ne pouvez pas vous y ajouter vous-même.
|
||||
Contactez n’importe quel autre membre de ce groupe dans une discussion directe pour lui demander de vous y ré-inviter.</li>
|
||||
</ul>
|
||||
<p>Comme vous n’êtes plus membre du groupe, vous ne pouvez pas vous y ajouter vous-même.
|
||||
Contactez n’importe quel autre membre de ce groupe dans une discussion directe pour lui demander de vous y ré-inviter.</p>
|
||||
|
||||
<h3 id="je-ne-souhaite-plus-recevoir-les-messages-dun-groupe">
|
||||
|
||||
@@ -567,14 +561,11 @@ Contactez n’importe quel autre membre de ce groupe dans une discussion directe
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Supprimez-vous de la liste des membres ou supprimez la discussion entière.
|
||||
Si souhaitez rejoindre le groupe plus tard, demandez à un autre membre du groupe de vous ré-inviter.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Vous pouvez également mettre un groupe en “Sourdine” : vous recevrez tous les messages et pourrez toujours écrire, mais n’aurez plus les notifications des nouveaux messages.</p>
|
||||
</li>
|
||||
<li>Supprimez-vous de la liste des membres ou supprimez la discussion entière.
|
||||
Si souhaitez rejoindre le groupe plus tard, demandez à un autre membre du groupe de vous ré-inviter.</li>
|
||||
</ul>
|
||||
|
||||
<p>Vous pouvez également mettre un groupe en “Sourdine” : vous recevrez tous les messages et pourrez toujours écrire, mais n’aurez plus les notifications des nouveaux messages.</p>
|
||||
|
||||
<h3 id="cloning-a-group">
|
||||
|
||||
@@ -600,6 +591,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -886,7 +892,7 @@ L’un n’a pas besoin de l’autre pour pouvoir fonctionner.</p>
|
||||
<p>Vérifier à nouveau que les deux appareils sont sur <strong>le même réseau ou le même Wi-Fi</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On <strong>Windows</strong>, go to <strong>Control Panel / Network and Internet</strong>
|
||||
<p>On <strong>Windows</strong>, go to “Control Panel / Network and Internet”
|
||||
and make sure, <strong>Private Network</strong> is selected as “Network profile type”
|
||||
(after transfer, you can change back to the original value)</p>
|
||||
</li>
|
||||
@@ -937,22 +943,21 @@ Vous pouvez utiliser plusieurs comptes par appareil : <a href="#multiple-account
|
||||
<p>Recourez à cette méthode uniquement si les instructions ci-dessus pour “Ajouter un deuxième appareil” ont échoué.</p>
|
||||
|
||||
<ul>
|
||||
<li>On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your
|
||||
<li>
|
||||
<p>On the old device, go to <strong>Settings → Chats → Export Backup</strong>. Enter your
|
||||
screen unlock PIN, pattern, or password. Then you can click on “Start
|
||||
Backup”. This saves the backup file to your device. Now you have to transfer
|
||||
it to the other device somehow.</li>
|
||||
<li>On the new device, in the “I already have a profile” menu,
|
||||
choose “restore from backup”. After import, your conversations, encryption
|
||||
keys, and media should be copied to the new device.
|
||||
<ul>
|
||||
<li><strong>If you use iOS:</strong> and you encounter difficulties, maybe
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> will
|
||||
help you.</li>
|
||||
</ul>
|
||||
it to the other device somehow.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On the new device, select <strong>I Already Have a Profile → Restore from Backup</strong>.
|
||||
If you use iOS and encounter difficulties,
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> might help you.</p>
|
||||
</li>
|
||||
<li>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<p>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</p>
|
||||
|
||||
<h3 id="le-lancement-dun-client-web-delta-chat-est-il-prévu-">
|
||||
|
||||
@@ -978,10 +983,10 @@ end-to-end encrypted messages with your communication partners.</li>
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Experimental Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -994,33 +999,44 @@ you can try out features we are working on.</p>
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
@@ -1087,6 +1103,40 @@ except if your users’ devices require Google/Apple <a href="#instant-delivery"
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
|
||||
<h3 id="les-détails-techniques-mintéressent-pouvez-vous-men-dire-plus-">
|
||||
|
||||
|
||||
@@ -1095,9 +1145,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Consultez les <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">standards utilisés dans Delta Chat</a>.</li>
|
||||
</ul>
|
||||
<p>Consultez les <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">standards utilisés dans Delta Chat</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1336,6 +1384,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1554,47 +1628,38 @@ ordered chronologically:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>L’association <a href="https://opentechfund.org">Open Technology Fund</a> nous a octroyé une première subvention en 2018/2019 (de 200.000$ environ), grâce à laquelle nous avons pu apporter des améliorations majeures à l’application Android et publier une première version Beta de l’application de bureau. Elle nous a aussi permis d’ancrer notre recherche UX de développement de fonctionnalités dans des contextes de droits humains. <br />
|
||||
À ce sujet, vous pouvez consulter notre rapport en anglais <a href="https://delta.chat/en/2019-07-19-uxreport">“Needfinding and UX report”</a>.
|
||||
La seconde subvention de 2019/2020 (environ 300.000$) nous a permis de publier des version iOS de Delta Chat, de convertir notre bibliothèque principale en Rust et de créer de nouvelles fonctionnalités pour toutes les plateformes.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 we successfully completed the OTF-funded
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure Chatmail project</a>,
|
||||
allowing us to introduce guaranteed encryption,
|
||||
creating a <a href="https://delta.chat/chatmail">chatmail server network</a>
|
||||
and providing “instant onboarding” in all apps released from April 2024 on.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Nous recevons parfois des dons ponctuels de la part de personnes privées.
|
||||
|
||||
@@ -6,6 +6,10 @@ a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a[href^='http']::after {
|
||||
content: " ↗";
|
||||
}
|
||||
|
||||
h2, h3, h4 {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<li><a href="#what-do-the-ticks-shown-beside-outgoing-messages-mean">What do the ticks shown beside outgoing messages mean?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
<li><a href="#delold">What happens if I turn on “Delete old messages from device”?</a></li>
|
||||
<li><a href="#delold">What happens if I turn on “Delete Messages from Device”?</a></li>
|
||||
<li><a href="#remove-account">How can I delete my chat profile?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#i-have-deleted-myself-by-accident">I have deleted myself by accident.</a></li>
|
||||
<li><a href="#i-do-not-want-to-receive-the-messages-of-a-group-any-longer">I do not want to receive the messages of a group any longer.</a></li>
|
||||
<li><a href="#cloning-a-group">Cloning a group</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#advanced">Advanced</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#experiments">Experimental Features</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#im-interested-in-the-technical-details-can-you-tell-me-more">I’m interested in the technical details. Can you tell me more?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
|
||||
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
|
||||
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
|
||||
@@ -184,7 +187,8 @@ If you add each other to <a href="#groups">groups</a>, end-to-end encryption wil
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -222,15 +226,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -261,16 +260,11 @@ or to <strong>Switch Profiles</strong>.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Anda dapat menambahkan gambar profil di pengaturan Anda. Jika Anda menulis ke kontak Anda
|
||||
atau menambahkannya melalui kode QR, mereka secara otomatis melihatnya sebagai gambar profil Anda.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Untuk alasan kerahasiaan, tidak ada satupun yang dapat melihat Foto Profil anda hingga anda menulis
|
||||
<p>Anda dapat menambahkan gambar profil di pengaturan Anda. Jika Anda menulis ke kontak Anda
|
||||
atau menambahkannya melalui kode QR, mereka secara otomatis melihatnya sebagai gambar profil Anda.</p>
|
||||
|
||||
<p>Untuk alasan kerahasiaan, tidak ada satupun yang dapat melihat Foto Profil anda hingga anda menulis
|
||||
sebuah pesan kepada mereka.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -304,7 +298,8 @@ they will see it when they view your contact details.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Archive chats</strong> if you do not want to see them in your chat list any longer.
|
||||
Archived chats remain accessible above the chat list or via search.</p>
|
||||
They remain accessible above the chat list or via search
|
||||
and are marked by <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Archived</b></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When an archived chat gets a new message, unless muted, it will <strong>pop out of the archive</strong> and back into your chat list.
|
||||
@@ -339,7 +334,7 @@ By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../g
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
<p>Finally, you can also use “Saved Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
@@ -376,22 +371,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -456,19 +447,18 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
<h3 id="delold">
|
||||
|
||||
|
||||
What happens if I turn on “Delete old messages from device”? <a href="#delold" class="anchor"></a>
|
||||
What happens if I turn on “Delete Messages from Device”? <a href="#delold" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>If you want to save storage on your device, you can choose to delete old
|
||||
messages automatically.</li>
|
||||
<li>To turn it on, go to “delete old messages from device” in the “Chats & Media”
|
||||
settings. You can set a timeframe between “after an hour” and “after a year”;
|
||||
<p>If you want to save storage on your device, you can choose to delete old
|
||||
messages automatically.</p>
|
||||
|
||||
<p>To turn it on, go to <strong>Settings → Chats → Delete Message from Device</strong>.
|
||||
You can set a timeframe between “after an hour” and “after a year”;
|
||||
this way, <em>all</em> messages will be deleted from your device as soon as they are
|
||||
older than that.</li>
|
||||
</ul>
|
||||
older than that.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -516,9 +506,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Select <strong>New chat</strong> and then <strong>New group</strong> from the menu in the upper right corner or hit the corresponding button on Android/iOS.</li>
|
||||
<li>On the following screen, select the <strong>group members</strong> and define a <strong>group name</strong>. You can also select a <strong>group avatar</strong>.</li>
|
||||
<li>As soon as you write the <strong>first message</strong> in the group, all members are informed about the new group and can answer in the group (as long as you do not write a message in the group the group is invisible to the members).</li>
|
||||
<li>
|
||||
<p>Select <strong>New chat</strong> and then <strong>New group</strong> from the menu in the upper right corner or hit the corresponding button on Android/iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On the following screen, select the <strong>group members</strong> and define a <strong>group name</strong>. You can also select a <strong>group avatar</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As soon as you write the <strong>first message</strong> in the group, all members are informed about the new group and can answer in the group (as long as you do not write a message in the group the group is invisible to the members).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -529,11 +525,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -561,10 +556,8 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>As you’re no longer a group member, you cannot add yourself again.
|
||||
However, no problem, just ask any other group member in a normal chat to re-add you.</li>
|
||||
</ul>
|
||||
<p>As you’re no longer a group member, you cannot add yourself again.
|
||||
However, no problem, just ask any other group member in a normal chat to re-add you.</p>
|
||||
|
||||
<h3 id="i-do-not-want-to-receive-the-messages-of-a-group-any-longer">
|
||||
|
||||
@@ -575,15 +568,12 @@ However, no problem, just ask any other group member in a normal chat to re-add
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Either delete yourself from the member list or delete the whole chat.
|
||||
If you want to join the group again later on, ask another group member to add you again.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As an alternative, you can also “Mute” a group - doing so means you get all messages and
|
||||
can still write, but are no longer notified of any new messages.</p>
|
||||
</li>
|
||||
<li>Either delete yourself from the member list or delete the whole chat.
|
||||
If you want to join the group again later on, ask another group member to add you again.</li>
|
||||
</ul>
|
||||
|
||||
<p>As an alternative, you can also “Mute” a group - doing so means you get all messages and
|
||||
can still write, but are no longer notified of any new messages.</p>
|
||||
|
||||
<h3 id="cloning-a-group">
|
||||
|
||||
@@ -609,6 +599,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -897,7 +902,7 @@ One device is not needed for the other to work.</p>
|
||||
<p>Double-check both devices are in the <strong>same Wi-Fi or network</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On <strong>Windows</strong>, go to <strong>Control Panel / Network and Internet</strong>
|
||||
<p>On <strong>Windows</strong>, go to “Control Panel / Network and Internet”
|
||||
and make sure, <strong>Private Network</strong> is selected as “Network profile type”
|
||||
(after transfer, you can change back to the original value)</p>
|
||||
</li>
|
||||
@@ -949,22 +954,21 @@ try the <strong>manual transfer</strong> described below</p>
|
||||
<p>This method is only recommended if “Add Second Device” as described above does not work.</p>
|
||||
|
||||
<ul>
|
||||
<li>On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your
|
||||
<li>
|
||||
<p>On the old device, go to <strong>Settings → Chats → Export Backup</strong>. Enter your
|
||||
screen unlock PIN, pattern, or password. Then you can click on “Start
|
||||
Backup”. This saves the backup file to your device. Now you have to transfer
|
||||
it to the other device somehow.</li>
|
||||
<li>On the new device, in the “I already have a profile” menu,
|
||||
choose “restore from backup”. After import, your conversations, encryption
|
||||
keys, and media should be copied to the new device.
|
||||
<ul>
|
||||
<li><strong>If you use iOS:</strong> and you encounter difficulties, maybe
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> will
|
||||
help you.</li>
|
||||
</ul>
|
||||
it to the other device somehow.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On the new device, select <strong>I Already Have a Profile → Restore from Backup</strong>.
|
||||
If you use iOS and encounter difficulties,
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> might help you.</p>
|
||||
</li>
|
||||
<li>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<p>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</p>
|
||||
|
||||
<h3 id="are-there-any-plans-for-introducing-a-delta-chat-web-client">
|
||||
|
||||
@@ -993,10 +997,10 @@ or the AppImage for Linux. You can find them on
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Experimental Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -1009,33 +1013,44 @@ you can try out features we are working on.</p>
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
@@ -1102,6 +1117,40 @@ except if your users’ devices require Google/Apple <a href="#instant-delivery"
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
|
||||
<h3 id="im-interested-in-the-technical-details-can-you-tell-me-more">
|
||||
|
||||
|
||||
@@ -1110,9 +1159,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>See <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standards used in Delta Chat</a>.</li>
|
||||
</ul>
|
||||
<p>See <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standards used in Delta Chat</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1351,6 +1398,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1590,52 +1663,38 @@ ordered chronologically:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 we successfully completed the OTF-funded
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure Chatmail project</a>,
|
||||
allowing us to introduce guaranteed encryption,
|
||||
creating a <a href="https://delta.chat/chatmail">chatmail server network</a>
|
||||
and providing “instant onboarding” in all apps released from April 2024 on.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Terkadang kami menerima sumbangan satu kali dari perorangan.
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#mi-sono-cancellato-per-sbaglio">Mi sono cancellato per sbaglio.</a></li>
|
||||
<li><a href="#non-desidero-più-ricevere-i-messaggi-di-un-gruppo">Non desidero più ricevere i messaggi di un gruppo.</a></li>
|
||||
<li><a href="#clonazione-di-un-gruppo">Clonazione di un gruppo</a></li>
|
||||
<li><a href="#quanti-membri-possono-partecipare-a-un-singolo-gruppo">Quanti membri possono partecipare a un singolo gruppo?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">Apps in chat</a>
|
||||
@@ -54,19 +55,20 @@
|
||||
</li>
|
||||
<li><a href="#avanzato">Avanzato</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#experiments">Funzionalità Sperimentali</a></li>
|
||||
<li><a href="#relays">Cosa sono i ripetitori?</a></li>
|
||||
<li><a href="#posso-usare-un-indirizzo-email-classico-con-delta-chat">Posso usare un indirizzo email classico con Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">Come posso configurare un profilo chat con un indirizzo email classico come inoltro?</a></li>
|
||||
<li><a href="#vorrei-gestire-il-mio-server-per-delta-chat-cosa-mi-consigliate">Vorrei gestire il mio server per Delta Chat. Cosa mi consigliate?</a></li>
|
||||
<li><a href="#statssending">Che cosa significa “Invia statistiche agli sviluppatori di Delta Chat”?</a></li>
|
||||
<li><a href="#sono-interessato-ai-dettagli-tecnici-mi-puoi-dire-di-più">Sono interessato ai dettagli tecnici. Mi puoi dire di più?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#e2ee">Crittografia e Sicurezza</a>
|
||||
<ul>
|
||||
<li><a href="#quali-standards-vengono-utilizzati-per-la-crittografia-end-to-end">Quali standards vengono utilizzati per la crittografia end-to-end?</a></li>
|
||||
<li><a href="#whene2e">How can I know if messages are end-to-end encrypted?</a></li>
|
||||
<li><a href="#can-i-still-receive-or-send-messages-without-end-to-end-encryption">Can I still receive or send messages without end-to-end encryption?</a></li>
|
||||
<li><a href="#whene2e">Come posso sapere se i messaggi sono crittografati end-to-end?</a></li>
|
||||
<li><a href="#posso-ancora-ricevere-o-inviare-messaggi-senza-crittografia-end-to-end">Posso ancora ricevere o inviare messaggi senza crittografia end-to-end?</a></li>
|
||||
<li><a href="#e2eeguarantee">Cosa significa il segno di spunta verde nel profilo di un contatto?</a></li>
|
||||
<li><a href="#gli-allegati-immagini-file-audio-ecc-sono-crittografati-end-to-end">Gli allegati (immagini, file, audio, ecc.) sono crittografati end-to-end?</a></li>
|
||||
<li><a href="#openpgp-secure">OpenPGP è sicuro?</a></li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">I messaggi contrassegnati dall’icona della posta sono esposti su Internet?</a></li>
|
||||
<li><a href="#message-metadata">In che modo Delta Chat protegge i metadati nei messaggi?</a></li>
|
||||
<li><a href="#device-seizure">Come proteggere i metadati e contatti quando un dispositivo viene sequestrato?</a></li>
|
||||
<li><a href="#chi-vede-il-mio-indirizzo-ip">Chi vede il mio Indirizzo IP?</a></li>
|
||||
<li><a href="#sealedsender">Delta Chat supporta “Mittente Sigillato”?</a></li>
|
||||
<li><a href="#pfs">Delta Chat supporta Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#pqc">Delta Chat supporta la Crittografia Post-Quantistica?</a></li>
|
||||
@@ -108,7 +111,7 @@ disponibile per piattaforme mobili e desktop.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>Creazione istantanea di <strong>profili chat privati</strong>
|
||||
con <a href="https://chatmail.at/relays">relay di chat</a>
|
||||
con <a href="https://chatmail.at/relays">ripetitori di chat</a>
|
||||
sicuri e interoperabili che offrono l’invio di messaggi istantanei e notifiche push per dispositivi iOS e Android.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -184,7 +187,7 @@ Se vi aggiungete a vicenda a <a href="#groups">gruppi</a>, la crittografia end-t
|
||||
<p>Essendo un messenger privato,
|
||||
solo gli amici e i familiari con cui <a href="#howtoe2ee">condividi il tuo codice QR o il link di invito</a> possono scriverti.</p>
|
||||
|
||||
<p>I tuoi amici potrebbero condividere i tuoi contatti con altri amici; ciò apparirà come una <strong>richiesta</strong>.</p>
|
||||
<p>I tuoi amici potrebbero condividere i tuoi contatti con altri amici; ciò apparirà come una <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Richiesta</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -222,15 +225,10 @@ e potrà toccarla per iniziare a chattare con il primo contatto.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Sì. Immagini, video, files, messaggi vocali ecc. possono essere inviati utilizzando <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Allegato-</strong>
|
||||
<p>Sì. Immagini, video, files, messaggi vocali ecc. possono essere inviati utilizzando <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Allegato-</strong>
|
||||
o <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> pulsanti <strong>Messaggio Vocale</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Per le prestazioni, le immagini sono ottimizzate e inviate in dimensioni inferiori per impostazione predefinita, ma è possibile inviarle come “file” per preservare l’originale.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Per le prestazioni, le immagini sono ottimizzate e inviate in dimensioni inferiori per impostazione predefinita, ma è possibile inviarle come “file” per preservare l’originale.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -261,16 +259,11 @@ o <strong>Cambiare Profili</strong>.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Puoi aggiungere un’immagine del profilo nelle tue impostazioni. Se scrivi ai tuoi contatti
|
||||
<p>Puoi aggiungere un’immagine del profilo nelle tue impostazioni. Se scrivi ai tuoi contatti
|
||||
o li aggiungi tramite codice QR, la vedranno automaticamente come immagine del tuo profilo.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Per motivi di privacy, nessuno vede la tua immagine del profilo finché non scrivi un
|
||||
|
||||
<p>Per motivi di privacy, nessuno vede la tua immagine del profilo finché non scrivi un
|
||||
messaggio a loro.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -303,8 +296,7 @@ lo vedrà quando visualizzerà i tuoi dati di contatto.</p>
|
||||
<p><strong>Silenzia chat</strong> se non vuoi ricevere notifiche da queste. Le chat silenziate restano al loro posto e puoi anche fissare una chat silenziata.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Archivia chats</strong> se non vuoi più vederle nel tuo elenco chat.
|
||||
Le chat archiviate rimangono accessibili sopra l’elenco delle chat o tramite la ricerca.</p>
|
||||
<p><strong>Archivia chats</strong> se non vuoi più vederle nel tuo elenco chat. Le chat archiviate rimangono accessibili sopra l’elenco delle chat o tramite la ricerca.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Quando una chat archiviata riceve un nuovo messaggio, a meno che non sia silenziata, <strong>salterà fuori dall’archivio</strong> e tornerà nell’elenco delle chat.
|
||||
@@ -376,23 +368,19 @@ e anche gli altri non sempre vedranno che sei “online”.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>Un segno di spunta</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
significa che il messaggio è stato inviato correttamente al tuo fornitore.</p>
|
||||
<p><strong>Una spunta</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
significa che il messaggio è stato inviato correttamente al <a href="#relays">ripetitore</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Due spunte</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
significa che almeno il dispositivo di un destinatario
|
||||
ha segnalato di aver ricevuto il messaggio.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>I destinatari potrebbero aver disattivato le conferme di lettura,
|
||||
quindi anche se vedi solo un segno di spunta, il messaggio potrebbe essere stato letto.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Al contrario, due spunte non significano automaticamente
|
||||
che un essere umano abbia letto o compreso il messaggio ;)</p>
|
||||
<p><strong>Due spunte</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
indica che il tuo contatto ha letto il messaggio.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">gruppi</a> il secondo segno di spunta significa che almeno un membro ha segnalato di aver letto il messaggio.</p>
|
||||
|
||||
<p>Riceverai la seconda spunta solo se sia tu che uno dei destinatari che hanno letto il messaggio
|
||||
avete abilitato <strong>Impostazioni → Chat → Conferme di Lettura</strong>.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -461,14 +449,9 @@ i messaggi (comunque crittografati) potrebbero richiedere più tempo per essere
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Se si desidera risparmiare spazio sul dispositivo, è possibile scegliere di eliminare i vecchi
|
||||
messaggi automaticamente.</li>
|
||||
<li>Per attivarla, andare su “Elimina Messaggi dal Dispositivo” nelle impostazioni di “Chat e Media”.
|
||||
È possibile impostare un intervallo di tempo compreso tra “Dopo 1 ora” e “Dopo 1 anno”;
|
||||
in questo modo, <em>tutti</em> i messaggi saranno eliminati dal dispositivo non appena saranno
|
||||
più vecchi di quel periodo.</li>
|
||||
</ul>
|
||||
<p>Se si desidera risparmiare spazio sul dispositivo, è possibile scegliere di eliminare i vecchi messaggi automaticamente.</p>
|
||||
|
||||
<p>Per attivarla, andare su “Elimina Messaggi dal Dispositivo” nelle impostazioni di “Chat e Media”. È possibile impostare un intervallo di tempo compreso tra “Dopo 1 ora” e “Dopo 1 anno”; in questo modo, <em>tutti</em> i messaggi saranno eliminati dal dispositivo non appena saranno più vecchi di quel periodo.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -516,9 +499,15 @@ ed <a href="#edit">eliminare i propri messaggi</a> dai dispositivi di tutti i me
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Seleziona <strong>Nuova chat</strong> e poi <strong>Nuovo gruppo</strong> dal menu nell’angolo in alto a destra o premi il pulsante corrispondente su Android/iOS.</li>
|
||||
<li>Nella schermata successiva, seleziona i <strong>membri del gruppo</strong> e definisci un <strong>nome del gruppo</strong>. Puoi anche selezionare un <strong>avatar di gruppo</strong>.</li>
|
||||
<li>Non appena scrivi il <strong>primo messaggio</strong> nel gruppo, tutti i membri vengono informati del nuovo gruppo e possono rispondere nel gruppo (finché non scrivi un messaggio nel gruppo il gruppo è invisibile ai membri).</li>
|
||||
<li>
|
||||
<p>Seleziona <strong>Nuova chat</strong> e poi <strong>Nuovo gruppo</strong> dal menu nell’angolo in alto a destra o premi il pulsante corrispondente su Android/iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Nella schermata successiva, seleziona i <strong>membri del gruppo</strong> e definisci un <strong>nome del gruppo</strong>. Puoi anche selezionare un <strong>avatar di gruppo</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Non appena scrivi il <strong>primo messaggio</strong> nel gruppo, tutti i membri vengono informati del nuovo gruppo e possono rispondere nel gruppo (finché non scrivi un messaggio nel gruppo il gruppo è invisibile ai membri).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -529,11 +518,10 @@ ed <a href="#edit">eliminare i propri messaggi</a> dai dispositivi di tutti i me
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Tutti i membri del gruppo hanno gli <strong>stessi diritti</strong>.
|
||||
Per questo motivo, tutti possono eliminare qualsiasi membro o aggiungerne di nuovi.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Tutti i membri del gruppo hanno gli <strong>stessi diritti</strong>.
|
||||
Per questo motivo, tutti possono eliminare qualsiasi membro o aggiungerne di nuovi.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Per <strong>aggiungere o eliminare membri</strong>, tocca il nome del gruppo nella chat e seleziona il membro da aggiungere o rimuovere.</p>
|
||||
</li>
|
||||
@@ -561,10 +549,8 @@ Tuttavia, poiché i gruppi sono <a href="#groups">destinati a persone fidate</a>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Poiché non sei più un membro del gruppo, non puoi aggiungerti di nuovo.
|
||||
Tuttavia, nessun problema, chiedi a qualsiasi altro membro del gruppo in una normale chat di aggiungerti nuovamente.</li>
|
||||
</ul>
|
||||
<p>Poiché non sei più un membro del gruppo, non puoi aggiungerti di nuovo.
|
||||
Tuttavia, nessun problema, chiedi a qualsiasi altro membro del gruppo in una normale chat di aggiungerti nuovamente.</p>
|
||||
|
||||
<h3 id="non-desidero-più-ricevere-i-messaggi-di-un-gruppo">
|
||||
|
||||
@@ -575,15 +561,12 @@ Tuttavia, nessun problema, chiedi a qualsiasi altro membro del gruppo in una nor
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Elimina te stesso dall’elenco dei membri o elimina l’intera chat.
|
||||
Se vuoi unirti di nuovo al gruppo in un secondo momento, chiedi a un altro membro del gruppo di aggiungerti di nuovo.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In alternativa, puoi anche “Silenziare” un gruppo - così facendo riceverai tutti i messaggi e
|
||||
puoi ancora scrivere, ma non viene più notificato alcun nuovo messaggio.</p>
|
||||
</li>
|
||||
<li>Elimina te stesso dall’elenco dei membri o elimina l’intera chat.
|
||||
Se vuoi unirti di nuovo al gruppo in un secondo momento, chiedi a un altro membro del gruppo di aggiungerti di nuovo.</li>
|
||||
</ul>
|
||||
|
||||
<p>In alternativa, puoi anche “Silenziare” un gruppo - così facendo riceverai tutti i messaggi e
|
||||
puoi ancora scrivere, ma non viene più notificato alcun nuovo messaggio.</p>
|
||||
|
||||
<h3 id="clonazione-di-un-gruppo">
|
||||
|
||||
@@ -609,6 +592,21 @@ oppure fai clic con il pulsante destro del mouse sul gruppo nell’elenco delle
|
||||
<p>Il nuovo gruppo è <strong>completamente indipendente</strong> dall’originale,
|
||||
che continua a funzionare come prima.</p>
|
||||
|
||||
<h3 id="quanti-membri-possono-partecipare-a-un-singolo-gruppo">
|
||||
|
||||
|
||||
Quanti membri possono partecipare a un singolo gruppo? <a href="#quanti-membri-possono-partecipare-a-un-singolo-gruppo" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Non esiste un limite tecnico preciso,
|
||||
ma non è consigliabile superare i 150.</p>
|
||||
|
||||
<p>Man mano che i gruppi diventano più grandi, possono diventare socialmente instabili e potrebbero aver bisogno di una gerarchia,
|
||||
dove Delta Chat è un servizio di messaggistica privato per chattare con <a href="#groups">uguali diritti</a>.
|
||||
Vedi <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">numero di Dunbar</a> per ulteriori approfondimenti.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -655,7 +653,7 @@ copie sui dispositivi dei tuoi interlocutori. A parte questo, è completamente
|
||||
isolata da Internet.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>La privacy offerta da un’app di chat è la privacy della tua chat: finché
|
||||
<p>La riservatezza offerta da un’app di chat è la riservatezza della tua chat: finché
|
||||
ti fidi delle persone con cui chatti, puoi fidarti anche dell’app di chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -673,19 +671,19 @@ ti fidi delle persone con cui chatti, puoi fidarti anche dell’app di chat.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In-chat apps are zip files with <code class="language-plaintext highlighter-rouge">.xdc</code> extension containing html, css, and javascript code.</p>
|
||||
<p>Le apps in-chat sono file zip con estensione <code class="language-plaintext highlighter-rouge">.xdc</code> contenenti codice HTML, CSS e JavaScript.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>You can extend the <a href="https://github.com/webxdc/hello">Hello World example app</a>
|
||||
to get started.</p>
|
||||
<p>Puoi estendere l’<a href="https://github.com/webxdc/hello">app di esempio Hello World</a>
|
||||
per iniziare.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>All else you need to know is written in the
|
||||
<a href="https://webxdc.org/docs">Webxdc documentation</a>.</p>
|
||||
<p>Tutto il resto che devi sapere è scritto nella
|
||||
<a href="https://webxdc.org/docs">Documentazione di Webxdc</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you have question, you can ask others with experience
|
||||
in the <a href="https://support.delta.chat/c/webxdc/20">Delta Chat Forum</a>.</p>
|
||||
<p>Se hai domande, puoi chiedere ad altri utenti esperti
|
||||
nel <a href="https://support.delta.chat/c/webxdc/20">Forum Chat Delta</a>.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -732,9 +730,9 @@ invece del codice proprietario di Google sul telefono.</p>
|
||||
|
||||
<p>Sì, Delta Chat utilizza automaticamente le notifiche push per i profili <a href="https://delta.chat/chatmail">chatmail</a>.
|
||||
E no, non esiste alcuna alternativa sui telefoni Apple per ottenere la consegna dei messaggi istantanei
|
||||
perché i dispositivi Apple non consentono a Delta Chat di recuperare i dati in background.
|
||||
perché i dispositivi Apple non consentono a Delta Chat di recuperare i dati in secondo piano.
|
||||
Le notifiche push vengono attivate automaticamente per gli utenti iOS perché
|
||||
<a href="#privacy-notifications">Sistema di notifiche push che tutela la privacy di Delta Chat</a>
|
||||
<a href="#privacy-notifications">Sistema di notifiche push che tutela la riservatezza di Delta Chat</a>
|
||||
non espone ad Apple i dati che non possiede già.</p>
|
||||
|
||||
<h3 id="android-push">
|
||||
@@ -745,8 +743,8 @@ non espone ad Apple i dati che non possiede già.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If a “Push Service” is available, Delta Chat enables Push Notifications
|
||||
to achieve instant message delivery for all chatmail users.</p>
|
||||
<p>Se è disponibile un “Servizio Push”, Delta Chat abilita le Notifiche Push
|
||||
per garantire la consegna istantanea dei messaggi a tutti gli utenti chatmail.</p>
|
||||
|
||||
<p>Nelle impostazioni “Notifiche” di Delta Chat per “Consegna istantanea”
|
||||
puoi modificare le seguenti impostazioni che interessano tutti i profili chat:</p>
|
||||
@@ -781,9 +779,9 @@ che a volte può essere “minimizzato” con i recenti telefoni Android.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Delta Chat Push Notification support avoids leakage of private information.
|
||||
It does not leak profile data, IP address or message content (not even encrypted)
|
||||
to any system involved in the delivery of Push Notifications.</p>
|
||||
<p>Il supporto alle Notifiche Push di Delta Chat impedisce la fuga di informazioni private.
|
||||
Non divulga dati del profilo, indirizzo IP o contenuto dei messaggi (nemmeno crittografati)
|
||||
a nessun sistema coinvolto nella trasmissione delle Notifiche Push.</p>
|
||||
|
||||
<p>Ecco come le app Delta Chat eseguono l’invio delle Notifiche Push:</p>
|
||||
|
||||
@@ -792,21 +790,21 @@ to any system involved in the delivery of Push Notifications.</p>
|
||||
<p>Un’app Delta Chat ottiene un “token del dispositivo” localmente, lo crittografa e lo memorizza sul server <a href="https://delta.chat/chatmail">chatmail</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When a <a href="https://delta.chat/chatmail">chatmail</a> server receives a message for a Delta Chat user
|
||||
it forwards the encrypted device token to the central Delta Chat notification proxy.</p>
|
||||
<p>Quando un server <a href="https://delta.chat/chatmail">chatmail</a> riceve un messaggio per un utente Delta Chat
|
||||
inoltra il token del dispositivo crittografato al proxy di notifica centrale di Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Delta Chat notification proxy decrypts the device token
|
||||
and forwards it to the respective Push service (Apple, Google, etc.),
|
||||
without ever knowing the IP or profile data of Delta Chat users.</p>
|
||||
<p>Il proxy di notifica centrale di Delta Chat decripta il token del dispositivo
|
||||
e lo inoltra al rispettivo servizio Push (Apple, Google, ecc.),
|
||||
senza mai conoscere l’IP o i dati del profilo degli utenti di Delta Chat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The central Push Service (Apple, Google, etc.)
|
||||
wakes up the Delta Chat app on your device
|
||||
to check for new messages in the background.
|
||||
It does not know about the profile data of the device it wakes up.
|
||||
The central Apple/Google Push services never see any profile data (sender or receiver)
|
||||
and also never see any message content (also not in encrypted forms).</p>
|
||||
<p>Il Servizio Push centrale (Apple, Google, ecc.)
|
||||
attiva l’app Delta Chat sul tuo dispositivo
|
||||
per verificare la presenza di nuovi messaggi in background.
|
||||
Non conosce i dati del profilo del dispositivo che attiva.
|
||||
I servizi Push centrali di Apple/Google non vedono mai alcun dato del profilo (mittente o destinatario)
|
||||
e non vedono mai il contenuto dei messaggi (nemmeno in formato crittografato).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -814,10 +812,10 @@ and also never see any message content (also not in encrypted forms).</p>
|
||||
e si dimentica dei gettoni del dispositivo non appena Apple/Google/ecc li elabora,
|
||||
di solito nel giro di pochi millisecondi.</p>
|
||||
|
||||
<p>Note that the device token is encrypted between apps and notification proxy
|
||||
but it is not signed.
|
||||
The notification proxy thus never sees profile data, IP-addresses or
|
||||
any cryptographic identity information associated with a user’s device (token).</p>
|
||||
<p>Si noti che il token del dispositivo è crittografato tra le apps e il proxy di notifica
|
||||
ma non è firmato.
|
||||
Il proxy di notifica, quindi, non vede mai i dati del profilo, gli indirizzi IP o
|
||||
alcune informazioni crittografiche sull’identità associate al dispositivo di un utente (token).</p>
|
||||
|
||||
<p>Come risultato di questo disegno complessivo sulla riservatezza, anche il sequestro di un server chatmail,
|
||||
o il sequestro totale del proxy di notifica centrale di Delta Chat
|
||||
@@ -836,10 +834,10 @@ ma vogliamo che gli utenti sperimentino in modo affidabile la “consegna istant
|
||||
come sperimentano dalle app Whatsapp, Signal o Telegram,
|
||||
senza porre domande in anticipo, più adatte a utenti esperti o sviluppatori.</p>
|
||||
|
||||
<p>Note that Delta Chat has a <a href="#privacy-notifications">small and privacy-preserving Push Notification system</a>
|
||||
that achieves “instant delivery” of messages for all chatmail servers
|
||||
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
|
||||
Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
<p>Tieni presente che Delta Chat ha un <a href="#privacy-notifications">sistema di notifiche push piccolo e rispettoso della riservatezza</a>
|
||||
che garantisce la “consegna istantanea” dei messaggi a tutti i server di chatmail
|
||||
incluso un potenziale <a href="https://delta.chat/chatmail#selfhosted">che potresti configurare autonomamente senza il nostro permesso</a>.
|
||||
Benvenuti nella potenza della rete di inoltro interoperabile di chatmail :)</p>
|
||||
|
||||
<h2 id="multiclient">
|
||||
|
||||
@@ -896,7 +894,7 @@ Un dispositivo non è necessario perché l’altro funzioni.</p>
|
||||
<p>Verificare che entrambi i dispositivi siano nella <strong>stessa rete o Wi-Fi</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Su <strong>Windows</strong>, vai su <strong>Pannello di controllo / Rete e Internet</strong>
|
||||
<p>Su <strong>Windows</strong>, vai su “Pannello di controllo / Rete e Internet”
|
||||
e assicurati che <strong>Rete Privata</strong> sia selezionata come “Tipo di profilo di rete”
|
||||
(dopo il trasferimento è possibile ripristinare il valore originale)</p>
|
||||
</li>
|
||||
@@ -948,19 +946,16 @@ provate il <strong>trasferimento manuale</strong> descritto di seguito</p>
|
||||
<p>Questo metodo è consigliato solo se “Aggiungi Secondo Dispositivo” come descritto sopra non funziona.</p>
|
||||
|
||||
<ul>
|
||||
<li>Sul vecchio dispositivo, vai su “Impostazioni -> Chat e Media -> Backup Chat su Memoria Esterna”. Inserisci il tuo
|
||||
PIN, sequenza o password di sblocco dello schermo. Quindi puoi fare clic su “Avvia
|
||||
Backup”. Questo salva il file di backup sul tuo dispositivo. Ora devi trasferirlo
|
||||
in qualche modo all’altro dispositivo.</li>
|
||||
<li>Sul nuovo dispositivo, nella schermata di accesso, invece di accedere al tuo profilo
|
||||
e-mail, seleziona “Importa backup”. Dopo l’importazione, le tue conversazioni, la crittografia
|
||||
i tasti e i supporti devono essere copiati sul nuovo dispositivo.</li>
|
||||
<li><strong>Se usi iOS:</strong> e incontri difficoltà, forse
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">questa guida</a>
|
||||
Aiutarti.</li>
|
||||
<li>Ora sei sincronizzato e puoi utilizzare entrambi i dispositivi per inviare e ricevere
|
||||
messaggi crittografati end-to-end con i tuoi partner di comunicazione.</li>
|
||||
<li>
|
||||
<p>Sul vecchio dispositivo, vai su <strong>Impostazioni → Chat e Media → Backup Chat su Memoria Esterna</strong>. Inserisci il tuo PIN, sequenza o password di sblocco dello schermo. Quindi puoi fare clic su “Avvia Backup”. Questo salva il file di backup sul tuo dispositivo. Ora devi trasferirlo in qualche modo all’altro dispositivo.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Sul nuovo dispositivo, nella schermata di accesso, invece di accedere al tuo profilo e-mail, seleziona <strong>Importa backup</strong>. Dopo l’importazione, le tue conversazioni, la crittografia i tasti e i supporti devono essere copiati sul nuovo dispositivo.
|
||||
Se usi iOS: e incontri difficoltà, forse <a href="https://support.delta.chat/t/import-backup-to-ios/1628">questa guida</a> Aiutarti.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Ora sei sincronizzato e puoi utilizzare entrambi i dispositivi per inviare e ricevere messaggi crittografati end-to-end con i tuoi partner di comunicazione.</p>
|
||||
|
||||
<h3 id="sono-previsti-piani-per-lintroduzione-di-un-client-web-delta-chat">
|
||||
|
||||
@@ -989,97 +984,106 @@ o l’AppImage per Linux. Le trovi su
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Funzionalità Sperimentali <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>At <strong>Settings → Advanced → Experimental Features</strong>
|
||||
you can try out features we are working on.</p>
|
||||
<p>In <strong>Impostazioni → Avanzate → Funzionalità Sperimentali</strong>
|
||||
puoi provare le funzionalità su cui stiamo lavorando.</p>
|
||||
|
||||
<p>The features may be <strong>unstable</strong> and may be <strong>changed or removed</strong>.</p>
|
||||
<p>Le funzionalità potrebbero essere <strong>instabili</strong> e potrebbero essere <strong>modificate o rimosse</strong>.</p>
|
||||
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
<p>Puoi trovare maggiori informazioni
|
||||
e lasciare un riscontro nel <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
Cosa sono i ripetitori? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>I ripetitori vengono utilizzati per conservare temporaneamente i messaggi nel caso in cui il dispositivo sia offline.
|
||||
I ripetitori sono server economici e poco intelligenti,
|
||||
che non memorizzano dati come stati di gruppo, nome o avatar,
|
||||
tutti dati che esistono solo sul dispositivo.
|
||||
I ripetitori sono gestiti da gruppi e persone diverse.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>Per impostazione predefinita, dopo l’installazione, un ripetitore viene <strong>configurato automaticamente</strong>,
|
||||
quindi non è necessario preoccuparsene.
|
||||
Tuttavia, se lo si desidera,
|
||||
è possibile configurare i ripetitori in <strong>Impostazioni → Avanzate → Ripetitori</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>Puoi <strong>aggiungere</strong> un ripetitore scansionando il suo codice QR;<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> ne mostra alcuni noti.
|
||||
Se hai più ripetitori, riceverai messaggi su tutti.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>L’opzione <strong>predefinita</strong> definisce quella a cui i tuoi partner di chat invieranno messaggi futuri.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Se <strong>rimuovi</strong> un ripetitore,
|
||||
assicurati che un altro ripetitore predefinito sia stato utilizzato per un periodo di tempo sufficiente.
|
||||
In caso contrario, i messaggi dei tuoi interlocutori di chat non ti arriveranno.In caso di dubbio, rimuovilo in seguito.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
<p>Per maggiori dettagli e future possibilità di utilizzo dei ripetitori,
|
||||
potete seguire le discussioni nel <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
<h3 id="posso-usare-un-indirizzo-email-classico-con-delta-chat">
|
||||
|
||||
|
||||
Can I use a classic email address with Delta Chat? <a href="#can-i-use-a-classic-email-address-with-delta-chat" class="anchor"></a>
|
||||
Posso usare un indirizzo email classico con Delta Chat? <a href="#posso-usare-un-indirizzo-email-classico-con-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes, but only if the email address is used exclusively by <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
|
||||
<p>Sì, ma solo se l’indirizzo e-mail viene utilizzato esclusivamente dai <a href="https://chatmail.at/clients">client di chatmail</a>.</p>
|
||||
|
||||
<p>It is not supported to share usage of an email address with non-chatmail apps or web-based mailers,
|
||||
for the following reasons:</p>
|
||||
<p>Non è supportata la condivisione dell’utilizzo di un indirizzo email con apps diverse dalle chatmail o con servizi di posta basati sul web,
|
||||
per i seguenti motivi:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Non-chatmail apps are largely not accomplishing automatic end-to-end email encryption for their users,
|
||||
while chatmail apps and relays pervasively enforce end-to-end encryption and security standards.</p>
|
||||
<p>Le apps non-chatmail non implementano in gran parte la crittografia end-to-end automatica delle email per i propri utenti,
|
||||
mentre le app e i ripetitori di chatmail applicano in modo pervasivo la crittografia end-to-end e gli standard di sicurezza.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Non-chatmail apps use email servers as a long-term message archive
|
||||
while chatmail clients use email servers for ephemeral instant message relay.</p>
|
||||
<p>Le apps non-chatmail utilizzano i server email come archivio di messaggi a lungo termine,
|
||||
mentre i client di chatmail utilizzano i server email per l’inoltro temporaneo di messaggi istantanei.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Supporting the full variety of classic email setups
|
||||
would require considerable development and maintenance efforts,
|
||||
and complicate making chatmail-based messaging more resilient, reliable and fast.</p>
|
||||
<p>Supportare l’intera gamma di configurazioni email classiche
|
||||
richiederebbe notevoli sforzi di sviluppo e manutenzione
|
||||
e renderebbe più complicato rendere la messaggistica basata su chatmail più resiliente, affidabile e veloce.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="classic-email">
|
||||
|
||||
|
||||
How can I configure a chat profile with a classic email address as relay? <a href="#classic-email" class="anchor"></a>
|
||||
Come posso configurare un profilo chat con un indirizzo email classico come inoltro? <a href="#classic-email" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>First off, <strong>please do not use the same classic email address also from non-chatmail classic email apps</strong>
|
||||
unless you are prepared to deal with encrypted messages in the inbox,
|
||||
double notifications, accidentally deleted emails or similar annoyances.</p>
|
||||
<p>Innanzitutto, <strong>ti preghiamo di non utilizzare lo stesso indirizzo email classico anche da apps email classiche diverse da chatmail</strong>
|
||||
a meno che tu non sia disposto ad affrontare messaggi crittografati nella posta in arrivo,
|
||||
doppie notifiche, email eliminate accidentalmente o fastidi simili.</p>
|
||||
|
||||
<p>You can configure a email address for chatting at <strong>New Profile → Use Other Server → Use Classic Mail as Relay</strong>.
|
||||
Note that classic email providers will generally not support <a href="#instant-delivery">Push Notifications</a>
|
||||
and have other limitations, see <a href="https://providers.delta.chat">Provider Overview</a>.
|
||||
Chatmail uses the default INBOX for relay; ensure the provider setup does too.
|
||||
A chat profile using a classic email address allows to to send and receive unencrypted messages.
|
||||
These messages, and the chats they appear in, are marked with an email icon
|
||||
<p>Puoi configurare un indirizzo email per la chat in <strong>Crea Nuovo Profilo → Usa Altro Server → Accesso E-Mail Classico come inoltro</strong>.
|
||||
Tieni presente che i fornitori email classici generalmente non supportano le <a href="#instant-delivery">Notifiche Push</a>
|
||||
e presentano altre limitazioni, consulta <a href="https://providers.delta.chat">Panoramica Fornitori</a>.
|
||||
Chatmail utilizza la POSTA IN ARRIVO predefinita per gli inoltri; assicurati che anche la configurazione del fornitore la faccia.
|
||||
Un profilo chat che utilizza un indirizzo email classico consente di inviare e ricevere messaggi non crittografati.
|
||||
Questi messaggi e le chat in cui compaiono sono contrassegnati da un’icona email.
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
|
||||
|
||||
<h3 id="vorrei-gestire-il-mio-server-per-delta-chat-cosa-mi-consigliate">
|
||||
@@ -1090,13 +1094,47 @@ These messages, and the chats they appear in, are marked with an email icon
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Any well behaving email server setup will do fine
|
||||
except if your users’ devices require Google/Apple <a href="#instant-delivery">Push Notifications</a> to work properly.</p>
|
||||
<p>Qualsiasi configurazione di server email funzionante andrà bene,
|
||||
a meno che i dispositivi dei tuoi utenti non richiedano le <a href="#instant-delivery">Notifiche Push</a> di Google/Apple per funzionare correttamente.</p>
|
||||
|
||||
<p>We generally recommend to <a href="https://chatmail.at/doc/relay/getting_started.html">set up a chatmail relay</a>.
|
||||
<a href="https://chatmail.at">Chatmail</a> is a community-driven project that encompasses both the setup of relays
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
<p>Generalmente consigliamo di <a href="https://chatmail.at/doc/relay/getting_started.html">configurare un ripetitore di chatmail</a>.
|
||||
<a href="https://chatmail.at">Chatmail</a> è un progetto guidato dalla comunità che comprende sia la configurazione dei ripetitori
|
||||
sia <a href="https://github.com/chatmail/core">gli sviluppi principali in Rust</a>
|
||||
che alimentano i <a href="https://chatmail.at/clients">client di chatmail</a>, di cui Delta Chat è il più noto.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
Che cosa significa “Invia statistiche agli sviluppatori di Delta Chat”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Vorremmo migliorare Delta Chat con il tuo aiuto,
|
||||
ecco perché Delta Chat per Android ti chiede se desideri
|
||||
inviare statistiche di utilizzo anonime.</p>
|
||||
|
||||
<p>Puoi attivarla e disattivarla da
|
||||
<strong>Impostazioni → Avanzate → Invia statistiche agli sviluppatori di Delta Chat</strong>.</p>
|
||||
|
||||
<p>Quando lo attivi,
|
||||
statistiche settimanali verranno inviate automaticamente a un bot.</p>
|
||||
|
||||
<p>Siamo interessati, ad esempio, a statistiche come:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Quanti contatti vengono introdotti tramite la scansione personale di un codice QR?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Quali versioni di Delta Chat vengono utilizzate?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Quali errori si verificano per gli utenti?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p><em>Non</em> raccoglieremo alcuna informazione personale identificabile su di te.</p>
|
||||
|
||||
<h3 id="sono-interessato-ai-dettagli-tecnici-mi-puoi-dire-di-più">
|
||||
|
||||
@@ -1106,9 +1144,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Vedi <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standard usati in Delta Chat</a>.</li>
|
||||
</ul>
|
||||
<p>Vedi <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standard usati in Delta Chat</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1150,7 +1186,7 @@ consente ai destinatari di utilizzare la crittografia end-to-end con il contatto
|
||||
<h3 id="whene2e">
|
||||
|
||||
|
||||
How can I know if messages are end-to-end encrypted? <a href="#whene2e" class="anchor"></a>
|
||||
Come posso sapere se i messaggi sono crittografati end-to-end? <a href="#whene2e" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -1159,10 +1195,10 @@ consente ai destinatari di utilizzare la crittografia end-to-end con il contatto
|
||||
Dalla serie di rilasci della Versione 2 di Delta Chat (Luglio 2025)
|
||||
non ci sono più lucchetti o marcatori simili, sui messaggi crittografati end-to-end.</p>
|
||||
|
||||
<h3 id="can-i-still-receive-or-send-messages-without-end-to-end-encryption">
|
||||
<h3 id="posso-ancora-ricevere-o-inviare-messaggi-senza-crittografia-end-to-end">
|
||||
|
||||
|
||||
Can I still receive or send messages without end-to-end encryption? <a href="#can-i-still-receive-or-send-messages-without-end-to-end-encryption" class="anchor"></a>
|
||||
Posso ancora ricevere o inviare messaggi senza crittografia end-to-end? <a href="#posso-ancora-ricevere-o-inviare-messaggi-senza-crittografia-end-to-end" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -1170,9 +1206,9 @@ non ci sono più lucchetti o marcatori simili, sui messaggi crittografati end-to
|
||||
<p>Se si utilizzano i <a href="https://chatmail.at/relays">relays di chatmail</a>,
|
||||
è impossibile ricevere o inviare messaggi senza la crittografia end-to-end.</p>
|
||||
|
||||
<p>If you instead use a <a href="#classic-email">classic email server</a>,
|
||||
you can send and receive messages with or without end-to-end encryption.
|
||||
Messages lacking end-to-end encryption are marked with an email icon
|
||||
<p>Se invece utilizzi un <a href="#classic-email">server email classico</a>,
|
||||
puoi inviare e ricevere messaggi con o senza crittografia end-to-end.
|
||||
I messaggi privi di crittografia end-to-end sono contrassegnati dall’icona di un’e-mail
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
|
||||
|
||||
<h3 id="e2eeguarantee">
|
||||
@@ -1247,10 +1283,10 @@ per migliorare ulteriormente le caratteristiche di sicurezza implementando il
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Yes, we are following efforts like <a href="https://en.wikipedia.org/wiki/Messaging_Layer_Security">MLS</a>
|
||||
but adopting them would mean breaking end-to-end encryption interoperability.
|
||||
So it would not be a light decision to take
|
||||
and there must be tangible improvements for users.</p>
|
||||
<p>Sì, stiamo seguendo iniziative come <a href="https://en.wikipedia.org/wiki/Messaging_Layer_Security">MLS</a>
|
||||
ma adottarle significherebbe interrompere l’interoperabilità della crittografia end-to-end.
|
||||
Quindi non sarebbe una decisione facile da prendere
|
||||
e devono esserci miglioramenti tangibili per gli utenti.</p>
|
||||
|
||||
<p>Delta Chat adotta un approccio olistico di “sicurezza utilizzabile”.
|
||||
e lavora anche con una vasta gamma di gruppi di attivisti
|
||||
@@ -1288,21 +1324,21 @@ come definito dalla specifica Autocrypt Level 1.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If you are sending or receiving email messages without end-to-end encryption (using a classic email server),
|
||||
they are still protected from cell or cable companies who can not read or modify your email messages.
|
||||
But both your and your recipient’s email providers
|
||||
may read, analyze or modify your messages, including any attachments.</p>
|
||||
<p>Se invii o ricevi messaggi email senza crittografia end-to-end (utilizzando un server email classico),
|
||||
questi sono comunque protetti dalle compagnie telefoniche o via cavo che non possono leggere o modificare i tuoi messaggi.
|
||||
Tuttavia, sia il tuo fornitore email che quello del destinatario
|
||||
potrebbero leggere, analizzare o modificare i tuoi messaggi, inclusi eventuali allegati.</p>
|
||||
|
||||
<p>Delta Chat by default uses strict
|
||||
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
|
||||
which secures connections between your device and your email provider.
|
||||
All of Delta Chat’s TLS-handling has been independently <a href="#security-audits">security audited</a>.
|
||||
Moreover, the connection between your and the recipient’s email provider
|
||||
will typically be transport-encrypted as well.
|
||||
If the involved email servers support <a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a>
|
||||
then transport encryption will be enforced between email providers
|
||||
in which case Delta Chat communications will never be exposed in cleartext to the Internet
|
||||
even if the message was not end-to-end encrypted.</p>
|
||||
<p>Delta Chat utilizza per impostazione predefinita una rigorosa
|
||||
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">crittografia TLS</a>
|
||||
che protegge le connessioni tra il tuo dispositivo e il tuo fornitore email.
|
||||
Tutta la gestione TLS di Delta Chat è stata sottoposta a <a href="#security-audits">verifica di sicurezza</a> indipendenti.
|
||||
Inoltre, anche la connessione tra il tuo fornitore email e quello del destinatario
|
||||
sarà in genere crittografata tramite trasporto.
|
||||
Se i server email coinvolti supportano <a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a>
|
||||
la crittografia tramite trasporto verrà applicata tra i fornitori email,
|
||||
nel qual caso le comunicazioni di Delta Chat non saranno mai esposte in chiaro su Internet,
|
||||
anche se il messaggio non è stato crittografato end-to-end.</p>
|
||||
|
||||
<h3 id="message-metadata">
|
||||
|
||||
@@ -1316,14 +1352,14 @@ even if the message was not end-to-end encrypted.</p>
|
||||
le apps Delta Chat non memorizzano alcun metadato sui contatti o sui gruppi sui server, né in forma crittografata.
|
||||
Tutti i metadati dei gruppi sono invece crittografati end-to-end e memorizzati esclusivamente sui dispositivi degli utenti finali.</p>
|
||||
|
||||
<p>Servers can therefore only see:</p>
|
||||
<p>I server possono quindi vedere solo:</p>
|
||||
|
||||
<ul>
|
||||
<li>the sender and receiver addresses</li>
|
||||
<li>and the message size.</li>
|
||||
<li>gli indirizzi del mittente e del destinatario</li>
|
||||
<li>e la dimensione del messaggio.</li>
|
||||
</ul>
|
||||
|
||||
<p>By default, the addresses are randomly generated.</p>
|
||||
<p>Per impostazione predefinita, gli indirizzi vengono generati in modo casuale.</p>
|
||||
|
||||
<p>Tutti gli altri metadati dei messaggi, dei contatti e dei gruppi risiedono nella parte crittografata end-to-end dei messaggi.</p>
|
||||
|
||||
@@ -1335,15 +1371,41 @@ Tutti i metadati dei gruppi sono invece crittografati end-to-end e memorizzati e
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Both for protecting against metadata-collecting servers
|
||||
as well as against the threat of device seizure
|
||||
we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
|
||||
to create chat profiles using random addresses for transport.
|
||||
Note that Delta Chat apps on all platforms support multiple profiles
|
||||
so you can easily use situation-specific profiles next to your “main” profile
|
||||
with the knowledge that all their data, along with all metadata, will be deleted.
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
<p>Sia per proteggersi dai server che raccolgono metadati
|
||||
sia dal rischio di sequestro del dispositivo,
|
||||
consigliamo di utilizzare un <a href="https://chatmail.at/relays">ripetitore chatmail</a>
|
||||
per creare profili di chat utilizzando indirizzi casuali per il trasporto.
|
||||
Nota: le app Delta Chat su tutte le piattaforme supportano più profili,
|
||||
quindi puoi facilmente utilizzare profili specifici per ogni situazione accanto al tuo profilo “principale”,
|
||||
con la consapevolezza che tutti i loro dati, insieme a tutti i metadati, verranno eliminati.
|
||||
Inoltre, se un dispositivo viene sequestrato, i contatti di chat che utilizzano profili di breve durata
|
||||
non possono essere identificati facilmente.</p>
|
||||
|
||||
<h3 id="chi-vede-il-mio-indirizzo-ip">
|
||||
|
||||
|
||||
Chi vede il mio Indirizzo IP? <a href="#chi-vede-il-mio-indirizzo-ip" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Il <a href="#relays">ripetitore</a> utilizzato deve conoscere il tuo indirizzo IP,
|
||||
e talvolta anche i dispositivi dei tuoi contatti se avete una <a href="#experiments">chiamata</a>
|
||||
o utilizzate <a href="#webxdc">apps</a> insieme.</p>
|
||||
|
||||
<p>Gli indirizzi IP sono necessari per la connettività e l’efficienza.
|
||||
Non sono né persistenti né esposti.
|
||||
Si noti che l’indirizzo IP
|
||||
non è come un indirizzo dettagliato che si fornisce a un servizio di consegna,
|
||||
ma molto più generico, che spesso definisce solo la regione o il paese.</p>
|
||||
|
||||
<p>Poiché questo è il modo in cui Internet e altri servizi di messaggistica funzionano di default,
|
||||
non offriamo opzioni né poniamo domande in anticipo.</p>
|
||||
|
||||
<p>Se ritieni che il tuo indirizzo IP rappresenti un rischio per la sicurezza o la privacy,
|
||||
ti consigliamo di utilizzare una VPN, in combinazione con la modalità di blocco del sistema.
|
||||
Esplorare le opzioni in tutte le app del tuo sistema lascerà delle lacune.
|
||||
Ad esempio, cliccare su un link espone gli indirizzi IP a sconosciuti e rappresenta il rischio di gran lunga maggiore.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
@@ -1360,11 +1422,11 @@ per impedire che la propria infrastruttura server venga a conoscenza di chi sta
|
||||
È particolarmente importante perché il server Signal conosce il numero di cellulare di ciascun profilo,
|
||||
che di solito è associato a un’identità tramite passaporto.</p>
|
||||
|
||||
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
|
||||
do not ask for any private data (including no phone numbers),
|
||||
it might still be worthwhile to protect relational metadata between addresses.
|
||||
We don’t foresee bigger problems in using random throw-away addresses for sealed sending
|
||||
but an implementation has not been agreed as a priority yet.</p>
|
||||
<p>Anche se i <a href="https://chatmail.at/relays">ripetitori chatmail</a>
|
||||
non richiedono dati privati (inclusi numeri di telefono),
|
||||
potrebbe comunque valere la pena proteggere i metadati relazionali tra gli indirizzi.
|
||||
Non prevediamo problemi maggiori nell’utilizzo di indirizzi casuali usa e getta per l’invio sigillato,
|
||||
ma un’implementazione non è stata ancora concordata come priorità.</p>
|
||||
|
||||
<h3 id="pfs">
|
||||
|
||||
@@ -1431,12 +1493,12 @@ la connessione è sicura.</p>
|
||||
|
||||
<p>No.</p>
|
||||
|
||||
<p>Delta Chat generates secure OpenPGP keys according to the Autocrypt specification 1.1.
|
||||
We do not recommend or offer users to perform manual key management.
|
||||
We want to ensure that security audits can focus on a few proven cryptographic algorithms
|
||||
instead of the full breadth of possible algorithms allowed with OpenPGP.
|
||||
If you want to extract your OpenPGP key, there only is an expert method:
|
||||
you need to look it up in the “keypairs” SQLite table of a profile backup tar-file.</p>
|
||||
<p>Delta Chat genera chiavi OpenPGP sicure secondo la specifica Autocrypt 1.1.
|
||||
Non consigliamo né offriamo agli utenti la gestione manuale delle chiavi.
|
||||
Vogliamo garantire che le revisioni di sicurezza possano concentrarsi su pochi algoritmi crittografici collaudati
|
||||
anziché sull’intera gamma di possibili algoritmi consentiti con OpenPGP.
|
||||
Se si desidera estrarre la propria chiave OpenPGP, esiste solo un metodo avanzato:
|
||||
è necessario cercarla nella tabella SQLite “keypairs” di un file tar di backup del profilo.</p>
|
||||
|
||||
<h3 id="security-audits">
|
||||
|
||||
@@ -1474,7 +1536,7 @@ Consulta il nostro post sul blog su <a href="https://delta.chat/en/2024-03-25-cr
|
||||
articolo di ricerca pubblicato successivamente.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>A partire dal 2023, abbiamo risolto i problemi di sicurezza e privacy con il servizio “web
|
||||
<p>A partire dal 2023, abbiamo risolto i problemi di sicurezza e riservatezza con il servizio “web
|
||||
app condivise in una chat”, relativa ai guasti del sandboxing
|
||||
soprattutto con Chromium. Successivamente abbiamo ottenuto una sicurezza indipendente
|
||||
audit da Cure53 e tutti i problemi rilevati sono stati risolti nella serie di app 1.36 rilasciata nell’aprile 2023.
|
||||
@@ -1531,10 +1593,10 @@ Puoi leggere il <a href="https://delta.chat/assets/blog/2019-first-security-revi
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Some features require certain permissions,
|
||||
e.g. you need to grant camera permission if you want to <a href="#howtoe2ee">scan an invite QR code</a>.</p>
|
||||
<p>Alcune funzionalità richiedono determinate autorizzazioni,
|
||||
ad esempio, è necessario concedere l’autorizzazione alla fotocamera se si desidera <a href="#howtoe2ee">scansionare un codice QR di invito</a>.</p>
|
||||
|
||||
<p>See <a href="https://delta.chat/en/gdpr#24-app-permissions">Privacy Policy</a> for a detailed overview.</p>
|
||||
<p>Per una panoramica dettagliata, consultare l’ <a href="https://delta.chat/en/gdpr#24-app-permissions">Informativa sulla riservatezza</a>.</p>
|
||||
|
||||
<h3 id="dove-possono-trovare-delta-chat-i-miei-amici">
|
||||
|
||||
@@ -1554,8 +1616,8 @@ e.g. you need to grant camera permission if you want to <a href="#howtoe2ee">sca
|
||||
<p>Se non disponibile, utilizzare <strong>mirror</strong> su <a href="https://deltachat.github.io/deltachat-pages">https://deltachat.github.io/deltachat-pages</a></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Open one of the following <strong>app stores and search for “Delta Chat”:</strong>
|
||||
Google Play Store, F-Droid, Huawei App Gallery, iOS and macOS App Store, Microsoft Store</p>
|
||||
<p>Apri uno dei seguenti <strong>app stores e cerca “Delta Chat”:</strong>
|
||||
Google Play Store, F-Droid, Huawei App Gallery, iOS e macOS App Store, Microsoft Store</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Controlla il <strong>gestore pacchetti</strong> delle tue distribuzioni Linux</p>
|
||||
@@ -1584,52 +1646,38 @@ basato sugli sviluppi della comunità Free e Open-Source.</p>
|
||||
ordinate cronologicamente:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Nel 2021 abbiamo ricevuto ulteriori finanziamenti dall’UE per due proposte di Next-Generation-Internet, ovvero per <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - directory di portabilità dei provider di posta elettronica</a> (~97.000 EUR) e <a href="https://nlnet.nl/project/EmailPorting/">AEAP - portabilità degli indirizzi email</a> (~90.000 EUR), che hanno portato a un migliore supporto multi-profilo, a un miglioramento delle impostazioni di contatto e di gruppo tramite codice QR e a numerosi miglioramenti di rete su tutte le piattaforme.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Il progetto UE <a href="https://nextleap.eu">NEXTLEAP</a> ha finanziato la ricerca
|
||||
e implementazione di gruppi verificati e impostazione di protocolli di contatto
|
||||
nel 2017 e nel 2018 e ha anche contribuito a integrare la crittografia end-to-end
|
||||
tramite <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>L’<a href="https://opentechfund.org">Open Technology Fund</a> ci ha dato una
|
||||
prima sovvenzione 2018/2019 (~$200K) durante la quale abbiamo notevolmente migliorato l’app Android
|
||||
e ha rilasciato una prima versione beta dell’app desktop, e che inoltre
|
||||
ancorato i nostri sviluppi delle funzionalità nella ricerca sulla UX nei contesti dei diritti umani,
|
||||
vedete il nostro <a href="https://delta.chat/en/2019-07-19-uxreport">Rapporto Needfinding e UX</a> conclusivo.
|
||||
La seconda sovvenzione 2019/2020 (~$300K) ci ha aiutato a farlo
|
||||
rilasciare nelle versioni Delta/iOS, per convertire la nostra libreria principale in Rust, e
|
||||
per fornire nuove funzionalità per tutte le piattaforme.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>La <a href="https://nlnet.nl/">fondazione NLnet</a> ha concesso nel 2019/2020 46.000 EUR per
|
||||
completando i collegamenti Rust/Python e avviando un ecosistema Chat-bot.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 abbiamo completato con successo il progetto <a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Chatmail Sicuro</a> finanziato da OTF,
|
||||
consentendoci di introdurre la crittografia garantita,
|
||||
creando una <a href="https://delta.chat/chatmail">rete di server di chatmail</a>
|
||||
e fornendo “inserimento immediato” in tutte le app rilasciate da aprile 2024 in poi.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Nel 2023 e nel 2024 siamo stati accettati nel programma Next Generation Internet (NGI)
|
||||
per il nostro lavoro in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
insieme ai partner di collaborazione che lavorano su
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> e
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
Tutti questi progetti sono parzialmente completati o saranno completati all’inizio del 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>A volte riceviamo donazioni una tantum da privati.
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#ik-heb-mezelf-per-ongeluk-verwijderd">Ik heb mezelf per ongeluk verwijderd</a></li>
|
||||
<li><a href="#ik-wil-geen-groepsberichten-meer-ontvangen">Ik wil geen groepsberichten meer ontvangen</a></li>
|
||||
<li><a href="#cloning-a-group">Cloning a group</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#advanced">Advanced</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#experiments">Experimental Features</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#ik-wil-graag-meer-weten-over-de-gebruikte-technieken-waar-kan-ik-meer-informatie-vinden">Ik wil graag meer weten over de gebruikte technieken. Waar kan ik meer informatie vinden?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
|
||||
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
|
||||
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
|
||||
@@ -184,7 +187,8 @@ If you add each other to <a href="#groups">groups</a>, end-to-end encryption wil
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -222,15 +226,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Om de prestaties te verhogen, worden afbeeldingen standaard geoptimaliseerd en verkleind verstuurd, maar je kunt ze als een bestand verzenden om het origineel te sturen.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Om de prestaties te verhogen, worden afbeeldingen standaard geoptimaliseerd en verkleind verstuurd, maar je kunt ze als een bestand verzenden om het origineel te sturen.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -261,16 +260,11 @@ or to <strong>Switch Profiles</strong>.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>In de instellingen kun je een profielfoto toevoegen. Als je een bericht stuurt aan
|
||||
je contactpersonen of ze toevoegt middels hun QR-code, dan krijgen ze je profielfoto te zien.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Omwille van je privacy, krijgen anderen je profielfoto pas te zien
|
||||
als je ze een bericht stuurt.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>In de instellingen kun je een profielfoto toevoegen. Als je een bericht stuurt aan
|
||||
je contactpersonen of ze toevoegt middels hun QR-code, dan krijgen ze je profielfoto te zien.</p>
|
||||
|
||||
<p>Omwille van je privacy, krijgen anderen je profielfoto pas te zien
|
||||
als je ze een bericht stuurt.</p>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -303,8 +297,7 @@ they will see it when they view your contact details.</p>
|
||||
<p>Stel gesprekken in op <strong>Negeren</strong> als je geen meldingen meer wilt ontvangen. Wel blijven genegeerde gesprekken op de lijst staan en kun je ze te allen tijde vastmaken.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Archiveer gesprekken</strong> als je ze niet meer op de gesprekslijst wilt zien.
|
||||
Gearchiveerde gesprekken zijn te allen tijde te bekijken boven de lijst of via een zoekopdracht.</p>
|
||||
<p><strong>Archiveer gesprekken</strong> als je ze niet meer op de gesprekslijst wilt zien. Gearchiveerde gesprekken zijn te allen tijde te bekijken boven de lijst of via een zoekopdracht.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Als er een nieuw bericht in een gearchiveerd gesprek wordt ontvangen, dan wordt het gesprek in kwestie <strong>ge-dearchiveerd</strong> en dus weer op de gesprekslijst geplaatst.
|
||||
@@ -340,7 +333,7 @@ By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../g
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
<p>Finally, you can also use “Saved Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
@@ -377,22 +370,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -462,12 +451,9 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Als je ruimte wilt besparen op je apparaat, dan kun je er voor kiezen om oude
|
||||
berichten automatisch te verwijderen.</li>
|
||||
<li>Inschakelen kan via de sectie ‘Gesprekken en media’ in de instellingen. Je kunt een periode tussen
|
||||
‘na één uur’ en ‘na één jaar’ kiezen. *Alle berichten die ouder zijn, worden verwijderd.</li>
|
||||
</ul>
|
||||
<p>Als je ruimte wilt besparen op je apparaat, dan kun je er voor kiezen om oude berichten automatisch te verwijderen.</p>
|
||||
|
||||
<p>Inschakelen kan via de sectie ‘Gesprekken en media’ in de instellingen. Je kunt een periode tussen ‘na één uur’ en ‘na één jaar’ kiezen. <em>Alle</em> berichten die ouder zijn, worden verwijderd.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -515,9 +501,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Open het ‘menu met de drie puntjes’ rechtsboven in het gespreksoverzicht, kies <strong>Nieuw gesprek</strong> en daarna <strong>Nieuwe groep</strong>.</li>
|
||||
<li>Kies dan de <strong>groepsleden</strong> en druk op het vinkje rechtsboven. Daarna kun je een <strong>groepsnaam</strong> opgeven.</li>
|
||||
<li>Zodra je het <strong>eerste groepsbericht</strong> hebt verstuurd, worden alle deelnemers op de hoogte gebracht en kunnen zij antwoorden versturen (de groep blijft onzichtbaar voor anderen zolang jij geen bericht verstuurt).</li>
|
||||
<li>
|
||||
<p>Open het ‘menu met de drie puntjes’ rechtsboven in het gespreksoverzicht, kies <strong>Nieuw gesprek</strong> en daarna <strong>Nieuwe groep</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Kies dan de <strong>groepsleden</strong> en druk op het vinkje rechtsboven. Daarna kun je een <strong>groepsnaam</strong> opgeven.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Zodra je het <strong>eerste groepsbericht</strong> hebt verstuurd, worden alle deelnemers op de hoogte gebracht en kunnen zij antwoorden versturen (de groep blijft onzichtbaar voor anderen zolang jij geen bericht verstuurt).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -528,11 +520,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -560,10 +551,8 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Je neemt geen deel meer aan de groep en kunt jezelf dus niet meer toevoegen.
|
||||
Vraag iemand via een één-op-ééngesprek of hij/zij je weer wilt toevoegen.</li>
|
||||
</ul>
|
||||
<p>Je neemt geen deel meer aan de groep en kunt jezelf dus niet meer toevoegen.
|
||||
Vraag iemand via een één-op-ééngesprek of hij/zij je weer wilt toevoegen.</p>
|
||||
|
||||
<h3 id="ik-wil-geen-groepsberichten-meer-ontvangen">
|
||||
|
||||
@@ -574,15 +563,12 @@ Vraag iemand via een één-op-ééngesprek of hij/zij je weer wilt toevoegen.</l
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Verwijder jezelf van de groepslijst of verwijder het hele groepsgesprek.
|
||||
Als je later weer wilt deelnemen, vraag dan iemand anders of hij/zij je weer wilt toevoegen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Wat ook kan doen is groepsmeldingen uitschakelen. Zo blijf je in de groep, maar ontvang je
|
||||
geen meldingen meer als er nieuwe berichten zijn.</p>
|
||||
</li>
|
||||
<li>Verwijder jezelf van de groepslijst of verwijder het hele groepsgesprek.
|
||||
Als je later weer wilt deelnemen, vraag dan iemand anders of hij/zij je weer wilt toevoegen.</li>
|
||||
</ul>
|
||||
|
||||
<p>Wat ook kan doen is groepsmeldingen uitschakelen. Zo blijf je in de groep, maar ontvang je
|
||||
geen meldingen meer als er nieuwe berichten zijn.</p>
|
||||
|
||||
<h3 id="cloning-a-group">
|
||||
|
||||
@@ -608,6 +594,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -895,7 +896,7 @@ op beide apparaten</strong>. Hierdoor hoef je niet het ene apparaat bij de hand
|
||||
<p>Controleer of beide apparaten verbonden zijn met <strong>hetzelfde (wifi)netwerk</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On <strong>Windows</strong>, go to <strong>Control Panel / Network and Internet</strong>
|
||||
<p>On <strong>Windows</strong>, go to “Control Panel / Network and Internet”
|
||||
and make sure, <strong>Private Network</strong> is selected as “Network profile type”
|
||||
(after transfer, you can change back to the original value)</p>
|
||||
</li>
|
||||
@@ -947,22 +948,21 @@ volg dan onderstaande stappen omtrent handmatige overzetting</p>
|
||||
<p>Deze methode is vooral bedoeld voor situaties waarin ‘Tweede apparaat toevoegen’ niet lukt.</p>
|
||||
|
||||
<ul>
|
||||
<li>On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your
|
||||
<li>
|
||||
<p>On the old device, go to <strong>Settings → Chats → Export Backup</strong>. Enter your
|
||||
screen unlock PIN, pattern, or password. Then you can click on “Start
|
||||
Backup”. This saves the backup file to your device. Now you have to transfer
|
||||
it to the other device somehow.</li>
|
||||
<li>On the new device, in the “I already have a profile” menu,
|
||||
choose “restore from backup”. After import, your conversations, encryption
|
||||
keys, and media should be copied to the new device.
|
||||
<ul>
|
||||
<li><strong>If you use iOS:</strong> and you encounter difficulties, maybe
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> will
|
||||
help you.</li>
|
||||
</ul>
|
||||
it to the other device somehow.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On the new device, select <strong>I Already Have a Profile → Restore from Backup</strong>.
|
||||
If you use iOS and encounter difficulties,
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> might help you.</p>
|
||||
</li>
|
||||
<li>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<p>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</p>
|
||||
|
||||
<h3 id="bestaan-er-plannen-om-een-delta-chat-webclient-te-maken">
|
||||
|
||||
@@ -991,10 +991,10 @@ of de AppImage van de Linux-client. Deze kun je downloaden op
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Experimental Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -1007,33 +1007,44 @@ you can try out features we are working on.</p>
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
@@ -1100,6 +1111,40 @@ except if your users’ devices require Google/Apple <a href="#instant-delivery"
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
|
||||
<h3 id="ik-wil-graag-meer-weten-over-de-gebruikte-technieken-waar-kan-ik-meer-informatie-vinden">
|
||||
|
||||
|
||||
@@ -1108,9 +1153,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Bekijk de pagina <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Door Delta Chat gebruikte standaarden</a>.</li>
|
||||
</ul>
|
||||
<p>Bekijk de pagina <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Door Delta Chat gebruikte standaarden</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1349,6 +1392,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1588,52 +1657,38 @@ ordered chronologically:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="https://opentechfund.org">Open Technology Fund</a> heeft twee subsidies toegekend.
|
||||
De eerste subsidie, voor 2018/2019, ter waarde van ong. $200,000, heeft enorm geholpen om de Android-app
|
||||
te verbeteren en een bètaversie van de computerclient vrij te geven.
|
||||
Verder hebben we onderzoek kunnen doen naar het uiterlijk in relatie tot mensenrechten -
|
||||
bekijk onze conclusie hier: <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
De tweede subsidie, voor 2019/2020, ter waarde van ong. $300,000, loopt nog en ondersteunt ons bij het
|
||||
vrijgeven van de iOS-client, het overzetten van de code van de kernbibliotheek naar Rust en
|
||||
het implementeren van nieuwe functies op alle platformen.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 we successfully completed the OTF-funded
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure Chatmail project</a>,
|
||||
allowing us to introduce guaranteed encryption,
|
||||
creating a <a href="https://delta.chat/chatmail">chatmail server network</a>
|
||||
and providing “instant onboarding” in all apps released from April 2024 on.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Soms ontvangen we eenmalige donaties van privépersonen, waar we
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#usunąłem-się-przez-przypadek">Usunąłem się przez przypadek.</a></li>
|
||||
<li><a href="#nie-chcę-już-otrzymywać-wiadomości-od-grupy">Nie chcę już otrzymywać wiadomości od grupy.</a></li>
|
||||
<li><a href="#cloning-a-group">Cloning a group</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#zaawansowane">Zaawansowane</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#experiments">Experimental Features</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#chcę-zarządzać-własnym-serwerem-dla-delta-chat-co-polecacie">Chcę zarządzać własnym serwerem dla Delta Chat. Co polecacie?</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#interesują-mnie-szczegóły-techniczne-możesz-powiedzieć-mi-coś-więcej">Interesują mnie szczegóły techniczne. Możesz powiedzieć mi coś więcej?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Czy wiadomości oznaczone ikoną poczty są widoczne w internecie?</a></li>
|
||||
<li><a href="#message-metadata">W jaki sposób Delta Chat chroni metadane w wiadomościach?</a></li>
|
||||
<li><a href="#device-seizure">Jak chronić metadane i kontakty w przypadku przejęcia urządzenia?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Czy Delta Chat obsługuje funkcję „Sealed Sender”?</a></li>
|
||||
<li><a href="#pfs">Czy Delta Chat obsługuje funkcję Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#pqc">Czy Delta Chat obsługuje kryptografię postkwantową?</a></li>
|
||||
@@ -102,8 +105,7 @@
|
||||
|
||||
</h2>
|
||||
|
||||
<p>Delta Chat is a reliable, decentralized and secure instant messaging app,
|
||||
available for mobile and desktop platforms.</p>
|
||||
<p>Delta Chat to niezawodna, zdecentralizowana i bezpieczna aplikacja do błyskawicznego przesyłania wiadomości, dostępna na platformy mobilne i stacjonarne.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -184,7 +186,8 @@ If you add each other to <a href="#groups">groups</a>, end-to-end encryption wil
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -220,15 +223,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Tak. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>Tak. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ze względu na wydajność obrazy są domyślnie optymalizowane i wysyłane w mniejszym rozmiarze, ale można je wysłać jako „plik”, aby zachować oryginał.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Ze względu na wydajność obrazy są domyślnie optymalizowane i wysyłane w mniejszym rozmiarze, ale można je wysłać jako „plik”, aby zachować oryginał.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -258,14 +256,9 @@ and uses the server only to relay messages.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Możesz dodać zdjęcie profilowe w swoich ustawieniach. Jeśli napiszesz do swoich kontaktów lub dodasz je za pomocą kodu QR, automatycznie zobaczą je jako Twoje zdjęcie profilowe.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ze względów prywatności nikt nie widzi Twojego zdjęcia profilowego, dopóki nie napiszesz do niego wiadomości.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Możesz dodać zdjęcie profilowe w swoich ustawieniach. Jeśli napiszesz do swoich kontaktów lub dodasz je za pomocą kodu QR, automatycznie zobaczą je jako Twoje zdjęcie profilowe.</p>
|
||||
|
||||
<p>Ze względów prywatności nikt nie widzi Twojego zdjęcia profilowego, dopóki nie napiszesz do niego wiadomości.</p>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -365,22 +358,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -437,10 +426,9 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Jeśli chcesz zaoszczędzić miejsce na urządzeniu, możesz wybrać opcję automatycznego usuwania starych wiadomości.</li>
|
||||
<li>Aby ją włączyć, przejdź do „Usuń wiadomości z urządzenia” w ustawieniach w sekcji „Czaty i media”. Możesz ustawić przedział czasowy pomiędzy „po 1 godzinie” a „po 1 roku”; w ten sposób <em>wszystkie</em> wiadomości zostaną usunięte z urządzenia, gdy tylko staną się starsze.</li>
|
||||
</ul>
|
||||
<p>Jeśli chcesz zaoszczędzić miejsce na urządzeniu, możesz wybrać opcję automatycznego usuwania starych wiadomości.</p>
|
||||
|
||||
<p>Aby ją włączyć, przejdź do „Usuń wiadomości z urządzenia” w ustawieniach w sekcji „Czaty i media”. Możesz ustawić przedział czasowy pomiędzy „po 1 godzinie” a „po 1 roku”; w ten sposób <em>wszystkie</em> wiadomości zostaną usunięte z urządzenia, gdy tylko staną się starsze.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -488,9 +476,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Wybierz <strong>Nowy czat</strong>, a następnie <strong>Nowa grupa</strong> z menu w prawym górnym rogu lub naciśnij odpowiedni przycisk na Androidzie / iOS.</li>
|
||||
<li>Na następnym ekranie wybierz <strong>członków grupy</strong> i zdefiniuj <strong>nazwę grupy</strong>. Możesz też wybrać awatar <strong>grupy</strong>.</li>
|
||||
<li>Zaraz po napisaniu pierwszej wiadomości w grupie wszyscy członkowie zostaną poinformowani o nowej grupie i mogą odpowiedzieć w grupie (jeżeli nie napiszesz wiadomości w grupie, grupa jest niewidoczna dla członków).</li>
|
||||
<li>
|
||||
<p>Wybierz <strong>Nowy czat</strong>, a następnie <strong>Nowa grupa</strong> z menu w prawym górnym rogu lub naciśnij odpowiedni przycisk na Androidzie / iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Na następnym ekranie wybierz <strong>członków grupy</strong> i zdefiniuj <strong>nazwę grupy</strong>. Możesz też wybrać awatar <strong>grupy</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Zaraz po napisaniu pierwszej wiadomości w grupie wszyscy członkowie zostaną poinformowani o nowej grupie i mogą odpowiedzieć w grupie (jeżeli nie napiszesz wiadomości w grupie, grupa jest niewidoczna dla członków).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -501,11 +495,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -533,10 +526,8 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Ponieważ nie jesteś członkiem grupy, nie możesz dodać siebie ponownie.
|
||||
Jednak nie ma problemu, po prostu poproś dowolnego członka grupy na normalnym czacie, aby dodał cię ponownie.</li>
|
||||
</ul>
|
||||
<p>Ponieważ nie jesteś członkiem grupy, nie możesz dodać siebie ponownie.
|
||||
Jednak nie ma problemu, po prostu poproś dowolnego członka grupy na normalnym czacie, aby dodał cię ponownie.</p>
|
||||
|
||||
<h3 id="nie-chcę-już-otrzymywać-wiadomości-od-grupy">
|
||||
|
||||
@@ -547,15 +538,12 @@ Jednak nie ma problemu, po prostu poproś dowolnego członka grupy na normalnym
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Usuń siebie z listy członków lub usuń cały czat.
|
||||
Jeśli później będziesz chciał ponownie dołączyć do grupy, poproś innego członka grupy, aby dodał cię do grupy.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Alternatywnie możesz też „Wyłączyć powiadomienia” dla grupy dzięki temu otrzymasz wszystkie wiadomości i
|
||||
nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych nowych wiadomościach.</p>
|
||||
</li>
|
||||
<li>Usuń siebie z listy członków lub usuń cały czat.
|
||||
Jeśli później będziesz chciał ponownie dołączyć do grupy, poproś innego członka grupy, aby dodał cię do grupy.</li>
|
||||
</ul>
|
||||
|
||||
<p>Alternatywnie możesz też „Wyłączyć powiadomienia” dla grupy dzięki temu otrzymasz wszystkie wiadomości i
|
||||
nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych nowych wiadomościach.</p>
|
||||
|
||||
<h3 id="cloning-a-group">
|
||||
|
||||
@@ -581,6 +569,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -833,7 +836,7 @@ Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
<p>Sprawdź dokładnie, czy oba urządzenia są w tym <strong>samym Wi-Fi lub tej samej sieci</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Na <strong>Windowsie</strong>, przejdź do <strong>Panel sterowania / Sieć i internet</strong> i upewnij się, że <strong>Sieć prywatna</strong> jest wybrana jako “Typ profilu sieci”
|
||||
<p>Na <strong>Windowsie</strong>, przejdź do “Panel sterowania / Sieć i internet” i upewnij się, że <strong>Sieć prywatna</strong> jest wybrana jako “Typ profilu sieci”
|
||||
(po przeniesieniu możesz wrócić do pierwotnej wartości)</p>
|
||||
</li>
|
||||
<li>
|
||||
@@ -877,14 +880,16 @@ Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
<p>Ta metoda jest zalecana tylko wtedy, gdy opisana powyżej opcja „Dodaj kolejne urządzenie” nie działa.</p>
|
||||
|
||||
<ul>
|
||||
<li>Na starym urządzeniu przejdź do „Ustawienia » Czaty i media » Eksport kopii zapasowej”. Wprowadź swój PIN odblokowania ekranu, wzór lub hasło. Następnie możesz nacisnąć „Utwórz kopię”. Spowoduje to zapisanie pliku kopii zapasowej na urządzeniu. Teraz musisz jakoś przenieść go na inne urządzenie.</li>
|
||||
<li>Na nowym urządzeniu, na ekranie logowania, zamiast logować się na swoje konto e-mail, wybierz „Przywróć z kopii zapasowej”. Po zaimportowaniu Twoje rozmowy, klucze szyfrujące i multimedia powinny zostać skopiowane na nowe urządzenie.
|
||||
<ul>
|
||||
<li><strong>Jeśli korzystasz z iOS</strong> i napotykasz trudności, może <a href="https://support.delta.chat/t/import-backup-to-ios/1628">ten poradnik</a> Ci pomoże.</li>
|
||||
</ul>
|
||||
<li>
|
||||
<p>Na starym urządzeniu przejdź do <strong>Ustawienia → Czaty i media → Eksport kopii zapasowej</strong>. Wprowadź swój PIN odblokowania ekranu, wzór lub hasło. Następnie możesz nacisnąć „Utwórz kopię”. Spowoduje to zapisanie pliku kopii zapasowej na urządzeniu. Teraz musisz jakoś przenieść go na inne urządzenie.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Na nowym urządzeniu, na ekranie logowania, zamiast logować się na swoje konto e-mail, wybierz <strong>Przywróć z kopii zapasowej</strong>. Po zaimportowaniu Twoje rozmowy, klucze szyfrujące i multimedia powinny zostać skopiowane na nowe urządzenie.
|
||||
Jeśli korzystasz z iOS i napotykasz trudności, może <a href="https://support.delta.chat/t/import-backup-to-ios/1628">ten poradnik</a> Ci pomoże.</p>
|
||||
</li>
|
||||
<li>Jesteś teraz zsynchronizowany i możesz używać obu urządzeń do wysyłania i odbierania wiadomości zaszyfrowanych end-to-end w komunikacji ze swoimi partnerami.</li>
|
||||
</ul>
|
||||
|
||||
<p>Jesteś teraz zsynchronizowany i możesz używać obu urządzeń do wysyłania i odbierania wiadomości zaszyfrowanych end-to-end w komunikacji ze swoimi partnerami.</p>
|
||||
|
||||
<h3 id="czy-są-jakieś-plany-wprowadzenia-klienta-web-delta-chat">
|
||||
|
||||
@@ -908,10 +913,10 @@ Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Experimental Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -924,33 +929,44 @@ you can try out features we are working on.</p>
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
@@ -1017,6 +1033,40 @@ except if your users’ devices require Google/Apple <a href="#instant-delivery"
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
|
||||
<h3 id="interesują-mnie-szczegóły-techniczne-możesz-powiedzieć-mi-coś-więcej">
|
||||
|
||||
|
||||
@@ -1025,9 +1075,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Zobacz <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standardy używane w Delta Chat</a>.</li>
|
||||
</ul>
|
||||
<p>Zobacz <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standardy używane w Delta Chat</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1214,6 +1262,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1389,31 +1463,35 @@ Raczej korzystamy z publicznych źródeł finansowania, jak dotąd pochodzących
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Unijny projekt <a href="https://nextleap.eu">NEXTLEAP</a> sfinansował badania i wdrożenie zweryfikowanych grup i ustawień protokołów kontaktowych w latach 2017 i 2018, a także pomógł zintegrować szyfrowanie end-to-end poprzez <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="https://opentechfund.org">Open Technology Fund</a> przyznał nam pierwszy grant w 2018/2019 (~200 000 $), dzięki któremu znacznie ulepszyliśmy aplikację na Androida i wydaliśmy pierwszą wersję beta aplikacji na komputery stacjonarne, a także ugruntował rozwój naszych funkcji w badaniach UX w kontekście praw człowieka, zobacz nasz końcowy raport <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX</a>.
|
||||
Druga dotacja w 2019/2020 (~300 000 4) pomogła nam wydać wersje Delta/iOS, przekonwertować naszą podstawową bibliotekę na Rust i zapewnić nowe funkcje dla wszystkich platform.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="https://nlnet.nl/">Fundacja NLnet</a> przekazała w latach 2019/2020 kwotę 46 tys. EUR na wykonanie wiązań Rust/Python i uruchomienie ekosystemu Chat-bot.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>W latach 2023-2024 pomyślnie ukończyliśmy finansowany przez OTF <a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">projekt Secure Chatmail</a>, co pozwoliło nam wprowadzić gwarantowane szyfrowanie, stworzyć <a href="https://delta.chat/chatmail">sieć serwerów chatmail</a> i zapewnić „natychmiastowe wdrażanie” we wszystkich aplikacjach wydanych od kwietnia 2024 r.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>W latach 2023 i 2024 zostaliśmy przyjęci do programu Next Generation Internet (NGI) za naszą pracę w <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>, wraz z partnerami współpracującymi pracującymi nad <a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>, <a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>, <a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> i <a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>. Wszystkie te projekty są częściowo ukończone lub zostaną ukończone na początku 2025 r.</p>
|
||||
<p>Unijny projekt <a href="https://nextleap.eu">NEXTLEAP</a> sfinansował badania i wdrożenie zweryfikowanych grup i ustawień protokołów kontaktowych w latach 2017 i 2018, a także pomógł zintegrować szyfrowanie end-to-end poprzez <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Czasami otrzymujemy jednorazowe darowizny od osób prywatnych. Na przykład w 2021 roku pewna hojna osoba przekazała nam 4K EUR w formie przelewu bankowego tytułem “kontynuujcie dobry rozwój!”. 💜 Takie pieniądze przeznaczamy na finansowanie spotkań rozwojowych lub na doraźne wydatki, których nie da się łatwo przewidzieć lub zrefundować z publicznych dotacji. Otrzymywanie większej ilości darowizn pomaga nam również stać się bardziej niezależnymi i długoterminowo rentownymi jako społeczność współpracowników.</p>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<li><a href="#что-означают-галочки-рядом-с-исходящими-сообщениями">Что означают галочки рядом с исходящими сообщениями?</a></li>
|
||||
<li><a href="#edit">Исправление опечаток и удаление сообщений после отправки</a></li>
|
||||
<li><a href="#ephemeralmsgs">Как работают исчезающие сообщения?</a></li>
|
||||
<li><a href="#delold">Что произойдет, если я включу функцию “Удалять старые сообщения с устройства”?</a></li>
|
||||
<li><a href="#delold">Что произойдет, если я включу функцию “Удалять сообщения с устройства”?</a></li>
|
||||
<li><a href="#remove-account">Как удалить свой профиль в чате?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#я-случайно-удалил-самого-себя">Я случайно удалил самого себя.</a></li>
|
||||
<li><a href="#я-больше-не-хочу-получать-сообщения-группы">Я больше не хочу получать сообщения группы.</a></li>
|
||||
<li><a href="#клонирование-группы">Клонирование группы</a></li>
|
||||
<li><a href="#сколько-участников-может-быть-в-одной-группе">Сколько участников может быть в одной группе?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">Встроенные приложения чата</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#расширенные">Расширенные</a>
|
||||
<ul>
|
||||
<li><a href="#экспериментальные-функции">Экспериментальные функции</a></li>
|
||||
<li><a href="#statssending">Что означает “Отправлять статистику разработчикам Delta Chat”?</a></li>
|
||||
<li><a href="#experiments">Экспериментальные функции</a></li>
|
||||
<li><a href="#relays">Что такое релеи chatmail?</a></li>
|
||||
<li><a href="#могу-ли-я-использовать-обычный-адрес-электронной-почты-с-delta-chat">Могу ли я использовать обычный адрес электронной почты с Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">Как настроить профиль чата с использованием классического адреса электронной почты в качестве транспорта?</a></li>
|
||||
<li><a href="#classic-email">Как настроить профиль чата с использованием классического адреса электронной почты в качестве релея?</a></li>
|
||||
<li><a href="#я-хочу-управлять-своим-собственным-сервером-для-delta-chat-что-вы-посоветуете">Я хочу управлять своим собственным сервером для Delta Chat. Что вы посоветуете?</a></li>
|
||||
<li><a href="#statssending">Что означает “Отправлять статистику разработчикам Delta Chat”?</a></li>
|
||||
<li><a href="#меня-интересуют-технические-детали-можете-рассказать-больше">Меня интересуют технические детали. Можете рассказать больше?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Видны ли в Интернете сообщения, отмеченные значком почты?</a></li>
|
||||
<li><a href="#message-metadata">Как Delta Chat защищает метаданные в сообщениях?</a></li>
|
||||
<li><a href="#device-seizure">Как защитить метаданные и контакты при изъятии устройства?</a></li>
|
||||
<li><a href="#кто-видит-мой-ip-адрес">Кто видит мой IP-адрес?</a></li>
|
||||
<li><a href="#sealedsender">Поддерживает ли Delta Chat функцию “Sealed Sender” (Засекреченный отправитель)?</a></li>
|
||||
<li><a href="#pfs">Поддерживает ли Delta Chat свойство Perfect forward secrecy, PFS (Совершенную прямую секретность)?</a></li>
|
||||
<li><a href="#pqc">Поддерживает ли Delta Chat Post-Quantum-Cryptography (Постквантовую криптографию)?</a></li>
|
||||
@@ -184,7 +187,8 @@
|
||||
<p>Поскольку это приватный мессенджер,
|
||||
писать вам могут только друзья и члены семьи, с которыми вы <a href="#howtoe2ee">поделились QR-кодом или ссылкой-приглашением.</a></p>
|
||||
|
||||
<p>Ваши друзья могут поделиться вашим контактом с другими друзьями, это отображается как <strong>запрос</strong>.</p>
|
||||
<p>Ваши друзья могут поделиться вашим контактом с другими друзьями,
|
||||
это отображается как <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Запрос</b></p>
|
||||
|
||||
<p>— Нужно <strong>принять</strong> запрос, прежде чем ответить.</p>
|
||||
|
||||
@@ -218,15 +222,10 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Да. Изображения, видео, файлы, голосовые сообщения и т.д. можно отправлять с помощью кнопок <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Вложение</strong>
|
||||
<p>Да. Изображения, видео, файлы, голосовые сообщения и т.д. можно отправлять с помощью кнопок <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Вложение</strong>
|
||||
или <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Голосовое сообщение</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Для лучшей производительности изображения по умолчанию оптимизируются и отправляются в меньшем размере, но вы можете отправить их как “файл”, чтобы сохранить оригинал.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Для повышения производительности, изображения оптимизируются и отправляются по умолчанию в уменьшенном размере, но вы можете отправить их как “файл”, чтобы сохранить оригинал.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -257,16 +256,11 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Вы можете добавить изображение профиля в настройках. Если вы пишете своим контактам
|
||||
<p>Вы можете добавить изображение профиля в настройках. Если вы пишете своим контактам
|
||||
или добавляете их с помощью QR-кода, они автоматически видят его как изображение вашего профиля.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>По соображениям конфиденциальности, никто не увидит изображение вашего профиля,
|
||||
пока вы не напишете им сообщение.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>По соображениям конфиденциальности, никто не увидит изображение вашего профиля, пока вы не напишете
|
||||
им сообщение.</p>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -300,7 +294,8 @@
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Отправить в архив</strong> необходимо, если вы не хотите больше видеть их в списке чатов.
|
||||
Архивные чаты остаются доступными над списком чатов или через поиск.</p>
|
||||
Архивные чаты остаются доступными над списком чатов или через поиск
|
||||
и будут отмечены как <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Архивировано</b></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Когда в чат, находящийся в архиве, приходит новое сообщение, если не включена опция <strong>Отключить уведомления</strong>, он <strong>Возвращается из архива</strong> в ваш список чатов.
|
||||
@@ -335,7 +330,7 @@
|
||||
вы можете вернуться к этому сообщению в исходном чате</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Наконец, вы также можете использовать “Сохраненные сообщения” для создания <strong>личных заметок</strong> - откройте чат, введите что-то, добавьте фото или голосовое сообщение и т.д.</p>
|
||||
<p>Наконец, вы можете использовать “Сохраненные сообщения”, для создания <strong>личных заметок</strong> - откройте чат, напечатайте что-нибудь, добавьте фото или голосовое сообщение и т.д.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Поскольку “Сохраненные сообщения” синхронизируются, они могут стать удобным способом передачи данных между устройствами</p>
|
||||
@@ -371,22 +366,18 @@
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>Одна галочка</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
означает, что сообщение было успешно отправлено вашему провайдеру.</p>
|
||||
означает, что сообщение успешно отправлено на <a href="#relays">релей</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Две галочки</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
означают, что по крайней мере одно устройство получателя
|
||||
сообщило об успешном получении сообщения.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Получатели могли отключить подтверждения прочтения,
|
||||
поэтому даже если вы видите только одну галочку, сообщение могло быть прочитано.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>И наоборот, две галочки не обязательно означают
|
||||
что человек прочитал или понял сообщение ;)</p>
|
||||
указывают на то, что ваш контакт прочитал сообщение.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>В <a href="#groups">группах</a> вторая галочка означает, что хотя бы один из участников подтвердил прочтение сообщения.</p>
|
||||
|
||||
<p>Вторая галочка появится только в том случае, если у вас и хотя бы одного из получателей, прочитавшего сообщение,
|
||||
включена опция <strong>Настройки → Чаты → Уведомление о прочтении</strong>.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -451,18 +442,18 @@
|
||||
<h3 id="delold">
|
||||
|
||||
|
||||
Что произойдет, если я включу функцию “Удалять старые сообщения с устройства”? <a href="#delold" class="anchor"></a>
|
||||
Что произойдет, если я включу функцию “Удалять сообщения с устройства”? <a href="#delold" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Если вы хотите сэкономить место на устройстве, вы можете выбрать
|
||||
автоматическое удаление старых сообщений.</li>
|
||||
<li>Чтобы включить эту функцию, перейдите в “Удалять сообщения с устройства” в настройках “Чаты и медиафайлы”
|
||||
Вы можете установить период от “Через 1 час” до “Через 1 год”;
|
||||
Таким образом, <em>все</em> сообщения будут удалены с устройства, как только они станут старше выбранного срока.</li>
|
||||
</ul>
|
||||
<p>Если вы хотите сэкономить место на устройстве, можно выбрать функцию автоматического удаления старых
|
||||
сообщений.</p>
|
||||
|
||||
<p>Чтобы включить эту функцию, перейдите в <strong>Настройки → Чаты → Удалять сообщения с устройства</strong>.
|
||||
Вы можете установить временные рамки от “через 1 час” до “через 1 год”;
|
||||
Таким образом, <em>все</em> сообщения будут удаляться с вашего устройства, как только они станут
|
||||
старше выбранного срока.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -510,9 +501,15 @@
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Выберите <strong>Новый чат</strong>, а затем <strong>Новая группа</strong> из меню в правом верхнем углу или нажмите соответствующую кнопку на Android/iOS.</li>
|
||||
<li>На следующем экране выберите <strong>участников</strong> и придумайте <strong>название группы</strong>. Вы также можете выбрать <strong>изображение группы</strong>.</li>
|
||||
<li>Как только вы напишете <strong>первое сообщение</strong> в группе, все участники будут проинформированы о новой группе и смогут ответить. (Пока вы не напишете сообщение в группе, группа будет невидима для участников).</li>
|
||||
<li>
|
||||
<p>Выберите <strong>Новый чат</strong>, а затем <strong>Новая группа</strong> из меню в правом верхнем углу или нажмите соответствующую кнопку на Android/iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>На следующем экране выберите <strong>участников группы</strong> и придумайте <strong>название группы</strong>. Вы также можете выбрать <strong>аватар группы</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Как только вы напишете <strong>первое сообщение</strong> в группе, все участники будут проинформированы о новой группе и смогут ответить. (Пока вы не напишете сообщение в группе, группа будет невидима для участников).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -523,11 +520,10 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Все участники группы имеют <strong>одинаковые права</strong>.
|
||||
Поэтому каждый может удалить любого участника или добавить нового.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>У всех участников группы <strong>одинаковые права</strong>.
|
||||
Поэтому каждый может удалить любого участника или добавить новых.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Чтобы <strong>добавлять или удалять участников</strong>, коснитесь названия группы в чате и выберите участника, которого нужно добавить или удалить.</p>
|
||||
</li>
|
||||
@@ -555,10 +551,8 @@
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Поскольку вы больше не являетесь участником группы, вы не можете добавлять себя снова.
|
||||
Однако, это не проблема, просто попросите любого другого участника группы в обычном чате добавить вас снова.</li>
|
||||
</ul>
|
||||
<p>Поскольку вы больше не являетесь участником группы, вы не можете добавить себя снова.
|
||||
Однако, это не проблема, просто попросите любого другого участника группы в обычном чате добавить вас снова.</p>
|
||||
|
||||
<h3 id="я-больше-не-хочу-получать-сообщения-группы">
|
||||
|
||||
@@ -569,14 +563,12 @@
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Либо удалите себя из списка участников, либо удалите весь чат.
|
||||
Если позже вы снова захотите присоединиться к группе, попросите другого участника группы добавить вас.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Или, вместо этого, вы можете “отключить уведомления” для группы — это означает, что вы будете получать все сообщения и сможете их писать, но больше не будете получать уведомления о новых сообщениях.</p>
|
||||
</li>
|
||||
<li>Либо удалите себя из списка участников, либо удалите весь чат.
|
||||
Если позже вы снова захотите присоединиться к группе, попросите другого участника группы добавить вас.</li>
|
||||
</ul>
|
||||
|
||||
<p>Или, вместо этого, вы можете “отключить уведомления” для группы - в этом случае вы будете получать все сообщения и
|
||||
можете их писать, но больше не будете получать уведомления о новых сообщениях.</p>
|
||||
|
||||
<h3 id="клонирование-группы">
|
||||
|
||||
@@ -602,6 +594,21 @@
|
||||
<p>Новая группа <strong>полностью независима</strong> от исходной,
|
||||
которая продолжает работать как прежде.</p>
|
||||
|
||||
<h3 id="сколько-участников-может-быть-в-одной-группе">
|
||||
|
||||
|
||||
Сколько участников может быть в одной группе? <a href="#сколько-участников-может-быть-в-одной-группе" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Строгого технического ограничения нет,
|
||||
но не рекомендуется создавать группы больше 150 участников.</p>
|
||||
|
||||
<p>По мере увеличения размера групп они могут стать социально нестабильными и потребовать иерархии,
|
||||
в то время как Delta Chat - это приватный мессенджер для общения на <a href="#groups">равных правах</a>.
|
||||
Смотрите <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">число Данбара</a> для более глубокого понимания.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -643,7 +650,7 @@
|
||||
<p>Встроенные приложения не могут отправлять данные в Интернет или что-либо загружать.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Встроенное приложение может обмениваться данными только внутри чата Delta Chat с его
|
||||
<p>Встроенное приложение может обмениваться данными только в рамках этого чата с его
|
||||
копиями на устройствах ваших собеседников. В остальном оно полностью
|
||||
изолировано от Интернета.</p>
|
||||
</li>
|
||||
@@ -889,9 +896,9 @@ Push-уведомления автоматически активируются
|
||||
<p>Перепроверьте, что оба устройства находятся <strong>в одной Wi-Fi или локальной сети</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>В <strong>Windows</strong> перейдите в <strong>Панель управления / Сеть и Интернет</strong>
|
||||
<p>В <strong>Windows</strong> перейдите в “Панель управления / Сеть и Интернет”
|
||||
и убедитесь, что в качестве “Типа сетевого профиля” выбрана <strong>Частная сеть</strong>.
|
||||
(после передачи, вы можете изменить обратно на исходное значение)</p>
|
||||
(после передачи можно вернуть исходное значение)</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>На <strong>iOS</strong>, убедитесь, что предоставлен доступ “Настройки системы / Приложения / Delta Chat / <strong>Локальная сеть</strong>”</p>
|
||||
@@ -941,22 +948,21 @@ Push-уведомления автоматически активируются
|
||||
<p>Этот метод рекомендуется использовать только в том случае, если функция “Добавить второе устройство”, описанная выше, не работает.</p>
|
||||
|
||||
<ul>
|
||||
<li>На старом устройстве, перейдите в “Настройки -> Чаты и медиафайлы -> Экспорт резервной копии”. Введите свой
|
||||
PIN-код разблокировки экрана, графический ключ или пароль. Затем вы можете нажать “Начать
|
||||
<li>
|
||||
<p>На старом устройстве перейдите в <strong>Настройки → Чаты → Экспорт резервной копии</strong>. Введите свой
|
||||
PIN-код разблокировки экрана, графический ключ или пароль. Затем нажмите на кнопку “Начать
|
||||
резервное копирование”. Это сохранит файл резервной копии на вашем устройстве. Теперь вам нужно передать
|
||||
его на другое устройство каким-то образом.</li>
|
||||
<li>На новом устройстве, в меню “У меня уже есть профиль”,
|
||||
выберите “Восстановить из резервной копии”. После импорта, ваши чаты, ключи
|
||||
шифрования, медиафайлы будут скопированы на новое устройство.
|
||||
<ul>
|
||||
<li><strong>Если вы используете iOS:</strong> и у вас возникли трудности, возможно,
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">это руководство</a>
|
||||
поможет вам.</li>
|
||||
</ul>
|
||||
его на другое устройство каким-то образом.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>На новом устройстве выберите <strong>У меня уже есть профиль → Восстановить из резервной копии</strong>.
|
||||
Если вы используете iOS: и у вас возникли трудности,
|
||||
возможно, <a href="https://support.delta.chat/t/import-backup-to-ios/1628">это руководство</a> поможет вам.</p>
|
||||
</li>
|
||||
<li>Теперь вы синхронизированы и можете использовать оба устройства для отправки и получения
|
||||
зашифрованных сквозным шифрованием сообщений с вашими собеседниками.</li>
|
||||
</ul>
|
||||
|
||||
<p>Теперь вы синхронизированы и можете использовать оба устройства для отправки и получения
|
||||
зашифрованных сквозным шифрованием сообщений с вашими собеседниками.</p>
|
||||
|
||||
<h3 id="есть-ли-какие-либо-планы-по-внедрению-веб-клиента-delta-chat">
|
||||
|
||||
@@ -985,10 +991,10 @@ PIN-код разблокировки экрана, графический кл
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="экспериментальные-функции">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Экспериментальные функции <a href="#экспериментальные-функции" class="anchor"></a>
|
||||
Экспериментальные функции <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -1001,6 +1007,109 @@ PIN-код разблокировки экрана, графический кл
|
||||
<p>Вы можете найти дополнительную информацию
|
||||
и оставить отзыв на <a href="https://support.delta.chat">Форуме</a>.</p>
|
||||
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
Что такое релеи chatmail? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Релеи используются для временного хранения сообщений, если ваше устройство не в сети.
|
||||
Релеи - это недорогие и простые серверы,
|
||||
которые не хранят данные о статусах групп, вашем имени или аватаре, -
|
||||
всё это существует только на вашем устройстве.
|
||||
Релеи управляются разными группами и людьми.</p>
|
||||
|
||||
<p>По умолчанию, после установки, релей <strong>настраивается автоматически</strong>,
|
||||
поэтому вам не нужно об этом волноваться.
|
||||
Однако, если хотите,
|
||||
вы можете настроить релеи в <strong>Настройки → Дополнительно → Релеи</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Вы можете <strong>добавить</strong> релей, отсканировав его QR-код;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> содержит список известных релеев.
|
||||
Если у вас несколько релеев, вы будете получать сообщения на все из них.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>По умолчанию</strong> определяет релей, на который ваши собеседники будут отправлять будущие сообщения.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Если вы <strong>удаляете</strong> релей,
|
||||
убедитесь, что другой релей по умолчанию использовался в течение достаточного количества времени.
|
||||
В противном случае сообщения от ваших собеседников не будут доходить до вас.
|
||||
Если сомневаетесь, удалите его позже.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Для получения более подробной информации и ознакомления с будущими возможностями релеев,
|
||||
вы можете следить за обсуждениями на <a href="https://support.delta.chat">Форуме</a>.</p>
|
||||
|
||||
<h3 id="могу-ли-я-использовать-обычный-адрес-электронной-почты-с-delta-chat">
|
||||
|
||||
|
||||
Могу ли я использовать обычный адрес электронной почты с Delta Chat? <a href="#могу-ли-я-использовать-обычный-адрес-электронной-почты-с-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Да, но только если адрес электронной почты используется исключительно <a href="https://chatmail.at/clients">chatmail клиентами</a>.</p>
|
||||
|
||||
<p>Не поддерживается совместное использование адреса электронной почты с приложениями, не являющимися клиентами chatmail или веб-интерфейсами для работы с почтой,
|
||||
по следующим причинам:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Приложения, не являющиеся клиентами chatmail, в основном не обеспечивают автоматическое сквозное шифрование электронной почты для своих пользователей,
|
||||
тогда как приложения и релеи chatmail повсеместно применяют сквозное шифрование и стандарты безопасности.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Приложения, не являющиеся клиентами chatmail, используют серверы электронной почты в качестве долгосрочного архива сообщений,
|
||||
тогда как клиенты chatmail используют их как релей для мгновенной пересылки сообщений.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Поддержка всего разнообразия классических настроек электронной почты
|
||||
потребует значительных усилий по разработке и сопровождению,
|
||||
а также усложнит повышение устойчивости, надёжности и скорости обмена сообщениями на основе chatmail.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="classic-email">
|
||||
|
||||
|
||||
Как настроить профиль чата с использованием классического адреса электронной почты в качестве релея? <a href="#classic-email" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Прежде всего, <strong>не используйте те же классические адреса электронной почты, которые используются в обычных приложениях для отправки писем</strong>
|
||||
если вы не готовы к зашифрованным сообщениям во входящих,
|
||||
двойным уведомлениям, случайному удалению писем или подобным неудобствам.</p>
|
||||
|
||||
<p>Вы можете настроить адрес электронной почты для чата в разделе <strong>Новый профиль → Использовать другой сервер → Использовать электронную почту как релей</strong>.
|
||||
Обратите внимание, что провайдеры классической почты обычно не поддерживают <a href="#instant-delivery">Push-уведомления</a>
|
||||
и имеют другие ограничения, см. раздел <a href="https://providers.delta.chat">Обзор провайдеров</a>.
|
||||
Chatmail использует INBOX по умолчанию для ретрансляции; убедитесь, что настройки провайдера этому соответствуют.
|
||||
Профиль чата, использующий классический адрес электронной почты, позволяет отправлять и получать незашифрованные сообщения.
|
||||
Эти сообщения и чаты, в которых они появляются, помечаются значком электронной почты
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
|
||||
|
||||
<h3 id="я-хочу-управлять-своим-собственным-сервером-для-delta-chat-что-вы-посоветуете">
|
||||
|
||||
|
||||
Я хочу управлять своим собственным сервером для Delta Chat. Что вы посоветуете? <a href="#я-хочу-управлять-своим-собственным-сервером-для-delta-chat-что-вы-посоветуете" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Подойдет любая корректная настройка почтового сервера, за исключением случаев, когда для корректной работы устройств ваших пользователей требуются <a href="#instant-delivery">Push-уведомления</a> Google/Apple.</p>
|
||||
|
||||
<p>Мы обычно рекомендуем <a href="https://chatmail.at/doc/relay/getting_started.html">настроить chatmail релей</a>.
|
||||
<a href="https://chatmail.at">Chatmail</a> — это проект, поддерживаемый сообществом который охватывает как настройку релеев, так
|
||||
и <a href="https://github.com/chatmail/core">основные разработки на Rust</a>
|
||||
которые обеспечивают работу <a href="https://chatmail.at/clients">клиентов chatmail</a> наиболее известным из которых является Delta Chat.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
@@ -1022,77 +1131,19 @@ PIN-код разблокировки экрана, графический кл
|
||||
<p>Нас интересует, например, следующая статистика:</p>
|
||||
|
||||
<ul>
|
||||
<li>Сколько контактов добавляется путём личного сканирования QR-кода?</li>
|
||||
<li>Какие версии Delta Chat используются?</li>
|
||||
<li>Сколько сообщений в незашифрованном виде?</li>
|
||||
<li>
|
||||
<p>Сколько контактов можно добавить ручным сканированием QR-кода?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Какие версии Delta Chat используются?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Какие ошибки возникают у пользователей?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Мы <em>не</em> собираем какую-либо информацию, позволяющую идентифицировать вас лично.</p>
|
||||
|
||||
<h3 id="могу-ли-я-использовать-обычный-адрес-электронной-почты-с-delta-chat">
|
||||
|
||||
|
||||
Могу ли я использовать обычный адрес электронной почты с Delta Chat? <a href="#могу-ли-я-использовать-обычный-адрес-электронной-почты-с-delta-chat" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Да, но только если адрес электронной почты используется исключительно <a href="https://chatmail.at/clients">chatmail клиентами</a>.</p>
|
||||
|
||||
<p>Не поддерживается совместное использование адреса электронной почты с приложениями, не являющимися клиентами chatmail или веб-интерфейсами для работы с почтой,
|
||||
по следующим причинам:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Приложения, не являющиеся клиентами chatmail, в основном не обеспечивают автоматическое сквозное шифрование электронной почты для своих пользователей,
|
||||
тогда как приложения и релеи chatmail повсеместно применяют сквозное шифрование и стандарты безопасности.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Приложения, не являющиеся клиентами chatmail, используют серверы электронной почты в качестве долгосрочного архива сообщений,
|
||||
тогда как клиенты chatmail используют почтовые серверы для передачи мгновенных сообщений с коротким сроком жизни.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Поддержка всего разнообразия классических настроек электронной почты
|
||||
потребует значительных усилий по разработке и сопровождению,
|
||||
а также усложнит повышение устойчивости, надёжности и скорости обмена сообщениями на основе chatmail.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="classic-email">
|
||||
|
||||
|
||||
Как настроить профиль чата с использованием классического адреса электронной почты в качестве транспорта? <a href="#classic-email" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Прежде всего, <strong>не используйте те же классические адреса электронной почты, которые используются в обычных приложениях для отправки писем</strong>
|
||||
если вы не готовы к зашифрованным сообщениям во входящих,
|
||||
двойным уведомлениям, случайному удалению писем или подобным неудобствам.</p>
|
||||
|
||||
<p>Вы можете настроить адрес электронной почты для чата в разделе <strong>Новый профиль → Использовать другой сервер → Использовать классическую почту в качестве транспорта</strong>.
|
||||
Обратите внимание, что классические почтовые провайдеры обычно не поддерживают <a href="#instant-delivery">Push-уведомления</a>
|
||||
и имеют другие ограничения, см. раздел <a href="https://providers.delta.chat">Обзор провайдеров</a>.
|
||||
Chatmail использует INBOX по умолчанию для ретрансляции; убедитесь, что провайдер также настроен.
|
||||
Профиль чата, использующий классический адрес электронной почты, позволяет отправлять и получать незашифрованные сообщения.
|
||||
Эти сообщения и чаты, в которых они появляются, помечаются значком электронной почты
|
||||
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
|
||||
|
||||
<h3 id="я-хочу-управлять-своим-собственным-сервером-для-delta-chat-что-вы-посоветуете">
|
||||
|
||||
|
||||
Я хочу управлять своим собственным сервером для Delta Chat. Что вы посоветуете? <a href="#я-хочу-управлять-своим-собственным-сервером-для-delta-chat-что-вы-посоветуете" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Подойдет любая корректная настройка почтового сервера, за исключением случаев, когда для корректной работы устройств ваших пользователей требуются <a href="#instant-delivery">Push-уведомления</a> Google/Apple.</p>
|
||||
|
||||
<p>Мы обычно рекомендуем <a href="https://chatmail.at/doc/relay/getting_started.html">настроить chatmail релей</a>.
|
||||
<a href="https://chatmail.at">Chatmail</a> — это проект, поддерживаемый сообществом который охватывает как настройку релеев, так
|
||||
и <a href="https://github.com/chatmail/core">основные разработки на Rust</a>
|
||||
которые обеспечивают работу <a href="https://chatmail.at/clients">клиентов chatmail</a> наиболее известным из которых является Delta Chat.</p>
|
||||
|
||||
<h3 id="меня-интересуют-технические-детали-можете-рассказать-больше">
|
||||
|
||||
|
||||
@@ -1101,9 +1152,7 @@ Chatmail использует INBOX по умолчанию для ретран
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Смотрите <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Стандарты, используемые в Delta Chat</a>.</li>
|
||||
</ul>
|
||||
<p>Смотрите <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Стандарты, используемые в Delta Chat</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1342,6 +1391,34 @@ Delta Chat вместо этого использует реализацию Ope
|
||||
Кроме того, если устройство изъято, контакты, использующие временные профили,
|
||||
не могут быть легко идентифицированы.</p>
|
||||
|
||||
<h3 id="кто-видит-мой-ip-адрес">
|
||||
|
||||
|
||||
Кто видит мой IP-адрес? <a href="#кто-видит-мой-ip-адрес" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Используемый <a href="#relays">релей</a> должен знать ваш IP-адрес,
|
||||
а также иногда устройства ваших контактов, если вы проводите совместные <a href="#experiments">звонки</a>
|
||||
или используете <a href="#webxdc">приложения</a>.</p>
|
||||
|
||||
<p>IP-адреса необходимы для обеспечения соединения и эффективности.
|
||||
Они не сохраняются и не передаются третьим лицам.
|
||||
Обратите внимание, что IP-адрес</p>
|
||||
<ul>
|
||||
<li>это не подробный адрес, который вы указываете службе доставки,
|
||||
а скорее приблизительный, обычно определяющий регион или страну.</li>
|
||||
</ul>
|
||||
|
||||
<p>Поскольку именно так по умолчанию работает интернет и другие мессенджеры,
|
||||
мы не предлагаем здесь никаких настроек и не задаём предварительных вопросов</p>
|
||||
|
||||
<p>Если вы считаете свой IP-адрес угрозой безопасности или конфиденциальности,
|
||||
мы рекомендуем использовать VPN в сочетании с режимом блокировки системы.
|
||||
Поиск настроек во всех приложениях на вашем устройстве оставит уязвимости.
|
||||
Например, нажатие на ссылку раскрывает IP-адрес неизвестным лицам и представляет собой гораздо больший риск в данном случае.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1350,7 +1427,7 @@ Delta Chat вместо этого использует реализацию Ope
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Нет, пока нет.</p>
|
||||
<p>Нет, еще нет.</p>
|
||||
|
||||
<p>Мессенджер Signal внедрил функцию <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” (Засекреченный отправитель) в 2018 году</a>,
|
||||
чтобы их серверная инфраструктура не имела информации о том, кто отправляет сообщение группе получателей.
|
||||
@@ -1371,7 +1448,7 @@ Delta Chat вместо этого использует реализацию Ope
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Нет, пока нет.</p>
|
||||
<p>Нет, еще нет.</p>
|
||||
|
||||
<p>На данный момент, Delta Chat не поддерживает Perfect Forward Secrecy (PFS) (Совершенную прямую секретность).
|
||||
Это означает, что если ваш приватный ключ дешифрования будет скомпрометирован,
|
||||
@@ -1397,7 +1474,7 @@ Delta Chat вместо этого использует реализацию Ope
|
||||
|
||||
</h3>
|
||||
|
||||
<p>Нет, пока нет.</p>
|
||||
<p>Нет, еще нет.</p>
|
||||
|
||||
<p>Delta Chat использует библиотеку OpenPGP на Rust <a href="https://github.com/rpgp/rpgp">rPGP</a>,
|
||||
которая поддерживает последний <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">черновик IETF Post-Quantum-Cryptography OpenPGP</a>.
|
||||
@@ -1581,52 +1658,38 @@ Google Play Store, F-Droid, Huawei App Gallery, iOS и macOS App Store, Microsof
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Проект ЕС <a href="https://nextleap.eu">NEXTLEAP</a> финансировал исследование
|
||||
и внедрение проверенных групп и настройку протоколов контактов
|
||||
в 2017 и 2018 годах, а также помог интегрировать сквозное шифрование
|
||||
через <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Фонд <a href="https://opentechfund.org">Open Technology Fund</a> предоставил нам
|
||||
первый грант в 2018/2019 году (~$200 тыс.), благодаря которому мы существенно улучшили приложение для Android
|
||||
и выпустили первую бета-версию приложения для настольных систем, а также провели
|
||||
исследования в области UX в контексте прав человека,
|
||||
см. наш заключительный отчет <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
Второй грант, полученный в 2019/2020 году (~$300 тыс.), помог нам
|
||||
выпустить версии Delta/iOS, перевести наш основной код на Rust и
|
||||
предоставить новые функции для всех платформ.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="https://nlnet.nl/">Фонд NLnet</a> выделил в 2019/2020 году 46 тыс. евро на
|
||||
завершение привязки Rust/Python и создание экосистемы чат-ботов.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>В 2021 г. мы получили дополнительное финансирование из ЕС для двух Next-Generation-Internet
|
||||
целей, а именно для <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - e-mail provider portability directory</a> (~97 тыс. евро) и <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90 тыс. евро). Это привело к улучшению поддержки нескольких профилей, улучшению настройки контактов и групп с помощью QR-кода и многим улучшениям в сетевом взаимодействии на всех платформах.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>С конца 2021 года по март 2023 года мы получили финансирование в размере ($500 тыс.) от
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL) для поддержки <em>свободы интернета</em>.
|
||||
Это финансирование поддержало наши долгосрочные цели, сделать Delta Chat более удобным для использования
|
||||
и совместимым с широким спектром электронных почтовых серверов по всему миру, а также более устойчивым
|
||||
и безопасным в местах, часто подвергающихся интернет-цензуре и отключениям.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 мы завершили проект финансируемый OTF
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure Chatmail project</a>,
|
||||
что позволило нам внедрить гарантированное шифрование,
|
||||
создать сеть серверов <a href="https://delta.chat/chatmail">chatmail</a>
|
||||
и обеспечить “немедленную регистрацию” во всех приложениях, выпущенных с апреля 2024 года.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>В 2023 и 2024 годах мы были приняты в программу Next Generation Internet (NGI)
|
||||
за нашу работу над <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
в сотрудничестве с партнерами, работающими над
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> и
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
Все эти проекты частично завершены или будут завершены в начале 2025 года.</p>
|
||||
<p>Проект ЕС <a href="https://nextleap.eu">NEXTLEAP</a> финансировал исследование
|
||||
и внедрение проверенных групп и настройку протоколов контактов
|
||||
в 2017 и 2018 годах, а также помог интегрировать сквозное шифрование
|
||||
через <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Иногда мы получаем разовые пожертвования от физических лиц.
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<li><a href="#čo-znamenajú-zaškrtnutia-zobrazené-vedľa-odchádzajúcich-správ">Čo znamenajú zaškrtnutia zobrazené vedľa odchádzajúcich správ?</a></li>
|
||||
<li><a href="#edit">Correct typos and delete messages after sending</a></li>
|
||||
<li><a href="#ephemeralmsgs">How do disappearing messages work?</a></li>
|
||||
<li><a href="#delold">What happens if I turn on “Delete old messages from device”?</a></li>
|
||||
<li><a href="#delold">What happens if I turn on “Delete Messages from Device”?</a></li>
|
||||
<li><a href="#remove-account">How can I delete my chat profile?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#omylom-som-sa-vymazal">Omylom som sa vymazal.</a></li>
|
||||
<li><a href="#už-viac-nechcem-dostávať-správy-od-skupiny">Už viac nechcem dostávať správy od skupiny.</a></li>
|
||||
<li><a href="#cloning-a-group">Cloning a group</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#advanced">Advanced</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#experiments">Experimental Features</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#zaujímajú-ma-technické-detaily-môžete-mi-povedať-viac">Zaujímajú ma technické detaily. Môžete mi povedať viac?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
|
||||
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
|
||||
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
|
||||
@@ -184,7 +187,8 @@ If you add each other to <a href="#groups">groups</a>, end-to-end encryption wil
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -222,15 +226,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>Yes. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -261,16 +260,11 @@ or to <strong>Switch Profiles</strong>.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>V nastaveniach si môžete pridať profilový obrázok. Ak napíšete svojim kontaktom
|
||||
<p>V nastaveniach si môžete pridať profilový obrázok. Ak napíšete svojim kontaktom
|
||||
alebo si ich pridáte pomocou QR kódu, automaticky to vidia ako váš profilový obrázok.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Z dôvodu ochrany osobných údajov nikto nevidí váš profilový obrázok, kým im nenapíšete
|
||||
|
||||
<p>Z dôvodu ochrany osobných údajov nikto nevidí váš profilový obrázok, kým im nenapíšete
|
||||
správu.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -304,7 +298,8 @@ they will see it when they view your contact details.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Archive chats</strong> if you do not want to see them in your chat list any longer.
|
||||
Archived chats remain accessible above the chat list or via search.</p>
|
||||
They remain accessible above the chat list or via search
|
||||
and are marked by <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Archived</b></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>When an archived chat gets a new message, unless muted, it will <strong>pop out of the archive</strong> and back into your chat list.
|
||||
@@ -339,7 +334,7 @@ By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../g
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
<p>Finally, you can also use “Saved Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
@@ -376,22 +371,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -456,19 +447,18 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
<h3 id="delold">
|
||||
|
||||
|
||||
What happens if I turn on “Delete old messages from device”? <a href="#delold" class="anchor"></a>
|
||||
What happens if I turn on “Delete Messages from Device”? <a href="#delold" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>If you want to save storage on your device, you can choose to delete old
|
||||
messages automatically.</li>
|
||||
<li>To turn it on, go to “delete old messages from device” in the “Chats & Media”
|
||||
settings. You can set a timeframe between “after an hour” and “after a year”;
|
||||
<p>If you want to save storage on your device, you can choose to delete old
|
||||
messages automatically.</p>
|
||||
|
||||
<p>To turn it on, go to <strong>Settings → Chats → Delete Message from Device</strong>.
|
||||
You can set a timeframe between “after an hour” and “after a year”;
|
||||
this way, <em>all</em> messages will be deleted from your device as soon as they are
|
||||
older than that.</li>
|
||||
</ul>
|
||||
older than that.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -516,9 +506,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Vyberte <strong>Nový chat</strong> a potom <strong>Nová skupina</strong> z ponuky v pravom hornom rohu alebo stlačte príslušné tlačidlo v systéme Android/iOS.</li>
|
||||
<li>Na nasledujúcej obrazovke vyberte <strong>členov skupiny</strong> a definujte <strong>názov skupiny</strong>. Môžete si tiež vybrať <strong>avatara skupiny</strong>.</li>
|
||||
<li>Hneď ako napíšete <strong>prvú správu</strong> v skupine, všetci členovia sú informovaní o novej skupine a môžu odpovedať v skupine (pokiaľ nenapíšete správu v skupine, skupina je pre skupinu neviditeľná členovia).</li>
|
||||
<li>
|
||||
<p>Vyberte <strong>Nový chat</strong> a potom <strong>Nová skupina</strong> z ponuky v pravom hornom rohu alebo stlačte príslušné tlačidlo v systéme Android/iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Na nasledujúcej obrazovke vyberte <strong>členov skupiny</strong> a definujte <strong>názov skupiny</strong>. Môžete si tiež vybrať <strong>avatara skupiny</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Hneď ako napíšete <strong>prvú správu</strong> v skupine, všetci členovia sú informovaní o novej skupine a môžu odpovedať v skupine (pokiaľ nenapíšete správu v skupine, skupina je pre skupinu neviditeľná členovia).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -529,11 +525,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -561,10 +556,8 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Keďže už nie ste členom skupiny, nemôžete sa znova pridať.
|
||||
Žiadny problém, jednoducho požiadajte ktoréhokoľvek iného člena skupiny v bežnom chate, aby vás znova pridal.</li>
|
||||
</ul>
|
||||
<p>Keďže už nie ste členom skupiny, nemôžete sa znova pridať.
|
||||
Žiadny problém, jednoducho požiadajte ktoréhokoľvek iného člena skupiny v bežnom chate, aby vás znova pridal.</p>
|
||||
|
||||
<h3 id="už-viac-nechcem-dostávať-správy-od-skupiny">
|
||||
|
||||
@@ -575,15 +568,12 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Vymažte sa zo zoznamu členov alebo odstráňte celý chat.
|
||||
Ak sa chcete neskôr znova pripojiť k skupine, požiadajte iného člena skupiny, aby vás znova pridal.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ako alternatívu môžete tiež “Stlmiť” skupinu - znamená to, že budete dostávať všetky správy a
|
||||
môžete stále písať, ale už nebudete upozorňovaní na žiadne nové správy.</p>
|
||||
</li>
|
||||
<li>Vymažte sa zo zoznamu členov alebo odstráňte celý chat.
|
||||
Ak sa chcete neskôr znova pripojiť k skupine, požiadajte iného člena skupiny, aby vás znova pridal.</li>
|
||||
</ul>
|
||||
|
||||
<p>Ako alternatívu môžete tiež “Stlmiť” skupinu - znamená to, že budete dostávať všetky správy a
|
||||
môžete stále písať, ale už nebudete upozorňovaní na žiadne nové správy.</p>
|
||||
|
||||
<h3 id="cloning-a-group">
|
||||
|
||||
@@ -609,6 +599,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -897,7 +902,7 @@ One device is not needed for the other to work.</p>
|
||||
<p>Double-check both devices are in the <strong>same Wi-Fi or network</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On <strong>Windows</strong>, go to <strong>Control Panel / Network and Internet</strong>
|
||||
<p>On <strong>Windows</strong>, go to “Control Panel / Network and Internet”
|
||||
and make sure, <strong>Private Network</strong> is selected as “Network profile type”
|
||||
(after transfer, you can change back to the original value)</p>
|
||||
</li>
|
||||
@@ -949,22 +954,21 @@ try the <strong>manual transfer</strong> described below</p>
|
||||
<p>This method is only recommended if “Add Second Device” as described above does not work.</p>
|
||||
|
||||
<ul>
|
||||
<li>On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your
|
||||
<li>
|
||||
<p>On the old device, go to <strong>Settings → Chats → Export Backup</strong>. Enter your
|
||||
screen unlock PIN, pattern, or password. Then you can click on “Start
|
||||
Backup”. This saves the backup file to your device. Now you have to transfer
|
||||
it to the other device somehow.</li>
|
||||
<li>On the new device, in the “I already have a profile” menu,
|
||||
choose “restore from backup”. After import, your conversations, encryption
|
||||
keys, and media should be copied to the new device.
|
||||
<ul>
|
||||
<li><strong>If you use iOS:</strong> and you encounter difficulties, maybe
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> will
|
||||
help you.</li>
|
||||
</ul>
|
||||
it to the other device somehow.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On the new device, select <strong>I Already Have a Profile → Restore from Backup</strong>.
|
||||
If you use iOS and encounter difficulties,
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> might help you.</p>
|
||||
</li>
|
||||
<li>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<p>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</p>
|
||||
|
||||
<h3 id="máte-nejaké-plány-na-zavedenie-webového-klienta-delta-chat">
|
||||
|
||||
@@ -993,10 +997,10 @@ alebo AppImage pre Linux. Nájdete ich na
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Experimental Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -1009,33 +1013,44 @@ you can try out features we are working on.</p>
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
@@ -1102,6 +1117,40 @@ except if your users’ devices require Google/Apple <a href="#instant-delivery"
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
|
||||
<h3 id="zaujímajú-ma-technické-detaily-môžete-mi-povedať-viac">
|
||||
|
||||
|
||||
@@ -1110,9 +1159,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Pozrite si <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Štandardy používané v Delta Chate</a>.</li>
|
||||
</ul>
|
||||
<p>Pozrite si <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Štandardy používané v Delta Chate</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1351,6 +1398,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1590,52 +1663,38 @@ ordered chronologically:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 we successfully completed the OTF-funded
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure Chatmail project</a>,
|
||||
allowing us to introduce guaranteed encryption,
|
||||
creating a <a href="https://delta.chat/chatmail">chatmail server network</a>
|
||||
and providing “instant onboarding” in all apps released from April 2024 on.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Sometimes we receive one-time donations from private individuals.
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#fshiva-veten-padashje">Fshiva veten padashje.</a></li>
|
||||
<li><a href="#sdua-ti-marr-më-mesazhet-e-një-grupi">S’dua t’i marr më mesazhet e një grupi.</a></li>
|
||||
<li><a href="#cloning-a-group">Cloning a group</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#advanced">Advanced</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#experiments">Experimental Features</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#më-interesojnë-hollësitë-teknike-mund-të-më-tregoni-diçka-më-tepër">Më interesojnë hollësitë teknike. Mund të më tregoni diçka më tepër?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
|
||||
<li><a href="#message-metadata">Si i mbron Delta Chat-i tejtëdhënat në mesazhe?</a></li>
|
||||
<li><a href="#device-seizure">Si të mbrohen tejtëdhënat dhe kontaktet, kur shtien në dorë një pajisje?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
|
||||
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
|
||||
<li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
|
||||
@@ -184,7 +187,8 @@ If you add each other to <a href="#groups">groups</a>, end-to-end encryption wil
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -222,15 +226,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Po Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>Po Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Si parazgjedhje, për funksionim më të mirë, figurat optimizohen dhe dërgohen në madhësi më të vogël, por mund ta dërgoni si një “kartelë”, që të ruhet origjinali.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Si parazgjedhje, për funksionim më të mirë, figurat optimizohen dhe dërgohen në madhësi më të vogël, por mund ta dërgoni si një “kartelë”, që të ruhet origjinali.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -261,16 +260,11 @@ or to <strong>Switch Profiles</strong>.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Mund të shtoni një foto profili te rregullimet tuaja. Nëse u shkruani kontakteve
|
||||
tuaja ose i shtoni përmes kodi QR, e shohin automatikisht si foton e profilit tuaj.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Për arsye privatësie, askush s’e sheh foton tuaj të profilit, deri sa
|
||||
t’u shkruani një mesazh.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Mund të shtoni një foto profili te rregullimet tuaja. Nëse u shkruani kontakteve
|
||||
tuaja ose i shtoni përmes kodi QR, e shohin automatikisht si foton e profilit tuaj.</p>
|
||||
|
||||
<p>Për arsye privatësie, askush s’e sheh foton tuaj të profilit, deri sa
|
||||
t’u shkruani një mesazh.</p>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -303,8 +297,7 @@ they will see it when they view your contact details.</p>
|
||||
<p><strong>Heshtoni fjalosje</strong>, nëse s’doni të merrni njoftime mbi to. Fjalosjet e heshtuara qëndrojnë në vend dhe mundeni edhe të fiksoni një fjalosje të heshtuar.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Arkivoni fjalosje</strong>, nëse s’doni t’i shihni më në listën tuaj të fjalosjeve.
|
||||
Fjalosjet e arkivuara mbesin të përdorshme mbi listën e fjalosjeve, ose përmes kërkimit.</p>
|
||||
<p><strong>Arkivoni fjalosje</strong>, nëse s’doni t’i shihni më në listën tuaj të fjalosjeve. Fjalosjet e arkivuara mbesin të përdorshme mbi listën e fjalosjeve, ose përmes kërkimit.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Kur te një fjalosje e arkivuar vjen një mesazh i ri, do të <strong>hapet jashtë arkivit</strong> dhe kalojë te lista juaj e fjalosjeve, veç në mos qoftë e heshtuar.
|
||||
@@ -340,7 +333,7 @@ By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../g
|
||||
you can go back to the original message in the original chat</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
<p>Finally, you can also use “Saved Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>As “Saved Message” are synced, they can become very handy for transferring data between devices</p>
|
||||
@@ -377,22 +370,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -462,14 +451,13 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Nëse doni të kurseni hapësirë në pajisjen tuaj, mund të zgjidhni të fshihen
|
||||
automatikisht mesazhe të vjetër.</li>
|
||||
<li>Për ta aktivizuar, kaloni te “fshi prej pajisjeje mesazhe të vjetër”, te rregullimet
|
||||
<p>Nëse doni të kurseni hapësirë në pajisjen tuaj, mund të zgjidhni të fshihen
|
||||
automatikisht mesazhe të vjetër.</p>
|
||||
|
||||
<p>Për ta aktivizuar, kaloni te “fshi prej pajisjeje mesazhe të vjetër”, te rregullimet
|
||||
“Fjalosje & Media”. Mund të caktoni një periudhë nga “pas një ore” e deri
|
||||
“pas një viti”; në këtë mënyrë, <em>krejt</em> mesazhet do të fshihen nga pajisja juaj
|
||||
sapo të jenë më të vjetër se aq.</li>
|
||||
</ul>
|
||||
sapo të jenë më të vjetër se aq.</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -517,9 +505,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Prej menusë në cepin e sipërm djathtas, përzgjidhni <strong>Fjalosje e re</strong> dhe mandej <strong>Grup i ri</strong>, ose shtypni butonin përgjegjës në Android/iOS.</li>
|
||||
<li>Te skena vijuese, përzgjidhni <strong>anëtarë grupi</strong> dhe përcaktoni një <strong>emër grupi</strong>. Mund të përzgjidhni edhe një <strong>avatar grupi</strong>.</li>
|
||||
<li>Sapo të shkruani <strong>mesazhin e parë</strong> te grupi, krejt anëtarët marrin vesh për grupin e ri dhe mund të përgjigjen në të (për sa kohë që te grupi s’shkruani një mesazh i cili është i padukshëm për anëtarët).</li>
|
||||
<li>
|
||||
<p>Prej menusë në cepin e sipërm djathtas, përzgjidhni <strong>Fjalosje e re</strong> dhe mandej <strong>Grup i ri</strong>, ose shtypni butonin përgjegjës në Android/iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Te skena vijuese, përzgjidhni <strong>anëtarë grupi</strong> dhe përcaktoni një <strong>emër grupi</strong>. Mund të përzgjidhni edhe një <strong>avatar grupi</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Sapo të shkruani <strong>mesazhin e parë</strong> te grupi, krejt anëtarët marrin vesh për grupin e ri dhe mund të përgjigjen në të (për sa kohë që te grupi s’shkruani një mesazh i cili është i padukshëm për anëtarët).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -530,11 +524,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -562,10 +555,8 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Ngaqë s’jeni më anëtar i grupit, s’mund të shtoni veten sërish.
|
||||
Megjithatë, s’ka problem, thjesht kërkojini një anëtari tjetër të grupit në një fjalosje të zakonshme t’ju shtojë sërish.</li>
|
||||
</ul>
|
||||
<p>Ngaqë s’jeni më anëtar i grupit, s’mund të shtoni veten sërish.
|
||||
Megjithatë, s’ka problem, thjesht kërkojini një anëtari tjetër të grupit në një fjalosje të zakonshme t’ju shtojë sërish.</p>
|
||||
|
||||
<h3 id="sdua-ti-marr-më-mesazhet-e-një-grupi">
|
||||
|
||||
@@ -576,16 +567,13 @@ Megjithatë, s’ka problem, thjesht kërkojini një anëtari tjetër të grupit
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Ose fshini veten si anëtar i listës, ose fshini krejt bisedën.
|
||||
Nëse më vonë doni të ribëheni pjesë e grupit, kërkojini një anëtari tjetër të grupit t’ju shtojë sërish.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ndryshe, mundeni edhe ta “Heshtoni” një grup - duke bërë këtë, do të merrni
|
||||
<li>Ose fshini veten si anëtar i listës, ose fshini krejt bisedën.
|
||||
Nëse më vonë doni të ribëheni pjesë e grupit, kërkojini një anëtari tjetër të grupit t’ju shtojë sërish.</li>
|
||||
</ul>
|
||||
|
||||
<p>Ndryshe, mundeni edhe ta “Heshtoni” një grup - duke bërë këtë, do të merrni
|
||||
krejt mesazhet dhe prapë mund të shkruani, por nuk njoftoheni më,
|
||||
për çfarëdo mesazhesh të rinj.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="cloning-a-group">
|
||||
|
||||
@@ -611,6 +599,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -899,7 +902,7 @@ Njëra pajisja s’ka nevojë për tjetrën që të funksionojë.</p>
|
||||
<p>Kontrolloni sërish që të dyja pajisjet të gjenden në <strong>të njëjtin rrjet Wi-Fi ose klasik</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On <strong>Windows</strong>, go to <strong>Control Panel / Network and Internet</strong>
|
||||
<p>On <strong>Windows</strong>, go to “Control Panel / Network and Internet”
|
||||
and make sure, <strong>Private Network</strong> is selected as “Network profile type”
|
||||
(after transfer, you can change back to the original value)</p>
|
||||
</li>
|
||||
@@ -951,22 +954,21 @@ provoni <strong>shpërnguljen dorazi</strong> të përshkruar më poshtë</p>
|
||||
<p>Kjo metodë rekomandohet vetëm nëse “Shtoni Pajisje të Dytë” si përshkruhet më sipër s’funksionon.</p>
|
||||
|
||||
<ul>
|
||||
<li>On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your
|
||||
<li>
|
||||
<p>On the old device, go to <strong>Settings → Chats → Export Backup</strong>. Enter your
|
||||
screen unlock PIN, pattern, or password. Then you can click on “Start
|
||||
Backup”. This saves the backup file to your device. Now you have to transfer
|
||||
it to the other device somehow.</li>
|
||||
<li>On the new device, in the “I already have a profile” menu,
|
||||
choose “restore from backup”. After import, your conversations, encryption
|
||||
keys, and media should be copied to the new device.
|
||||
<ul>
|
||||
<li><strong>If you use iOS:</strong> and you encounter difficulties, maybe
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> will
|
||||
help you.</li>
|
||||
</ul>
|
||||
it to the other device somehow.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>On the new device, select <strong>I Already Have a Profile → Restore from Backup</strong>.
|
||||
If you use iOS and encounter difficulties,
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">this guide</a> might help you.</p>
|
||||
</li>
|
||||
<li>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</li>
|
||||
</ul>
|
||||
|
||||
<p>You are now synchronized, and can use both devices for sending and receiving
|
||||
end-to-end encrypted messages with your communication partners.</p>
|
||||
|
||||
<h3 id="a-ka-ndonjë-plan-për-të-sjellë-një-klient-web-delta-chat">
|
||||
|
||||
@@ -997,10 +999,10 @@ Windows Desktop, ose AppImage për Linux. Mund t’i gjeni te
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Experimental Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -1013,33 +1015,44 @@ you can try out features we are working on.</p>
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
@@ -1106,6 +1119,40 @@ except if your users’ devices require Google/Apple <a href="#instant-delivery"
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
|
||||
<h3 id="më-interesojnë-hollësitë-teknike-mund-të-më-tregoni-diçka-më-tepër">
|
||||
|
||||
|
||||
@@ -1114,9 +1161,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Shihni <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standarde të përdorur në Delta Chat</a>.</li>
|
||||
</ul>
|
||||
<p>Shihni <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Standarde të përdorur në Delta Chat</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1355,6 +1400,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1594,52 +1665,38 @@ ordered chronologically:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="https://opentechfund.org">Open Technology Fund</a> na dha grantin e parë
|
||||
për 2018/2019 (~200 mijë dollarë) me të cilin përmirësuam ndjeshëm aplikacionin
|
||||
për Android dhe hodhëm në qarkullim një version të parë beta aplikacioni për Desktop,
|
||||
si dhe i afroi më tepër zhvillimet tona për veçori me kërkime UX në kontekste të drejtash të njeriut,
|
||||
shihni <a href="https://delta.chat/en/2019-07-19-uxreport">raportin tonë përfundimtar “Needfinding and UX”</a>.
|
||||
Granti i dytë për 2019/2020 (~$300K) na ndihmoi të hedhim në qarkullim
|
||||
versione Delta/iOS, për të shndërruar bibliotekën tonë bazë në Rust, si dhe
|
||||
për të sjellë veçori të reja për krejt platformat.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 we successfully completed the OTF-funded
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure Chatmail project</a>,
|
||||
allowing us to introduce guaranteed encryption,
|
||||
creating a <a href="https://delta.chat/chatmail">chatmail server network</a>
|
||||
and providing “instant onboarding” in all apps released from April 2024 on.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
<p>The <a href="https://nextleap.eu">NEXTLEAP</a> EU project funded the research
|
||||
and implementation of verified groups and setup contact protocols
|
||||
in 2017 and 2018 and also helped to integrate end-to-end Encryption
|
||||
through <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ndonjëherë marrim dhurime unike nga individë privatë.
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
<li><a href="#я-випадково-себе-видалив">Я випадково себе видалив</a></li>
|
||||
<li><a href="#я-більше-не-хочу-отримувати-повідомлення-групи">Я більше не хочу отримувати повідомлення групи.</a></li>
|
||||
<li><a href="#клонування-групи">Клонування групи</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -53,11 +54,12 @@
|
||||
</li>
|
||||
<li><a href="#advanced">Advanced</a>
|
||||
<ul>
|
||||
<li><a href="#експериментальні-функції">Експериментальні функції</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#experiments">Експериментальні функції</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#я-хочу-керувати-власним-сервером-для-delta-chat-що-ви-порекомендуєте">Я хочу керувати власним сервером для Delta Chat. Що ви порекомендуєте?</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#мене-цікавлять-технічні-деталі-можете-розповісти-більше">Мене цікавлять технічні деталі. Можете розповісти більше?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -74,6 +76,7 @@
|
||||
<li><a href="#чи-повідомлення-позначені-значком-пошти-доступні-в-інтернетіtls">Чи повідомлення, позначені значком пошти, доступні в Інтернеті?{#tls}</a></li>
|
||||
<li><a href="#message-metadata">Як Delta Chat захищає метадані у повідомленнях?</a></li>
|
||||
<li><a href="#device-seizure">Як захистити метадані та контакти якщо пристрій вилучено?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Чи підтримує Delta Chat функцію “Запечатаний відправник”?</a></li>
|
||||
<li><a href="#pfs">Чи підтримує Delta Chat цілковиту пряму секретність (Perfect Forward Secrecy)?</a></li>
|
||||
<li><a href="#pqc">Чи підтримує Delta Chat пост-квантову криптографію?</a></li>
|
||||
@@ -179,7 +182,8 @@ the ability to chat is delayed until connectivity is restored.</p>
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -215,15 +219,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Так. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>Так. Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>З міркувань продуктивності, зображення оптимізовані та надсилаються в меншому розмірі за замовчуванням, але ви можете надіслати їх як «файл», щоб зберегти оригінал.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>З міркувань продуктивності, зображення оптимізовані та надсилаються в меншому розмірі за замовчуванням, але ви можете надіслати їх як «файл», щоб зберегти оригінал.</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -253,14 +252,9 @@ and uses the server only to relay messages.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Ви можете додати зображення профілю в ваших налаштуваннях. Якщо ви пишете комусь із ваших контактів чи додаєте їх через QR код, вони автоматично побачать ваше зображення профілю.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Із міркувань приватності, ніхто не бачить ваше зображення профілю доки ви їм не напишете.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Ви можете додати зображення профілю в ваших налаштуваннях. Якщо ви пишете комусь із ваших контактів чи додаєте їх через QR код, вони автоматично побачать ваше зображення профілю.</p>
|
||||
|
||||
<p>Із міркувань приватності, ніхто не бачить ваше зображення профілю доки ви їм не напишете.</p>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -293,8 +287,7 @@ they will see it when they view your contact details.</p>
|
||||
<p><strong>Приглушіть чати</strong> якщо ви не хочете отримувати сповіщення для них. Приглушені чати залишаються на місці і ви також можете закріпити приглушений чат.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Архівуйте чати</strong>, якщо ви більше не хочете бачити їх у своєму списку чатів.
|
||||
Заархівовані чати залишаються доступними над списком чатів або через пошук.</p>
|
||||
<p><strong>Архівуйте чати</strong>, якщо ви більше не хочете бачити їх у своєму списку чатів. Заархівовані чати залишаються доступними над списком чатів або через пошук.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Коли архівний чат отримує нове повідомлення, якщо не приглушений, він <strong>вискочить з архіву</strong> і повернеться у ваш список чатів.
|
||||
@@ -361,22 +354,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -437,11 +426,10 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Якщо ви хочете заощадити пам’ять на своєму пристрої, ви можете видалити старе повідомлення автоматично.</li>
|
||||
<li>Щоб увімкнути його, перейдіть до «видалити старі повідомлення з пристрою» в налаштуваннях «Чатів та медіа» . Ви можете встановити часові рамки від «через годину» до «через рік»;
|
||||
Таким чином, <em>усі</em> повідомлення будуть видалені з вашого пристрою, як тільки вони будуть старішими за це.</li>
|
||||
</ul>
|
||||
<p>Якщо ви хочете заощадити пам’ять на своєму пристрої, ви можете видалити старе повідомлення автоматично.</p>
|
||||
|
||||
<p>Щоб увімкнути його, перейдіть до «видалити старі повідомлення з пристрою» в налаштуваннях «Чатів та медіа» . Ви можете встановити часові рамки від «через годину» до «через рік»;
|
||||
Таким чином, <em>усі</em> повідомлення будуть видалені з вашого пристрою, як тільки вони будуть старішими за це.</p>
|
||||
|
||||
<p>Як я можу видалити свій профіль у Delta Chat? {#remove-account}</p>
|
||||
|
||||
@@ -483,9 +471,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Оберіть <strong>Новий чат</strong>, потім <strong>Нова групи</strong> у меню в верхньому правому кутку або натисніть відповідну кнопку у Android/iOS.</li>
|
||||
<li>На наступному екрані виберіть <strong>учасники групи</strong> та встановіть <strong>назву групи</strong>. Ви також можете обрати <strong>аватар групи</strong>.</li>
|
||||
<li>Як тільки ви напишете <strong>перше повідомлення</strong> у групу, усі учасники будуть проінформовані про нову групу і зможуть відповісти у нову групу (доки ви не напишете повідомлення у групі, група залишатиметься невидимою для учасників).</li>
|
||||
<li>
|
||||
<p>Оберіть <strong>Новий чат</strong>, потім <strong>Нова групи</strong> у меню в верхньому правому кутку або натисніть відповідну кнопку у Android/iOS.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>На наступному екрані виберіть <strong>учасники групи</strong> та встановіть <strong>назву групи</strong>. Ви також можете обрати <strong>аватар групи</strong>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Як тільки ви напишете <strong>перше повідомлення</strong> у групу, усі учасники будуть проінформовані про нову групу і зможуть відповісти у нову групу (доки ви не напишете повідомлення у групі, група залишатиметься невидимою для учасників).</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -496,11 +490,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Усі учасники групи мають <strong>однакові права</strong>.
|
||||
Тому кожен може видалити будь-якого учасника або додати нових.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -528,9 +521,7 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Оскільки ви більше не учасник групи, ви не зможете додати себе знову. Однак, це не проблема, просто попросіть будь-якого іншого учасника групи в звичайному чаті додати вас знову.</li>
|
||||
</ul>
|
||||
<p>Оскільки ви більше не учасник групи, ви не зможете додати себе знову. Однак, це не проблема, просто попросіть будь-якого іншого учасника групи в звичайному чаті додати вас знову.</p>
|
||||
|
||||
<h3 id="я-більше-не-хочу-отримувати-повідомлення-групи">
|
||||
|
||||
@@ -541,13 +532,10 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Або видаліть себе із списку учасників групи, або видаліть весь чат. Якщо ви хочете повернутись до чату пізніше, попросіть іншого учасника групи додати вас знову.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ви також можете “Заглушити” групу - це означає, що ви будете отримувати усі повідомлення та можете писати у групу, але ви більше не будете отримувати сповіщення про нові повідомлення.</p>
|
||||
</li>
|
||||
<li>Або видаліть себе із списку учасників групи, або видаліть весь чат. Якщо ви хочете повернутись до чату пізніше, попросіть іншого учасника групи додати вас знову.</li>
|
||||
</ul>
|
||||
|
||||
<p>Ви також можете “Заглушити” групу - це означає, що ви будете отримувати усі повідомлення та можете писати у групу, але ви більше не будете отримувати сповіщення про нові повідомлення.</p>
|
||||
|
||||
<h3 id="клонування-групи">
|
||||
|
||||
@@ -573,6 +561,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>Нова група є <strong>цілком незалежною</strong> від оригінальної,
|
||||
котра продовжує працювати як раніше.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -830,7 +833,7 @@ Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
<p>Ще раз упевніться, що обидва пристрої підключені до <strong>одного Wi-Fi або мережі</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>У <strong>Windows</strong> перейдіть до <strong>Панель керування / Мережа та Інтернет</strong> і переконайтеся, що <strong>Приватна мережа</strong> вибрано як “Тип мережевого профілю” (після перенесення ви можете повернути початкове значення)</p>
|
||||
<p>У <strong>Windows</strong> перейдіть до “Панель керування / Мережа та Інтернет” і переконайтеся, що <strong>Приватна мережа</strong> вибрано як “Тип мережевого профілю” (після перенесення ви можете повернути початкове значення)</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>На <strong>iOS</strong> переконайтеся, що доступ до “Системні налаштування / Програми / Delta Chat / <strong>Локальна мережа</strong>” дозволено</p>
|
||||
@@ -872,11 +875,14 @@ Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
<p>Цей спосіб рекомендований, лише якщо «Додати другий пристрій», як описано вище, не працює.</p>
|
||||
|
||||
<ul>
|
||||
<li>На старому пристрої перейдіть до “Налаштування -> Чати та медіа -> Експортувати резервну копію”. Введіть свій PIN-код, графічний ключ або пароль розблокування екрана. Потім ви можете натиснути на “Почати резервне копіювання”. Це збереже файл резервної копії на вашому пристрої. Тепер вам потрібно якось перенести його на інший пристрій.</li>
|
||||
<li>На новому пристрої в меню “У мене вже є профіль” виберіть “Відновити з резервної копії”. Після імпорту ваші розмови, ключі шифрування ключі шифрування та медіа повинні бути скопійовані на новий пристрій.</li>
|
||||
<li>Якщо ви користуєтеся iOS:** і у вас виникли труднощі, можливо <a href="https://support.delta.chat/t/import-backup-to-ios/1628">цей посібник</a> допоможе вам.</li>
|
||||
<li>Тепер ви синхронізовані і можете використовувати обидва пристрої для надсилання та отримання наскрізних зашифрованих повідомлень зі своїми партнерами по спілкуванню.</li>
|
||||
<li>
|
||||
<p>На старому пристрої перейдіть до <strong>Налаштування → Чати та медіа → Експортувати резервну копію</strong>. Введіть свій PIN-код, графічний ключ або пароль розблокування екрана. Потім ви можете натиснути на “Почати резервне копіювання”. Це збереже файл резервної копії на вашому пристрої. Тепер вам потрібно якось перенести його на інший пристрій.</p>
|
||||
</li>
|
||||
<li>На новому пристрої в меню <strong>У мене вже є профіль</strong> виберіть <strong>Відновити з резервної копії</strong>. Після імпорту ваші розмови, ключі шифрування ключі шифрування та медіа повинні бути скопійовані на новий пристрій.</li>
|
||||
<li>Якщо ви користуєтеся iOS: і у вас виникли труднощі, можливо <a href="https://support.delta.chat/t/import-backup-to-ios/1628">цей посібник</a> допоможе вам.</li>
|
||||
</ul>
|
||||
|
||||
<p>Тепер ви синхронізовані і можете використовувати обидва пристрої для надсилання та отримання наскрізних зашифрованих повідомлень зі своїми партнерами по спілкуванню.</p>
|
||||
|
||||
<h3 id="чи-планується-впровадження-веб-клієнта-delta-chat">
|
||||
|
||||
@@ -900,10 +906,10 @@ Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="експериментальні-функції">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Експериментальні функції <a href="#експериментальні-функції" class="anchor"></a>
|
||||
Експериментальні функції <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -916,33 +922,44 @@ you can try out features we are working on.</p>
|
||||
<p>Ви можете знайти додаткову інформацію
|
||||
та залишити відгук на <a href="https://support.delta.chat">форумі</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>Коли Ви увімкнете цю функцію,
|
||||
щотижнева статистика буде автоматично надсилатися боту.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Ми <em>не</em> будемо збирати жодних персональних даних, які б могли ідентифікувати Вас особисто.</p>
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
@@ -1009,6 +1026,40 @@ except if your users’ devices require Google/Apple <a href="#instant-delivery"
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>Коли Ви увімкнете цю функцію,
|
||||
щотижнева статистика буде автоматично надсилатися боту.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Ми <em>не</em> будемо збирати жодних персональних даних, які б могли ідентифікувати Вас особисто.</p>
|
||||
|
||||
<h3 id="мене-цікавлять-технічні-деталі-можете-розповісти-більше">
|
||||
|
||||
|
||||
@@ -1017,9 +1068,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>Дивіться <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Стандарти, що використовуються у Delta Chat</a>.</li>
|
||||
</ul>
|
||||
<p>Дивіться <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Стандарти, що використовуються у Delta Chat</a>.</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1154,21 +1203,9 @@ and there must be tangible improvements for users.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<p>If you are sending or receiving email messages without end-to-end encryption (using a classic email server),
|
||||
they are still protected from cell or cable companies who can not read or modify your email messages.
|
||||
But both your and your recipient’s email providers
|
||||
may read, analyze or modify your messages, including any attachments.</p>
|
||||
<p>Якщо ви надсилаєте або отримуєте електронні листи без наскрізного шифрування (використовуючи класичний сервер електронної пошти), вони все одно захищені від мобільних або кабельних компаній, які не можуть читати чи змінювати ваші повідомлення. Однак як ваш, так і поштовий провайдер одержувача можуть читати, аналізувати або змінювати ваші листи, включаючи будь-які вкладення.</p>
|
||||
|
||||
<p>Delta Chat by default uses strict
|
||||
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
|
||||
which secures connections between your device and your email provider.
|
||||
All of Delta Chat’s TLS-handling has been independently <a href="#security-audits">security audited</a>.
|
||||
Moreover, the connection between your and the recipient’s email provider
|
||||
will typically be transport-encrypted as well.
|
||||
If the involved email servers support <a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a>
|
||||
then transport encryption will be enforced between email providers
|
||||
in which case Delta Chat communications will never be exposed in cleartext to the Internet
|
||||
even if the message was not end-to-end encrypted.</p>
|
||||
<p>За замовчуванням Delta Chat використовує суворе <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS-шифрування</a> яке захищає з’єднання між вашим пристроєм і провайдером електронної пошти. Вся робота з TLS-шифруванням Delta Chat пройшла незалежний <a href="#security-audits">аудит безпеки</a>. Крім того, з’єднання між вашим провайдером та провайдером електронної пошти одержувача зазвичай також шифрується при передачі даних. Якщо задіяні поштові сервери підтримують <a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a> то між провайдерами електронної пошти буде застосовуватися транспортне шифрування в цьому випадку повідомлення Delta Chat ніколи не будуть доступні в Інтернеті у вигляді відкритого тексту навіть якщо повідомлення не було наскрізь зашифровано.</p>
|
||||
|
||||
<h3 id="message-metadata">
|
||||
|
||||
@@ -1209,6 +1246,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1382,38 +1445,35 @@ Google Play Store, F-Droid, Huawei App Gallery, iOS and macOS App Store, Microso
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>Проект ЄС <a href="https://nextleap.eu">NEXTLEAP</a> фінансував дослідження та впровадження верифікованих груп і протоколів встановлення контактів у 2017 та 2018 роках, а також допоміг інтегрувати наскрізне шифрування через <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="https://opentechfund.org">Open Technology Fund</a> надав нам два гранти.
|
||||
Перший грант 2018/2019 року (~$200K), допоміг значно покращили додаток для Android
|
||||
і випустили першу бета-версію додатка для ПК, і який до того ж
|
||||
закріпив наші розробки функцій у дослідженнях UX у контексті прав людини,
|
||||
дивіться наш підсумковий звіт <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
Другий грант 2019/2020 року (~$300K) допоміг нам
|
||||
випустити Delta/iOS версію, конвертувати нашу основному бібліотеку на Rust,
|
||||
і додати нові функції для всіх платформ.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Фонд <a href="https://nlnet.nl/">NLnet</a> виділив у 2019/2020 роках 46 тисяч євро на
|
||||
завершення прив’язок Rust/Python та запуск екосистеми чат-ботів.</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>У 2023-2024 роках ми успішно завершили проєкт <a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">Secure Chatmail</a>, що фінансувався OTF, що дозволило нам запровадити гарантоване шифрування, створити <a href="https://delta.chat/chatmail">мережу серверів chatmail</a> та забезпечити “миттєву реєстрацію” у всіх застосунках, випущених з квітня 2024 року.</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>У 2023 та 2024 роках нас прийняли до програми Next Generation Internet (NGI) за нашу роботу над <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>, а також у співпраці з партнерами, які працюють над <a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>, <a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>, <a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> та <a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>. Усі ці проєкти частково завершені або будуть завершені на початку 2025 року.</p>
|
||||
<p>Проект ЄС <a href="https://nextleap.eu">NEXTLEAP</a> фінансував дослідження та впровадження верифікованих груп і протоколів встановлення контактів у 2017 та 2018 роках, а також допоміг інтегрувати наскрізне шифрування через <a href="https://autocrypt.org">Autocrypt</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Іноді ми отримуємо одноразові пожертви від приватних осіб. Наприклад, у 2021 році щедра приватна особа перерахував нам 4 тис. євро з повідомленням «так тримати!». 💜 Ми використовуємо такі пожертви для фінансування зборів на розвиток або для тимчасових витрат, які важко передбачити або відшкодувати за рахунок грантів державного фінансування. Отримання більшої кількості пожертв також допомагає нам стати більш незалежними та довгостроково життєздатними як спільнота контриб’юторів.</p>
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<li><a href="#我不小心删除了我自己">我不小心删除了我自己。</a></li>
|
||||
<li><a href="#我不想再收到某个群组中的消息了">我不想再收到某个群组中的消息了。</a></li>
|
||||
<li><a href="#cloning-a-group">Cloning a group</a></li>
|
||||
<li><a href="#how-many-members-can-participate-in-a-single-group">How many members can participate in a single group?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#webxdc">In-chat apps</a>
|
||||
@@ -54,11 +55,12 @@
|
||||
</li>
|
||||
<li><a href="#advanced">Advanced</a>
|
||||
<ul>
|
||||
<li><a href="#experimental-features">Experimental Features</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#experiments">Experimental Features</a></li>
|
||||
<li><a href="#relays">What are Relays?</a></li>
|
||||
<li><a href="#can-i-use-a-classic-email-address-with-delta-chat">Can I use a classic email address with Delta Chat?</a></li>
|
||||
<li><a href="#classic-email">How can I configure a chat profile with a classic email address as relay?</a></li>
|
||||
<li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
|
||||
<li><a href="#statssending">What is “Send statistics to Delta Chat’s developers”?</a></li>
|
||||
<li><a href="#我对技术细节很感兴趣能告诉我更多吗">我对技术细节很感兴趣。能告诉我更多吗?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@@ -75,6 +77,7 @@
|
||||
<li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
|
||||
<li><a href="#message-metadata">Delta Chat 如何保护消息中的元数据?</a></li>
|
||||
<li><a href="#device-seizure">当设备被查封时,如何保护元数据和联系人?</a></li>
|
||||
<li><a href="#who-sees-my-ip-address">Who sees my IP Address?</a></li>
|
||||
<li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
|
||||
<li><a href="#pfs">Delta Chat 是否支持完美前向保密?</a></li>
|
||||
<li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
|
||||
@@ -184,7 +187,8 @@ If you add each other to <a href="#groups">groups</a>, end-to-end encryption wil
|
||||
<p>As being a private messenger,
|
||||
only friends and family you <a href="#howtoe2ee">share your QR code or invite link with</a> can write to you.</p>
|
||||
|
||||
<p>Your friends may share your contact with other friends, this appears as a <strong>request</strong>.</p>
|
||||
<p>Your friends may share your contact with other friends,
|
||||
this appears as <b style="border: 1px solid currentColor; padding: 0 3px; font-size:90%">Request</b></p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
@@ -222,15 +226,10 @@ and can tap it to start chatting with the first contact.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>是的。 Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
<p>是的。 Images, videos, files, voice messages etc. can be sent using the <img style="vertical-align:middle; width:1.0em; margin:1px" src="../paperclip.png" alt="Paperclip" /> <strong>Attachment-</strong>
|
||||
or <img style="vertical-align:middle; width:0.8em; margin:1px" src="../mic.png" alt="Microphone" /> <strong>Voice Message</strong> buttons</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>为了提高性能,默认情况下会对图像进行优化并以较小的尺寸发送,但您也可以将其作为 “文件 “发送,以保留原始图像。</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>为了提高性能,默认情况下会对图像进行优化并以较小的尺寸发送,但您也可以将其作为 “文件 “发送,以保留原始图像。</p>
|
||||
|
||||
<h3 id="multiple-accounts">
|
||||
|
||||
@@ -261,14 +260,9 @@ and uses the server only to relay messages.</p>
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>您可以在设置中添加个人资料图片。如果您给您的联系人发消息或者通过二维码添加他们,他们会自动看到您的个人资料图片。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>出于隐私原因,在您向他们发送消息之前,没有人会看到您的个人资料照片。</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>您可以在设置中添加个人资料图片。如果您给您的联系人发消息或者通过二维码添加他们,他们会自动看到您的个人资料图片。</p>
|
||||
|
||||
<p>出于隐私原因,在您向他们发送消息之前,没有人会看到您的个人资料照片。</p>
|
||||
|
||||
<h3 id="signature">
|
||||
|
||||
@@ -374,22 +368,18 @@ and others will as well not always see that you are “online”.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><strong>One tick</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick1.png" alt="" />
|
||||
means that the message was sent successfully to your provider.</p>
|
||||
means that the message was sent successfully to the <a href="#relays">relay</a>.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><strong>Two ticks</strong> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../tick2.png" alt="" />
|
||||
mean that at least one recipient’s device
|
||||
reported back to having received the message.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Recipients may have disabled read-receipts,
|
||||
so even if you see only one tick, the message may have been read.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The other way round, two ticks do not automatically mean
|
||||
that a human has read or understood the message ;)</p>
|
||||
indicate your contact has read the message.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>In <a href="#groups">groups</a> the second tick means that at least one member has reported back having read the message.</p>
|
||||
|
||||
<p>You will only get the second tick if both you and one of the recipients who read the message
|
||||
has <strong>Settings → Chats → Read Receipts</strong> enabled.</p>
|
||||
|
||||
<h3 id="edit">
|
||||
|
||||
@@ -455,10 +445,9 @@ the (anyway encrypted) messages may take longer to get deleted from their server
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>若要节省设备上的存储空间,可以开启自动删除旧消息。</li>
|
||||
<li>找到“聊天与媒体”设置中的“从设备删除旧消息”,在从“一小时后”到“一年后”的一系列选项中选择一个。这样,设备上 <em>所有</em> 比所选择时间长度老的消息将被删除。</li>
|
||||
</ul>
|
||||
<p>若要节省设备上的存储空间,可以开启自动删除旧消息</p>
|
||||
|
||||
<p>找到“聊天与媒体”设置中的“从设备删除旧消息”,在从“一小时后”到“一年后”的一系列选项中选择一个。这样,设备上 <em>所有</em> 比所选择时间长度老的消息将被删除</p>
|
||||
|
||||
<h3 id="remove-account">
|
||||
|
||||
@@ -506,9 +495,15 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>从右上角的菜单中选择<strong>新建聊天</strong>,然后选择<strong>新建群组</strong>或在 Android/iOS 上点击相应的按钮。</li>
|
||||
<li>在随后的屏幕上,选择<strong>群组成员</strong>并起一个<strong>群组名称</strong>。您也可以选择一个<strong>群组头像</strong>。</li>
|
||||
<li>当您在群组中发送<strong>第一条消息</strong>时,所有成员都会被告知新群组的信息并可以在该群组中应答(只要您不在群组中发送第一条消息,那么群组对成员就是不可见的)。</li>
|
||||
<li>
|
||||
<p>从右上角的菜单中选择<strong>新建聊天</strong>,然后选择<strong>新建群组</strong>或在 Android/iOS 上点击相应的按钮。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>在随后的屏幕上,选择<strong>群组成员</strong>并起一个<strong>群组名称</strong>。您也可以选择一个<strong>群组头像</strong>。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>当您在群组中发送<strong>第一条消息</strong>时,所有成员都会被告知新群组的信息并可以在该群组中应答(只要您不在群组中发送第一条消息,那么群组对成员就是不可见的)。</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="addmembers">
|
||||
@@ -519,11 +514,10 @@ and <a href="#edit">delete their own messages</a> from all member’s devices.</
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
<p>All group members have the <strong>same rights</strong>.
|
||||
For this reason, everyone can delete any member or add new ones.</p>
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>To <strong>add or delete members</strong>, tap the group name in the chat and select the member to add or remove.</p>
|
||||
</li>
|
||||
@@ -551,9 +545,7 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>由于您不再是群组成员,您无法将自己加入到群组中。但是,问题不大,只需在普通聊天中请求其他群组成员将您重新加入即可。</li>
|
||||
</ul>
|
||||
<p>由于您不再是群组成员,您无法将自己加入到群组中。但是,问题不大,只需在普通聊天中请求其他群组成员将您重新加入即可。</p>
|
||||
|
||||
<h3 id="我不想再收到某个群组中的消息了">
|
||||
|
||||
@@ -564,13 +556,10 @@ However, since groups are <a href="#groups">meant for trusted people</a>, avoid
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>从成员列表中删除自己,或者删除整个聊天。如果您之后想再加入该群组,请让其他群组成员添加您。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>另外,您也可以“静音”群组——这样做意味着您会收到所有消息并且仍可以编写消息,但不会再收到任何新消息的通知。</p>
|
||||
</li>
|
||||
<li>从成员列表中删除自己,或者删除整个聊天。如果您之后想再加入该群组,请让其他群组成员添加您。</li>
|
||||
</ul>
|
||||
|
||||
<p>另外,您也可以“静音”群组——这样做意味着您会收到所有消息并且仍可以编写消息,但不会再收到任何新消息的通知。</p>
|
||||
|
||||
<h3 id="cloning-a-group">
|
||||
|
||||
@@ -596,6 +585,21 @@ or right-click the group in the chat list (Desktop).</p>
|
||||
<p>The new group is <strong>fully independent</strong> from the original,
|
||||
which continues to work as before.</p>
|
||||
|
||||
<h3 id="how-many-members-can-participate-in-a-single-group">
|
||||
|
||||
|
||||
How many members can participate in a single group? <a href="#how-many-members-can-participate-in-a-single-group" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>There is no strict technical limit,
|
||||
but more than 150 is not recommended.</p>
|
||||
|
||||
<p>As groups get larger, they can become socially unstable and may need a hierarchy -
|
||||
where Delta Chat is a private messenger for chatting with <a href="#groups">equal rights</a>.
|
||||
See <a href="https://en.wikipedia.org/wiki/Dunbar%27s_number">Dunbar’s number</a> for more insights.</p>
|
||||
|
||||
<h2 id="webxdc">
|
||||
|
||||
|
||||
@@ -881,7 +885,7 @@ Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
<p>仔细检查两台设备是否在<strong>同一个 Wi-Fi 或网络中</strong></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>在 <strong>Windows</strong> 上,转到<strong>控制面板 / 网络和 Internet</strong>
|
||||
<p>在 <strong>Windows</strong> 上,转到”控制面板 / 网络和 Internet”
|
||||
并确保<strong>专用网络</strong>被选为“网络配置文件类型”
|
||||
(传输后,你可以更改回原始值)</p>
|
||||
</li>
|
||||
@@ -933,19 +937,16 @@ Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
<p>仅当上述“添加第二台设备”方法不起作用时,才建议使用此方法。</p>
|
||||
|
||||
<ul>
|
||||
<li>在旧设备上,转到“设置 -> 聊天和媒体 -> 导出备份”。 输入你的
|
||||
屏幕解锁 PIN 码、图案或密码。 然后你可以点击“开始
|
||||
备份”。 这会将备份文件保存到你的设备。 现在你必须
|
||||
以某种方式将其传输到另一台设备。</li>
|
||||
<li>在新设备上,在“我已经有一个配置文件”菜单中,
|
||||
选择“从备份还原”。 导入后,你的对话、加密
|
||||
密钥和媒体应复制到新设备。</li>
|
||||
<li><strong>如果你使用 iOS:</strong> 并且你遇到困难,也许
|
||||
<a href="https://support.delta.chat/t/import-backup-to-ios/1628">本指南</a> 将
|
||||
帮助你。</li>
|
||||
<li>你现在已同步,并且可以使用两台设备与你的通信伙伴发送和接收
|
||||
端到端加密消息。</li>
|
||||
<li>
|
||||
<p>在旧设备上,转到“设置 -> 聊天和媒体 -> 导出备份”。 输入你的 屏幕解锁 PIN 码、图案或密码。 然后你可以点击“开始 备份”。 这会将备份文件保存到你的设备。 现在你必须 以某种方式将其传输到另一台设备。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>在新设备上,在“我已经有一个配置文件”菜单中,选择“从备份还原”。 导入后,你的对话、加密 密钥和媒体应复制到新设备。
|
||||
如果你使用 iOS: 并且你遇到困难,也许 <a href="https://support.delta.chat/t/import-backup-to-ios/1628">本指南</a> 将 帮助你。</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>你现在已同步,并且可以使用两台设备与你的通信伙伴发送和接收 端到端加密消息。</p>
|
||||
|
||||
<h3 id="有推出-delta-chat-web-客户端的计划吗">
|
||||
|
||||
@@ -969,10 +970,10 @@ Welcome to the power of the interoperable chatmail relay network :)</p>
|
||||
|
||||
</h2>
|
||||
|
||||
<h3 id="experimental-features">
|
||||
<h3 id="experiments">
|
||||
|
||||
|
||||
Experimental Features <a href="#experimental-features" class="anchor"></a>
|
||||
Experimental Features <a href="#experiments" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
@@ -985,33 +986,44 @@ you can try out features we are working on.</p>
|
||||
<p>You can find more information
|
||||
and give feedback in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
<h3 id="relays">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
What are Relays? <a href="#relays" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
<p>Relays are used to temporarily hold messages in case your device is offline.
|
||||
Relays are cheap and dumb servers,
|
||||
that do not store data as group states, your name or avatar -
|
||||
all that exist only on your device.
|
||||
Relays are operated by different groups and people.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
<p>By default, after installation, a relay is <strong>automatically set up</strong>,
|
||||
so you do not need to care about that.
|
||||
However, if you want to,
|
||||
you can configure relays at At <strong>Settings → Advanced → Relays</strong>:</p>
|
||||
|
||||
<ul>
|
||||
<li>How many contacts are introduced by personally scanning a QR code?</li>
|
||||
<li>Which versions of Delta Chat are being used?</li>
|
||||
<li>How many messages are unencrypted?</li>
|
||||
<li>
|
||||
<p>You can <strong>add</strong> a relay by scanning its QR code;
|
||||
<a href="https://chatmail.at/relays">https://chatmail.at/relays</a> shows some known ones.
|
||||
If you have multiple relays, you will receive messages on all of them.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>The <strong>default</strong> defines the one where your chat partners send future messages to.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>If you <strong>remove</strong> a relay,
|
||||
make sure another default relay was used for a sufficient amount of time.
|
||||
Otherwise, messages from your chat partners won’t reach you.
|
||||
If in doubt, remove later.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
<p>For more details and future possibilities of relays,
|
||||
you can follow discussions in the <a href="https://support.delta.chat">Forum</a>.</p>
|
||||
|
||||
<h3 id="can-i-use-a-classic-email-address-with-delta-chat">
|
||||
|
||||
@@ -1078,6 +1090,40 @@ except if your users’ devices require Google/Apple <a href="#instant-delivery"
|
||||
and <a href="https://github.com/chatmail/core">core Rust developments</a>
|
||||
that power <a href="https://chatmail.at/clients">chatmail clients</a> of which Delta Chat is the most well known.</p>
|
||||
|
||||
<h3 id="statssending">
|
||||
|
||||
|
||||
What is “Send statistics to Delta Chat’s developers”? <a href="#statssending" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>We would like to improve Delta Chat with your help,
|
||||
which is why Delta Chat for Android asks whether you want
|
||||
to send anonymous usage statistics.</p>
|
||||
|
||||
<p>You can turn it on and off at
|
||||
<strong>Settings → Advanced → Send statistics to Delta Chat’s developers</strong>.</p>
|
||||
|
||||
<p>When you turn it on,
|
||||
weekly statistics will be automatically sent to a bot.</p>
|
||||
|
||||
<p>We are interested e.g. in statistics like:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p>How many contacts are introduced by personally scanning a QR code?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Which versions of Delta Chat are being used?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>What errors occur for users?</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>We will <em>not</em> collect any personally identifiable information about you.</p>
|
||||
|
||||
<h3 id="我对技术细节很感兴趣能告诉我更多吗">
|
||||
|
||||
|
||||
@@ -1086,9 +1132,7 @@ that power <a href="https://chatmail.at/clients">chatmail clients</a> of which D
|
||||
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
<li>请参阅 <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Delta Chat 中使用的标准</a>。</li>
|
||||
</ul>
|
||||
<p>请参阅 <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Delta Chat 中使用的标准</a>。</p>
|
||||
|
||||
<h2 id="e2ee">
|
||||
|
||||
@@ -1324,6 +1368,32 @@ with the knowledge that all their data, along with all metadata, will be deleted
|
||||
Moreover, if a device is seized then chat contacts using short-lived profiles
|
||||
can not be identified easily.</p>
|
||||
|
||||
<h3 id="who-sees-my-ip-address">
|
||||
|
||||
|
||||
Who sees my IP Address? <a href="#who-sees-my-ip-address" class="anchor"></a>
|
||||
|
||||
|
||||
</h3>
|
||||
|
||||
<p>The used <a href="#relays">relay</a> needs to know your IP Address,
|
||||
as well as sometimes your contact’s devices if you have a <a href="#experiments">call</a>
|
||||
or use <a href="#webxdc">apps</a> together.</p>
|
||||
|
||||
<p>IP Addresses are needed for connectivity and efficiency.
|
||||
They are neither persisted nor exposed.
|
||||
Note that the IP Address
|
||||
is not like a detailed address you give to a delivery service,
|
||||
but much more coarse, often defining region or country only.</p>
|
||||
|
||||
<p>As this is just how the internet and other messengers work by default,
|
||||
we do not offer options here or ask upfront questions.</p>
|
||||
|
||||
<p>If you see your IP Address as a security or privacy risk,
|
||||
we recommend to use a VPN, in combination with system lockdown mode.
|
||||
Hunting down options in all apps on your system will leave gaps.
|
||||
For example, tapping a link exposes IP Addresses to unknown parties and is the by far larger risk here.</p>
|
||||
|
||||
<h3 id="sealedsender">
|
||||
|
||||
|
||||
@@ -1554,40 +1624,35 @@ Google Play Store, F-Droid, Huawei App Gallery, iOS and macOS App Store, Microso
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p><a href="https://nextleap.eu">NEXTLEAP</a>欧盟项目资助了以下研究和实施工作:在 2017 年和 2018 年实施的验证组和设置联系协议和通过 <a href="https://autocrypt.org">Autocrypt</a>整合了端到端加密。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>在<a href="https://opentechfund.org">开放技术基金</a> 2018/2019 年提供的第一笔赠款(约 20 万美元)期间,我们显著改善了安卓应用,发布了第一个桌面测试版,并根据人权方面的用户体验研究进行了功能开发,请参阅我们的结论<a href="https://delta.chat/en/2019-07-19-uxreport">《需求发现与用户体验报告》</a>。2019/2020 年的第二笔赠款(约 30 万美元)对发布 Delta/iOS 版本,将核心库转换到 Rust ,以及为所有平台开发新功能提供了帮助。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="https://nlnet.nl/">NLnet 基金会</a> 2019/2020 年拨款 4.6 万欧元,用于完成 Rust/Python 绑定并建立聊天机器人生态系统。</p>
|
||||
<p>In 2023 and 2024 we got accepted in the Next Generation Internet (NGI)
|
||||
program for our work in <a href="https://nlnet.nl/project/WebXDC-Push/">webxdc PUSH</a>,
|
||||
along with collaboration partners working on
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">webxdc evolve</a>,
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">webxdc XMPP</a>,
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> and
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a>.
|
||||
All of these projects are partially completed or to be completed in early 2025.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>In 2021 we received further EU funding for two Next-Generation-Internet
|
||||
proposals, namely for <a href="https://dapsi.ngi.eu/hall-of-fame/eppd/">EPPD - email provider portability directory</a> (~97K EUR) and <a href="https://nlnet.nl/project/EmailPorting/">AEAP - email address porting</a> (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>From End 2021 till March 2023 we received <em>Internet Freedom</em> funding (500K USD) from the
|
||||
U.S. Bureau of Democracy, Human Rights and Labor (DRL).
|
||||
This funding supported our long-running goals to make Delta Chat more usable
|
||||
and compatible with a wide range of email servers world-wide, and more resilient and secure
|
||||
in places often affected by internet censorship and shutdowns.</p>
|
||||
<p>The <a href="https://nlnet.nl/">NLnet foundation</a> granted in 2019/2020 EUR 46K for
|
||||
completing Rust/Python bindings and instigating a Chat-bot eco-system.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>2023-2024 年,我们成功完成了 OTF 资助的
|
||||
<a href="https://www.opentech.fund/projects-we-support/supported-projects/secure-chat-mail-with-delta-chat/">安全 Chatmail 项目</a>,
|
||||
使我们能够引入保证的加密,
|
||||
创建一个 <a href="https://delta.chat/chatmail">Chatmail 服务器网络</a>,
|
||||
并在 2024 年 4 月起发布的所有应用中提供“即时入职”。</p>
|
||||
<p>The <a href="https://opentechfund.org">Open Technology Fund</a> gave us a
|
||||
first 2018/2019 grant (~$200K) during which we majorly improved the Android app
|
||||
and released a first Desktop app beta version, and which moreover
|
||||
moored our feature developments in UX research in human rights contexts,
|
||||
see our concluding <a href="https://delta.chat/en/2019-07-19-uxreport">Needfinding and UX report</a>.
|
||||
The second 2019/2020 grant (~$300K) helped us to
|
||||
release Delta/iOS versions, to convert our core library to Rust, and
|
||||
to provide new features for all platforms.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>在 2023 年和 2024 年,我们的 <a href="https://nlnet.nl/project/WebXDC-Push/">WebXDC PUSH</a> 工作已在下一代互联网 (NGI) 中获得认可,
|
||||
并与致力于
|
||||
<a href="https://nlnet.nl/project/Webxdc-Evolve/">WebXDC evolve</a>、
|
||||
<a href="https://nlnet.nl/project/WebXDC-XMPP/">WebXDC XMPP</a>、
|
||||
<a href="https://nlnet.nl/project/DeltaTouch/">DeltaTouch</a> 和
|
||||
<a href="https://nlnet.nl/project/DeltaTauri/">DeltaTauri</a> 的合作伙伴合作。
|
||||
所有这些项目都已部分完成或将在 2025 年初完成。</p>
|
||||
<p><a href="https://nextleap.eu">NEXTLEAP</a>欧盟项目资助了以下研究和实施工作:在 2017 年和 2018 年实施的验证组和设置联系协议和通过 <a href="https://autocrypt.org">Autocrypt</a>整合了端到端加密。</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>我们有时会收到个人的一次性捐款。 例如,2021 年,一位慷慨的人士以 “继续保持良好的发展态势!”为主题通过银行向我们捐赠了4千欧元💜。 我们用这些钱来资助发展活动或支付不容易预测或从公共基金中报销的临时费用。收到更多的捐款也有助于我们作为一个贡献者社区变得更加独立和长期可持续。</p>
|
||||
|
||||
@@ -94,7 +94,7 @@ public abstract class BaseTransport implements Rpc.Transport {
|
||||
}
|
||||
|
||||
if (response.error != null) {
|
||||
future.setException(new RpcException(response.error.toString()));
|
||||
future.setException(new RpcException(response.error.message));
|
||||
} else if (response.result != null) {
|
||||
future.set(response.result);
|
||||
} else {
|
||||
@@ -115,10 +115,15 @@ public abstract class BaseTransport implements Rpc.Transport {
|
||||
}
|
||||
}
|
||||
|
||||
private static class RpcError {
|
||||
public int code;
|
||||
public String message;
|
||||
}
|
||||
|
||||
private static class Response {
|
||||
public String jsonrpc;
|
||||
public int id;
|
||||
public JsonNode result;
|
||||
public JsonNode error;
|
||||
public RpcError error;
|
||||
}
|
||||
}
|
||||
@@ -23,17 +23,17 @@ public class Rpc {
|
||||
this.mapper = transport.getObjectMapper();
|
||||
}
|
||||
|
||||
/* Test function. */
|
||||
/** Test function. */
|
||||
public void sleep(Float delay) throws RpcException {
|
||||
transport.call("sleep", mapper.valueToTree(delay));
|
||||
}
|
||||
|
||||
/* Checks if an email address is valid. */
|
||||
/** Checks if an email address is valid. */
|
||||
public Boolean checkEmailValidity(String email) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Boolean>(){}, "check_email_validity", mapper.valueToTree(email));
|
||||
}
|
||||
|
||||
/* Returns general system info. */
|
||||
/** Returns general system info. */
|
||||
public java.util.Map<String, String> getSystemInfo() throws RpcException {
|
||||
return transport.callForResult(new TypeReference<java.util.Map<String, String>>(){}, "get_system_info");
|
||||
}
|
||||
@@ -73,12 +73,12 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<java.util.List<Integer>>(){}, "get_all_account_ids");
|
||||
}
|
||||
|
||||
/* Select account in account manager, this saves the last used account to accounts.toml */
|
||||
/** Select account in account manager, this saves the last used account to accounts.toml */
|
||||
public void selectAccount(Integer id) throws RpcException {
|
||||
transport.call("select_account", mapper.valueToTree(id));
|
||||
}
|
||||
|
||||
/* Get the selected account from the account manager (on startup it is read from accounts.toml) */
|
||||
/** Get the selected account from the account manager (on startup it is read from accounts.toml) */
|
||||
public Integer getSelectedAccountId() throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "get_selected_account_id");
|
||||
}
|
||||
@@ -93,17 +93,17 @@ public class Rpc {
|
||||
transport.call("set_accounts_order", mapper.valueToTree(order));
|
||||
}
|
||||
|
||||
/* Get a list of all configured accounts. */
|
||||
/** Get a list of all configured accounts. */
|
||||
public java.util.List<Account> getAllAccounts() throws RpcException {
|
||||
return transport.callForResult(new TypeReference<java.util.List<Account>>(){}, "get_all_accounts");
|
||||
}
|
||||
|
||||
/* Starts background tasks for all accounts. */
|
||||
/** Starts background tasks for all accounts. */
|
||||
public void startIoForAllAccounts() throws RpcException {
|
||||
transport.call("start_io_for_all_accounts");
|
||||
}
|
||||
|
||||
/* Stops background tasks for all accounts. */
|
||||
/** Stops background tasks for all accounts. */
|
||||
public void stopIoForAllAccounts() throws RpcException {
|
||||
transport.call("stop_io_for_all_accounts");
|
||||
}
|
||||
@@ -123,27 +123,27 @@ public class Rpc {
|
||||
transport.call("stop_background_fetch");
|
||||
}
|
||||
|
||||
/* Starts background tasks for a single account. */
|
||||
/** Starts background tasks for a single account. */
|
||||
public void startIo(Integer accountId) throws RpcException {
|
||||
transport.call("start_io", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/* Stops background tasks for a single account. */
|
||||
/** Stops background tasks for a single account. */
|
||||
public void stopIo(Integer accountId) throws RpcException {
|
||||
transport.call("stop_io", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/* Get top-level info for an account. */
|
||||
/** Get top-level info for an account. */
|
||||
public Account getAccountInfo(Integer accountId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Account>(){}, "get_account_info", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/* Get the current push notification state. */
|
||||
/** Get the current push notification state. */
|
||||
public NotifyState getPushState(Integer accountId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<NotifyState>(){}, "get_push_state", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/* Get the combined filesize of an account in bytes */
|
||||
/** Get the combined filesize of an account in bytes */
|
||||
public Integer getAccountFileSize(Integer accountId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "get_account_file_size", mapper.valueToTree(accountId));
|
||||
}
|
||||
@@ -160,22 +160,22 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<ProviderInfo>(){}, "get_provider_info", mapper.valueToTree(accountId), mapper.valueToTree(email));
|
||||
}
|
||||
|
||||
/* Checks if the context is already configured. */
|
||||
/** Checks if the context is already configured. */
|
||||
public Boolean isConfigured(Integer accountId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Boolean>(){}, "is_configured", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/* Get system info for an account. */
|
||||
/** Get system info for an account. */
|
||||
public java.util.Map<String, String> getInfo(Integer accountId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<java.util.Map<String, String>>(){}, "get_info", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/* Get storage usage report as formatted string */
|
||||
/** Get storage usage report as formatted string */
|
||||
public String getStorageUsageReportString(Integer accountId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<String>(){}, "get_storage_usage_report_string", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/* Get the blob dir. */
|
||||
/** Get the blob dir. */
|
||||
public String getBlobDir(Integer accountId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<String>(){}, "get_blob_dir", mapper.valueToTree(accountId));
|
||||
}
|
||||
@@ -195,27 +195,27 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<String>(){}, "get_migration_error", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/* Copy file to blob dir. */
|
||||
/** Copy file to blob dir. */
|
||||
public String copyToBlobDir(Integer accountId, String path) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<String>(){}, "copy_to_blob_dir", mapper.valueToTree(accountId), mapper.valueToTree(path));
|
||||
}
|
||||
|
||||
/* Sets the given configuration key. */
|
||||
/** Sets the given configuration key. */
|
||||
public void setConfig(Integer accountId, String key, String value) throws RpcException {
|
||||
transport.call("set_config", mapper.valueToTree(accountId), mapper.valueToTree(key), mapper.valueToTree(value));
|
||||
}
|
||||
|
||||
/* Updates a batch of configuration values. */
|
||||
/** Updates a batch of configuration values. */
|
||||
public void batchSetConfig(Integer accountId, java.util.Map<String, String> config) throws RpcException {
|
||||
transport.call("batch_set_config", mapper.valueToTree(accountId), mapper.valueToTree(config));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set configuration values from a QR code. (technically from the URI that is stored in the qrcode)
|
||||
* Before this function is called, `checkQr()` should confirm the type of the
|
||||
* QR code is `account` or `webrtcInstance`.
|
||||
* Set configuration values from a QR code (technically from the URI stored in it).
|
||||
* Before this function is called, `check_qr()` should be used to get the QR code type.
|
||||
* <p>
|
||||
* Internally, the function will call dc_set_config() with the appropriate keys,
|
||||
* "DCACCOUNT:" and "DCLOGIN:" QR codes configure the account, but I/O mustn't be started for
|
||||
* such QR codes, consider using [`Self::add_transport_from_qr`] which also restarts I/O.
|
||||
*/
|
||||
public void setConfigFromQr(Integer accountId, String qrContent) throws RpcException {
|
||||
transport.call("set_config_from_qr", mapper.valueToTree(accountId), mapper.valueToTree(qrContent));
|
||||
@@ -225,7 +225,7 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<Qr>(){}, "check_qr", mapper.valueToTree(accountId), mapper.valueToTree(qrContent));
|
||||
}
|
||||
|
||||
/* Returns configuration value for the given key. */
|
||||
/** Returns configuration value for the given key. */
|
||||
public String getConfig(Integer accountId, String key) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<String>(){}, "get_config", mapper.valueToTree(accountId), mapper.valueToTree(key));
|
||||
}
|
||||
@@ -234,6 +234,11 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<java.util.Map<String, String>>(){}, "batch_get_config", mapper.valueToTree(accountId), mapper.valueToTree(keys));
|
||||
}
|
||||
|
||||
/** Returns all `ui.*` config keys that were set by the UI. */
|
||||
public java.util.List<String> getAllUiConfigKeys(Integer accountId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<java.util.List<String>>(){}, "get_all_ui_config_keys", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
public void setStockStrings(java.util.Map<String, String> strings) throws RpcException {
|
||||
transport.call("set_stock_strings", mapper.valueToTree(strings));
|
||||
}
|
||||
@@ -284,7 +289,7 @@ public class Rpc {
|
||||
transport.call("add_or_update_transport", mapper.valueToTree(accountId), mapper.valueToTree(param));
|
||||
}
|
||||
|
||||
/* Deprecated 2025-04. Alias for [Self::add_or_update_transport()]. */
|
||||
/** Deprecated 2025-04. Alias for [Self::add_or_update_transport()]. */
|
||||
public void addTransport(Integer accountId, EnteredLoginParam param) throws RpcException {
|
||||
transport.call("add_transport", mapper.valueToTree(accountId), mapper.valueToTree(param));
|
||||
}
|
||||
@@ -315,7 +320,7 @@ public class Rpc {
|
||||
transport.call("delete_transport", mapper.valueToTree(accountId), mapper.valueToTree(addr));
|
||||
}
|
||||
|
||||
/* Signal an ongoing process to stop. */
|
||||
/** Signal an ongoing process to stop. */
|
||||
public void stopOngoingProcess(Integer accountId) throws RpcException {
|
||||
transport.call("stop_ongoing_process", mapper.valueToTree(accountId));
|
||||
}
|
||||
@@ -449,11 +454,11 @@ public class Rpc {
|
||||
* Delete a chat.
|
||||
* <p>
|
||||
* Messages are deleted from the device and the chat database entry is deleted.
|
||||
* After that, the event #DC_EVENT_MSGS_CHANGED is posted.
|
||||
* After that, a `MsgsChanged` event is emitted.
|
||||
* Messages are deleted from the server in background.
|
||||
* <p>
|
||||
* Things that are _not done_ implicitly:
|
||||
* <p>
|
||||
* - Messages are **not deleted from the server**.
|
||||
* - The chat or the contact is **not blocked**, so new messages from the user/the group may appear as a contact request
|
||||
* and the user may create the chat again.
|
||||
* - **Groups are not left** - this would
|
||||
@@ -608,7 +613,7 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<java.util.List<Integer>>(){}, "get_chat_contacts", mapper.valueToTree(accountId), mapper.valueToTree(chatId));
|
||||
}
|
||||
|
||||
/* Returns contact IDs of the past chat members. */
|
||||
/** Returns contact IDs of the past chat members. */
|
||||
public java.util.List<Integer> getPastChatContacts(Integer accountId, Integer chatId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<java.util.List<Integer>>(){}, "get_past_chat_contacts", mapper.valueToTree(accountId), mapper.valueToTree(chatId));
|
||||
}
|
||||
@@ -647,7 +652,7 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "create_group_chat_unencrypted", mapper.valueToTree(accountId), mapper.valueToTree(name));
|
||||
}
|
||||
|
||||
/* Deprecated 2025-07 in favor of create_broadcast(). */
|
||||
/** Deprecated 2025-07 in favor of create_broadcast(). */
|
||||
public Integer createBroadcastList(Integer accountId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "create_broadcast_list", mapper.valueToTree(accountId));
|
||||
}
|
||||
@@ -733,11 +738,26 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "add_device_message", mapper.valueToTree(accountId), mapper.valueToTree(label), mapper.valueToTree(msg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark all messages in all chats as _noticed_.
|
||||
* Skips messages from blocked contacts, but does not skip messages in muted chats.
|
||||
* <p>
|
||||
* _Noticed_ messages are no longer _fresh_ and do not count as being unseen
|
||||
* but are still waiting for being marked as "seen" using markseen_msgs()
|
||||
* (read receipts aren't sent for noticed messages).
|
||||
* <p>
|
||||
* Calling this function usually results in the event #DC_EVENT_MSGS_NOTICED.
|
||||
* See also markseen_msgs().
|
||||
*/
|
||||
public void marknoticedAllChats(Integer accountId) throws RpcException {
|
||||
transport.call("marknoticed_all_chats", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark all messages in a chat as _noticed_.
|
||||
* _Noticed_ messages are no longer _fresh_ and do not count as being unseen
|
||||
* but are still waiting for being marked as "seen" using markseen_msgs()
|
||||
* (IMAP/MDNs is not done for noticed messages).
|
||||
* (read receipts aren't sent for noticed messages).
|
||||
* <p>
|
||||
* Calling this function usually results in the event #DC_EVENT_MSGS_NOTICED.
|
||||
* See also markseen_msgs().
|
||||
@@ -856,7 +876,7 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<java.util.Map<String, MessageLoadResult>>(){}, "get_messages", mapper.valueToTree(accountId), mapper.valueToTree(messageIds));
|
||||
}
|
||||
|
||||
/* Fetch info desktop needs for creating a notification for a message */
|
||||
/** Fetch info desktop needs for creating a notification for a message */
|
||||
public MessageNotificationInfo getMessageNotificationInfo(Integer accountId, Integer messageId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<MessageNotificationInfo>(){}, "get_message_notification_info", mapper.valueToTree(accountId), mapper.valueToTree(messageId));
|
||||
}
|
||||
@@ -888,12 +908,21 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<String>(){}, "get_message_info", mapper.valueToTree(accountId), mapper.valueToTree(messageId));
|
||||
}
|
||||
|
||||
/* Returns additional information for single message. */
|
||||
/** Returns additional information for single message. */
|
||||
public MessageInfo getMessageInfoObject(Integer accountId, Integer messageId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<MessageInfo>(){}, "get_message_info_object", mapper.valueToTree(accountId), mapper.valueToTree(messageId));
|
||||
}
|
||||
|
||||
/* Returns contacts that sent read receipts and the time of reading. */
|
||||
/**
|
||||
* Returns count of read receipts on message.
|
||||
* <p>
|
||||
* This view count is meant as a feedback measure for the channel owner only.
|
||||
*/
|
||||
public Integer getMessageReadReceiptCount(Integer accountId, Integer messageId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "get_message_read_receipt_count", mapper.valueToTree(accountId), mapper.valueToTree(messageId));
|
||||
}
|
||||
|
||||
/** Returns contacts that sent read receipts and the time of reading. */
|
||||
public java.util.List<MessageReadReceipt> getMessageReadReceipts(Integer accountId, Integer messageId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<java.util.List<MessageReadReceipt>>(){}, "get_message_read_receipts", mapper.valueToTree(accountId), mapper.valueToTree(messageId));
|
||||
}
|
||||
@@ -941,7 +970,7 @@ public class Rpc {
|
||||
transport.call("save_msgs", mapper.valueToTree(accountId), mapper.valueToTree(messageIds));
|
||||
}
|
||||
|
||||
/* Get a single contact options by ID. */
|
||||
/** Get a single contact options by ID. */
|
||||
public Contact getContact(Integer accountId, Integer contactId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Contact>(){}, "get_contact", mapper.valueToTree(accountId), mapper.valueToTree(contactId));
|
||||
}
|
||||
@@ -962,7 +991,7 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "create_contact", mapper.valueToTree(accountId), mapper.valueToTree(email), mapper.valueToTree(name));
|
||||
}
|
||||
|
||||
/* Returns contact id of the created or existing DM chat with that contact */
|
||||
/** Returns contact id of the created or existing DM chat with that contact */
|
||||
public Integer createChatByContactId(Integer accountId, Integer contactId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "create_chat_by_contact_id", mapper.valueToTree(accountId), mapper.valueToTree(contactId));
|
||||
}
|
||||
@@ -1011,7 +1040,7 @@ public class Rpc {
|
||||
transport.call("delete_contact", mapper.valueToTree(accountId), mapper.valueToTree(contactId));
|
||||
}
|
||||
|
||||
/* Sets display name for existing contact. */
|
||||
/** Sets display name for existing contact. */
|
||||
public void changeContactName(Integer accountId, Integer contactId, String name) throws RpcException {
|
||||
transport.call("change_contact_name", mapper.valueToTree(accountId), mapper.valueToTree(contactId), mapper.valueToTree(name));
|
||||
}
|
||||
@@ -1046,7 +1075,7 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "lookup_contact_id_by_addr", mapper.valueToTree(accountId), mapper.valueToTree(addr));
|
||||
}
|
||||
|
||||
/* Parses a vCard file located at the given path. Returns contacts in their original order. */
|
||||
/** Parses a vCard file located at the given path. Returns contacts in their original order. */
|
||||
public java.util.List<VcardContact> parseVcard(String path) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<java.util.List<VcardContact>>(){}, "parse_vcard", mapper.valueToTree(path));
|
||||
}
|
||||
@@ -1069,12 +1098,12 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<java.util.List<Integer>>(){}, "import_vcard_contents", mapper.valueToTree(accountId), mapper.valueToTree(vcard));
|
||||
}
|
||||
|
||||
/* Returns a vCard containing contacts with the given ids. */
|
||||
/** Returns a vCard containing contacts with the given ids. */
|
||||
public String makeVcard(Integer accountId, java.util.List<Integer> contacts) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<String>(){}, "make_vcard", mapper.valueToTree(accountId), mapper.valueToTree(contacts));
|
||||
}
|
||||
|
||||
/* Sets vCard containing the given contacts to the message draft. */
|
||||
/** Sets vCard containing the given contacts to the message draft. */
|
||||
public void setDraftVcard(Integer accountId, Integer msgId, java.util.List<Integer> contacts) throws RpcException {
|
||||
transport.call("set_draft_vcard", mapper.valueToTree(accountId), mapper.valueToTree(msgId), mapper.valueToTree(contacts));
|
||||
}
|
||||
@@ -1245,7 +1274,7 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<String>(){}, "get_webxdc_status_updates", mapper.valueToTree(accountId), mapper.valueToTree(instanceMsgId), mapper.valueToTree(lastKnownSerial));
|
||||
}
|
||||
|
||||
/* Get info from a webxdc message */
|
||||
/** Get info from a webxdc message */
|
||||
public WebxdcMessageInfo getWebxdcInfo(Integer accountId, Integer instanceMsgId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<WebxdcMessageInfo>(){}, "get_webxdc_info", mapper.valueToTree(accountId), mapper.valueToTree(instanceMsgId));
|
||||
}
|
||||
@@ -1285,27 +1314,27 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "init_webxdc_integration", mapper.valueToTree(accountId), mapper.valueToTree(chatId));
|
||||
}
|
||||
|
||||
/* Starts an outgoing call. */
|
||||
/** Starts an outgoing call. */
|
||||
public Integer placeOutgoingCall(Integer accountId, Integer chatId, String placeCallInfo) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "place_outgoing_call", mapper.valueToTree(accountId), mapper.valueToTree(chatId), mapper.valueToTree(placeCallInfo));
|
||||
}
|
||||
|
||||
/* Accepts an incoming call. */
|
||||
/** Accepts an incoming call. */
|
||||
public void acceptIncomingCall(Integer accountId, Integer msgId, String acceptCallInfo) throws RpcException {
|
||||
transport.call("accept_incoming_call", mapper.valueToTree(accountId), mapper.valueToTree(msgId), mapper.valueToTree(acceptCallInfo));
|
||||
}
|
||||
|
||||
/* Ends incoming or outgoing call. */
|
||||
/** Ends incoming or outgoing call. */
|
||||
public void endCall(Integer accountId, Integer msgId) throws RpcException {
|
||||
transport.call("end_call", mapper.valueToTree(accountId), mapper.valueToTree(msgId));
|
||||
}
|
||||
|
||||
/* Returns information about the call. */
|
||||
/** Returns information about the call. */
|
||||
public CallInfo callInfo(Integer accountId, Integer msgId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<CallInfo>(){}, "call_info", mapper.valueToTree(accountId), mapper.valueToTree(msgId));
|
||||
}
|
||||
|
||||
/* Returns JSON with ICE servers, to be used for WebRTC video calls. */
|
||||
/** Returns JSON with ICE servers, to be used for WebRTC video calls. */
|
||||
public String iceServers(Integer accountId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<String>(){}, "ice_servers", mapper.valueToTree(accountId));
|
||||
}
|
||||
@@ -1331,6 +1360,14 @@ public class Rpc {
|
||||
transport.call("forward_messages", mapper.valueToTree(accountId), mapper.valueToTree(messageIds), mapper.valueToTree(chatId));
|
||||
}
|
||||
|
||||
/**
|
||||
* Forward messages to a chat in another account.
|
||||
* See [`Self::forward_messages`] for more info.
|
||||
*/
|
||||
public void forwardMessagesToAccount(Integer srcAccountId, java.util.List<Integer> srcMessageIds, Integer dstAccountId, Integer dstChatId) throws RpcException {
|
||||
transport.call("forward_messages_to_account", mapper.valueToTree(srcAccountId), mapper.valueToTree(srcMessageIds), mapper.valueToTree(dstAccountId), mapper.valueToTree(dstChatId));
|
||||
}
|
||||
|
||||
/**
|
||||
* Resend messages and make information available for newly added chat members.
|
||||
* Resending sends out the original message, however, recipients and webxdc-status may differ.
|
||||
@@ -1361,7 +1398,7 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "send_reaction", mapper.valueToTree(accountId), mapper.valueToTree(messageId), mapper.valueToTree(reaction));
|
||||
}
|
||||
|
||||
/* Returns reactions to the message. */
|
||||
/** Returns reactions to the message. */
|
||||
public Reactions getMessageReactions(Integer accountId, Integer messageId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Reactions>(){}, "get_message_reactions", mapper.valueToTree(accountId), mapper.valueToTree(messageId));
|
||||
}
|
||||
@@ -1374,7 +1411,7 @@ public class Rpc {
|
||||
transport.call("send_edit_request", mapper.valueToTree(accountId), mapper.valueToTree(msgId), mapper.valueToTree(newText));
|
||||
}
|
||||
|
||||
/* Checks if messages can be sent to a given chat. */
|
||||
/** Checks if messages can be sent to a given chat. */
|
||||
public Boolean canSend(Integer accountId, Integer chatId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Boolean>(){}, "can_send", mapper.valueToTree(accountId), mapper.valueToTree(chatId));
|
||||
}
|
||||
@@ -1392,7 +1429,7 @@ public class Rpc {
|
||||
transport.call("remove_draft", mapper.valueToTree(accountId), mapper.valueToTree(chatId));
|
||||
}
|
||||
|
||||
/* Get draft for a chat, if any. */
|
||||
/** Get draft for a chat, if any. */
|
||||
public Message getDraft(Integer accountId, Integer chatId) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Message>(){}, "get_draft", mapper.valueToTree(accountId), mapper.valueToTree(chatId));
|
||||
}
|
||||
@@ -1401,7 +1438,7 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<String>(){}, "misc_get_sticker_folder", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/* Saves a sticker to a collection/folder in the account's sticker folder. */
|
||||
/** Saves a sticker to a collection/folder in the account's sticker folder. */
|
||||
public void miscSaveSticker(Integer accountId, Integer msgId, String collection) throws RpcException {
|
||||
transport.call("misc_save_sticker", mapper.valueToTree(accountId), mapper.valueToTree(msgId), mapper.valueToTree(collection));
|
||||
}
|
||||
@@ -1414,7 +1451,7 @@ public class Rpc {
|
||||
return transport.callForResult(new TypeReference<java.util.Map<String, java.util.List<String>>>(){}, "misc_get_stickers", mapper.valueToTree(accountId));
|
||||
}
|
||||
|
||||
/* Returns the messageid of the sent message */
|
||||
/** Returns the messageid of the sent message */
|
||||
public Integer miscSendTextMessage(Integer accountId, Integer chatId, String text) throws RpcException {
|
||||
return transport.callForResult(new TypeReference<Integer>(){}, "misc_send_text_message", mapper.valueToTree(accountId), mapper.valueToTree(chatId), mapper.valueToTree(text));
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ public abstract class Account {
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String displayName;
|
||||
public Integer id;
|
||||
/* Optional tag as "Work", "Family". Meant to help profile owner to differ between profiles with similar names. */
|
||||
/** Optional tag as "Work", "Family". Meant to help profile owner to differ between profiles with similar names. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String privateTag;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
/**
|
||||
* cheaper version of fullchat, omits: - contacts - contact_ids - fresh_message_counter - ephemeral_timer - self_in_group - was_seen_recently - can_send
|
||||
* cheaper version of fullchat, omits: - contact_ids - fresh_message_counter - ephemeral_timer - self_in_group - was_seen_recently - can_send
|
||||
* <p>
|
||||
* used when you only need the basic metadata of a chat like type, name, profile picture
|
||||
*/
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
public class CallInfo {
|
||||
/* True if SDP offer has a video. */
|
||||
/** True if SDP offer has a video. */
|
||||
public Boolean hasVideo;
|
||||
/**
|
||||
* SDP offer.
|
||||
|
||||
@@ -19,21 +19,21 @@ public abstract class CallState {
|
||||
public static class Alerting extends CallState {
|
||||
}
|
||||
|
||||
/* Active call. */
|
||||
/** Active call. */
|
||||
public static class Active extends CallState {
|
||||
}
|
||||
|
||||
/* Completed call that was once active and then was terminated for any reason. */
|
||||
/** Completed call that was once active and then was terminated for any reason. */
|
||||
public static class Completed extends CallState {
|
||||
/* Call duration in seconds. */
|
||||
/** Call duration in seconds. */
|
||||
public Integer duration;
|
||||
}
|
||||
|
||||
/* Incoming call that was not picked up within a timeout or was explicitly ended by the caller before we picked up. */
|
||||
/** Incoming call that was not picked up within a timeout or was explicitly ended by the caller before we picked up. */
|
||||
public static class Missed extends CallState {
|
||||
}
|
||||
|
||||
/* Incoming call that was explicitly ended on our side before picking up or outgoing call that was declined before the timeout. */
|
||||
/** Incoming call that was explicitly ended on our side before picking up or outgoing call that was declined before the timeout. */
|
||||
public static class Declined extends CallState {
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ public abstract class ChatListItemFetchResult {
|
||||
public String avatarPath;
|
||||
public ChatType chatType;
|
||||
public String color;
|
||||
/* contact id if this is a dm chat (for view profile entry in context menu) */
|
||||
/** contact id if this is a dm chat (for view profile entry in context menu) */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer dmChatContact;
|
||||
public Integer freshMessageCounter;
|
||||
@@ -36,7 +36,7 @@ public abstract class ChatListItemFetchResult {
|
||||
* See also `is_key_contact` on `Contact`.
|
||||
*/
|
||||
public Boolean isEncrypted;
|
||||
/* deprecated 2025-07, use chat_type instead */
|
||||
/** deprecated 2025-07, use chat_type instead */
|
||||
public Boolean isGroup;
|
||||
public Boolean isMuted;
|
||||
public Boolean isPinned;
|
||||
@@ -50,7 +50,7 @@ public abstract class ChatListItemFetchResult {
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer lastUpdated;
|
||||
public String name;
|
||||
/* showing preview if last chat message is image */
|
||||
/** showing preview if last chat message is image */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String summaryPreviewImage;
|
||||
public Integer summaryStatus;
|
||||
|
||||
@@ -14,9 +14,9 @@ public class Contact {
|
||||
public Boolean e2eeAvail;
|
||||
public Integer id;
|
||||
public Boolean isBlocked;
|
||||
/* If the contact is a bot. */
|
||||
/** If the contact is a bot. */
|
||||
public Boolean isBot;
|
||||
/* Is the contact a key contact. */
|
||||
/** Is the contact a key contact. */
|
||||
public Boolean isKeyContact;
|
||||
/**
|
||||
* True if the contact can be added to protected chats because SELF and contact have verified their fingerprints in both directions.
|
||||
@@ -24,7 +24,7 @@ public class Contact {
|
||||
* See [`Self::verifier_id`]/`Contact.verifierId` for a guidance how to display these information.
|
||||
*/
|
||||
public Boolean isVerified;
|
||||
/* the contact's last seen timestamp */
|
||||
/** the contact's last seen timestamp */
|
||||
public Integer lastSeen;
|
||||
public String name;
|
||||
public String nameAndAddr;
|
||||
@@ -38,7 +38,7 @@ public class Contact {
|
||||
* <p>
|
||||
* UI should display the information in the contact's profile as follows:
|
||||
* <p>
|
||||
* - If `verifierId` != 0, display text "Introduced by ..." with the name and address of the contact formatted by `name_and_addr`/`nameAndAddr`. Prefix the text by a green checkmark.
|
||||
* - If `verifierId` != 0, display text "Introduced by ..." with the name of the contact. Prefix the text by a green checkmark.
|
||||
* <p>
|
||||
* - If `verifierId` == 0 and `isVerified` != 0, display "Introduced" prefixed by a green checkmark.
|
||||
* <p>
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
public enum EnteredCertificateChecks {
|
||||
/* `Automatic` means that provider database setting should be taken. If there is no provider database setting for certificate checks, check certificates strictly. */
|
||||
/** `Automatic` means that provider database setting should be taken. If there is no provider database setting for certificate checks, check certificates strictly. */
|
||||
automatic,
|
||||
|
||||
/* Ensure that TLS certificate is valid for the server hostname. */
|
||||
/** Ensure that TLS certificate is valid for the server hostname. */
|
||||
strict,
|
||||
|
||||
/* Accept certificates that are expired, self-signed or otherwise not valid for the server hostname. */
|
||||
/** Accept certificates that are expired, self-signed or otherwise not valid for the server hostname. */
|
||||
acceptInvalidCertificates,
|
||||
}
|
||||
@@ -7,27 +7,27 @@ package chat.delta.rpc.types;
|
||||
* Usually it will be enough to only set `addr` and `password`, and all the other settings will be autoconfigured.
|
||||
*/
|
||||
public class EnteredLoginParam {
|
||||
/* Email address. */
|
||||
/** Email address. */
|
||||
public String addr;
|
||||
/* TLS options: whether to allow invalid certificates and/or invalid hostnames. Default: Automatic */
|
||||
/** TLS options: whether to allow invalid certificates and/or invalid hostnames. Default: Automatic */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public EnteredCertificateChecks certificateChecks;
|
||||
/* Imap server port. */
|
||||
/** Imap server port. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer imapPort;
|
||||
/* Imap socket security. */
|
||||
/** Imap socket security. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Socket imapSecurity;
|
||||
/* Imap server hostname or IP address. */
|
||||
/** Imap server hostname or IP address. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String imapServer;
|
||||
/* Imap username. */
|
||||
/** Imap username. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String imapUser;
|
||||
/* If true, login via OAUTH2 (not recommended anymore). Default: false */
|
||||
/** If true, login via OAUTH2 (not recommended anymore). Default: false */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Boolean oauth2;
|
||||
/* Password. */
|
||||
/** Password. */
|
||||
public String password;
|
||||
/**
|
||||
* SMTP Password.
|
||||
@@ -36,16 +36,16 @@ public class EnteredLoginParam {
|
||||
*/
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String smtpPassword;
|
||||
/* SMTP server port. */
|
||||
/** SMTP server port. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer smtpPort;
|
||||
/* SMTP socket security. */
|
||||
/** SMTP socket security. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Socket smtpSecurity;
|
||||
/* SMTP server hostname or IP address. */
|
||||
/** SMTP server hostname or IP address. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String smtpServer;
|
||||
/* SMTP username. */
|
||||
/** SMTP username. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String smtpUser;
|
||||
}
|
||||
@@ -11,11 +11,11 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
|
||||
@JsonSubTypes({@Type(value = EphemeralTimer.Disabled.class, name="Disabled"), @Type(value = EphemeralTimer.Enabled.class, name="Enabled")})
|
||||
public abstract class EphemeralTimer {
|
||||
|
||||
/* Timer is disabled. */
|
||||
/** Timer is disabled. */
|
||||
public static class Disabled extends EphemeralTimer {
|
||||
}
|
||||
|
||||
/* Timer is enabled. */
|
||||
/** Timer is enabled. */
|
||||
public static class Enabled extends EphemeralTimer {
|
||||
/**
|
||||
* Timer duration in seconds.
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
public class Event {
|
||||
/* Account ID. */
|
||||
/** Account ID. */
|
||||
public Integer contextId;
|
||||
/* Event payload. */
|
||||
/** Event payload. */
|
||||
public EventType event;
|
||||
}
|
||||
@@ -20,41 +20,41 @@ public abstract class EventType {
|
||||
public String msg;
|
||||
}
|
||||
|
||||
/* Emitted when SMTP connection is established and login was successful. */
|
||||
/** Emitted when SMTP connection is established and login was successful. */
|
||||
public static class SmtpConnected extends EventType {
|
||||
public String msg;
|
||||
}
|
||||
|
||||
/* Emitted when IMAP connection is established and login was successful. */
|
||||
/** Emitted when IMAP connection is established and login was successful. */
|
||||
public static class ImapConnected extends EventType {
|
||||
public String msg;
|
||||
}
|
||||
|
||||
/* Emitted when a message was successfully sent to the SMTP server. */
|
||||
/** Emitted when a message was successfully sent to the SMTP server. */
|
||||
public static class SmtpMessageSent extends EventType {
|
||||
public String msg;
|
||||
}
|
||||
|
||||
/* Emitted when an IMAP message has been marked as deleted */
|
||||
/** Emitted when an IMAP message has been marked as deleted */
|
||||
public static class ImapMessageDeleted extends EventType {
|
||||
public String msg;
|
||||
}
|
||||
|
||||
/* Emitted when an IMAP message has been moved */
|
||||
/** Emitted when an IMAP message has been moved */
|
||||
public static class ImapMessageMoved extends EventType {
|
||||
public String msg;
|
||||
}
|
||||
|
||||
/* Emitted before going into IDLE on the Inbox folder. */
|
||||
/** Emitted before going into IDLE on the Inbox folder. */
|
||||
public static class ImapInboxIdle extends EventType {
|
||||
}
|
||||
|
||||
/* Emitted when an new file in the $BLOBDIR was created */
|
||||
/** Emitted when an new file in the $BLOBDIR was created */
|
||||
public static class NewBlobFile extends EventType {
|
||||
public String file;
|
||||
}
|
||||
|
||||
/* Emitted when an file in the $BLOBDIR was deleted */
|
||||
/** Emitted when an file in the $BLOBDIR was deleted */
|
||||
public static class DeletedBlobFile extends EventType {
|
||||
public String file;
|
||||
}
|
||||
@@ -79,26 +79,26 @@ public abstract class EventType {
|
||||
public String msg;
|
||||
}
|
||||
|
||||
/* An action cannot be performed because the user is not in the group. Reported eg. after a call to setChatName(), setChatProfileImage(), addContactToChat(), removeContactFromChat(), and messages sending functions. */
|
||||
/** An action cannot be performed because the user is not in the group. Reported eg. after a call to setChatName(), setChatProfileImage(), addContactToChat(), removeContactFromChat(), and messages sending functions. */
|
||||
public static class ErrorSelfNotInGroup extends EventType {
|
||||
public String msg;
|
||||
}
|
||||
|
||||
/* Messages or chats changed. One or more messages or chats changed for various reasons in the database: - Messages sent, received or removed - Chats created, deleted or archived - A draft has been set */
|
||||
/** Messages or chats changed. One or more messages or chats changed for various reasons in the database: - Messages sent, received or removed - Chats created, deleted or archived - A draft has been set */
|
||||
public static class MsgsChanged extends EventType {
|
||||
/* Set if only a single chat is affected by the changes, otherwise 0. */
|
||||
/** Set if only a single chat is affected by the changes, otherwise 0. */
|
||||
public Integer chatId;
|
||||
/* Set if only a single message is affected by the changes, otherwise 0. */
|
||||
/** Set if only a single message is affected by the changes, otherwise 0. */
|
||||
public Integer msgId;
|
||||
}
|
||||
|
||||
/* Reactions for the message changed. */
|
||||
/** Reactions for the message changed. */
|
||||
public static class ReactionsChanged extends EventType {
|
||||
/* ID of the chat which the message belongs to. */
|
||||
/** ID of the chat which the message belongs to. */
|
||||
public Integer chatId;
|
||||
/* ID of the contact whose reaction set is changed. */
|
||||
/** ID of the contact whose reaction set is changed. */
|
||||
public Integer contactId;
|
||||
/* ID of the message for which reactions were changed. */
|
||||
/** ID of the message for which reactions were changed. */
|
||||
public Integer msgId;
|
||||
}
|
||||
|
||||
@@ -108,28 +108,28 @@ public abstract class EventType {
|
||||
* In addition to this event, ReactionsChanged is emitted.
|
||||
*/
|
||||
public static class IncomingReaction extends EventType {
|
||||
/* ID of the chat which the message belongs to. */
|
||||
/** ID of the chat which the message belongs to. */
|
||||
public Integer chatId;
|
||||
/* ID of the contact whose reaction set is changed. */
|
||||
/** ID of the contact whose reaction set is changed. */
|
||||
public Integer contactId;
|
||||
/* ID of the message for which reactions were changed. */
|
||||
/** ID of the message for which reactions were changed. */
|
||||
public Integer msgId;
|
||||
/* The reaction. */
|
||||
/** The reaction. */
|
||||
public String reaction;
|
||||
}
|
||||
|
||||
/* Incoming webxdc info or summary update, should be notified. */
|
||||
/** Incoming webxdc info or summary update, should be notified. */
|
||||
public static class IncomingWebxdcNotify extends EventType {
|
||||
/* ID of the chat. */
|
||||
/** ID of the chat. */
|
||||
public Integer chatId;
|
||||
/* ID of the contact sending. */
|
||||
/** ID of the contact sending. */
|
||||
public Integer contactId;
|
||||
/* Link assigned to this notification, if any. */
|
||||
/** Link assigned to this notification, if any. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String href;
|
||||
/* ID of the added info message or webxdc instance in case of summary change. */
|
||||
/** ID of the added info message or webxdc instance in case of summary change. */
|
||||
public Integer msgId;
|
||||
/* Text to notify. */
|
||||
/** Text to notify. */
|
||||
public String text;
|
||||
}
|
||||
|
||||
@@ -139,42 +139,42 @@ public abstract class EventType {
|
||||
* There is no extra #DC_EVENT_MSGS_CHANGED event sent together with this event.
|
||||
*/
|
||||
public static class IncomingMsg extends EventType {
|
||||
/* ID of the chat where the message is assigned. */
|
||||
/** ID of the chat where the message is assigned. */
|
||||
public Integer chatId;
|
||||
/* ID of the message. */
|
||||
/** ID of the message. */
|
||||
public Integer msgId;
|
||||
}
|
||||
|
||||
/* Downloading a bunch of messages just finished. This is an event to allow the UI to only show one notification per message bunch, instead of cluttering the user with many notifications. */
|
||||
/** Downloading a bunch of messages just finished. This is an event to allow the UI to only show one notification per message bunch, instead of cluttering the user with many notifications. */
|
||||
public static class IncomingMsgBunch extends EventType {
|
||||
}
|
||||
|
||||
/* Messages were seen or noticed. chat id is always set. */
|
||||
/** Messages were seen or noticed. chat id is always set. */
|
||||
public static class MsgsNoticed extends EventType {
|
||||
public Integer chatId;
|
||||
}
|
||||
|
||||
/* A single message is sent successfully. State changed from DC_STATE_OUT_PENDING to DC_STATE_OUT_DELIVERED, see `Message.state`. */
|
||||
/** A single message is sent successfully. State changed from DC_STATE_OUT_PENDING to DC_STATE_OUT_DELIVERED, see `Message.state`. */
|
||||
public static class MsgDelivered extends EventType {
|
||||
/* ID of the chat which the message belongs to. */
|
||||
/** ID of the chat which the message belongs to. */
|
||||
public Integer chatId;
|
||||
/* ID of the message that was successfully sent. */
|
||||
/** ID of the message that was successfully sent. */
|
||||
public Integer msgId;
|
||||
}
|
||||
|
||||
/* A single message could not be sent. State changed from DC_STATE_OUT_PENDING or DC_STATE_OUT_DELIVERED to DC_STATE_OUT_FAILED, see `Message.state`. */
|
||||
/** A single message could not be sent. State changed from DC_STATE_OUT_PENDING or DC_STATE_OUT_DELIVERED to DC_STATE_OUT_FAILED, see `Message.state`. */
|
||||
public static class MsgFailed extends EventType {
|
||||
/* ID of the chat which the message belongs to. */
|
||||
/** ID of the chat which the message belongs to. */
|
||||
public Integer chatId;
|
||||
/* ID of the message that could not be sent. */
|
||||
/** ID of the message that could not be sent. */
|
||||
public Integer msgId;
|
||||
}
|
||||
|
||||
/* A single message is read by the receiver. State changed from DC_STATE_OUT_DELIVERED to DC_STATE_OUT_MDN_RCVD, see `Message.state`. */
|
||||
/** A single message is read by the receiver. State changed from DC_STATE_OUT_DELIVERED to DC_STATE_OUT_MDN_RCVD, see `Message.state`. */
|
||||
public static class MsgRead extends EventType {
|
||||
/* ID of the chat which the message belongs to. */
|
||||
/** ID of the chat which the message belongs to. */
|
||||
public Integer chatId;
|
||||
/* ID of the message that was read. */
|
||||
/** ID of the message that was read. */
|
||||
public Integer msgId;
|
||||
}
|
||||
|
||||
@@ -188,9 +188,9 @@ public abstract class EventType {
|
||||
* This event does not indicate the message deletion from the server.
|
||||
*/
|
||||
public static class MsgDeleted extends EventType {
|
||||
/* ID of the chat where the message was prior to deletion. Never 0. */
|
||||
/** ID of the chat where the message was prior to deletion. Never 0. */
|
||||
public Integer chatId;
|
||||
/* ID of the deleted message. Never 0. */
|
||||
/** ID of the deleted message. Never 0. */
|
||||
public Integer msgId;
|
||||
}
|
||||
|
||||
@@ -203,37 +203,37 @@ public abstract class EventType {
|
||||
public Integer chatId;
|
||||
}
|
||||
|
||||
/* Chat ephemeral timer changed. */
|
||||
/** Chat ephemeral timer changed. */
|
||||
public static class ChatEphemeralTimerModified extends EventType {
|
||||
/* Chat ID. */
|
||||
/** Chat ID. */
|
||||
public Integer chatId;
|
||||
/* New ephemeral timer value. */
|
||||
/** New ephemeral timer value. */
|
||||
public Integer timer;
|
||||
}
|
||||
|
||||
/* Chat deleted. */
|
||||
/** Chat deleted. */
|
||||
public static class ChatDeleted extends EventType {
|
||||
/* Chat ID. */
|
||||
/** Chat ID. */
|
||||
public Integer chat_id;
|
||||
}
|
||||
|
||||
/* Contact(s) created, renamed, blocked or deleted. */
|
||||
/** Contact(s) created, renamed, blocked or deleted. */
|
||||
public static class ContactsChanged extends EventType {
|
||||
/* If set, this is the contact_id of an added contact that should be selected. */
|
||||
/** If set, this is the contact_id of an added contact that should be selected. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer contactId;
|
||||
}
|
||||
|
||||
/* Location of one or more contact has changed. */
|
||||
/** Location of one or more contact has changed. */
|
||||
public static class LocationChanged extends EventType {
|
||||
/* contact_id of the contact for which the location has changed. If the locations of several contacts have been changed, this parameter is set to `None`. */
|
||||
/** contact_id of the contact for which the location has changed. If the locations of several contacts have been changed, this parameter is set to `None`. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer contactId;
|
||||
}
|
||||
|
||||
/* Inform about the configuration progress started by configure(). */
|
||||
/** Inform about the configuration progress started by configure(). */
|
||||
public static class ConfigureProgress extends EventType {
|
||||
/* Progress comment or error, something to display to the user. */
|
||||
/** Progress comment or error, something to display to the user. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String comment;
|
||||
/**
|
||||
@@ -244,9 +244,9 @@ public abstract class EventType {
|
||||
public Integer progress;
|
||||
}
|
||||
|
||||
/* Inform about the import/export progress started by imex(). */
|
||||
/** Inform about the import/export progress started by imex(). */
|
||||
public static class ImexProgress extends EventType {
|
||||
/* 0=error, 1-999=progress in permille, 1000=success and done */
|
||||
/** 0=error, 1-999=progress in permille, 1000=success and done */
|
||||
public Integer progress;
|
||||
}
|
||||
|
||||
@@ -267,62 +267,62 @@ public abstract class EventType {
|
||||
* These events are typically sent after a joiner has scanned the QR code generated by getChatSecurejoinQrCodeSvg().
|
||||
*/
|
||||
public static class SecurejoinInviterProgress extends EventType {
|
||||
/* ID of the chat in case of success. */
|
||||
/** ID of the chat in case of success. */
|
||||
public Integer chatId;
|
||||
/* The type of the joined chat. This can take the same values as `BasicChat.chatType` ([`crate::api::types::chat::BasicChat::chat_type`]). */
|
||||
/** The type of the joined chat. This can take the same values as `BasicChat.chatType` ([`crate::api::types::chat::BasicChat::chat_type`]). */
|
||||
public ChatType chatType;
|
||||
/* ID of the contact that wants to join. */
|
||||
/** ID of the contact that wants to join. */
|
||||
public Integer contactId;
|
||||
/* Progress, always 1000. */
|
||||
/** Progress, always 1000. */
|
||||
public Integer progress;
|
||||
}
|
||||
|
||||
/* Progress information of a secure-join handshake from the view of the joiner (Bob, the person who scans the QR code). The events are typically sent while secureJoin(), which may take some time, is executed. */
|
||||
/** Progress information of a secure-join handshake from the view of the joiner (Bob, the person who scans the QR code). The events are typically sent while secureJoin(), which may take some time, is executed. */
|
||||
public static class SecurejoinJoinerProgress extends EventType {
|
||||
/* ID of the inviting contact. */
|
||||
/** ID of the inviting contact. */
|
||||
public Integer contactId;
|
||||
/* Progress as: 400=vg-/vc-request-with-auth sent, typically shown as "alice@addr verified, introducing myself." (Bob has verified alice and waits until Alice does the same for him) 1000=vg-member-added/vc-contact-confirm received */
|
||||
/** Progress as: 400=vg-/vc-request-with-auth sent, typically shown as "alice@addr verified, introducing myself." (Bob has verified alice and waits until Alice does the same for him) 1000=vg-member-added/vc-contact-confirm received */
|
||||
public Integer progress;
|
||||
}
|
||||
|
||||
/* The connectivity to the server changed. This means that you should refresh the connectivity view and possibly the connectivtiy HTML; see getConnectivity() and getConnectivityHtml() for details. */
|
||||
/** The connectivity to the server changed. This means that you should refresh the connectivity view and possibly the connectivtiy HTML; see getConnectivity() and getConnectivityHtml() for details. */
|
||||
public static class ConnectivityChanged extends EventType {
|
||||
}
|
||||
|
||||
/* Deprecated by `ConfigSynced`. */
|
||||
/** Deprecated by `ConfigSynced`. */
|
||||
public static class SelfavatarChanged extends EventType {
|
||||
}
|
||||
|
||||
/* A multi-device synced config value changed. Maybe the app needs to refresh smth. For uniformity this is emitted on the source device too. The value isn't here, otherwise it would be logged which might not be good for privacy. */
|
||||
/** A multi-device synced config value changed. Maybe the app needs to refresh smth. For uniformity this is emitted on the source device too. The value isn't here, otherwise it would be logged which might not be good for privacy. */
|
||||
public static class ConfigSynced extends EventType {
|
||||
/* Configuration key. */
|
||||
/** Configuration key. */
|
||||
public String key;
|
||||
}
|
||||
|
||||
public static class WebxdcStatusUpdate extends EventType {
|
||||
/* Message ID. */
|
||||
/** Message ID. */
|
||||
public Integer msgId;
|
||||
/* Status update ID. */
|
||||
/** Status update ID. */
|
||||
public Integer statusUpdateSerial;
|
||||
}
|
||||
|
||||
/* Data received over an ephemeral peer channel. */
|
||||
/** Data received over an ephemeral peer channel. */
|
||||
public static class WebxdcRealtimeData extends EventType {
|
||||
/* Realtime data. */
|
||||
/** Realtime data. */
|
||||
public java.util.List<Integer> data;
|
||||
/* Message ID. */
|
||||
/** Message ID. */
|
||||
public Integer msgId;
|
||||
}
|
||||
|
||||
/* Advertisement received over an ephemeral peer channel. This can be used by bots to initiate peer-to-peer communication from their side. */
|
||||
/** Advertisement received over an ephemeral peer channel. This can be used by bots to initiate peer-to-peer communication from their side. */
|
||||
public static class WebxdcRealtimeAdvertisementReceived extends EventType {
|
||||
/* Message ID of the webxdc instance. */
|
||||
/** Message ID of the webxdc instance. */
|
||||
public Integer msgId;
|
||||
}
|
||||
|
||||
/* Inform that a message containing a webxdc instance has been deleted */
|
||||
/** Inform that a message containing a webxdc instance has been deleted */
|
||||
public static class WebxdcInstanceDeleted extends EventType {
|
||||
/* ID of the deleted message. */
|
||||
/** ID of the deleted message. */
|
||||
public Integer msgId;
|
||||
}
|
||||
|
||||
@@ -342,9 +342,9 @@ public abstract class EventType {
|
||||
public static class ChatlistChanged extends EventType {
|
||||
}
|
||||
|
||||
/* Inform that a single chat list item changed and needs to be rerendered. If `chat_id` is set to None, then all currently visible chats need to be rerendered, and all not-visible items need to be cleared from cache if the UI has a cache. */
|
||||
/** Inform that a single chat list item changed and needs to be rerendered. If `chat_id` is set to None, then all currently visible chats need to be rerendered, and all not-visible items need to be cleared from cache if the UI has a cache. */
|
||||
public static class ChatlistItemChanged extends EventType {
|
||||
/* ID of the changed chat */
|
||||
/** ID of the changed chat */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer chatId;
|
||||
}
|
||||
@@ -365,54 +365,56 @@ public abstract class EventType {
|
||||
public static class AccountsItemChanged extends EventType {
|
||||
}
|
||||
|
||||
/* Inform than some events have been skipped due to event channel overflow. */
|
||||
/** Inform than some events have been skipped due to event channel overflow. */
|
||||
public static class EventChannelOverflow extends EventType {
|
||||
/* Number of events skipped. */
|
||||
/** Number of events skipped. */
|
||||
public Integer n;
|
||||
}
|
||||
|
||||
/* Incoming call. */
|
||||
/** Incoming call. */
|
||||
public static class IncomingCall extends EventType {
|
||||
/* ID of the chat which the message belongs to. */
|
||||
/** ID of the chat which the message belongs to. */
|
||||
public Integer chat_id;
|
||||
/* True if incoming call is a video call. */
|
||||
/** True if incoming call is a video call. */
|
||||
public Boolean has_video;
|
||||
/* ID of the info message referring to the call. */
|
||||
/** ID of the info message referring to the call. */
|
||||
public Integer msg_id;
|
||||
/* User-defined info as passed to place_outgoing_call() */
|
||||
/** User-defined info as passed to place_outgoing_call() */
|
||||
public String place_call_info;
|
||||
}
|
||||
|
||||
/* Incoming call accepted. This is esp. interesting to stop ringing on other devices. */
|
||||
/** Incoming call accepted. This is esp. interesting to stop ringing on other devices. */
|
||||
public static class IncomingCallAccepted extends EventType {
|
||||
/* ID of the chat which the message belongs to. */
|
||||
/** ID of the chat which the message belongs to. */
|
||||
public Integer chat_id;
|
||||
/* ID of the info message referring to the call. */
|
||||
/** ID of the info message referring to the call. */
|
||||
public Integer msg_id;
|
||||
}
|
||||
|
||||
/* Outgoing call accepted. */
|
||||
/** Outgoing call accepted. */
|
||||
public static class OutgoingCallAccepted extends EventType {
|
||||
/* User-defined info passed to dc_accept_incoming_call( */
|
||||
/** User-defined info passed to dc_accept_incoming_call( */
|
||||
public String accept_call_info;
|
||||
/* ID of the chat which the message belongs to. */
|
||||
/** ID of the chat which the message belongs to. */
|
||||
public Integer chat_id;
|
||||
/* ID of the info message referring to the call. */
|
||||
/** ID of the info message referring to the call. */
|
||||
public Integer msg_id;
|
||||
}
|
||||
|
||||
/* Call ended. */
|
||||
/** Call ended. */
|
||||
public static class CallEnded extends EventType {
|
||||
/* ID of the chat which the message belongs to. */
|
||||
/** ID of the chat which the message belongs to. */
|
||||
public Integer chat_id;
|
||||
/* ID of the info message referring to the call. */
|
||||
/** ID of the info message referring to the call. */
|
||||
public Integer msg_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* One or more transports has changed.
|
||||
* <p>
|
||||
* This event is used for tests to detect when transport synchronization messages arrives. UIs don't need to use it, it is unlikely that user modifies transports on multiple devices simultaneously.
|
||||
* UI should update the list.
|
||||
* <p>
|
||||
* This event is emitted when transport synchronization messages arrives, but not when the UI modifies the transport list by itself.
|
||||
*/
|
||||
public static class TransportsModified extends EventType {
|
||||
}
|
||||
|
||||
@@ -7,7 +7,6 @@ public class FullChat {
|
||||
public ChatType chatType;
|
||||
public String color;
|
||||
public java.util.List<Integer> contactIds;
|
||||
public java.util.List<Contact> contacts;
|
||||
public Integer ephemeralTimer;
|
||||
public Integer freshMessageCounter;
|
||||
public Integer id;
|
||||
@@ -31,12 +30,12 @@ public class FullChat {
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String mailingListAddress;
|
||||
public String name;
|
||||
/* Contact IDs of the past chat members. */
|
||||
/** Contact IDs of the past chat members. */
|
||||
public java.util.List<Integer> pastContactIds;
|
||||
public Boolean pinned;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String profileImage;
|
||||
/* Note that this is different from [`ChatListItem::is_self_in_group`](`crate::api::types::chat_list::ChatListItemFetchResult::ChatListItem::is_self_in_group`). This property should only be accessed when [`FullChat::chat_type`] is [`Chattype::Group`]. */
|
||||
/** Note that this is different from [`ChatListItem::is_self_in_group`](`crate::api::types::chat_list::ChatListItemFetchResult::ChatListItem::is_self_in_group`). This property should only be accessed when [`FullChat::chat_type`] is [`Chattype::Group`]. */
|
||||
public Boolean selfInGroup;
|
||||
public Boolean wasSeenRecently;
|
||||
}
|
||||
@@ -2,12 +2,12 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
public class HttpResponse {
|
||||
/* base64-encoded response body. */
|
||||
/** base64-encoded response body. */
|
||||
public String blob;
|
||||
/* Encoding, e.g. "utf-8". */
|
||||
/** Encoding, e.g. "utf-8". */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String encoding;
|
||||
/* MIME type, e.g. "text/plain" or "text/html". */
|
||||
/** MIME type, e.g. "text/plain" or "text/html". */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String mimetype;
|
||||
}
|
||||
@@ -7,11 +7,12 @@ public class Message {
|
||||
public Integer dimensionsWidth;
|
||||
public DownloadState downloadState;
|
||||
public Integer duration;
|
||||
/* An error text, if there is one. */
|
||||
/** An error text, if there is one. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String error;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String file;
|
||||
/** The size of the file in bytes, if applicable. If message is a pre-message, then this is the size of the file to be downloaded. */
|
||||
public Integer fileBytes;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String fileMime;
|
||||
@@ -20,13 +21,13 @@ public class Message {
|
||||
public Integer fromId;
|
||||
public Boolean hasDeviatingTimestamp;
|
||||
public Boolean hasHtml;
|
||||
/* Check if a message has a POI location bound to it. These locations are also returned by `get_locations` method. The UI may decide to display a special icon beside such messages. */
|
||||
/** Check if a message has a POI location bound to it. These locations are also returned by `get_locations` method. The UI may decide to display a special icon beside such messages. */
|
||||
public Boolean hasLocation;
|
||||
public Integer id;
|
||||
/* if is_info is set, this refers to the contact profile that should be opened when the info message is tapped. */
|
||||
/** if is_info is set, this refers to the contact profile that should be opened when the info message is tapped. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer infoContactId;
|
||||
/* True if the message was sent by a bot. */
|
||||
/** True if the message was sent by a bot. */
|
||||
public Boolean isBot;
|
||||
public Boolean isEdited;
|
||||
public Boolean isForwarded;
|
||||
@@ -57,7 +58,7 @@ public class Message {
|
||||
public Integer sortTimestamp;
|
||||
public Integer state;
|
||||
public String subject;
|
||||
/* when is_info is true this describes what type of system message it is */
|
||||
/** when is_info is true this describes what type of system message it is */
|
||||
public SystemMessageType systemMessageType;
|
||||
public String text;
|
||||
public Integer timestamp;
|
||||
|
||||
@@ -12,7 +12,7 @@ public class MessageData {
|
||||
public Pair<Float, Float> location;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String overrideSenderName;
|
||||
/* Quoted message id. Takes preference over `quoted_text` (see below). */
|
||||
/** Quoted message id. Takes preference over `quoted_text` (see below). */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer quotedMessageId;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
|
||||
@@ -3,7 +3,7 @@ package chat.delta.rpc.types;
|
||||
|
||||
public class MessageInfo {
|
||||
public EphemeralTimer ephemeralTimer;
|
||||
/* When message is ephemeral this contains the timestamp of the message expiry */
|
||||
/** When message is ephemeral this contains the timestamp of the message expiry */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer ephemeralTimestamp;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
|
||||
@@ -15,9 +15,9 @@ public abstract class MessageListItem {
|
||||
public Integer msg_id;
|
||||
}
|
||||
|
||||
/* Day marker, separating messages that correspond to different days according to local time. */
|
||||
/** Day marker, separating messages that correspond to different days according to local time. */
|
||||
public static class DayMarker extends MessageListItem {
|
||||
/* Marker timestamp, for day markers, in unix milliseconds */
|
||||
/** Marker timestamp, for day markers, in unix milliseconds */
|
||||
public Integer timestamp;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,11 +17,12 @@ public abstract class MessageLoadResult {
|
||||
public Integer dimensionsWidth;
|
||||
public DownloadState downloadState;
|
||||
public Integer duration;
|
||||
/* An error text, if there is one. */
|
||||
/** An error text, if there is one. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String error;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String file;
|
||||
/** The size of the file in bytes, if applicable. If message is a pre-message, then this is the size of the file to be downloaded. */
|
||||
public Integer fileBytes;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String fileMime;
|
||||
@@ -30,13 +31,13 @@ public abstract class MessageLoadResult {
|
||||
public Integer fromId;
|
||||
public Boolean hasDeviatingTimestamp;
|
||||
public Boolean hasHtml;
|
||||
/* Check if a message has a POI location bound to it. These locations are also returned by `get_locations` method. The UI may decide to display a special icon beside such messages. */
|
||||
/** Check if a message has a POI location bound to it. These locations are also returned by `get_locations` method. The UI may decide to display a special icon beside such messages. */
|
||||
public Boolean hasLocation;
|
||||
public Integer id;
|
||||
/* if is_info is set, this refers to the contact profile that should be opened when the info message is tapped. */
|
||||
/** if is_info is set, this refers to the contact profile that should be opened when the info message is tapped. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer infoContactId;
|
||||
/* True if the message was sent by a bot. */
|
||||
/** True if the message was sent by a bot. */
|
||||
public Boolean isBot;
|
||||
public Boolean isEdited;
|
||||
public Boolean isForwarded;
|
||||
@@ -67,7 +68,7 @@ public abstract class MessageLoadResult {
|
||||
public Integer sortTimestamp;
|
||||
public Integer state;
|
||||
public String subject;
|
||||
/* when is_info is true this describes what type of system message it is */
|
||||
/** when is_info is true this describes what type of system message it is */
|
||||
public SystemMessageType systemMessageType;
|
||||
public String text;
|
||||
public Integer timestamp;
|
||||
|
||||
@@ -12,9 +12,9 @@ public class MessageNotificationInfo {
|
||||
public String image;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String imageMimeType;
|
||||
/* also known as summary_text1 */
|
||||
/** also known as summary_text1 */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String summaryPrefix;
|
||||
/* also known as summary_text2 */
|
||||
/** also known as summary_text2 */
|
||||
public String summaryText;
|
||||
}
|
||||
@@ -18,7 +18,7 @@ public abstract class MessageQuote {
|
||||
public static class WithMessage extends MessageQuote {
|
||||
public String authorDisplayColor;
|
||||
public String authorDisplayName;
|
||||
/* The quoted message does not always belong to the same chat, e.g. when "Reply Privately" is used. */
|
||||
/** The quoted message does not always belong to the same chat, e.g. when "Reply Privately" is used. */
|
||||
public Integer chatId;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String image;
|
||||
|
||||
@@ -4,7 +4,7 @@ package chat.delta.rpc.types;
|
||||
public class MessageSearchResult {
|
||||
public String authorColor;
|
||||
public Integer authorId;
|
||||
/* if sender name if overridden it will show it as ~alias */
|
||||
/** if sender name if overridden it will show it as ~alias */
|
||||
public String authorName;
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String authorProfileImage;
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
public enum NotifyState {
|
||||
/* Not subscribed to push notifications. */
|
||||
/** Not subscribed to push notifications. */
|
||||
NotConnected,
|
||||
|
||||
/* Subscribed to heartbeat push notifications. */
|
||||
/** Subscribed to heartbeat push notifications. */
|
||||
Heartbeat,
|
||||
|
||||
/* Subscribed to push notifications for new messages. */
|
||||
/** Subscribed to push notifications for new messages. */
|
||||
Connected,
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package chat.delta.rpc.types;
|
||||
|
||||
public class ProviderInfo {
|
||||
public String beforeLoginHint;
|
||||
/* Unique ID, corresponding to provider database filename. */
|
||||
/** Unique ID, corresponding to provider database filename. */
|
||||
public String id;
|
||||
public String overviewPage;
|
||||
public Integer status;
|
||||
|
||||
@@ -17,45 +17,45 @@ public abstract class Qr {
|
||||
* If the user agrees, pass this QR code to [`crate::securejoin::join_securejoin`].
|
||||
*/
|
||||
public static class AskVerifyContact extends Qr {
|
||||
/* Authentication code. */
|
||||
/** Authentication code. */
|
||||
public String authcode;
|
||||
/* ID of the contact. */
|
||||
/** ID of the contact. */
|
||||
public Integer contact_id;
|
||||
/* Fingerprint of the contact key as scanned from the QR code. */
|
||||
/** Fingerprint of the contact key as scanned from the QR code. */
|
||||
public String fingerprint;
|
||||
/* Invite number. */
|
||||
/** Invite number. */
|
||||
public String invitenumber;
|
||||
}
|
||||
|
||||
/* Ask the user whether to join the group. */
|
||||
/** Ask the user whether to join the group. */
|
||||
public static class AskVerifyGroup extends Qr {
|
||||
/* Authentication code. */
|
||||
/** Authentication code. */
|
||||
public String authcode;
|
||||
/* ID of the contact. */
|
||||
/** ID of the contact. */
|
||||
public Integer contact_id;
|
||||
/* Fingerprint of the contact key as scanned from the QR code. */
|
||||
/** Fingerprint of the contact key as scanned from the QR code. */
|
||||
public String fingerprint;
|
||||
/* Group ID. */
|
||||
/** Group ID. */
|
||||
public String grpid;
|
||||
/* Group name. */
|
||||
/** Group name. */
|
||||
public String grpname;
|
||||
/* Invite number. */
|
||||
/** Invite number. */
|
||||
public String invitenumber;
|
||||
}
|
||||
|
||||
/* Ask the user whether to join the broadcast channel. */
|
||||
/** Ask the user whether to join the broadcast channel. */
|
||||
public static class AskJoinBroadcast extends Qr {
|
||||
/* Authentication code. */
|
||||
/** Authentication code. */
|
||||
public String authcode;
|
||||
/* ID of the contact who owns the broadcast channel and created the QR code. */
|
||||
/** ID of the contact who owns the broadcast channel and created the QR code. */
|
||||
public Integer contact_id;
|
||||
/* Fingerprint of the broadcast channel owner's key as scanned from the QR code. */
|
||||
/** Fingerprint of the broadcast channel owner's key as scanned from the QR code. */
|
||||
public String fingerprint;
|
||||
/* A string of random characters, uniquely identifying this broadcast channel across all databases/clients. Called `grpid` for historic reasons: The id of multi-user chats is always called `grpid` in the database because groups were once the only multi-user chats. */
|
||||
/** A string of random characters, uniquely identifying this broadcast channel across all databases/clients. Called `grpid` for historic reasons: The id of multi-user chats is always called `grpid` in the database because groups were once the only multi-user chats. */
|
||||
public String grpid;
|
||||
/* Invite number. */
|
||||
/** Invite number. */
|
||||
public String invitenumber;
|
||||
/* The user-visible name of this broadcast channel */
|
||||
/** The user-visible name of this broadcast channel */
|
||||
public String name;
|
||||
}
|
||||
|
||||
@@ -65,41 +65,41 @@ public abstract class Qr {
|
||||
* Ask the user if they want to start chatting.
|
||||
*/
|
||||
public static class FprOk extends Qr {
|
||||
/* Contact ID. */
|
||||
/** Contact ID. */
|
||||
public Integer contact_id;
|
||||
}
|
||||
|
||||
/* Scanned fingerprint does not match the last seen fingerprint. */
|
||||
/** Scanned fingerprint does not match the last seen fingerprint. */
|
||||
public static class FprMismatch extends Qr {
|
||||
/* Contact ID. */
|
||||
/** Contact ID. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer contact_id;
|
||||
}
|
||||
|
||||
/* The scanned QR code contains a fingerprint but no e-mail address. */
|
||||
/** The scanned QR code contains a fingerprint but no e-mail address. */
|
||||
public static class FprWithoutAddr extends Qr {
|
||||
/* Key fingerprint. */
|
||||
/** Key fingerprint. */
|
||||
public String fingerprint;
|
||||
}
|
||||
|
||||
/* Ask the user if they want to create an account on the given domain. */
|
||||
/** Ask the user if they want to create an account on the given domain. */
|
||||
public static class Account extends Qr {
|
||||
/* Server domain name. */
|
||||
/** Server domain name. */
|
||||
public String domain;
|
||||
}
|
||||
|
||||
/* Provides a backup that can be retrieved using iroh-net based backup transfer protocol. */
|
||||
/** Provides a backup that can be retrieved using iroh-net based backup transfer protocol. */
|
||||
public static class Backup2 extends Qr {
|
||||
/* Authentication token. */
|
||||
/** Authentication token. */
|
||||
public String auth_token;
|
||||
/* Iroh node address. */
|
||||
/** Iroh node address. */
|
||||
public String node_addr;
|
||||
}
|
||||
|
||||
public static class BackupTooNew extends Qr {
|
||||
}
|
||||
|
||||
/* Ask the user if they want to use the given service for video chats. */
|
||||
/** Ask the user if they want to use the given service for video chats. */
|
||||
public static class WebrtcInstance extends Qr {
|
||||
public String domain;
|
||||
public String instance_pattern;
|
||||
@@ -111,9 +111,9 @@ public abstract class Qr {
|
||||
* Note that HTTP(S) URLs without a path and query parameters are treated as HTTP(S) proxy URL. UI may want to still offer to open the URL in the browser if QR code contents starts with `http://` or `https://` and the QR code was not scanned from the proxy configuration screen.
|
||||
*/
|
||||
public static class Proxy extends Qr {
|
||||
/* Host extracted from the URL to display in the UI. */
|
||||
/** Host extracted from the URL to display in the UI. */
|
||||
public String host;
|
||||
/* Port extracted from the URL to display in the UI. */
|
||||
/** Port extracted from the URL to display in the UI. */
|
||||
public Integer port;
|
||||
/**
|
||||
* Proxy URL.
|
||||
@@ -129,9 +129,9 @@ public abstract class Qr {
|
||||
* Optionally, a draft message could be provided. Ask the user if they want to start chatting.
|
||||
*/
|
||||
public static class Addr extends Qr {
|
||||
/* Contact ID. */
|
||||
/** Contact ID. */
|
||||
public Integer contact_id;
|
||||
/* Draft message. */
|
||||
/** Draft message. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String draft;
|
||||
}
|
||||
@@ -154,91 +154,91 @@ public abstract class Qr {
|
||||
public String text;
|
||||
}
|
||||
|
||||
/* Ask the user if they want to withdraw their own QR code. */
|
||||
/** Ask the user if they want to withdraw their own QR code. */
|
||||
public static class WithdrawVerifyContact extends Qr {
|
||||
/* Authentication code. */
|
||||
/** Authentication code. */
|
||||
public String authcode;
|
||||
/* Contact ID. */
|
||||
/** Contact ID. */
|
||||
public Integer contact_id;
|
||||
/* Fingerprint of the contact key as scanned from the QR code. */
|
||||
/** Fingerprint of the contact key as scanned from the QR code. */
|
||||
public String fingerprint;
|
||||
/* Invite number. */
|
||||
/** Invite number. */
|
||||
public String invitenumber;
|
||||
}
|
||||
|
||||
/* Ask the user if they want to withdraw their own group invite QR code. */
|
||||
/** Ask the user if they want to withdraw their own group invite QR code. */
|
||||
public static class WithdrawVerifyGroup extends Qr {
|
||||
/* Authentication code. */
|
||||
/** Authentication code. */
|
||||
public String authcode;
|
||||
/* Contact ID. */
|
||||
/** Contact ID. */
|
||||
public Integer contact_id;
|
||||
/* Fingerprint of the contact key as scanned from the QR code. */
|
||||
/** Fingerprint of the contact key as scanned from the QR code. */
|
||||
public String fingerprint;
|
||||
/* Group ID. */
|
||||
/** Group ID. */
|
||||
public String grpid;
|
||||
/* Group name. */
|
||||
/** Group name. */
|
||||
public String grpname;
|
||||
/* Invite number. */
|
||||
/** Invite number. */
|
||||
public String invitenumber;
|
||||
}
|
||||
|
||||
/* Ask the user if they want to withdraw their own broadcast channel invite QR code. */
|
||||
/** Ask the user if they want to withdraw their own broadcast channel invite QR code. */
|
||||
public static class WithdrawJoinBroadcast extends Qr {
|
||||
/* Authentication code. */
|
||||
/** Authentication code. */
|
||||
public String authcode;
|
||||
/* Contact ID. Always `ContactId::SELF`. */
|
||||
/** Contact ID. Always `ContactId::SELF`. */
|
||||
public Integer contact_id;
|
||||
/* Fingerprint of the contact key as scanned from the QR code. */
|
||||
/** Fingerprint of the contact key as scanned from the QR code. */
|
||||
public String fingerprint;
|
||||
/* ID, uniquely identifying this chat. Called grpid for historic reasons. */
|
||||
/** ID, uniquely identifying this chat. Called grpid for historic reasons. */
|
||||
public String grpid;
|
||||
/* Invite number. */
|
||||
/** Invite number. */
|
||||
public String invitenumber;
|
||||
/* Broadcast name. */
|
||||
/** Broadcast name. */
|
||||
public String name;
|
||||
}
|
||||
|
||||
/* Ask the user if they want to revive their own QR code. */
|
||||
/** Ask the user if they want to revive their own QR code. */
|
||||
public static class ReviveVerifyContact extends Qr {
|
||||
/* Authentication code. */
|
||||
/** Authentication code. */
|
||||
public String authcode;
|
||||
/* Contact ID. */
|
||||
/** Contact ID. */
|
||||
public Integer contact_id;
|
||||
/* Fingerprint of the contact key as scanned from the QR code. */
|
||||
/** Fingerprint of the contact key as scanned from the QR code. */
|
||||
public String fingerprint;
|
||||
/* Invite number. */
|
||||
/** Invite number. */
|
||||
public String invitenumber;
|
||||
}
|
||||
|
||||
/* Ask the user if they want to revive their own group invite QR code. */
|
||||
/** Ask the user if they want to revive their own group invite QR code. */
|
||||
public static class ReviveVerifyGroup extends Qr {
|
||||
/* Authentication code. */
|
||||
/** Authentication code. */
|
||||
public String authcode;
|
||||
/* Contact ID. */
|
||||
/** Contact ID. */
|
||||
public Integer contact_id;
|
||||
/* Fingerprint of the contact key as scanned from the QR code. */
|
||||
/** Fingerprint of the contact key as scanned from the QR code. */
|
||||
public String fingerprint;
|
||||
/* Group ID. */
|
||||
/** Group ID. */
|
||||
public String grpid;
|
||||
/* Contact ID. */
|
||||
/** Contact ID. */
|
||||
public String grpname;
|
||||
/* Invite number. */
|
||||
/** Invite number. */
|
||||
public String invitenumber;
|
||||
}
|
||||
|
||||
/* Ask the user if they want to revive their own broadcast channel invite QR code. */
|
||||
/** Ask the user if they want to revive their own broadcast channel invite QR code. */
|
||||
public static class ReviveJoinBroadcast extends Qr {
|
||||
/* Authentication code. */
|
||||
/** Authentication code. */
|
||||
public String authcode;
|
||||
/* Contact ID. Always `ContactId::SELF`. */
|
||||
/** Contact ID. Always `ContactId::SELF`. */
|
||||
public Integer contact_id;
|
||||
/* Fingerprint of the contact key as scanned from the QR code. */
|
||||
/** Fingerprint of the contact key as scanned from the QR code. */
|
||||
public String fingerprint;
|
||||
/* Globally unique chat ID. Called grpid for historic reasons. */
|
||||
/** Globally unique chat ID. Called grpid for historic reasons. */
|
||||
public String grpid;
|
||||
/* Invite number. */
|
||||
/** Invite number. */
|
||||
public String invitenumber;
|
||||
/* Broadcast name. */
|
||||
/** Broadcast name. */
|
||||
public String name;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/* Autogenerated file, do not edit manually */
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
/* A single reaction emoji. */
|
||||
/** A single reaction emoji. */
|
||||
public class Reaction {
|
||||
/* Emoji frequency. */
|
||||
/** Emoji frequency. */
|
||||
public Integer count;
|
||||
/* Emoji. */
|
||||
/** Emoji. */
|
||||
public String emoji;
|
||||
/* True if we reacted with this emoji. */
|
||||
/** True if we reacted with this emoji. */
|
||||
public Boolean isFromSelf;
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
/* Autogenerated file, do not edit manually */
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
/* Structure representing all reactions to a particular message. */
|
||||
/** Structure representing all reactions to a particular message. */
|
||||
public class Reactions {
|
||||
/* Unique reactions and their count, sorted in descending order. */
|
||||
/** Unique reactions and their count, sorted in descending order. */
|
||||
public java.util.List<Reaction> reactions;
|
||||
/* Map from a contact to it's reaction to message. */
|
||||
/** Map from a contact to it's reaction to message. */
|
||||
public java.util.Map<String, java.util.List<String>> reactionsByContact;
|
||||
}
|
||||
@@ -2,21 +2,21 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
public enum SecurejoinSource {
|
||||
/* Because of some problem, it is unknown where the QR code came from. */
|
||||
/** Because of some problem, it is unknown where the QR code came from. */
|
||||
Unknown,
|
||||
|
||||
/* The user opened a link somewhere outside Delta Chat */
|
||||
/** The user opened a link somewhere outside Delta Chat */
|
||||
ExternalLink,
|
||||
|
||||
/* The user clicked on a link in a message inside Delta Chat */
|
||||
/** The user clicked on a link in a message inside Delta Chat */
|
||||
InternalLink,
|
||||
|
||||
/* The user clicked "Paste from Clipboard" in the QR scan activity */
|
||||
/** The user clicked "Paste from Clipboard" in the QR scan activity */
|
||||
Clipboard,
|
||||
|
||||
/* The user clicked "Load QR code as image" in the QR scan activity */
|
||||
/** The user clicked "Load QR code as image" in the QR scan activity */
|
||||
ImageLoaded,
|
||||
|
||||
/* The user scanned a QR code */
|
||||
/** The user scanned a QR code */
|
||||
Scan,
|
||||
}
|
||||
@@ -2,12 +2,12 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
public enum SecurejoinUiPath {
|
||||
/* The UI path is unknown, or the user didn't open the QR code screen at all. */
|
||||
/** The UI path is unknown, or the user didn't open the QR code screen at all. */
|
||||
Unknown,
|
||||
|
||||
/* The user directly clicked on the QR icon in the main screen */
|
||||
/** The user directly clicked on the QR icon in the main screen */
|
||||
QrIcon,
|
||||
|
||||
/* The user first clicked on the `+` button in the main screen, and then on "New Contact" */
|
||||
/** The user first clicked on the `+` button in the main screen, and then on "New Contact" */
|
||||
NewContact,
|
||||
}
|
||||
@@ -2,15 +2,15 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
public enum Socket {
|
||||
/* Unspecified socket security, select automatically. */
|
||||
/** Unspecified socket security, select automatically. */
|
||||
automatic,
|
||||
|
||||
/* TLS connection. */
|
||||
/** TLS connection. */
|
||||
ssl,
|
||||
|
||||
/* STARTTLS connection. */
|
||||
/** STARTTLS connection. */
|
||||
starttls,
|
||||
|
||||
/* No TLS, plaintext connection. */
|
||||
/** No TLS, plaintext connection. */
|
||||
plain,
|
||||
}
|
||||
@@ -19,21 +19,21 @@ public enum SystemMessageType {
|
||||
CallAccepted,
|
||||
CallEnded,
|
||||
|
||||
/* 1:1 chats info message telling that SecureJoin has started and the user should wait for it to complete. */
|
||||
/** 1:1 chats info message telling that SecureJoin has started and the user should wait for it to complete. */
|
||||
SecurejoinWait,
|
||||
|
||||
/* 1:1 chats info message telling that SecureJoin is still running, but the user may already send messages. */
|
||||
/** 1:1 chats info message telling that SecureJoin is still running, but the user may already send messages. */
|
||||
SecurejoinWaitTimeout,
|
||||
|
||||
/* Chat ephemeral message timer is changed. */
|
||||
/** Chat ephemeral message timer is changed. */
|
||||
EphemeralTimerChanged,
|
||||
|
||||
/* Self-sent-message that contains only json used for multi-device-sync; if possible, we attach that to other messages as for locations. */
|
||||
/** Self-sent-message that contains only json used for multi-device-sync; if possible, we attach that to other messages as for locations. */
|
||||
MultiDeviceSync,
|
||||
|
||||
/* Webxdc info added with `info` set in `send_webxdc_status_update()`. */
|
||||
/** Webxdc info added with `info` set in `send_webxdc_status_update()`. */
|
||||
WebxdcInfoMessage,
|
||||
|
||||
/* This message contains a users iroh node address. */
|
||||
/** This message contains a users iroh node address. */
|
||||
IrohNodeAddr,
|
||||
}
|
||||
@@ -2,19 +2,19 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
public class VcardContact {
|
||||
/* Email address. */
|
||||
/** Email address. */
|
||||
public String addr;
|
||||
/* Contact color as hex string. */
|
||||
/** Contact color as hex string. */
|
||||
public String color;
|
||||
/* The contact's name, or the email address if no name was given. */
|
||||
/** The contact's name, or the email address if no name was given. */
|
||||
public String displayName;
|
||||
/* Public PGP key in Base64. */
|
||||
/** Public PGP key in Base64. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String key;
|
||||
/* Profile image in Base64. */
|
||||
/** Profile image in Base64. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String profileImage;
|
||||
/* Last update timestamp. */
|
||||
/** Last update timestamp. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public Integer timestamp;
|
||||
}
|
||||
@@ -4,13 +4,13 @@ package chat.delta.rpc.types;
|
||||
public enum Viewtype {
|
||||
Unknown,
|
||||
|
||||
/* Text message. */
|
||||
/** Text message. */
|
||||
Text,
|
||||
|
||||
/* Image message. If the image is an animated GIF, the type `Viewtype.Gif` should be used. */
|
||||
/** Image message. If the image is an animated GIF, the type `Viewtype.Gif` should be used. */
|
||||
Image,
|
||||
|
||||
/* Animated GIF message. */
|
||||
/** Animated GIF message. */
|
||||
Gif,
|
||||
|
||||
/**
|
||||
@@ -20,24 +20,24 @@ public enum Viewtype {
|
||||
*/
|
||||
Sticker,
|
||||
|
||||
/* Message containing an Audio file. */
|
||||
/** Message containing an Audio file. */
|
||||
Audio,
|
||||
|
||||
/* A voice message that was directly recorded by the user. For all other audio messages, the type `Viewtype.Audio` should be used. */
|
||||
/** A voice message that was directly recorded by the user. For all other audio messages, the type `Viewtype.Audio` should be used. */
|
||||
Voice,
|
||||
|
||||
/* Video messages. */
|
||||
/** Video messages. */
|
||||
Video,
|
||||
|
||||
/* Message containing any file, eg. a PDF. */
|
||||
/** Message containing any file, eg. a PDF. */
|
||||
File,
|
||||
|
||||
/* Message is a call. */
|
||||
/** Message is a call. */
|
||||
Call,
|
||||
|
||||
/* Message is an webxdc instance. */
|
||||
/** Message is an webxdc instance. */
|
||||
Webxdc,
|
||||
|
||||
/* Message containing shared contacts represented as a vCard (virtual contact file) with email addresses and possibly other fields. Use `parse_vcard()` to retrieve them. */
|
||||
/** Message containing shared contacts represented as a vCard (virtual contact file) with email addresses and possibly other fields. Use `parse_vcard()` to retrieve them. */
|
||||
Vcard,
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
package chat.delta.rpc.types;
|
||||
|
||||
public class WebxdcMessageInfo {
|
||||
/* if the Webxdc represents a document, then this is the name of the document */
|
||||
/** if the Webxdc represents a document, then this is the name of the document */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String document;
|
||||
/**
|
||||
@@ -13,7 +13,7 @@ public class WebxdcMessageInfo {
|
||||
* App icons should should be square, the implementations will add round corners etc. as needed.
|
||||
*/
|
||||
public String icon;
|
||||
/* True if full internet access should be granted to the app. */
|
||||
/** True if full internet access should be granted to the app. */
|
||||
public Boolean internetAccess;
|
||||
/**
|
||||
* The name of the app.
|
||||
@@ -21,16 +21,16 @@ public class WebxdcMessageInfo {
|
||||
* Defaults to the filename if not set in the manifest.
|
||||
*/
|
||||
public String name;
|
||||
/* Address to be used for `window.webxdc.selfAddr` in JS land. */
|
||||
/** Address to be used for `window.webxdc.selfAddr` in JS land. */
|
||||
public String selfAddr;
|
||||
/* Milliseconds to wait before calling `sendUpdate()` again since the last call. Should be exposed to `window.sendUpdateInterval` in JS land. */
|
||||
/** Milliseconds to wait before calling `sendUpdate()` again since the last call. Should be exposed to `window.sendUpdateInterval` in JS land. */
|
||||
public Integer sendUpdateInterval;
|
||||
/* Maximum number of bytes accepted for a serialized update object. Should be exposed to `window.sendUpdateMaxSize` in JS land. */
|
||||
/** Maximum number of bytes accepted for a serialized update object. Should be exposed to `window.sendUpdateMaxSize` in JS land. */
|
||||
public Integer sendUpdateMaxSize;
|
||||
/* URL where the source code of the Webxdc and other information can be found; defaults to an empty string. Implementations may offer an menu or a button to open this URL. */
|
||||
/** URL where the source code of the Webxdc and other information can be found; defaults to an empty string. Implementations may offer an menu or a button to open this URL. */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String sourceCodeUrl;
|
||||
/* short string describing the state of the app, sth. as "2 votes", "Highscore: 123", can be changed by the apps */
|
||||
/** short string describing the state of the app, sth. as "2 votes", "Highscore: 123", can be changed by the apps */
|
||||
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
|
||||
public String summary;
|
||||
}
|
||||
@@ -4,6 +4,7 @@ public class DcAccounts {
|
||||
|
||||
public DcAccounts(String dir) {
|
||||
accountsCPtr = createAccountsCPtr(dir);
|
||||
if (accountsCPtr == 0) throw new RuntimeException("createAccountsCPtr() returned null pointer");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -35,6 +35,7 @@ public class DcContext {
|
||||
public final static int DC_EVENT_INCOMING_CALL_ACCEPTED = 2560;
|
||||
public final static int DC_EVENT_OUTGOING_CALL_ACCEPTED = 2570;
|
||||
public final static int DC_EVENT_CALL_ENDED = 2580;
|
||||
public final static int DC_EVENT_TRANSPORTS_MODIFIED = 2600;
|
||||
|
||||
public final static int DC_IMEX_EXPORT_SELF_KEYS = 1;
|
||||
public final static int DC_IMEX_IMPORT_SELF_KEYS = 2;
|
||||
|
||||
@@ -54,7 +54,6 @@ public class AllMediaDocumentsFragment
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
|
||||
dcContext = DcHelper.getContext(getContext());
|
||||
chatId = getArguments().getInt(CHAT_ID_EXTRA, -1);
|
||||
viewtype1 = getArguments().getInt(VIEWTYPE1, 0);
|
||||
viewtype2 = getArguments().getInt(VIEWTYPE2, 0);
|
||||
|
||||
@@ -52,7 +52,6 @@ public class AllMediaGalleryFragment
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
|
||||
dcContext = DcHelper.getContext(getContext());
|
||||
chatId = getArguments().getInt(CHAT_ID_EXTRA, -1);
|
||||
|
||||
getLoaderManager().initLoader(0, null, this);
|
||||
|
||||
@@ -57,13 +57,16 @@ import chat.delta.rpc.RpcException;
|
||||
|
||||
public class ApplicationContext extends MultiDexApplication {
|
||||
private static final String TAG = ApplicationContext.class.getSimpleName();
|
||||
private static final Object initLock = new Object();
|
||||
private static volatile boolean isInitialized = false;
|
||||
|
||||
public static DcAccounts dcAccounts;
|
||||
public Rpc rpc;
|
||||
public DcContext dcContext;
|
||||
public DcLocationManager dcLocationManager;
|
||||
public DcEventCenter eventCenter;
|
||||
public NotificationCenter notificationCenter;
|
||||
private static DcAccounts dcAccounts;
|
||||
private Rpc rpc;
|
||||
private DcContext dcContext;
|
||||
|
||||
private DcLocationManager dcLocationManager;
|
||||
private DcEventCenter eventCenter;
|
||||
private NotificationCenter notificationCenter;
|
||||
private JobManager jobManager;
|
||||
|
||||
private int debugOnAvailableCount;
|
||||
@@ -75,6 +78,84 @@ public class ApplicationContext extends MultiDexApplication {
|
||||
return (ApplicationContext)context.getApplicationContext();
|
||||
}
|
||||
|
||||
private static void ensureInitialized() {
|
||||
synchronized (initLock) {
|
||||
while (!isInitialized) {
|
||||
try {
|
||||
initLock.wait();
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
throw new RuntimeException("Interrupted while waiting for initialization", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get DcAccounts instance, waiting for initialization if necessary.
|
||||
* This method is thread-safe and will block until initialization is complete.
|
||||
*/
|
||||
public static DcAccounts getDcAccounts() {
|
||||
ensureInitialized();
|
||||
return dcAccounts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Rpc instance, waiting for initialization if necessary.
|
||||
* This method is thread-safe and will block until initialization is complete.
|
||||
*/
|
||||
public Rpc getRpc() {
|
||||
ensureInitialized();
|
||||
return rpc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get DcContext instance, waiting for initialization if necessary.
|
||||
* This method is thread-safe and will block until initialization is complete.
|
||||
*/
|
||||
public DcContext getDcContext() {
|
||||
ensureInitialized();
|
||||
return dcContext;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set DcContext instance. This should only be called by AccountManager when switching accounts,
|
||||
* which only happens after initial initialization is complete.
|
||||
* This method is thread-safe but does NOT trigger initialization or notify waiting threads.
|
||||
*/
|
||||
public void setDcContext(DcContext dcContext) {
|
||||
synchronized (initLock) {
|
||||
this.dcContext = dcContext;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get DcLocationManager instance, waiting for initialization if necessary.
|
||||
* This method is thread-safe and will block until initialization is complete.
|
||||
*/
|
||||
public DcLocationManager getLocationManager() {
|
||||
ensureInitialized();
|
||||
return dcLocationManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get DcEventCenter instance, waiting for initialization if necessary.
|
||||
* This method is thread-safe and will block until initialization is complete.
|
||||
*/
|
||||
public DcEventCenter getEventCenter() {
|
||||
ensureInitialized();
|
||||
return eventCenter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get NotificationCenter instance, waiting for initialization if necessary.
|
||||
* This method is thread-safe and will block until initialization is complete.
|
||||
*/
|
||||
public NotificationCenter getNotificationCenter() {
|
||||
ensureInitialized();
|
||||
return notificationCenter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
@@ -110,67 +191,91 @@ public class ApplicationContext extends MultiDexApplication {
|
||||
|
||||
System.loadLibrary("native-utils");
|
||||
|
||||
dcAccounts = new DcAccounts(new File(getFilesDir(), "accounts").getAbsolutePath());
|
||||
Log.i(TAG, "DcAccounts created");
|
||||
rpc = new Rpc(new FFITransport(dcAccounts.getJsonrpcInstance()));
|
||||
Log.i(TAG, "Rpc created");
|
||||
AccountManager.getInstance().migrateToDcAccounts(this);
|
||||
// Initialize DcAccounts in background to avoid ANR during SQL migrations
|
||||
Util.runOnBackground(() -> {
|
||||
synchronized (initLock) {
|
||||
try {
|
||||
dcAccounts = new DcAccounts(new File(getFilesDir(), "accounts").getAbsolutePath());
|
||||
Log.i(TAG, "DcAccounts created");
|
||||
rpc = new Rpc(new FFITransport(dcAccounts.getJsonrpcInstance()));
|
||||
Log.i(TAG, "Rpc created");
|
||||
AccountManager.getInstance().migrateToDcAccounts(this);
|
||||
|
||||
int[] allAccounts = dcAccounts.getAll();
|
||||
Log.i(TAG, "Number of profiles: " + allAccounts.length);
|
||||
for (int accountId : allAccounts) {
|
||||
DcContext ac = dcAccounts.getAccount(accountId);
|
||||
if (!ac.isOpen()) {
|
||||
try {
|
||||
DatabaseSecret secret = DatabaseSecretProvider.getOrCreateDatabaseSecret(this, accountId);
|
||||
boolean res = ac.open(secret.asString());
|
||||
if (res) Log.i(TAG, "Successfully opened account " + accountId + ", path: " + ac.getBlobdir());
|
||||
else Log.e(TAG, "Error opening account " + accountId + ", path: " + ac.getBlobdir());
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Failed to open account " + accountId + ", path: " + ac.getBlobdir() + ": " + e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// 2025-12-16: The setting was removed.
|
||||
// Revert it to the default if it was changed in the past.
|
||||
ac.setConfigInt("webxdc_realtime_enabled", 1);
|
||||
|
||||
// 2025-11-12: this is needed until core starts ignoring "delete_server_after" for chatmail
|
||||
if (ac.isChatmail()) {
|
||||
ac.setConfig("delete_server_after", null); // reset
|
||||
}
|
||||
}
|
||||
if (allAccounts.length == 0) {
|
||||
try {
|
||||
rpc.addAccount();
|
||||
} catch (RpcException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
dcContext = dcAccounts.getSelectedAccount();
|
||||
notificationCenter = new NotificationCenter(this);
|
||||
eventCenter = new DcEventCenter(this);
|
||||
dcLocationManager = new DcLocationManager(this, dcContext);
|
||||
|
||||
// Mark as initialized before starting threads that depend on it
|
||||
isInitialized = true;
|
||||
initLock.notifyAll();
|
||||
Log.i(TAG, "DcAccounts initialization complete");
|
||||
|
||||
new Thread(() -> {
|
||||
Log.i(TAG, "Starting event loop");
|
||||
DcEventEmitter emitter = dcAccounts.getEventEmitter();
|
||||
Log.i(TAG, "DcEventEmitter obtained");
|
||||
while (true) {
|
||||
DcEvent event = emitter.getNextEvent();
|
||||
if (event==null) {
|
||||
break;
|
||||
}
|
||||
eventCenter.handleEvent(event);
|
||||
}
|
||||
Log.i("DeltaChat", "shutting down event handler");
|
||||
}, "eventThread").start();
|
||||
|
||||
// set translations before starting I/O to avoid sending untranslated MDNs (issue #2288)
|
||||
DcHelper.setStockTranslations(this);
|
||||
|
||||
dcAccounts.startIo();
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Fatal error during DcAccounts initialization", e);
|
||||
// Mark as initialized even on error to avoid deadlock
|
||||
isInitialized = true;
|
||||
initLock.notifyAll();
|
||||
throw new RuntimeException("Failed to initialize DcAccounts", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// October-2025 migration: delete deprecated "permanent channel" id
|
||||
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
|
||||
notificationManager.deleteNotificationChannel("dc_foreground_notification_ch");
|
||||
// end October-2025 migration
|
||||
|
||||
int[] allAccounts = dcAccounts.getAll();
|
||||
Log.i(TAG, "Number of profiles: " + allAccounts.length);
|
||||
for (int accountId : allAccounts) {
|
||||
DcContext ac = dcAccounts.getAccount(accountId);
|
||||
if (!ac.isOpen()) {
|
||||
try {
|
||||
DatabaseSecret secret = DatabaseSecretProvider.getOrCreateDatabaseSecret(this, accountId);
|
||||
boolean res = ac.open(secret.asString());
|
||||
if (res) Log.i(TAG, "Successfully opened account " + accountId + ", path: " + ac.getBlobdir());
|
||||
else Log.e(TAG, "Error opening account " + accountId + ", path: " + ac.getBlobdir());
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Failed to open account " + accountId + ", path: " + ac.getBlobdir() + ": " + e);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// 2025.11.12: this is needed until core starts ignoring "delete_server_after" for chatmail
|
||||
if (ac.isChatmail()) {
|
||||
ac.setConfig("delete_server_after", null); // reset
|
||||
}
|
||||
}
|
||||
if (allAccounts.length == 0) {
|
||||
try {
|
||||
rpc.addAccount();
|
||||
} catch (RpcException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
dcContext = dcAccounts.getSelectedAccount();
|
||||
notificationCenter = new NotificationCenter(this);
|
||||
eventCenter = new DcEventCenter(this);
|
||||
new Thread(() -> {
|
||||
Log.i(TAG, "Starting event loop");
|
||||
DcEventEmitter emitter = dcAccounts.getEventEmitter();
|
||||
Log.i(TAG, "DcEventEmitter obtained");
|
||||
while (true) {
|
||||
DcEvent event = emitter.getNextEvent();
|
||||
if (event==null) {
|
||||
break;
|
||||
}
|
||||
eventCenter.handleEvent(event);
|
||||
}
|
||||
Log.i("DeltaChat", "shutting down event handler");
|
||||
}, "eventThread").start();
|
||||
|
||||
// set translations before starting I/O to avoid sending untranslated MDNs (issue #2288)
|
||||
DcHelper.setStockTranslations(this);
|
||||
|
||||
dcAccounts.startIo();
|
||||
|
||||
new ForegroundDetector(ApplicationContext.getInstance(this));
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
@@ -180,7 +285,7 @@ public class ApplicationContext extends MultiDexApplication {
|
||||
@Override
|
||||
public void onAvailable(@NonNull android.net.Network network) {
|
||||
Log.i("DeltaChat", "++++++++++++++++++ NetworkCallback.onAvailable() #" + debugOnAvailableCount++);
|
||||
dcAccounts.maybeNetwork();
|
||||
getDcAccounts().maybeNetwork();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -209,7 +314,6 @@ public class ApplicationContext extends MultiDexApplication {
|
||||
initializeJobManager();
|
||||
InChatSounds.getInstance(this);
|
||||
|
||||
dcLocationManager = new DcLocationManager(this);
|
||||
DynamicTheme.setDefaultDayNightMode(this);
|
||||
|
||||
IntentFilter filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
|
||||
@@ -258,6 +362,8 @@ public class ApplicationContext extends MultiDexApplication {
|
||||
"WebxdcGarbageCollectionWorker",
|
||||
ExistingPeriodicWorkPolicy.KEEP,
|
||||
webxdcGarbageCollectionRequest);
|
||||
|
||||
Log.i("DeltaChat", "+++++++++++ ApplicationContext.onCreate() finished ++++++++++");
|
||||
}
|
||||
|
||||
public JobManager getJobManager() {
|
||||
|
||||
@@ -23,7 +23,9 @@ import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Activity container for selecting a list of contacts.
|
||||
@@ -34,6 +36,9 @@ import java.util.List;
|
||||
public class ContactMultiSelectionActivity extends ContactSelectionActivity {
|
||||
|
||||
public static final String CONTACTS_EXTRA = "contacts_extra";
|
||||
public static final String REMOVED_CONTACTS_EXTRA = "removed_contacts_extra";
|
||||
|
||||
private ArrayList<Integer> preselectedContacts;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle icicle, boolean ready) {
|
||||
@@ -44,6 +49,9 @@ public class ContactMultiSelectionActivity extends ContactSelectionActivity {
|
||||
// it's a bit confusing having one "X" button on the left and one on the right -
|
||||
// and the "clear search" button is not that important.
|
||||
getToolbar().setUseClearButton(false);
|
||||
|
||||
// Store preselected contacts to track which ones were removed
|
||||
preselectedContacts = getIntent().getIntegerArrayListExtra(ContactSelectionListFragment.PRESELECTED_CONTACTS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,6 +80,19 @@ public class ContactMultiSelectionActivity extends ContactSelectionActivity {
|
||||
Intent resultIntent = getIntent();
|
||||
List<Integer> selectedContacts = contactsFragment.getSelectedContacts();
|
||||
resultIntent.putIntegerArrayListExtra(CONTACTS_EXTRA, new ArrayList<>(selectedContacts));
|
||||
|
||||
// Calculate which contacts were removed (preselected but not in final selection)
|
||||
if (preselectedContacts != null) {
|
||||
Set<Integer> selectedSet = new HashSet<>(selectedContacts);
|
||||
ArrayList<Integer> removedContacts = new ArrayList<>();
|
||||
for (Integer preselectedId : preselectedContacts) {
|
||||
if (!selectedSet.contains(preselectedId)) {
|
||||
removedContacts.add(preselectedId);
|
||||
}
|
||||
}
|
||||
resultIntent.putIntegerArrayListExtra(REMOVED_CONTACTS_EXTRA, removedContacts);
|
||||
}
|
||||
|
||||
setResult(RESULT_OK, resultIntent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,8 +81,9 @@ public abstract class ContactSelectionActivity extends PassphraseRequiredActionB
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
super.onOptionsItemSelected(item);
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home: super.onBackPressed(); return true;
|
||||
if (item.getItemId() == android.R.id.home) {
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
@@ -22,6 +22,7 @@ import static org.thoughtcrime.securesms.util.ShareUtil.isRelayingMessageContent
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.SparseIntArray;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
@@ -29,6 +30,7 @@ import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
@@ -84,6 +86,7 @@ public class ContactSelectionListFragment extends Fragment
|
||||
private OnContactSelectedListener onContactSelectedListener;
|
||||
private String cursorFilter;
|
||||
private RecyclerView recyclerView;
|
||||
private TextView emptyView;
|
||||
private ActionMode actionMode;
|
||||
private ActionMode.Callback actionModeCallback;
|
||||
|
||||
@@ -113,6 +116,7 @@ public class ContactSelectionListFragment extends Fragment
|
||||
View view = inflater.inflate(R.layout.contact_selection_list_fragment, container, false);
|
||||
|
||||
recyclerView = ViewUtil.findById(view, R.id.recycler_view);
|
||||
emptyView = ViewUtil.findById(view, android.R.id.empty);
|
||||
|
||||
// add padding to avoid content hidden behind system bars
|
||||
ViewUtil.applyWindowInsets(recyclerView, true, false, true, true);
|
||||
@@ -123,8 +127,7 @@ public class ContactSelectionListFragment extends Fragment
|
||||
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
|
||||
MenuInflater inflater = getActivity().getMenuInflater();
|
||||
inflater.inflate(R.menu.contact_list, menu);
|
||||
setCorrectMenuVisibility(menu);
|
||||
actionMode.setTitle("1");
|
||||
updateActionModeState(actionMode);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -161,19 +164,16 @@ public class ContactSelectionListFragment extends Fragment
|
||||
|
||||
private void handleSelectAll() {
|
||||
getContactSelectionListAdapter().selectAll();
|
||||
updateActionModeTitle();
|
||||
updateActionModeState(actionMode);
|
||||
}
|
||||
|
||||
private void updateActionModeTitle() {
|
||||
actionMode.setTitle(String.valueOf(getContactSelectionListAdapter().getActionModeSelection().size()));
|
||||
}
|
||||
|
||||
private void setCorrectMenuVisibility(Menu menu) {
|
||||
ContactSelectionListAdapter adapter = getContactSelectionListAdapter();
|
||||
if (adapter.getActionModeSelection().size() > 1) {
|
||||
menu.findItem(R.id.menu_view_profile).setVisible(false);
|
||||
private void updateActionModeState(ActionMode actionMode) {
|
||||
int size = getContactSelectionListAdapter().getActionModeSelection().size();
|
||||
if (size == 0) {
|
||||
actionMode.finish();
|
||||
} else {
|
||||
menu.findItem(R.id.menu_view_profile).setVisible(true);
|
||||
actionMode.getMenu().findItem(R.id.menu_view_profile).setVisible(size == 1);
|
||||
actionMode.setTitle(String.valueOf(size));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,7 +266,16 @@ public class ContactSelectionListFragment extends Fragment
|
||||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<DcContactsLoader.Ret> loader, DcContactsLoader.Ret data) {
|
||||
((ContactSelectionListAdapter) recyclerView.getAdapter()).changeData(data);
|
||||
ContactSelectionListAdapter adapter = (ContactSelectionListAdapter) recyclerView.getAdapter();
|
||||
adapter.changeData(data);
|
||||
if (emptyView != null) {
|
||||
if (adapter.getItemCount() > 0 || TextUtils.isEmpty(cursorFilter)) {
|
||||
emptyView.setVisibility(View.GONE);
|
||||
} else {
|
||||
emptyView.setText(getString(R.string.search_no_result_for_x, cursorFilter));
|
||||
emptyView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -280,10 +289,7 @@ public class ContactSelectionListFragment extends Fragment
|
||||
{
|
||||
if (handleActionMode) {
|
||||
if (actionMode != null) {
|
||||
Menu menu = actionMode.getMenu();
|
||||
setCorrectMenuVisibility(menu);
|
||||
updateActionModeTitle();
|
||||
finishActionModeIfSelectionIsEmpty();
|
||||
updateActionModeState(actionMode);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -321,17 +327,11 @@ public class ContactSelectionListFragment extends Fragment
|
||||
if (actionMode == null) {
|
||||
actionMode = ((AppCompatActivity)getActivity()).startSupportActionMode(actionModeCallback);
|
||||
} else {
|
||||
finishActionModeIfSelectionIsEmpty();
|
||||
updateActionModeState(actionMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void finishActionModeIfSelectionIsEmpty() {
|
||||
if (getContactSelectionListAdapter().getActionModeSelection().size() == 0) {
|
||||
actionMode.finish();
|
||||
}
|
||||
}
|
||||
|
||||
public void setOnContactSelectedListener(OnContactSelectedListener onContactSelectedListener) {
|
||||
this.onContactSelectedListener = onContactSelectedListener;
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
@@ -187,7 +188,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
private ApplicationContext context;
|
||||
private Recipient recipient;
|
||||
private DcContext dcContext;
|
||||
private Rpc rpc;
|
||||
private DcChat dcChat = new DcChat(0, 0);
|
||||
private int chatId;
|
||||
@@ -196,11 +196,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
private boolean isSecurityInitialized = false;
|
||||
private boolean successfulForwardingAttempt = false;
|
||||
private boolean isEditing = false;
|
||||
private boolean switchedProfile = false;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle state, boolean ready) {
|
||||
this.context = ApplicationContext.getInstance(getApplicationContext());
|
||||
this.dcContext = DcHelper.getContext(context);
|
||||
this.rpc = DcHelper.getRpc(context);
|
||||
|
||||
supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY);
|
||||
@@ -237,17 +237,34 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
});
|
||||
|
||||
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
if (container.isInputOpen()) {
|
||||
container.hideCurrentInput(composeText);
|
||||
} else {
|
||||
handleReturnToConversationList();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
setDcEventListener();
|
||||
handleRelaying();
|
||||
}
|
||||
|
||||
private void setDcEventListener() {
|
||||
DcEventCenter eventCenter = DcHelper.getEventCenter(this);
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_CHAT_MODIFIED, this);
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_CHAT_EPHEMERAL_TIMER_MODIFIED, this);
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_CONTACTS_CHANGED, this);
|
||||
// first cleanup in case it was already registered for other chat
|
||||
eventCenter.removeObservers(this);
|
||||
|
||||
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_CHAT_MODIFIED, this);
|
||||
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_CHAT_EPHEMERAL_TIMER_MODIFIED, this);
|
||||
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_CONTACTS_CHANGED, this);
|
||||
|
||||
if (!isMultiUser()) {
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_INCOMING_MSG, this);
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_MSG_READ, this);
|
||||
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_INCOMING_MSG, this);
|
||||
eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_MSG_READ, this);
|
||||
}
|
||||
|
||||
handleRelaying();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -273,6 +290,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
});
|
||||
|
||||
setDcEventListener(); // reset event listener
|
||||
handleRelaying();
|
||||
|
||||
if (fragment != null) {
|
||||
@@ -299,7 +317,13 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
titleView.setTitle(glideRequests, dcChat);
|
||||
|
||||
DcHelper.getNotificationCenter(this).updateVisibleChat(dcContext.getAccountId(), chatId);
|
||||
try {
|
||||
int accId = rpc.getSelectedAccountId();
|
||||
DcHelper.getNotificationCenter(this).updateVisibleChat(accId, chatId);
|
||||
} catch (RpcException e) {
|
||||
Log.e(TAG, "rpc.getSelectedAccountId() failed", e);
|
||||
}
|
||||
|
||||
|
||||
attachmentManager.onResume();
|
||||
}
|
||||
@@ -389,7 +413,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
break;
|
||||
|
||||
case GROUP_EDIT:
|
||||
dcChat = dcContext.getChat(chatId);
|
||||
dcChat = DcHelper.getContext(context).getChat(chatId);
|
||||
titleView.setTitle(glideRequests, dcChat);
|
||||
break;
|
||||
|
||||
@@ -568,15 +592,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (container.isInputOpen()){
|
||||
container.hideCurrentInput(composeText);
|
||||
} else {
|
||||
handleReturnToConversationList();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onKeyboardShown() {
|
||||
inputPanel.onKeyboardShown();
|
||||
@@ -599,6 +614,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
//////// Event Handlers
|
||||
|
||||
private void handleEphemeralMessages() {
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
int preselected = dcContext.getChatEphemeralTimer(chatId);
|
||||
EphemeralMessagesDialog.show(this, preselected, duration -> {
|
||||
dcContext.setChatEphemeralTimer(chatId, (int) duration);
|
||||
@@ -610,6 +626,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
|
||||
private void handleReturnToConversationList(@Nullable Bundle extras) {
|
||||
if (switchedProfile) { // force refreshing of chatlist
|
||||
if (extras == null) extras = new Bundle();
|
||||
extras.putInt(ConversationListFragment.RELOAD_LIST, 1);
|
||||
}
|
||||
|
||||
boolean archived = getIntent().getBooleanExtra(FROM_ARCHIVED_CHATS_EXTRA, false);
|
||||
Intent intent = new Intent(this, (archived ? ConversationListArchiveActivity.class : ConversationListActivity.class));
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
@@ -619,6 +640,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
|
||||
private void handleMuteNotifications() {
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
if(!dcChat.isMuted()) {
|
||||
MuteDialog.show(this, duration -> {
|
||||
dcContext.setChatMuteDuration(chatId, duration);
|
||||
@@ -654,7 +676,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
AlertDialog dialog = new AlertDialog.Builder(this)
|
||||
.setMessage(getString(R.string.ask_leave_group))
|
||||
.setPositiveButton(leaveLabel, (d, which) -> {
|
||||
dcContext.removeContactFromChat(chatId, DcContact.DC_CONTACT_ID_SELF);
|
||||
DcHelper.getContext(context).removeContactFromChat(chatId, DcContact.DC_CONTACT_ID_SELF);
|
||||
Toast.makeText(this, getString(R.string.done), Toast.LENGTH_SHORT).show();
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
@@ -663,6 +685,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
|
||||
private void handleArchiveChat() {
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
int newVisibility = isArchived() ?
|
||||
DcChat.DC_CHAT_VISIBILITY_NORMAL : DcChat.DC_CHAT_VISIBILITY_ARCHIVED;
|
||||
dcContext.setChatVisibility(chatId, newVisibility);
|
||||
@@ -678,7 +701,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
AlertDialog dialog = new AlertDialog.Builder(this)
|
||||
.setMessage(getResources().getString(R.string.ask_delete_named_chat, dcChat.getName()))
|
||||
.setPositiveButton(R.string.delete, (d, which) -> {
|
||||
dcContext.deleteChat(chatId);
|
||||
DcHelper.getContext(context).deleteChat(chatId);
|
||||
DirectShareUtil.clearShortcut(this, chatId);
|
||||
finish();
|
||||
})
|
||||
@@ -708,6 +731,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
|
||||
private void handleForwarding() {
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
DcChat dcChat = dcContext.getChat(chatId);
|
||||
if (dcChat.isSelfTalk()) {
|
||||
SendRelayedMessageUtil.immediatelyRelay(this, chatId);
|
||||
@@ -756,7 +780,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
SendRelayedMessageUtil.immediatelyRelay(this, chatId);
|
||||
} else {
|
||||
Uri uri = uriList.isEmpty()? null : uriList.get(0);
|
||||
dcContext.setDraft(chatId, SendRelayedMessageUtil.createMessage(this, uri, ShareUtil.getSharedType(this), null, null, getSharedText(this)));
|
||||
DcHelper.getContext(context).setDraft(chatId, SendRelayedMessageUtil.createMessage(this, uri, ShareUtil.getSharedType(this), null, null, getSharedText(this)));
|
||||
}
|
||||
initializeDraft();
|
||||
}
|
||||
@@ -771,7 +795,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
private ListenableFuture<Boolean> initializeDraft() {
|
||||
isEditing = false;
|
||||
final SettableFuture<Boolean> future = new SettableFuture<>();
|
||||
DcMsg draft = dcContext.getDraft(chatId);
|
||||
DcMsg draft = DcHelper.getContext(context).getDraft(chatId);
|
||||
final String sharedText = ShareUtil.getSharedText(this);
|
||||
|
||||
if (!draft.isOk()) {
|
||||
@@ -786,6 +810,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
return future;
|
||||
}
|
||||
|
||||
inputPanel.setSubject(draft.getSubject());
|
||||
|
||||
final String text = TextUtils.isEmpty(sharedText)? draft.getText() : sharedText;
|
||||
if(!text.isEmpty()) {
|
||||
composeText.setText(text);
|
||||
@@ -930,7 +956,15 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
|
||||
private void initializeBackground() {
|
||||
String backgroundImagePath = Prefs.getBackgroundImagePath(this, dcContext.getAccountId());
|
||||
int accId;
|
||||
try {
|
||||
accId = rpc.getSelectedAccountId();
|
||||
} catch (RpcException e) {
|
||||
Log.e(TAG, "rpc.getSelectedAccountId() failed", e);
|
||||
return;
|
||||
}
|
||||
|
||||
String backgroundImagePath = Prefs.getBackgroundImagePath(this, accId);
|
||||
Drawable background;
|
||||
if(!backgroundImagePath.isEmpty()) {
|
||||
background = Drawable.createFromPath(backgroundImagePath);
|
||||
@@ -956,17 +990,17 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
|
||||
private void initializeResources() {
|
||||
int accountId = getIntent().getIntExtra(ACCOUNT_ID_EXTRA, dcContext.getAccountId());
|
||||
if (accountId != dcContext.getAccountId()) {
|
||||
int selectedAccId = DcHelper.getContext(context).getAccountId();
|
||||
int accountId = getIntent().getIntExtra(ACCOUNT_ID_EXTRA, selectedAccId);
|
||||
if (accountId != selectedAccId) {
|
||||
switchedProfile = true;
|
||||
AccountManager.getInstance().switchAccount(context, accountId);
|
||||
dcContext = context.dcContext;
|
||||
fragment.dcContext = context.dcContext;
|
||||
initializeBackground();
|
||||
}
|
||||
chatId = getIntent().getIntExtra(CHAT_ID_EXTRA, -1);
|
||||
if(chatId == DcChat.DC_CHAT_NO_CHAT)
|
||||
throw new IllegalStateException("can't display a conversation for no chat.");
|
||||
dcChat = dcContext.getChat(chatId);
|
||||
dcChat = DcHelper.getContext(context).getChat(chatId);
|
||||
recipient = new Recipient(this, dcChat);
|
||||
glideRequests = GlideApp.with(this);
|
||||
|
||||
@@ -978,10 +1012,12 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
if (dcChat.canSend()) {
|
||||
composePanel.setVisibility(View.VISIBLE);
|
||||
attachmentManager.setHidden(false);
|
||||
inputPanel.setSubjectVisible(!dcChat.isEncrypted());
|
||||
} else {
|
||||
composePanel.setVisibility(View.GONE);
|
||||
attachmentManager.setHidden(true);
|
||||
hideSoftKeyboard();
|
||||
inputPanel.setSubjectVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1031,11 +1067,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
|
||||
try {
|
||||
byte[] vcard = rpc.makeVcard(dcContext.getAccountId(), Collections.singletonList(contactId)).getBytes();
|
||||
byte[] vcard = rpc.makeVcard(rpc.getSelectedAccountId(), Collections.singletonList(contactId)).getBytes();
|
||||
String mimeType = "application/octet-stream";
|
||||
setMedia(PersistentBlobProvider.getInstance().create(this, vcard, mimeType, "vcard.vcf"), MediaType.DOCUMENT);
|
||||
} catch (RpcException e) {
|
||||
Log.e(TAG, "makeVcard() failed", e);
|
||||
Log.e(TAG, "RPC failed", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1064,14 +1100,17 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
Optional<QuoteModel> quote = inputPanel.getQuote();
|
||||
boolean editing = isEditing;
|
||||
final String subject = inputPanel.getSubject();
|
||||
|
||||
// for a quick ui feedback, we clear the related controls immediately on sending messages.
|
||||
// for drafts, however, we do not change the controls, the activity may be resumed.
|
||||
if (action==ACTION_SEND_OUT) {
|
||||
composeText.setText("");
|
||||
inputPanel.clearQuote();
|
||||
inputPanel.clearSubject();
|
||||
}
|
||||
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
DcMsg msg = null;
|
||||
int recompress = 0;
|
||||
@@ -1134,6 +1173,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
msg.setQuote(quote.get().getQuotedMsg());
|
||||
}
|
||||
|
||||
if (!subject.isEmpty() && msg != null) {
|
||||
msg.setSubject(subject);
|
||||
}
|
||||
|
||||
if (action==ACTION_SEND_OUT) {
|
||||
|
||||
// for WEBXDC, drafts are just sent out as is.
|
||||
@@ -1200,7 +1243,12 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
if (refreshFragment) {
|
||||
fragment.reload(recipient, chatId);
|
||||
DcHelper.getNotificationCenter(this).updateVisibleChat(dcContext.getAccountId(), chatId);
|
||||
try {
|
||||
int accId = rpc.getSelectedAccountId();
|
||||
DcHelper.getNotificationCenter(this).updateVisibleChat(accId, chatId);
|
||||
} catch (RpcException e) {
|
||||
Log.e(TAG, "rpc.getSelectedAccountId() failed", e);
|
||||
}
|
||||
}
|
||||
|
||||
fragment.scrollToBottom();
|
||||
@@ -1362,6 +1410,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
Optional<QuoteModel> quote = inputPanel.getQuote();
|
||||
inputPanel.clearQuote();
|
||||
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
DcMsg msg = new DcMsg(dcContext, DcMsg.DC_MSG_STICKER);
|
||||
if (quote.isPresent()) {
|
||||
msg.setQuote(quote.get().getQuotedMsg());
|
||||
@@ -1483,7 +1532,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
if (isEditing) composeText.setText("");
|
||||
isEditing = false;
|
||||
// If you modify these lines you may also want to modify ConversationItem.setQuote():
|
||||
Recipient author = new Recipient(this, dcContext.getContact(msg.getFromId()));
|
||||
Recipient author = new Recipient(this, DcHelper.getContext(context).getContact(msg.getFromId()));
|
||||
|
||||
SlideDeck slideDeck = new SlideDeck();
|
||||
if (msg.hasFile()) {
|
||||
@@ -1506,7 +1555,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
@Override
|
||||
public void handleEditMessage(DcMsg msg) {
|
||||
isEditing = true;
|
||||
Recipient author = new Recipient(this, dcContext.getContact(msg.getFromId()));
|
||||
Recipient author = new Recipient(this, DcHelper.getContext(context).getContact(msg.getFromId()));
|
||||
|
||||
SlideDeck slideDeck = new SlideDeck();
|
||||
String text = msg.getSummarytext(500);
|
||||
@@ -1531,6 +1580,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
@Override
|
||||
public void handleEvent(@NonNull DcEvent event) {
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
if (event.getAccountId() != dcContext.getAccountId()) return;
|
||||
|
||||
int eventId = event.getId();
|
||||
if ((eventId == DcContext.DC_EVENT_CHAT_MODIFIED && event.getData1Int() == chatId)
|
||||
|| (eventId == DcContext.DC_EVENT_CHAT_EPHEMERAL_TIMER_MODIFIED && event.getData1Int() == chatId)
|
||||
@@ -1617,7 +1669,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
}
|
||||
|
||||
String normQuery = query.trim();
|
||||
searchResult = dcContext.searchMsgs(chatId, normQuery);
|
||||
searchResult = DcHelper.getContext(context).searchMsgs(chatId, normQuery);
|
||||
|
||||
if(searchResult.length>0) {
|
||||
searchResultPosition = searchResult.length - 1;
|
||||
@@ -1648,7 +1700,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
messageRequestBottomView.setVisibility(View.VISIBLE);
|
||||
messageRequestBottomView.setAcceptOnClickListener(v -> {
|
||||
dcContext.acceptChat(chatId);
|
||||
DcHelper.getContext(context).acceptChat(chatId);
|
||||
messageRequestBottomView.setVisibility(View.GONE);
|
||||
composePanel.setVisibility(View.VISIBLE);
|
||||
});
|
||||
@@ -1666,7 +1718,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
// avoid showing compose panel on receiving DC_EVENT_CONTACTS_CHANGED for the chat that is no longer a request after blocking
|
||||
DcHelper.getEventCenter(this).removeObserver(DcContext.DC_EVENT_CONTACTS_CHANGED, this);
|
||||
|
||||
dcContext.blockChat(chatId);
|
||||
DcHelper.getContext(context).blockChat(chatId);
|
||||
Bundle extras = new Bundle();
|
||||
extras.putInt(ConversationListFragment.RELOAD_LIST, 1);
|
||||
handleReturnToConversationList(extras);
|
||||
|
||||
@@ -68,6 +68,7 @@ import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.views.ConversationAdaptiveActionsToolbar;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
@@ -75,6 +76,9 @@ import java.util.Set;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
import chat.delta.rpc.Rpc;
|
||||
import chat.delta.rpc.RpcException;
|
||||
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
public class ConversationFragment extends MessageSelectorFragment
|
||||
{
|
||||
@@ -103,11 +107,12 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
|
||||
public boolean isPaused;
|
||||
private Debouncer markseenDebouncer;
|
||||
private Rpc rpc;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
this.dcContext = DcHelper.getContext(getContext());
|
||||
rpc = DcHelper.getRpc(getContext());
|
||||
|
||||
DcEventCenter eventCenter = DcHelper.getEventCenter(getContext());
|
||||
eventCenter.addObserver(DcContext.DC_EVENT_INCOMING_MSG, this);
|
||||
@@ -208,8 +213,13 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
Util.runOnBackground(() -> dcContext.marknoticedChat((int) chatId));
|
||||
Util.runOnBackground(() -> {
|
||||
try {
|
||||
rpc.marknoticedChat(rpc.getSelectedAccountId(), (int) chatId);
|
||||
} catch (RpcException e) {
|
||||
Log.e(TAG, "RPC error", e);
|
||||
}
|
||||
});
|
||||
if (list.getAdapter() != null) {
|
||||
list.getAdapter().notifyDataSetChanged();
|
||||
}
|
||||
@@ -288,7 +298,12 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
dateDecoration = new StickyHeaderDecoration(adapter, false, false);
|
||||
list.addItemDecoration(dateDecoration);
|
||||
|
||||
int freshMsgs = dcContext.getFreshMsgCount((int) chatId);
|
||||
int freshMsgs = 0;
|
||||
try {
|
||||
freshMsgs = rpc.getFreshMsgCnt(rpc.getSelectedAccountId(), (int) chatId);
|
||||
} catch (RpcException e) {
|
||||
Log.e(TAG, "RPC error", e);
|
||||
}
|
||||
SetStartingPositionLinearLayoutManager layoutManager = (SetStartingPositionLinearLayoutManager) list.getLayoutManager();
|
||||
if (startingPosition > -1) {
|
||||
layoutManager.setStartingPosition(startingPosition);
|
||||
@@ -448,6 +463,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
|
||||
DcContext dcContext = DcHelper.getContext(getContext());
|
||||
DcMsg prevMsg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
|
||||
for (DcMsg msg : dcMsgsList) {
|
||||
if (result.length() > 0) {
|
||||
@@ -476,9 +492,13 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
private void handleForwardMessage(final Set<DcMsg> messageRecords) {
|
||||
Intent composeIntent = new Intent();
|
||||
int[] msgIds = DcMsg.msgSetToIds(messageRecords);
|
||||
setForwardingMessageIds(composeIntent, msgIds);
|
||||
ConversationListRelayingActivity.start(this, composeIntent);
|
||||
getActivity().overridePendingTransition(R.anim.slide_from_right, R.anim.fade_scale_out);
|
||||
try {
|
||||
setForwardingMessageIds(composeIntent, msgIds, rpc.getSelectedAccountId());
|
||||
ConversationListRelayingActivity.start(this, composeIntent);
|
||||
getActivity().overridePendingTransition(R.anim.slide_from_right, R.anim.fade_scale_out);
|
||||
} catch (RpcException e) {
|
||||
Log.e(TAG, "RPC error", e);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("RestrictedApi")
|
||||
@@ -504,6 +524,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
private void handleReplyMessagePrivately(final DcMsg msg) {
|
||||
|
||||
if (getActivity() != null) {
|
||||
DcContext dcContext = DcHelper.getContext(getActivity());
|
||||
int privateChatId = dcContext.createChatByContactId(msg.getFromId());
|
||||
DcMsg replyMsg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
|
||||
replyMsg.setQuote(msg);
|
||||
@@ -520,10 +541,14 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
|
||||
private void handleToggleSave(final Set<DcMsg> messageRecords) {
|
||||
DcMsg msg = getSelectedMessageRecord(messageRecords);
|
||||
if (msg.getSavedMsgId() != 0) {
|
||||
dcContext.deleteMsgs(new int[]{msg.getSavedMsgId()});
|
||||
} else {
|
||||
dcContext.saveMsgs(new int[]{msg.getId()});
|
||||
try {
|
||||
if (msg.getSavedMsgId() != 0) {
|
||||
rpc.deleteMessages(rpc.getSelectedAccountId(), Collections.singletonList(msg.getSavedMsgId()));
|
||||
} else {
|
||||
rpc.saveMsgs(rpc.getSelectedAccountId(), Collections.singletonList(msg.getId()));
|
||||
}
|
||||
} catch (RpcException e) {
|
||||
Log.e(TAG, "RPC error", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -593,7 +618,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
}
|
||||
|
||||
private void updateLocationButton() {
|
||||
floatingLocationButton.setVisibility(dcContext.isSendingLocationsToChat((int) chatId)? View.VISIBLE : View.GONE);
|
||||
floatingLocationButton.setVisibility(DcHelper.getContext(getContext()).isSendingLocationsToChat((int) chatId)? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
private void scrollAndHighlight(final int pos, boolean smooth) {
|
||||
@@ -729,16 +754,20 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
return;
|
||||
}
|
||||
|
||||
int[] ids = new int[lastPos - firstPos + 1];
|
||||
int index = 0;
|
||||
ArrayList<Integer> ids = new ArrayList<>(lastPos - firstPos + 1);
|
||||
for(int pos = firstPos; pos <= lastPos; pos++) {
|
||||
DcMsg message = ((ConversationAdapter) list.getAdapter()).getMsg(pos);
|
||||
if (message.getFromId() != DC_CONTACT_ID_SELF) {
|
||||
ids[index] = message.getId();
|
||||
index++;
|
||||
ids.add(message.getId());
|
||||
}
|
||||
}
|
||||
Util.runOnAnyBackgroundThread(() -> dcContext.markseenMsgs(ids));
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
try {
|
||||
rpc.markseenMsgs(rpc.getSelectedAccountId(), ids);
|
||||
} catch (RpcException e) {
|
||||
Log.e(TAG, "RPC error", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private class ConversationFragmentItemClickListener implements ItemClickListener {
|
||||
@@ -763,6 +792,9 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
else if(DozeReminder.isDozeReminderMsg(getContext(), messageRecord)) {
|
||||
DozeReminder.dozeReminderTapped(getContext());
|
||||
}
|
||||
else if(StatsSending.isStatsSendingDeviceMsg(getContext(), messageRecord)) {
|
||||
StatsSending.statsDeviceMsgTapped(getActivity());
|
||||
}
|
||||
else if(messageRecord.getInfoType() == DcMsg.DC_INFO_WEBXDC_INFO_MESSAGE) {
|
||||
if (messageRecord.getParent() != null) {
|
||||
// if the parent webxdc message still exists
|
||||
@@ -780,7 +812,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
startActivity(intent);
|
||||
}
|
||||
else {
|
||||
String self_mail = dcContext.getConfig("configured_mail_user");
|
||||
String self_mail = DcHelper.getContext(getContext()).getConfig("configured_mail_user");
|
||||
if (self_mail != null && !self_mail.isEmpty()
|
||||
&& messageRecord.getText().contains(self_mail)
|
||||
&& getListAdapter().getChat().isDeviceTalk()) {
|
||||
@@ -819,7 +851,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
if (foreignChatId != 0 && foreignChatId != chatId) {
|
||||
Intent intent = new Intent(getActivity(), ConversationActivity.class);
|
||||
intent.putExtra(ConversationActivity.CHAT_ID_EXTRA, foreignChatId);
|
||||
int start = DcMsg.getMessagePosition(original, dcContext);
|
||||
int start = DcMsg.getMessagePosition(original, DcHelper.getContext(getContext()));
|
||||
intent.putExtra(ConversationActivity.STARTING_POSITION_EXTRA, start);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
((ConversationActivity) getActivity()).hideSoftKeyboard();
|
||||
@@ -835,7 +867,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
|
||||
@Override
|
||||
public void onJumpToOriginalClicked(DcMsg messageRecord) {
|
||||
jumpToOriginal(dcContext.getMsg(messageRecord.getOriginalMsgId()));
|
||||
jumpToOriginal(DcHelper.getContext(getContext()).getMsg(messageRecord.getOriginalMsgId()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -854,7 +886,7 @@ public class ConversationFragment extends MessageSelectorFragment
|
||||
|
||||
@Override
|
||||
public void onDownloadClicked(DcMsg messageRecord) {
|
||||
dcContext.downloadFullMsg(messageRecord.getId());
|
||||
DcHelper.getContext(getContext()).downloadFullMsg(messageRecord.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -411,8 +411,11 @@ public class ConversationItem extends BaseConversationItem
|
||||
bodyText.setClickable(false);
|
||||
bodyText.setFocusable(false);
|
||||
|
||||
String subject = messageRecord.getSubject();
|
||||
String text = messageRecord.getText();
|
||||
|
||||
if (!subject.isEmpty() && messageRecord.isOutgoing() && !messageRecord.isSecure()) text = subject + "\n\n" + text;
|
||||
|
||||
if (messageRecord.getType() == DcMsg.DC_MSG_CALL || text.isEmpty()) {
|
||||
bodyText.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
*/
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.CHAT_ID_EXTRA;
|
||||
import static org.thoughtcrime.securesms.ConversationActivity.STARTING_POSITION_EXTRA;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_URL;
|
||||
import static org.thoughtcrime.securesms.util.ShareUtil.acquireRelayMessageContent;
|
||||
@@ -25,10 +23,12 @@ import static org.thoughtcrime.securesms.util.ShareUtil.getDirectSharingChatId;
|
||||
import static org.thoughtcrime.securesms.util.ShareUtil.getSharedTitle;
|
||||
import static org.thoughtcrime.securesms.util.ShareUtil.isDirectSharing;
|
||||
import static org.thoughtcrime.securesms.util.ShareUtil.isForwarding;
|
||||
import static org.thoughtcrime.securesms.util.ShareUtil.getForwardedMessageAccountId;
|
||||
import static org.thoughtcrime.securesms.util.ShareUtil.isRelayingMessageContent;
|
||||
import static org.thoughtcrime.securesms.util.ShareUtil.resetRelayingMessageContent;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Color;
|
||||
@@ -46,6 +46,7 @@ import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
@@ -76,12 +77,15 @@ import org.thoughtcrime.securesms.search.SearchFragment;
|
||||
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
|
||||
import org.thoughtcrime.securesms.util.DynamicTheme;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.ScreenLockUtil;
|
||||
import org.thoughtcrime.securesms.util.ShareUtil;
|
||||
import org.thoughtcrime.securesms.util.SaveAttachmentTask;
|
||||
import org.thoughtcrime.securesms.util.SendRelayedMessageUtil;
|
||||
import org.thoughtcrime.securesms.util.StorageUtil;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import chat.delta.rpc.types.SecurejoinSource;
|
||||
import chat.delta.rpc.types.SecurejoinUiPath;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
@@ -95,6 +99,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
public static final String CLEAR_NOTIFICATIONS = "clear_notifications";
|
||||
public static final String ACCOUNT_ID_EXTRA = "account_id";
|
||||
public static final String FROM_WELCOME = "from_welcome";
|
||||
private static final int REQUEST_CODE_CONFIRM_CREDENTIALS_DELETE_PROFILE = ScreenLockUtil.REQUEST_CODE_CONFIRM_CREDENTIALS+1;
|
||||
|
||||
private ConversationListFragment conversationListFragment;
|
||||
public TextView title;
|
||||
@@ -106,6 +111,11 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
private ViewGroup fragmentContainer;
|
||||
private ViewGroup selfAvatarContainer;
|
||||
|
||||
/** used to store temporarily scanned QR to pass it back to QrCodeHandler when ScreenLockUtil is used */
|
||||
private String qrData = null;
|
||||
/** used to store temporarily profile ID to delete after authorization is granted via ScreenLockUtil */
|
||||
private int deleteProfileId = 0;
|
||||
|
||||
@Override
|
||||
protected void onPreCreate() {
|
||||
dynamicTheme = new DynamicNoActionBarTheme();
|
||||
@@ -114,36 +124,9 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle icicle, boolean ready) {
|
||||
// update messages - for new messages, do not reuse or modify strings but create new ones.
|
||||
// it is not needed to keep all past update messages, however, when deleted, also the strings should be deleted.
|
||||
try {
|
||||
DcContext dcContext = DcHelper.getContext(this);
|
||||
final String deviceMsgLabel = "update_2_33_1_android";
|
||||
if (!dcContext.wasDeviceMsgEverAdded(deviceMsgLabel)) {
|
||||
DcMsg msg = null;
|
||||
if (!getIntent().getBooleanExtra(FROM_WELCOME, false)) {
|
||||
msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
|
||||
|
||||
// InputStream inputStream = getResources().getAssets().open("device-messages/green-checkmark.jpg");
|
||||
// String outputFile = DcHelper.getBlobdirFile(dcContext, "green-checkmark", ".jpg");
|
||||
// Util.copy(inputStream, new FileOutputStream(outputFile));
|
||||
// msg.setFile(outputFile, "image/jpeg");
|
||||
|
||||
msg.setText(getString(R.string.update_2_33, "https://arcanechat.me/#contribute"));
|
||||
}
|
||||
dcContext.addDeviceMsg(deviceMsgLabel, msg);
|
||||
|
||||
if (Prefs.getStringPreference(this, Prefs.LAST_DEVICE_MSG_LABEL, "").equals(deviceMsgLabel)) {
|
||||
int deviceChatId = dcContext.getChatIdByContactId(DcContact.DC_CONTACT_ID_DEVICE);
|
||||
if (deviceChatId != 0) {
|
||||
dcContext.marknoticedChat(deviceChatId);
|
||||
}
|
||||
}
|
||||
Prefs.setStringPreference(this, Prefs.LAST_DEVICE_MSG_LABEL, deviceMsgLabel);
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
addDeviceMessages(getIntent().getBooleanExtra(FROM_WELCOME, false));
|
||||
if (getIntent().getIntExtra(ACCOUNT_ID_EXTRA, -1) <= 0) {
|
||||
getIntent().putExtra(ACCOUNT_ID_EXTRA, DcHelper.getContext(this).getAccountId());
|
||||
}
|
||||
|
||||
// create view
|
||||
@@ -167,13 +150,41 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
|
||||
initializeSearchListener();
|
||||
|
||||
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
if (searchToolbar.isVisible()) {
|
||||
searchToolbar.collapse();
|
||||
} else {
|
||||
Activity activity = ConversationListActivity.this;
|
||||
if (isRelayingMessageContent(activity)) {
|
||||
int selectedAccId = DcHelper.getContext(activity).getAccountId();
|
||||
int initialAccId = getIntent().getIntExtra(ACCOUNT_ID_EXTRA, selectedAccId);
|
||||
if (initialAccId != selectedAccId) {
|
||||
// allowing to go back is dangerous, it could be activity on previously selected account,
|
||||
// instead of figuring out account rollback in onResume in each activity (conversation, gallery, media preview, webxdc, etc.)
|
||||
// just clear the back stack and stay in newly selected account
|
||||
finishAffinity();
|
||||
startActivity(new Intent(activity, ConversationListActivity.class));
|
||||
return;
|
||||
} else {
|
||||
handleResetRelaying();
|
||||
}
|
||||
}
|
||||
|
||||
setEnabled(false);
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
TooltipCompat.setTooltipText(searchAction, getText(R.string.search_explain));
|
||||
|
||||
TooltipCompat.setTooltipText(selfAvatar, getText(R.string.switch_account));
|
||||
selfAvatar.setOnClickListener(v -> AccountManager.getInstance().showSwitchAccountMenu(this));
|
||||
selfAvatar.setOnClickListener(v -> AccountManager.getInstance().showSwitchAccountMenu(this, false));
|
||||
findViewById(R.id.avatar_and_title).setOnClickListener(v -> {
|
||||
if (!isRelayingMessageContent(this)) {
|
||||
AccountManager.getInstance().showSwitchAccountMenu(this);
|
||||
AccountManager.getInstance().showSwitchAccountMenu(this, false);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -248,24 +259,29 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
}
|
||||
super.onNewIntent(intent);
|
||||
setIntent(intent);
|
||||
if (getIntent().getIntExtra(ACCOUNT_ID_EXTRA, -1) <= 0) {
|
||||
getIntent().putExtra(ACCOUNT_ID_EXTRA, DcHelper.getContext(this).getAccountId());
|
||||
}
|
||||
refresh();
|
||||
conversationListFragment.onNewIntent();
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
DcContext dcContext = DcHelper.getContext(this);
|
||||
int accountId = getIntent().getIntExtra(ACCOUNT_ID_EXTRA, dcContext.getAccountId());
|
||||
int selectedAccId = DcHelper.getContext(this).getAccountId();
|
||||
int accountId = getIntent().getIntExtra(ACCOUNT_ID_EXTRA, selectedAccId);
|
||||
if (getIntent().getBooleanExtra(CLEAR_NOTIFICATIONS, false)) {
|
||||
DcHelper.getNotificationCenter(this).removeAllNotifications(accountId);
|
||||
}
|
||||
if (accountId != dcContext.getAccountId()) {
|
||||
AccountManager.getInstance().switchAccountAndStartActivity(this, accountId);
|
||||
if (accountId != selectedAccId) {
|
||||
AccountManager.getInstance().switchAccount(this, accountId);
|
||||
onProfileSwitched(accountId);
|
||||
} else {
|
||||
refreshAvatar();
|
||||
refreshUnreadIndicator();
|
||||
refreshTitle();
|
||||
}
|
||||
|
||||
refreshAvatar();
|
||||
refreshUnreadIndicator();
|
||||
refreshTitle();
|
||||
handleOpenpgp4fpr();
|
||||
if (isDirectSharing(this)) {
|
||||
openConversation(getDirectSharingChatId(this), -1);
|
||||
@@ -443,13 +459,16 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
startActivity(new Intent(this, ProxySettingsActivity.class));
|
||||
return true;
|
||||
} else if (itemId == android.R.id.home) {
|
||||
onBackPressed();
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_all_media) {
|
||||
startActivity(new Intent(this, AllMediaActivity.class));
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_export_attachment) {
|
||||
handleSaveAttachment();
|
||||
} else if (itemId == R.id.menu_switch_account) {
|
||||
AccountManager.getInstance().showSwitchAccountMenu(this, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -482,7 +501,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
};
|
||||
SaveAttachmentTask saveTask = new SaveAttachmentTask(this);
|
||||
saveTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, attachments);
|
||||
onBackPressed();
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
}
|
||||
|
||||
private void handleOpenpgp4fpr() {
|
||||
@@ -495,7 +514,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
|
||||
if (uri.getScheme().equalsIgnoreCase(OPENPGP4FPR) || Util.isInviteURL(uri)) {
|
||||
QrCodeHandler qrCodeHandler = new QrCodeHandler(this);
|
||||
qrCodeHandler.handleQrData(uri.toString());
|
||||
qrCodeHandler.handleOnlySecureJoinQr(uri.toString(), SecurejoinSource.ExternalLink, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -517,15 +536,17 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
searchToolbar.clearFocus();
|
||||
|
||||
final DcContext dcContext = DcHelper.getContext(this);
|
||||
if (isForwarding(this) && dcContext.getChat(chatId).isSelfTalk()) {
|
||||
int fwdAccId = getForwardedMessageAccountId(this);
|
||||
if (fwdAccId == dcContext.getAccountId() && dcContext.getChat(chatId).isSelfTalk()) {
|
||||
SendRelayedMessageUtil.immediatelyRelay(this, chatId);
|
||||
Toast.makeText(this, DynamicTheme.getCheckmarkEmoji(this) + " " + getString(R.string.saved), Toast.LENGTH_SHORT).show();
|
||||
handleResetRelaying();
|
||||
finish();
|
||||
} else {
|
||||
Intent intent = new Intent(this, ConversationActivity.class);
|
||||
intent.putExtra(CHAT_ID_EXTRA, chatId);
|
||||
intent.putExtra(STARTING_POSITION_EXTRA, startingPosition);
|
||||
intent.putExtra(ConversationActivity.ACCOUNT_ID_EXTRA, dcContext.getAccountId());
|
||||
intent.putExtra(ConversationActivity.CHAT_ID_EXTRA, chatId);
|
||||
intent.putExtra(ConversationActivity.STARTING_POSITION_EXTRA, startingPosition);
|
||||
if (isRelayingMessageContent(this)) {
|
||||
acquireRelayMessageContent(this, intent);
|
||||
}
|
||||
@@ -545,15 +566,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
overridePendingTransition(R.anim.slide_from_right, R.anim.fade_scale_out);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (searchToolbar.isVisible()) searchToolbar.collapse();
|
||||
else if (isRelayingMessageContent(this)) {
|
||||
handleResetRelaying();
|
||||
finish();
|
||||
} else super.onBackPressed();
|
||||
}
|
||||
|
||||
private void createChat() {
|
||||
Intent intent = new Intent(this, NewConversationActivity.class);
|
||||
if (isRelayingMessageContent(this)) {
|
||||
@@ -570,14 +582,102 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
|
||||
startActivity(Intent.createChooser(intent, getString(R.string.chat_share_with_title)));
|
||||
}
|
||||
|
||||
private void addDeviceMessages(boolean fromWelcome) {
|
||||
// update messages - for new messages, do not reuse or modify strings but create new ones.
|
||||
// it is not needed to keep all past update messages, however, when deleted, also the strings should be deleted.
|
||||
try {
|
||||
DcContext dcContext = DcHelper.getContext(this);
|
||||
final String deviceMsgLabel = "update_2_33_1_android";
|
||||
if (!dcContext.wasDeviceMsgEverAdded(deviceMsgLabel)) {
|
||||
DcMsg msg = null;
|
||||
if (!getIntent().getBooleanExtra(FROM_WELCOME, false)) {
|
||||
msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
|
||||
|
||||
// InputStream inputStream = getResources().getAssets().open("device-messages/green-checkmark.jpg");
|
||||
// String outputFile = DcHelper.getBlobdirFile(dcContext, "green-checkmark", ".jpg");
|
||||
// Util.copy(inputStream, new FileOutputStream(outputFile));
|
||||
// msg.setFile(outputFile, "image/jpeg");
|
||||
|
||||
msg.setText(getString(R.string.update_2_33, "https://arcanechat.me/#contribute"));
|
||||
}
|
||||
dcContext.addDeviceMsg(deviceMsgLabel, msg);
|
||||
|
||||
if (Prefs.getStringPreference(this, Prefs.LAST_DEVICE_MSG_LABEL, "").equals(deviceMsgLabel)) {
|
||||
int deviceChatId = dcContext.getChatIdByContactId(DcContact.DC_CONTACT_ID_DEVICE);
|
||||
if (deviceChatId != 0) {
|
||||
dcContext.marknoticedChat(deviceChatId);
|
||||
}
|
||||
}
|
||||
Prefs.setStringPreference(this, Prefs.LAST_DEVICE_MSG_LABEL, deviceMsgLabel);
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void onProfileSwitched(int profileId) {
|
||||
addDeviceMessages(false);
|
||||
refreshAvatar();
|
||||
refreshUnreadIndicator();
|
||||
refreshTitle();
|
||||
conversationListFragment.loadChatlist();
|
||||
}
|
||||
|
||||
public void onDeleteProfile(int profileId) {
|
||||
deleteProfileId = profileId;
|
||||
boolean result = ScreenLockUtil.applyScreenLock(this, getString(R.string.delete_account), getString(R.string.enter_system_secret_to_continue), REQUEST_CODE_CONFIRM_CREDENTIALS_DELETE_PROFILE);
|
||||
if (!result) {
|
||||
deleteProfile(profileId);
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteProfile(int profileId) {
|
||||
DcAccounts accounts = DcHelper.getAccounts(this);
|
||||
boolean selected = profileId == accounts.getSelectedAccount().getAccountId();
|
||||
DcHelper.getNotificationCenter(this).removeAllNotifications(profileId);
|
||||
accounts.removeAccount(profileId);
|
||||
if (selected) {
|
||||
DcContext selAcc = accounts.getSelectedAccount();
|
||||
if (selAcc.isOk()) {
|
||||
AccountManager.getInstance().switchAccount(this, selAcc.getAccountId());
|
||||
onProfileSwitched(selAcc.getAccountId());
|
||||
} else {
|
||||
AccountManager.getInstance().switchAccountAndStartActivity(this, 0);
|
||||
}
|
||||
} else {
|
||||
AccountManager.getInstance().showSwitchAccountMenu(this, false);
|
||||
}
|
||||
|
||||
// title update needed to show "Delta Chat" in case there is only one profile left
|
||||
refreshTitle();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode != RESULT_OK) return;
|
||||
|
||||
QrCodeHandler qrCodeHandler = new QrCodeHandler(this);
|
||||
switch (requestCode) {
|
||||
case IntentIntegrator.REQUEST_CODE:
|
||||
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
|
||||
QrCodeHandler qrCodeHandler = new QrCodeHandler(this);
|
||||
qrCodeHandler.onScanPerformed(scanResult);
|
||||
IntentResult scanResult = IntentIntegrator.parseActivityResult(resultCode, data);
|
||||
qrData = scanResult.getContents();
|
||||
qrCodeHandler.handleQrData(qrData, SecurejoinSource.Scan, SecurejoinUiPath.QrIcon);
|
||||
break;
|
||||
case ScreenLockUtil.REQUEST_CODE_CONFIRM_CREDENTIALS:
|
||||
// QrCodeHandler requested user authorization before adding a relay
|
||||
// and it was granted, so proceed to add the relay
|
||||
if (qrData != null) {
|
||||
qrCodeHandler.addRelay(qrData);
|
||||
qrData = null;
|
||||
}
|
||||
break;
|
||||
case REQUEST_CODE_CONFIRM_CREDENTIALS_DELETE_PROFILE:
|
||||
if (deleteProfileId != 0) {
|
||||
deleteProfile(deleteProfileId);
|
||||
deleteProfileId = 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -12,6 +12,8 @@ import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
|
||||
import com.b44t.messenger.DcChat;
|
||||
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
@@ -33,6 +35,21 @@ public class ConversationListArchiveActivity extends PassphraseRequiredActionBar
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putBoolean(ConversationListFragment.ARCHIVE, true);
|
||||
initFragment(R.id.fragment, new ConversationListFragment(), bundle);
|
||||
|
||||
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
if (!isRelayingMessageContent(ConversationListArchiveActivity.this)) {
|
||||
// Load the ConversationListActivity in case it's not existent for some reason
|
||||
Intent intent = new Intent(ConversationListArchiveActivity.this, ConversationListActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
setEnabled(false);
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -63,7 +80,7 @@ public class ConversationListArchiveActivity extends PassphraseRequiredActionBar
|
||||
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == android.R.id.home) {
|
||||
onBackPressed();
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
return true;
|
||||
} else if (itemId == R.id.mark_as_read) {
|
||||
DcHelper.getContext(this).marknoticedChat(DcChat.DC_CHAT_ID_ARCHIVED_LINK);
|
||||
@@ -73,20 +90,6 @@ public class ConversationListArchiveActivity extends PassphraseRequiredActionBar
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (isRelayingMessageContent(this)) {
|
||||
// Go back to the ConversationListRelayingActivity
|
||||
super.onBackPressed();
|
||||
} else {
|
||||
// Load the ConversationListActivity in case it's not existent for some reason
|
||||
Intent intent = new Intent(this, ConversationListActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateConversation(int chatId) {
|
||||
Intent intent = new Intent(this, ConversationActivity.class);
|
||||
|
||||
@@ -260,7 +260,7 @@ public class ConversationListFragment extends BaseConversationListFragment
|
||||
});
|
||||
}
|
||||
|
||||
private void loadChatlist() {
|
||||
public void loadChatlist() {
|
||||
int listflags = 0;
|
||||
if (archive) {
|
||||
listflags |= DcContext.DC_GCL_ARCHIVED_ONLY;
|
||||
|
||||
@@ -124,7 +124,6 @@ public class ConversationListItem extends RelativeLayout
|
||||
this.msgId = msgId;
|
||||
|
||||
int state = dcSummary.getState();
|
||||
int unreadCount = thread.getUnreadCount();
|
||||
|
||||
if (highlightSubstring != null) {
|
||||
this.fromView.setText(getHighlightedSpan(recipient.getName(), highlightSubstring));
|
||||
@@ -151,7 +150,7 @@ public class ConversationListItem extends RelativeLayout
|
||||
thread.getVisibility()==DcChat.DC_CHAT_VISIBILITY_PINNED? R.drawable.ic_pinned_chatlist : 0, 0
|
||||
);
|
||||
|
||||
setStatusIcons(thread.getVisibility(), state, unreadCount, thread.isContactRequest(), thread.isMuted() || chatId == DcChat.DC_CHAT_ID_ARCHIVED_LINK);
|
||||
setStatusIcons(thread, state);
|
||||
setBatchState(batchMode);
|
||||
setBgColor(thread);
|
||||
|
||||
@@ -240,14 +239,14 @@ public class ConversationListItem extends RelativeLayout
|
||||
return msgId;
|
||||
}
|
||||
|
||||
private void setStatusIcons(int visibility, int state, int unreadCount, boolean isContactRequest, boolean isMuted) {
|
||||
if (visibility==DcChat.DC_CHAT_VISIBILITY_ARCHIVED)
|
||||
private void setStatusIcons(ThreadRecord thread, int state) {
|
||||
if (thread.getVisibility() == DcChat.DC_CHAT_VISIBILITY_ARCHIVED)
|
||||
{
|
||||
archivedBadgeView.setVisibility(View.VISIBLE);
|
||||
requestBadgeView.setVisibility(isContactRequest ? View.VISIBLE : View.GONE);
|
||||
requestBadgeView.setVisibility(thread.isContactRequest() ? View.VISIBLE : View.GONE);
|
||||
deliveryStatusIndicator.setNone();
|
||||
}
|
||||
else if (isContactRequest) {
|
||||
else if (thread.isContactRequest()) {
|
||||
requestBadgeView.setVisibility(View.VISIBLE);
|
||||
archivedBadgeView.setVisibility(View.GONE);
|
||||
deliveryStatusIndicator.setNone();
|
||||
@@ -259,14 +258,16 @@ public class ConversationListItem extends RelativeLayout
|
||||
|
||||
if (state == DcMsg.DC_STATE_OUT_FAILED) {
|
||||
deliveryStatusIndicator.setFailed();
|
||||
} else if (state == DcMsg.DC_STATE_OUT_MDN_RCVD) {
|
||||
deliveryStatusIndicator.setRead();
|
||||
} else if (state == DcMsg.DC_STATE_OUT_DELIVERED) {
|
||||
deliveryStatusIndicator.setSent();
|
||||
} else if (state == DcMsg.DC_STATE_OUT_PREPARING) {
|
||||
deliveryStatusIndicator.setPreparing();
|
||||
} else if (state == DcMsg.DC_STATE_OUT_PENDING) {
|
||||
deliveryStatusIndicator.setPending();
|
||||
} else if (thread.isOutChannel()) {
|
||||
deliveryStatusIndicator.setNone();
|
||||
} else if (state == DcMsg.DC_STATE_OUT_MDN_RCVD) {
|
||||
deliveryStatusIndicator.setRead();
|
||||
} else if (state == DcMsg.DC_STATE_OUT_DELIVERED) {
|
||||
deliveryStatusIndicator.setSent();
|
||||
} else {
|
||||
deliveryStatusIndicator.setNone();
|
||||
}
|
||||
@@ -278,11 +279,12 @@ public class ConversationListItem extends RelativeLayout
|
||||
}
|
||||
}
|
||||
|
||||
if(unreadCount==0 || isContactRequest) {
|
||||
int unreadCount = thread.getUnreadCount();
|
||||
if(unreadCount==0 || thread.isContactRequest()) {
|
||||
unreadIndicator.setVisibility(View.GONE);
|
||||
} else {
|
||||
final int color;
|
||||
if(isMuted){
|
||||
if(thread.isMuted() || chatId == DcChat.DC_CHAT_ID_ARCHIVED_LINK){
|
||||
color = getResources().getColor(ThemeUtil.isDarkTheme(getContext()) ? R.color.unread_count_muted_dark : R.color.unread_count_muted);
|
||||
} else {
|
||||
final TypedArray attrs = getContext().obtainStyledAttributes(new int[] {
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.loader.app.LoaderManager;
|
||||
|
||||
@@ -52,8 +53,6 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
|
||||
private static final String TAG = CreateProfileActivity.class.getSimpleName();
|
||||
|
||||
public static final String FROM_WELCOME = "from_welcome";
|
||||
|
||||
private static final int REQUEST_CODE_AVATAR = 1;
|
||||
|
||||
private InputAwareLayout container;
|
||||
@@ -61,7 +60,6 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
private EditText name;
|
||||
private EditText statusView;
|
||||
|
||||
private boolean fromWelcome;
|
||||
private boolean avatarChanged;
|
||||
private boolean imageLoaded;
|
||||
|
||||
@@ -72,12 +70,11 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
@Override
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
this.fromWelcome = getIntent().getBooleanExtra(FROM_WELCOME, false);
|
||||
|
||||
setContentView(R.layout.profile_create_activity);
|
||||
|
||||
getSupportActionBar().setTitle(R.string.pref_profile_info_headline);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(!this.fromWelcome);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
|
||||
|
||||
attachmentManager = new AttachmentManager(this, () -> {});
|
||||
@@ -86,6 +83,18 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
initializeProfileName();
|
||||
initializeProfileAvatar();
|
||||
initializeStatusText();
|
||||
|
||||
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
if (container.isInputOpen()) {
|
||||
container.hideCurrentInput(name);
|
||||
} else {
|
||||
setEnabled(false);
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -100,7 +109,7 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
super.onOptionsItemSelected(item);
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == android.R.id.home) {
|
||||
onBackPressed();
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
return true;
|
||||
} else if (itemId == R.id.menu_create_profile) {
|
||||
updateProfile();
|
||||
@@ -109,17 +118,6 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (container.isInputOpen()) {
|
||||
container.hideCurrentInput(name);
|
||||
} else if (fromWelcome) {
|
||||
updateProfile();
|
||||
} else {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
|
||||
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
|
||||
@@ -187,13 +185,7 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
// add padding to avoid content hidden behind system bars
|
||||
ViewUtil.applyWindowInsets(container);
|
||||
|
||||
if (fromWelcome) {
|
||||
loginSuccessText.setText(R.string.set_name_and_avatar_explain);
|
||||
ViewUtil.findById(this, R.id.status_text_layout).setVisibility(View.GONE);
|
||||
ViewUtil.findById(this, R.id.information_label).setVisibility(View.GONE);
|
||||
} else {
|
||||
loginSuccessText.setVisibility(View.GONE);
|
||||
}
|
||||
loginSuccessText.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
private void initializeProfileName() {
|
||||
@@ -260,11 +252,6 @@ public class CreateProfileActivity extends BaseActionBarActivity {
|
||||
|
||||
if (result) {
|
||||
attachmentManager.cleanup();
|
||||
if (fromWelcome) {
|
||||
Intent intent = new Intent(getApplicationContext(), ConversationListActivity.class);
|
||||
intent.putExtra(ConversationListActivity.FROM_WELCOME, true);
|
||||
startActivity(intent);
|
||||
}
|
||||
finish();
|
||||
} else {
|
||||
Toast.makeText(CreateProfileActivity.this, R.string.error, Toast.LENGTH_LONG).show();
|
||||
|
||||
@@ -149,7 +149,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
|
||||
|
||||
initializeAvatarView();
|
||||
|
||||
SelectedContactsAdapter adapter = new SelectedContactsAdapter(this, GlideApp.with(this), broadcast, unencrypted);
|
||||
SelectedContactsAdapter adapter = new SelectedContactsAdapter(this, GlideApp.with(this), broadcast);
|
||||
adapter.setItemClickListener(this);
|
||||
lv.setAdapter(adapter);
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
@@ -41,7 +40,6 @@ import com.google.zxing.integration.android.IntentIntegrator;
|
||||
import com.google.zxing.integration.android.IntentResult;
|
||||
|
||||
import org.thoughtcrime.securesms.components.AvatarSelector;
|
||||
import org.thoughtcrime.securesms.connect.AccountManager;
|
||||
import org.thoughtcrime.securesms.connect.DcEventCenter;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto;
|
||||
@@ -56,6 +54,7 @@ import org.thoughtcrime.securesms.relay.RelayListActivity;
|
||||
import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.TextUtil;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
import org.thoughtcrime.securesms.util.views.ProgressDialog;
|
||||
@@ -76,7 +75,6 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
private static final String INSTANCES_URL = "https://chatmail.at/relays";
|
||||
private static final String DEFAULT_CHATMAIL_HOST = "arcanechat.me";
|
||||
|
||||
public static final String FROM_WELCOME = "from_welcome";
|
||||
private static final int REQUEST_CODE_AVATAR = 1;
|
||||
|
||||
private ImageView avatar;
|
||||
@@ -107,9 +105,9 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
Objects.requireNonNull(getSupportActionBar()).setTitle(R.string.onboarding_create_instant_account);
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
boolean fromWelcome = getIntent().getBooleanExtra(FROM_WELCOME, false);
|
||||
boolean configured = DcHelper.getContext(this).isConfigured() == 1;
|
||||
|
||||
if (DcHelper.getContext(this).isConfigured() == 1) {
|
||||
if (configured) {
|
||||
// if account is configured it means we didn't come from Welcome screen nor from QR scanner,
|
||||
// instead, user clicked a dcaccount:// URI directly, so we need to just offer to add a new relay
|
||||
Uri uri = getIntent().getData();
|
||||
@@ -117,25 +115,11 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
Intent intent = new Intent(this, RelayListActivity.class);
|
||||
intent.putExtra(RelayListActivity.EXTRA_QR_DATA, uri.toString());
|
||||
startActivity(intent);
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
// if URI is unexpectedly null, then fallback to new profile creation
|
||||
AccountManager.getInstance().beginAccountCreation(this);
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(!fromWelcome) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
AccountManager accountManager = AccountManager.getInstance();
|
||||
if (accountManager.canRollbackAccountCreation(InstantOnboardingActivity.this)) {
|
||||
accountManager.rollbackAccountCreation(InstantOnboardingActivity.this);
|
||||
} else {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isDcLogin = false;
|
||||
providerHost = DEFAULT_CHATMAIL_HOST;
|
||||
providerQrData = DCACCOUNT + ":" + providerHost;
|
||||
@@ -210,10 +194,8 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
case IntentIntegrator.REQUEST_CODE:
|
||||
String qrRaw = data.getStringExtra(RegistrationQrActivity.QRDATA_EXTRA);
|
||||
if (qrRaw == null) {
|
||||
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
|
||||
if (scanResult != null && scanResult.getFormatName() != null) {
|
||||
qrRaw = scanResult.getContents();
|
||||
}
|
||||
IntentResult scanResult = IntentIntegrator.parseActivityResult(resultCode, data);
|
||||
qrRaw = scanResult.getContents();
|
||||
}
|
||||
if (qrRaw != null) {
|
||||
setProviderFromQr(qrRaw);
|
||||
@@ -343,7 +325,10 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
|
||||
signUpBtn.setOnClickListener(view -> createProfile());
|
||||
|
||||
findViewById(R.id.use_other_server).setOnClickListener((v) -> {
|
||||
Button otherServerButton = findViewById(R.id.use_other_server);
|
||||
otherServerButton.setText(
|
||||
TextUtil.markAsExternal(getString(R.string.instant_onboarding_other_server)));
|
||||
otherServerButton.setOnClickListener((v) -> {
|
||||
IntentUtils.showInBrowser(this, INSTANCES_URL);
|
||||
});
|
||||
findViewById(R.id.login_button).setOnClickListener((v) -> {
|
||||
@@ -367,9 +352,11 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
|
||||
}
|
||||
|
||||
if (DEFAULT_CHATMAIL_HOST.equals(providerHost)) {
|
||||
privacyPolicyBtn.setText(getString(R.string.instant_onboarding_agree_default2, providerHost));
|
||||
privacyPolicyBtn.setText(TextUtil.markAsExternal(
|
||||
getString(R.string.instant_onboarding_agree_default2, providerHost)));
|
||||
} else {
|
||||
privacyPolicyBtn.setText(getString(R.string.instant_onboarding_agree_instance, providerHost));
|
||||
privacyPolicyBtn.setText(TextUtil.markAsExternal(
|
||||
getString(R.string.instant_onboarding_agree_instance, providerHost)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@ import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
|
||||
import org.thoughtcrime.securesms.util.TextUtil;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
|
||||
import java.io.InputStream;
|
||||
@@ -44,6 +47,18 @@ public class LocalHelpActivity extends WebViewActivity
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
if (webView.canGoBack()) {
|
||||
webView.goBack();
|
||||
} else {
|
||||
setEnabled(false);
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
webView.loadUrl("file:///android_asset/" + helpPath.replace("LANG", helpLang) + (section!=null? section : ""));
|
||||
}
|
||||
|
||||
@@ -51,6 +66,28 @@ public class LocalHelpActivity extends WebViewActivity
|
||||
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
this.getMenuInflater().inflate(R.menu.local_help, menu);
|
||||
|
||||
// Append " ↗" to external link buttons
|
||||
MenuItem item = menu.findItem(R.id.learn_more);
|
||||
if (item != null) {
|
||||
item.setTitle(TextUtil.markAsExternal(getString(R.string.delta_chat_homepage)));
|
||||
}
|
||||
|
||||
item = menu.findItem(R.id.privacy_policy);
|
||||
if (item != null) {
|
||||
item.setTitle(TextUtil.markAsExternal(getString(R.string.privacy_policy)));
|
||||
}
|
||||
|
||||
item = menu.findItem(R.id.contribute);
|
||||
if (item != null) {
|
||||
item.setTitle(TextUtil.markAsExternal(getString(R.string.contribute)));
|
||||
}
|
||||
|
||||
item = menu.findItem(R.id.report_issue);
|
||||
if (item != null) {
|
||||
item.setTitle(TextUtil.markAsExternal(getString(R.string.global_menu_help_report_desktop)));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -77,15 +114,6 @@ public class LocalHelpActivity extends WebViewActivity
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (webView.canGoBack()) {
|
||||
webView.goBack();
|
||||
} else {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
private boolean assetExists(String fileName) {
|
||||
// test using AssetManager.open();
|
||||
// AssetManager.list() is unreliable eg. on my Android 7 Moto G
|
||||
|
||||
@@ -344,9 +344,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
|
||||
DcMsg dcMsg = dcContext.getMsg(mediaItem.msgId);
|
||||
DcChat dcChat = dcContext.getChat(dcMsg.getChatId());
|
||||
|
||||
String text = getResources().getQuantityString(
|
||||
dcChat.isDeviceTalk() ? R.plurals.ask_delete_messages_simple : R.plurals.ask_delete_messages,
|
||||
1, 1);
|
||||
String text = getResources().getQuantityString(R.plurals.ask_delete_messages,1, 1);
|
||||
int positiveBtnLabel = dcChat.isSelfTalk() ? R.string.delete : R.string.delete_for_me;
|
||||
final int[] messageIds = new int[]{mediaItem.msgId};
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@ public abstract class MessageSelectorFragment
|
||||
implements DcEventCenter.DcEventDelegate
|
||||
{
|
||||
protected ActionMode actionMode;
|
||||
protected DcContext dcContext;
|
||||
|
||||
protected abstract void setCorrectMenuVisibility(Menu menu);
|
||||
|
||||
@@ -48,7 +47,7 @@ public abstract class MessageSelectorFragment
|
||||
protected void handleDisplayDetails(DcMsg dcMsg) {
|
||||
View view = View.inflate(getActivity(), R.layout.message_details_view, null);
|
||||
TextView detailsText = view.findViewById(R.id.details_text);
|
||||
detailsText.setText(dcContext.getMsgInfo(dcMsg.getId()));
|
||||
detailsText.setText(DcHelper.getContext(getContext()).getMsgInfo(dcMsg.getId()));
|
||||
|
||||
AlertDialog d = new AlertDialog.Builder(getActivity())
|
||||
.setView(view)
|
||||
@@ -62,6 +61,7 @@ public abstract class MessageSelectorFragment
|
||||
}
|
||||
|
||||
protected void handleDeleteMessages(int chatId, final int[] messageIds) {
|
||||
DcContext dcContext = DcHelper.getContext(getContext());
|
||||
DcChat dcChat = dcContext.getChat(chatId);
|
||||
boolean canDeleteForAll = true;
|
||||
if (dcChat.isEncrypted() && dcChat.canSend() && !dcChat.isSelfTalk()) {
|
||||
@@ -76,9 +76,7 @@ public abstract class MessageSelectorFragment
|
||||
canDeleteForAll = false;
|
||||
}
|
||||
|
||||
String text = getActivity().getResources().getQuantityString(
|
||||
dcChat.isDeviceTalk() ? R.plurals.ask_delete_messages_simple : R.plurals.ask_delete_messages,
|
||||
messageIds.length, messageIds.length);
|
||||
String text = getActivity().getResources().getQuantityString(R.plurals.ask_delete_messages, messageIds.length, messageIds.length);
|
||||
int positiveBtnLabel = dcChat.isSelfTalk() ? R.string.delete : R.string.delete_for_me;
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity())
|
||||
@@ -136,7 +134,7 @@ public abstract class MessageSelectorFragment
|
||||
protected void handleShowInChat(final DcMsg dcMsg) {
|
||||
Intent intent = new Intent(getContext(), ConversationActivity.class);
|
||||
intent.putExtra(ConversationActivity.CHAT_ID_EXTRA, dcMsg.getChatId());
|
||||
intent.putExtra(ConversationActivity.STARTING_POSITION_EXTRA, DcMsg.getMessagePosition(dcMsg, dcContext));
|
||||
intent.putExtra(ConversationActivity.STARTING_POSITION_EXTRA, DcMsg.getMessagePosition(dcMsg, DcHelper.getContext(getContext())));
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@@ -146,6 +144,7 @@ public abstract class MessageSelectorFragment
|
||||
|
||||
protected void handleResendMessage(final Set<DcMsg> dcMsgsSet) {
|
||||
int[] ids = DcMsg.msgSetToIds(dcMsgsSet);
|
||||
DcContext dcContext = DcHelper.getContext(getContext());
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
boolean success = dcContext.resendMsgs(ids);
|
||||
Util.runOnMain(() -> {
|
||||
|
||||
@@ -39,6 +39,9 @@ import org.thoughtcrime.securesms.qr.QrActivity;
|
||||
import org.thoughtcrime.securesms.qr.QrCodeHandler;
|
||||
import org.thoughtcrime.securesms.util.MailtoUtil;
|
||||
|
||||
import chat.delta.rpc.types.SecurejoinSource;
|
||||
import chat.delta.rpc.types.SecurejoinUiPath;
|
||||
|
||||
/**
|
||||
* Activity container for starting a new conversation.
|
||||
*
|
||||
@@ -138,11 +141,13 @@ public class NewConversationActivity extends ContactSelectionActivity {
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode != RESULT_OK) return;
|
||||
|
||||
switch (requestCode) {
|
||||
case IntentIntegrator.REQUEST_CODE:
|
||||
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
|
||||
IntentResult scanResult = IntentIntegrator.parseActivityResult(resultCode, data);
|
||||
QrCodeHandler qrCodeHandler = new QrCodeHandler(this);
|
||||
qrCodeHandler.onScanPerformed(scanResult);
|
||||
qrCodeHandler.handleOnlySecureJoinQr(scanResult.getContents(), SecurejoinSource.Scan, SecurejoinUiPath.NewContact);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -38,8 +38,8 @@ public class ProfileAdapter extends RecyclerView.Adapter
|
||||
public static final int ITEM_ALL_MEDIA_BUTTON = 30;
|
||||
public static final int ITEM_SEND_MESSAGE_BUTTON = 35;
|
||||
public static final int ITEM_LAST_SEEN = 40;
|
||||
public static final int ITEM_BLOCKED = 43;
|
||||
public static final int ITEM_INTRODUCED_BY = 45;
|
||||
public static final int ITEM_ADDRESS = 50;
|
||||
public static final int ITEM_HEADER = 53;
|
||||
public static final int ITEM_MEMBERS = 55;
|
||||
public static final int ITEM_SHARED_CHATS = 60;
|
||||
@@ -140,7 +140,7 @@ public class ProfileAdapter extends RecyclerView.Adapter
|
||||
} else if (viewType == ITEM_ALL_MEDIA_BUTTON || viewType == ITEM_SEND_MESSAGE_BUTTON) {
|
||||
final ProfileTextItem item = (ProfileTextItem)layoutInflater.inflate(R.layout.profile_text_item_button, parent, false);
|
||||
return new ViewHolder(item);
|
||||
} else if (viewType == ITEM_LAST_SEEN || viewType == ITEM_INTRODUCED_BY || viewType == ITEM_ADDRESS) {
|
||||
} else if (viewType == ITEM_LAST_SEEN || viewType == ITEM_INTRODUCED_BY || viewType == ITEM_BLOCKED) {
|
||||
final ProfileTextItem item = (ProfileTextItem)layoutInflater.inflate(R.layout.profile_text_item_small, parent, false);
|
||||
return new ViewHolder(item);
|
||||
} else {
|
||||
@@ -163,11 +163,7 @@ public class ProfileAdapter extends RecyclerView.Adapter
|
||||
String addr = null;
|
||||
|
||||
if (contactId == DcContact.DC_CONTACT_ID_ADD_MEMBER) {
|
||||
if (isOutBroadcast) {
|
||||
name = context.getString(R.string.add_recipients);
|
||||
} else {
|
||||
name = context.getString(R.string.group_add_members);
|
||||
}
|
||||
name = context.getString(R.string.group_add_members);
|
||||
}
|
||||
else if (contactId == DcContact.DC_CONTACT_ID_QR_INVITE) {
|
||||
name = context.getString(R.string.qrshow_title);
|
||||
@@ -210,14 +206,11 @@ public class ProfileAdapter extends RecyclerView.Adapter
|
||||
else if(holder.itemView instanceof ProfileTextItem) {
|
||||
ProfileTextItem item = (ProfileTextItem) holder.itemView;
|
||||
item.setOnClickListener(view -> clickListener.onSettingsClicked(data.viewType));
|
||||
boolean tintIcon = data.viewType != ITEM_INTRODUCED_BY;
|
||||
boolean tintIcon = data.viewType != ITEM_INTRODUCED_BY && data.viewType != ITEM_BLOCKED;
|
||||
item.set(data.label, data.icon, tintIcon);
|
||||
if (data.viewType == ITEM_LAST_SEEN || data.viewType == ITEM_ADDRESS) {
|
||||
if (data.viewType == ITEM_BLOCKED) {
|
||||
int padding = (int)((float)context.getResources().getDimensionPixelSize(R.dimen.contact_list_normal_padding) * 1.2);
|
||||
item.setPadding(item.getPaddingLeft(), item.getPaddingTop(), item.getPaddingRight(), padding);
|
||||
if (data.viewType == ITEM_ADDRESS) {
|
||||
fragment.registerForContextMenu(item);
|
||||
}
|
||||
} else if (data.viewType == ITEM_INTRODUCED_BY) {
|
||||
int padding = context.getResources().getDimensionPixelSize(R.dimen.contact_list_normal_padding);
|
||||
item.setPadding(item.getPaddingLeft(), padding, item.getPaddingRight(), item.getPaddingBottom());
|
||||
@@ -312,6 +305,10 @@ public class ProfileAdapter extends RecyclerView.Adapter
|
||||
}
|
||||
*/
|
||||
|
||||
if (dcContact != null && !isDeviceTalk && !isSelfTalk && dcContact.isBlocked()) {
|
||||
itemData.add(new ItemData(ITEM_BLOCKED, context.getString(R.string.contact_blocked), R.drawable.contact_blocked_24));
|
||||
}
|
||||
|
||||
if (memberList!=null && !isInBroadcast && !isMailingList) {
|
||||
itemData.add(new ItemData(ITEM_DIVIDER, null, 0));
|
||||
if (dcChat != null) {
|
||||
@@ -349,10 +346,6 @@ public class ProfileAdapter extends RecyclerView.Adapter
|
||||
String introducedBy = context.getString(R.string.verified_by_unknown);
|
||||
itemData.add(new ItemData(ITEM_INTRODUCED_BY, introducedBy, R.drawable.ic_verified));
|
||||
}
|
||||
|
||||
if (dcContact != null) {
|
||||
itemData.add(new ItemData(ITEM_ADDRESS, dcContact.getAddr(), 0));
|
||||
}
|
||||
}
|
||||
|
||||
notifyDataSetChanged();
|
||||
|
||||
@@ -310,13 +310,24 @@ public class ProfileFragment extends Fragment
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode==REQUEST_CODE_PICK_CONTACT && resultCode==Activity.RESULT_OK && data!=null) {
|
||||
List<Integer> selected = data.getIntegerArrayListExtra(ContactMultiSelectionActivity.CONTACTS_EXTRA);
|
||||
List<Integer> removed = data.getIntegerArrayListExtra(ContactMultiSelectionActivity.REMOVED_CONTACTS_EXTRA);
|
||||
if(selected == null) return;
|
||||
Util.runOnAnyBackgroundThread(() -> {
|
||||
// Add new members
|
||||
for (Integer contactId : selected) {
|
||||
if (contactId!=null) {
|
||||
if (contactId != null) {
|
||||
dcContext.addContactToChat(chatId, contactId);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove members that were explicitly unchecked
|
||||
if (removed != null) {
|
||||
for (Integer contactId : removed) {
|
||||
if (contactId != null) {
|
||||
dcContext.removeContactFromChat(chatId, contactId);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
package org.thoughtcrime.securesms;
|
||||
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_STATS_SENDING;
|
||||
import static org.thoughtcrime.securesms.connect.DcHelper.openHelp;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.text.util.Linkify;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import com.b44t.messenger.DcContact;
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcMsg;
|
||||
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class StatsSending {
|
||||
/** @noinspection unused: We will start adding a device message once stats-sending is tested a bit */
|
||||
public static void maybeAddStatsSendingDeviceMsg(Context context) {
|
||||
if (Prefs.getStatsDeviceMsgId(context) != 0) {
|
||||
return;
|
||||
}
|
||||
if (DcHelper.getInt(context, CONFIG_STATS_SENDING) != 0) {
|
||||
return; // Stats-sending is already enabled
|
||||
}
|
||||
DcContext dcContext = DcHelper.getContext(context);
|
||||
DcMsg msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
|
||||
msg.setText(context.getString(R.string.stats_device_message));
|
||||
int msgId = dcContext.addDeviceMsg("stats_device_message", msg);
|
||||
if (msgId!=0) {
|
||||
Prefs.setStatsDeviceMsgId(context, msgId);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isStatsSendingDeviceMsg(Context context, DcMsg msg) {
|
||||
return msg != null
|
||||
&& msg.getFromId() == DcContact.DC_CONTACT_ID_DEVICE
|
||||
&& msg.getId() == Prefs.getStatsDeviceMsgId(context);
|
||||
}
|
||||
|
||||
public static void statsDeviceMsgTapped(Activity activity) {
|
||||
if (DcHelper.getInt(activity, CONFIG_STATS_SENDING) != 0) {
|
||||
showStatsDisableDialog(activity);
|
||||
} else {
|
||||
showStatsConfirmationDialog(activity, () -> {});
|
||||
}
|
||||
}
|
||||
|
||||
public static void showStatsConfirmationDialog(Activity activity, Runnable onConfigChangedListener) {
|
||||
AlertDialog d = new AlertDialog.Builder(activity)
|
||||
.setMessage(R.string.stats_confirmation_dialog)
|
||||
.setNegativeButton(R.string.cancel, (_d, i) -> {})
|
||||
.setPositiveButton(R.string.yes, (_d, i) -> {
|
||||
DcHelper.set(activity, DcHelper.CONFIG_STATS_SENDING, "1");
|
||||
onConfigChangedListener.run();
|
||||
showStatsThanksDialog(activity);
|
||||
})
|
||||
.setNeutralButton(R.string.more_info_desktop, (_d, i) -> openHelp(activity, "#statssending"))
|
||||
.create();
|
||||
d.show();
|
||||
try {
|
||||
//noinspection DataFlowIssue
|
||||
Linkify.addLinks((TextView) d.findViewById(android.R.id.message), Linkify.WEB_URLS);
|
||||
} catch (NullPointerException e) {
|
||||
//noinspection CallToPrintStackTrace
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static void showStatsThanksDialog(Activity activity) {
|
||||
String stats_id = DcHelper.get(activity, DcHelper.CONFIG_STATS_ID);
|
||||
new AlertDialog.Builder(activity)
|
||||
.setMessage(R.string.stats_thanks)
|
||||
.setNeutralButton(R.string.no, (d, i) -> {})
|
||||
.setPositiveButton(R.string.yes, (d, i) -> {
|
||||
String ln = Locale.getDefault().getLanguage();
|
||||
IntentUtils.showInBrowser(activity, "https://cispa.qualtrics.com/jfe/form/SV_9YmhkpGa48KxfLg?id=" + stats_id + "&ln=" + ln);
|
||||
})
|
||||
.show();
|
||||
}
|
||||
|
||||
public static void showStatsDisableDialog(Activity activity) {
|
||||
AlertDialog d = new AlertDialog.Builder(activity)
|
||||
.setMessage(R.string.stats_disable_dialog)
|
||||
.setNegativeButton(R.string.disable, (_d, i) -> {
|
||||
DcHelper.set(activity, DcHelper.CONFIG_STATS_SENDING, "0");
|
||||
})
|
||||
.setPositiveButton(R.string.stats_keep_sending, (_d, i) -> {
|
||||
})
|
||||
.setNeutralButton(R.string.more_info_desktop, (_d, i) -> openHelp(activity, "#statssending"))
|
||||
.create();
|
||||
d.show();
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,8 @@ import org.thoughtcrime.securesms.util.IntentUtils;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
|
||||
import chat.delta.rpc.types.SecurejoinSource;
|
||||
|
||||
import java.net.IDN;
|
||||
|
||||
public class WebViewActivity extends PassphraseRequiredActionBarActivity
|
||||
@@ -302,7 +304,7 @@ public class WebViewActivity extends PassphraseRequiredActionBarActivity
|
||||
// invite-links should be handled directly
|
||||
String schema = url.split(":")[0].toLowerCase();
|
||||
if (schema.equals("openpgp4fpr") || url.startsWith("https://" + Util.INVITE_DOMAIN + "/")) {
|
||||
new QrCodeHandler(this).handleQrData(url);
|
||||
new QrCodeHandler(this).handleOnlySecureJoinQr(url, SecurejoinSource.InternalLink, null);
|
||||
return true; // abort internal loading
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.activity.OnBackPressedCallback;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
@@ -22,7 +23,6 @@ import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import com.b44t.messenger.DcContext;
|
||||
import com.b44t.messenger.DcEvent;
|
||||
import com.b44t.messenger.DcLot;
|
||||
import com.google.zxing.integration.android.IntentIntegrator;
|
||||
import com.google.zxing.integration.android.IntentResult;
|
||||
|
||||
@@ -33,9 +33,11 @@ import org.thoughtcrime.securesms.mms.AttachmentManager;
|
||||
import org.thoughtcrime.securesms.mms.PartAuthority;
|
||||
import org.thoughtcrime.securesms.permissions.Permissions;
|
||||
import org.thoughtcrime.securesms.qr.BackupTransferActivity;
|
||||
import org.thoughtcrime.securesms.qr.QrCodeHandler;
|
||||
import org.thoughtcrime.securesms.qr.RegistrationQrActivity;
|
||||
import org.thoughtcrime.securesms.service.GenericForegroundService;
|
||||
import org.thoughtcrime.securesms.service.NotificationController;
|
||||
import org.thoughtcrime.securesms.util.Prefs;
|
||||
import org.thoughtcrime.securesms.util.StorageUtil;
|
||||
import org.thoughtcrime.securesms.util.StreamUtil;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
@@ -67,16 +69,48 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
|
||||
// add padding to avoid content hidden behind system bars
|
||||
ViewUtil.applyWindowInsets(findViewById(R.id.content_container));
|
||||
|
||||
findViewById(R.id.signup_button).setOnClickListener((v) -> startInstantOnboardingActivity());
|
||||
findViewById(R.id.add_as_second_device_button).setOnClickListener((v) -> startAddAsSecondDeviceActivity());
|
||||
findViewById(R.id.signup_button).setOnClickListener((v) -> startActivity(new Intent(this, InstantOnboardingActivity.class)));
|
||||
findViewById(R.id.add_as_second_device_button).setOnClickListener((v) -> showSignInDialogWithPermission());
|
||||
findViewById(R.id.backup_button).setOnClickListener((v) -> startImportBackup());
|
||||
|
||||
registerForEvents();
|
||||
initializeActionBar();
|
||||
|
||||
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
||||
@Override
|
||||
public void handleOnBackPressed() {
|
||||
AccountManager accountManager = AccountManager.getInstance();
|
||||
if (accountManager.canRollbackAccountCreation(WelcomeActivity.this)) {
|
||||
accountManager.rollbackAccountCreation(WelcomeActivity.this);
|
||||
} else {
|
||||
setEnabled(false);
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
DcHelper.maybeShowMigrationError(this);
|
||||
}
|
||||
|
||||
private void showSignInDialogWithPermission() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
|
||||
&& !Prefs.getBooleanPreference(this, Prefs.ASKED_FOR_NOTIFICATION_PERMISSION, false)) {
|
||||
Prefs.setBooleanPreference(this, Prefs.ASKED_FOR_NOTIFICATION_PERMISSION, true);
|
||||
Permissions.with(this)
|
||||
.request(Manifest.permission.POST_NOTIFICATIONS)
|
||||
.ifNecessary()
|
||||
.onAllGranted(() -> {
|
||||
startAddAsSecondDeviceActivity();
|
||||
})
|
||||
.onAnyDenied(() -> {
|
||||
startAddAsSecondDeviceActivity();
|
||||
})
|
||||
.execute();
|
||||
} else {
|
||||
startAddAsSecondDeviceActivity();
|
||||
}
|
||||
}
|
||||
|
||||
protected void initializeActionBar() {
|
||||
ActionBar supportActionBar = getSupportActionBar();
|
||||
if (supportActionBar == null) throw new AssertionError();
|
||||
@@ -97,7 +131,7 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
|
||||
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
onBackPressed();
|
||||
getOnBackPressedDispatcher().onBackPressed();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -131,12 +165,6 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
|
||||
Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
|
||||
}
|
||||
|
||||
private void startInstantOnboardingActivity() {
|
||||
Intent intent = new Intent(this, InstantOnboardingActivity.class);
|
||||
intent.putExtra(InstantOnboardingActivity.FROM_WELCOME, true);
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
private void startAddAsSecondDeviceActivity() {
|
||||
new IntentIntegrator(this).setCaptureActivity(RegistrationQrActivity.class)
|
||||
.addExtra(RegistrationQrActivity.ADD_AS_SECOND_DEVICE_EXTRA, true)
|
||||
@@ -320,39 +348,14 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
|
||||
if (requestCode==IntentIntegrator.REQUEST_CODE) {
|
||||
String qrRaw = data.getStringExtra(RegistrationQrActivity.QRDATA_EXTRA);
|
||||
if (qrRaw == null) {
|
||||
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
|
||||
if (scanResult == null || scanResult.getFormatName() == null) {
|
||||
return; // aborted
|
||||
}
|
||||
IntentResult scanResult = IntentIntegrator.parseActivityResult(resultCode, data);
|
||||
qrRaw = scanResult.getContents();
|
||||
}
|
||||
DcLot qrParsed = dcContext.checkQr(qrRaw);
|
||||
switch (qrParsed.getState()) {
|
||||
case DcContext.DC_QR_BACKUP2:
|
||||
final String finalQrRaw = qrRaw;
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.multidevice_receiver_title)
|
||||
.setMessage(R.string.multidevice_receiver_scanning_ask)
|
||||
.setPositiveButton(R.string.perm_continue, (dialog, which) -> startBackupTransfer(finalQrRaw))
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setCancelable(false)
|
||||
.show();
|
||||
break;
|
||||
|
||||
case DcContext.DC_QR_BACKUP_TOO_NEW:
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.multidevice_receiver_title)
|
||||
.setMessage(R.string.multidevice_receiver_needs_update)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show();
|
||||
break;
|
||||
|
||||
default:
|
||||
new AlertDialog.Builder(this)
|
||||
.setMessage(R.string.qraccount_qr_code_cannot_be_used)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show();
|
||||
break;
|
||||
if (!new QrCodeHandler(this).handleBackupQr(qrRaw)) {
|
||||
new AlertDialog.Builder(this)
|
||||
.setMessage(R.string.qraccount_qr_code_cannot_be_used)
|
||||
.setPositiveButton(R.string.ok, null)
|
||||
.show();
|
||||
}
|
||||
} else if (requestCode == PICK_BACKUP) {
|
||||
Uri uri = (data != null ? data.getData() : null);
|
||||
@@ -377,14 +380,4 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
AccountManager accountManager = AccountManager.getInstance();
|
||||
if (accountManager.canRollbackAccountCreation(this)) {
|
||||
accountManager.rollbackAccountCreation(this);
|
||||
} else {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,18 +47,28 @@ import chat.delta.rpc.RpcException;
|
||||
public class AccountSelectionListFragment extends DialogFragment implements DcEventCenter.DcEventDelegate
|
||||
{
|
||||
private static final String TAG = AccountSelectionListFragment.class.getSimpleName();
|
||||
private final ConversationListActivity activity;
|
||||
private RecyclerView recyclerView;
|
||||
private AccountSelectionListAdapter adapter;
|
||||
private final boolean selectOnly;
|
||||
|
||||
public AccountSelectionListFragment(ConversationListActivity activity, boolean selectOnly) {
|
||||
super();
|
||||
this.activity = activity;
|
||||
this.selectOnly = selectOnly;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
|
||||
.setTitle(R.string.switch_account)
|
||||
.setNeutralButton(R.string.connectivity, ((dialog, which) -> {
|
||||
startActivity(new Intent(getActivity(), ConnectivityActivity.class));
|
||||
}))
|
||||
.setNegativeButton(R.string.cancel, null);
|
||||
if (!selectOnly) {
|
||||
builder.setNeutralButton(R.string.connectivity, ((dialog, which) -> {
|
||||
startActivity(new Intent(getActivity(), ConnectivityActivity.class));
|
||||
}));
|
||||
}
|
||||
|
||||
LayoutInflater inflater = getActivity().getLayoutInflater();
|
||||
View view = inflater.inflate(R.layout.account_selection_list_fragment, null);
|
||||
@@ -93,18 +103,20 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv
|
||||
DcAccounts accounts = DcHelper.getAccounts(getActivity());
|
||||
int[] accountIds = accounts.getAll();
|
||||
|
||||
int[] ids = new int[accountIds.length + 1];
|
||||
int[] ids = new int[(selectOnly? 0 : 1) + accountIds.length];
|
||||
int j = 0;
|
||||
for (int accountId : accountIds) {
|
||||
ids[j++] = accountId;
|
||||
}
|
||||
ids[j] = DC_CONTACT_ID_ADD_ACCOUNT;
|
||||
if (!selectOnly) ids[j] = DC_CONTACT_ID_ADD_ACCOUNT;
|
||||
adapter.changeData(ids, accounts.getSelectedAccount().getAccountId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreateContextMenu(@NonNull ContextMenu menu, @NonNull View v, ContextMenu.ContextMenuInfo menuInfo) {
|
||||
super.onCreateContextMenu(menu, v, menuInfo);
|
||||
if (selectOnly) return;
|
||||
|
||||
requireActivity().getMenuInflater().inflate(R.menu.account_item_context, menu);
|
||||
|
||||
AccountSelectionListItem listItem = (AccountSelectionListItem) v;
|
||||
@@ -132,7 +144,7 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv
|
||||
private void onContextItemSelected(MenuItem item, int accountId) {
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.delete) {
|
||||
onDeleteAccount(accountId);
|
||||
onDeleteProfile(accountId);
|
||||
} else if (itemId == R.id.menu_mute_notifications) {
|
||||
onToggleMute(accountId);
|
||||
} else if (itemId == R.id.menu_set_tag) {
|
||||
@@ -167,8 +179,6 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv
|
||||
}
|
||||
|
||||
private void onSetTag(int accountId) {
|
||||
Activity activity = getActivity();
|
||||
if (activity == null) return;
|
||||
AccountSelectionListFragment.this.dismiss();
|
||||
|
||||
DcContext dcContext = DcHelper.getAccounts(activity).getAccount(accountId);
|
||||
@@ -184,16 +194,14 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv
|
||||
.setPositiveButton(android.R.string.ok, (d, b) -> {
|
||||
String newTag = inputField.getText().toString().trim();
|
||||
dcContext.setConfig(CONFIG_PRIVATE_TAG, newTag);
|
||||
AccountManager.getInstance().showSwitchAccountMenu(activity);
|
||||
AccountManager.getInstance().showSwitchAccountMenu(activity, selectOnly);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (d, b) -> AccountManager.getInstance().showSwitchAccountMenu(activity))
|
||||
.setNegativeButton(R.string.cancel, (d, b) -> AccountManager.getInstance().showSwitchAccountMenu(activity, selectOnly))
|
||||
.show();
|
||||
}
|
||||
|
||||
private void onDeleteAccount(int accountId) {
|
||||
Activity activity = getActivity();
|
||||
private void onDeleteProfile(int accountId) {
|
||||
AccountSelectionListFragment.this.dismiss();
|
||||
if (activity == null) return;
|
||||
DcAccounts accounts = DcHelper.getAccounts(activity);
|
||||
Rpc rpc = DcHelper.getRpc(activity);
|
||||
|
||||
@@ -228,23 +236,8 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv
|
||||
AlertDialog dialog = new AlertDialog.Builder(activity)
|
||||
.setTitle(R.string.delete_account)
|
||||
.setView(dialogView)
|
||||
.setNegativeButton(R.string.cancel, (d, which) -> AccountManager.getInstance().showSwitchAccountMenu(activity))
|
||||
.setPositiveButton(R.string.delete, (d2, which2) -> {
|
||||
boolean selected = accountId == accounts.getSelectedAccount().getAccountId();
|
||||
DcHelper.getNotificationCenter(activity).removeAllNotifications(accountId);
|
||||
accounts.removeAccount(accountId);
|
||||
if (selected) {
|
||||
DcContext selAcc = accounts.getSelectedAccount();
|
||||
AccountManager.getInstance().switchAccountAndStartActivity(activity, selAcc.isOk()? selAcc.getAccountId() : 0);
|
||||
} else {
|
||||
AccountManager.getInstance().showSwitchAccountMenu(activity);
|
||||
}
|
||||
|
||||
// title update needed to show "Delta Chat" in case there is only one profile left
|
||||
if (activity instanceof ConversationListActivity) {
|
||||
((ConversationListActivity)activity).refreshTitle();
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, (d, which) -> AccountManager.getInstance().showSwitchAccountMenu(activity, selectOnly))
|
||||
.setPositiveButton(R.string.delete, (d2, w2) -> activity.onDeleteProfile(accountId))
|
||||
.show();
|
||||
Util.redPositiveButton(dialog);
|
||||
}
|
||||
@@ -260,13 +253,13 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv
|
||||
|
||||
@Override
|
||||
public void onItemClick(AccountSelectionListItem contact) {
|
||||
Activity activity = requireActivity();
|
||||
AccountSelectionListFragment.this.dismiss();
|
||||
int accountId = contact.getAccountId();
|
||||
if (accountId == DC_CONTACT_ID_ADD_ACCOUNT) {
|
||||
AccountManager.getInstance().switchAccountAndStartActivity(activity, 0);
|
||||
} else if (accountId != DcHelper.getAccounts(activity).getSelectedAccount().getAccountId()) {
|
||||
AccountManager.getInstance().switchAccountAndStartActivity(activity, accountId);
|
||||
AccountManager.getInstance().switchAccount(activity, accountId);
|
||||
activity.onProfileSwitched(accountId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,10 +87,6 @@ public class AccountSelectionListItem extends LinearLayout {
|
||||
}
|
||||
|
||||
addrOrTag = dcContext.getConfig(CONFIG_PRIVATE_TAG);
|
||||
if ("".equals(addrOrTag) && !dcContext.isChatmail()) {
|
||||
addrOrTag = self.getAddr();
|
||||
}
|
||||
|
||||
unreadCount = dcContext.getFreshMsgs().length;
|
||||
|
||||
enableSwitch.setChecked(dcContext.isEnabled());
|
||||
|
||||
@@ -15,39 +15,51 @@ import androidx.annotation.Nullable;
|
||||
import com.b44t.messenger.DcMsg;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
|
||||
import chat.delta.rpc.Rpc;
|
||||
import chat.delta.rpc.RpcException;
|
||||
|
||||
public class ConversationItemFooter extends LinearLayout {
|
||||
|
||||
private TextView dateView;
|
||||
private TextView editedView;
|
||||
private TextView viewsLabel;
|
||||
private ImageView viewsIcon;
|
||||
private ImageView bookmarkIndicatorView;
|
||||
private ImageView emailIndicatorView;
|
||||
private ImageView locationIndicatorView;
|
||||
private DeliveryStatusView deliveryStatusView;
|
||||
private Integer textColor = null;
|
||||
private int callDuration = 0;
|
||||
private Context context;
|
||||
private Rpc rpc;
|
||||
|
||||
public ConversationItemFooter(Context context) {
|
||||
super(context);
|
||||
init(null);
|
||||
init(context, null);
|
||||
}
|
||||
|
||||
public ConversationItemFooter(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init(attrs);
|
||||
init(context, attrs);
|
||||
}
|
||||
|
||||
public ConversationItemFooter(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init(attrs);
|
||||
init(context, attrs);
|
||||
}
|
||||
|
||||
private void init(@Nullable AttributeSet attrs) {
|
||||
private void init(Context context, @Nullable AttributeSet attrs) {
|
||||
this.context = context;
|
||||
this.rpc = DcHelper.getRpc(context);
|
||||
inflate(getContext(), R.layout.conversation_item_footer, this);
|
||||
|
||||
dateView = findViewById(R.id.footer_date);
|
||||
editedView = findViewById(R.id.footer_edited);
|
||||
viewsLabel = findViewById(R.id.footer_views);
|
||||
viewsIcon = findViewById(R.id.footer_views_icon);
|
||||
bookmarkIndicatorView = findViewById(R.id.footer_bookmark_indicator);
|
||||
emailIndicatorView = findViewById(R.id.footer_email_indicator);
|
||||
locationIndicatorView = findViewById(R.id.footer_location_indicator);
|
||||
@@ -79,13 +91,33 @@ public class ConversationItemFooter extends LinearLayout {
|
||||
}
|
||||
|
||||
locationIndicatorView.setVisibility(messageRecord.hasLocation() ? View.VISIBLE : View.GONE);
|
||||
presentDeliveryStatus(messageRecord);
|
||||
|
||||
boolean isOutChannel = DcHelper.getContext(context).getChat(messageRecord.getChatId()).isOutBroadcast();
|
||||
|
||||
if (isOutChannel && messageRecord.isOutgoing()) {
|
||||
try {
|
||||
int accId = rpc.getSelectedAccountId();
|
||||
int count = rpc.getMessageReadReceiptCount(accId, messageRecord.getId());
|
||||
viewsLabel.setText(String.format("%d", count));
|
||||
viewsLabel.setVisibility(View.VISIBLE);
|
||||
viewsIcon.setVisibility(View.VISIBLE);
|
||||
} catch (RpcException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
viewsLabel.setVisibility(View.GONE);
|
||||
viewsIcon.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
presentDeliveryStatus(messageRecord, isOutChannel);
|
||||
}
|
||||
|
||||
public void setTextColor(int color) {
|
||||
textColor = color;
|
||||
dateView.setTextColor(color);
|
||||
editedView.setTextColor(color);
|
||||
viewsLabel.setTextColor(color);
|
||||
viewsIcon.setColorFilter(color);
|
||||
bookmarkIndicatorView.setColorFilter(color);
|
||||
emailIndicatorView.setColorFilter(color);
|
||||
locationIndicatorView.setColorFilter(color);
|
||||
@@ -106,7 +138,7 @@ public class ConversationItemFooter extends LinearLayout {
|
||||
}
|
||||
}
|
||||
|
||||
private void presentDeliveryStatus(@NonNull DcMsg messageRecord) {
|
||||
private void presentDeliveryStatus(@NonNull DcMsg messageRecord, boolean isOutChannel) {
|
||||
// isDownloading is temporary and should be checked first.
|
||||
boolean isDownloading = messageRecord.getDownloadState() == DcMsg.DC_DOWNLOAD_IN_PROGRESS;
|
||||
boolean isCall = messageRecord.getType() == DcMsg.DC_MSG_CALL;
|
||||
@@ -114,7 +146,7 @@ public class ConversationItemFooter extends LinearLayout {
|
||||
if (isDownloading) deliveryStatusView.setDownloading();
|
||||
else if (messageRecord.isPending()) deliveryStatusView.setPending();
|
||||
else if (messageRecord.isFailed()) deliveryStatusView.setFailed();
|
||||
else if (!messageRecord.isOutgoing() || isCall) deliveryStatusView.setNone();
|
||||
else if (!messageRecord.isOutgoing() || isCall || isOutChannel) deliveryStatusView.setNone();
|
||||
else if (messageRecord.isRemoteRead()) deliveryStatusView.setRead();
|
||||
else if (messageRecord.isDelivered()) deliveryStatusView.setSent();
|
||||
else if (messageRecord.isPreparing()) deliveryStatusView.setPreparing();
|
||||
|
||||
@@ -56,6 +56,7 @@ public class InputPanel extends ConstraintLayout
|
||||
private QuoteView quoteView;
|
||||
private EmojiToggle emojiToggle;
|
||||
private ComposeText composeText;
|
||||
private android.widget.EditText subjectText;
|
||||
private View quickCameraToggle;
|
||||
private View quickAudioToggle;
|
||||
private View buttonToggle;
|
||||
@@ -91,6 +92,7 @@ public class InputPanel extends ConstraintLayout
|
||||
this.quoteView = findViewById(R.id.quote_view);
|
||||
this.emojiToggle = findViewById(R.id.emoji_toggle);
|
||||
this.composeText = findViewById(R.id.embedded_text_editor);
|
||||
this.subjectText = findViewById(R.id.subject_text);
|
||||
this.quickCameraToggle = findViewById(R.id.quick_camera_toggle);
|
||||
this.quickAudioToggle = findViewById(R.id.quick_audio_toggle);
|
||||
this.buttonToggle = findViewById(R.id.button_toggle);
|
||||
@@ -198,6 +200,31 @@ public class InputPanel extends ConstraintLayout
|
||||
composeText.performClick();
|
||||
}
|
||||
|
||||
public void setSubjectVisible(boolean visible) {
|
||||
subjectText.setVisibility(visible ? View.VISIBLE : View.GONE);
|
||||
// don't make it visible if visible is false to avoid showing it while recording audio and an event triggers setSubjectVisible(false)
|
||||
if (visible) emojiToggle.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
public String getSubject() {
|
||||
if (subjectText != null && subjectText.getVisibility() == View.VISIBLE) {
|
||||
return subjectText.getText().toString().trim();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public void clearSubject() {
|
||||
if (subjectText != null) {
|
||||
subjectText.setText("");
|
||||
}
|
||||
}
|
||||
|
||||
public void setSubject(String subject) {
|
||||
if (subjectText != null && subject != null) {
|
||||
subjectText.setText(subject);
|
||||
}
|
||||
}
|
||||
|
||||
public void setMediaKeyboard(@NonNull MediaKeyboard mediaKeyboard) {
|
||||
mediaKeyboard.setKeyboardListener(this);
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ public class DozeReminder {
|
||||
}
|
||||
|
||||
private static boolean isPushAvailableAndSufficient() {
|
||||
return ApplicationContext.dcAccounts.isAllChatmail()
|
||||
return ApplicationContext.getDcAccounts().isAllChatmail()
|
||||
&& FcmReceiveService.getToken() != null;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
@@ -14,7 +13,6 @@ import com.b44t.messenger.DcContext;
|
||||
|
||||
import org.thoughtcrime.securesms.ApplicationContext;
|
||||
import org.thoughtcrime.securesms.ConversationListActivity;
|
||||
import org.thoughtcrime.securesms.InstantOnboardingActivity;
|
||||
import org.thoughtcrime.securesms.WelcomeActivity;
|
||||
import org.thoughtcrime.securesms.accounts.AccountSelectionListFragment;
|
||||
|
||||
@@ -31,7 +29,7 @@ public class AccountManager {
|
||||
|
||||
private void resetDcContext(Context context) {
|
||||
ApplicationContext appContext = (ApplicationContext)context.getApplicationContext();
|
||||
appContext.dcContext = ApplicationContext.dcAccounts.getSelectedAccount();
|
||||
appContext.setDcContext(ApplicationContext.getDcAccounts().getSelectedAccount());
|
||||
DcHelper.setStockTranslations(context);
|
||||
DirectShareUtil.resetAllShortcuts(appContext);
|
||||
}
|
||||
@@ -55,7 +53,7 @@ public class AccountManager {
|
||||
for (File file : files) {
|
||||
// old accounts have the pattern "messenger*.db"
|
||||
if (!file.isDirectory() && file.getName().startsWith("messenger") && file.getName().endsWith(".db")) {
|
||||
int accountId = ApplicationContext.dcAccounts.migrateAccount(file.getAbsolutePath());
|
||||
int accountId = ApplicationContext.getDcAccounts().migrateAccount(file.getAbsolutePath());
|
||||
if (accountId != 0) {
|
||||
String selName = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
.getString("curr_account_db_name", "messenger.db");
|
||||
@@ -70,7 +68,7 @@ public class AccountManager {
|
||||
}
|
||||
|
||||
if (selectAccountId != 0) {
|
||||
ApplicationContext.dcAccounts.selectAccount(selectAccountId);
|
||||
ApplicationContext.getDcAccounts().selectAccount(selectAccountId);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Error in migrateToDcAccounts()", e);
|
||||
@@ -123,10 +121,6 @@ public class AccountManager {
|
||||
}
|
||||
|
||||
public void switchAccountAndStartActivity(Activity activity, int destAccountId) {
|
||||
switchAccountAndStartActivity(activity, destAccountId, null);
|
||||
}
|
||||
|
||||
private void switchAccountAndStartActivity(Activity activity, int destAccountId, @Nullable String backupQr) {
|
||||
if (destAccountId==0) {
|
||||
beginAccountCreation(activity);
|
||||
} else {
|
||||
@@ -134,12 +128,8 @@ public class AccountManager {
|
||||
}
|
||||
|
||||
activity.finishAffinity();
|
||||
if (destAccountId==0) {
|
||||
Intent intent = new Intent(activity, WelcomeActivity.class);
|
||||
if (backupQr != null) {
|
||||
intent.putExtra(WelcomeActivity.BACKUP_QR_EXTRA, backupQr);
|
||||
}
|
||||
activity.startActivity(intent);
|
||||
if (destAccountId == 0) {
|
||||
activity.startActivity(new Intent(activity, WelcomeActivity.class));
|
||||
} else {
|
||||
activity.startActivity(new Intent(activity.getApplicationContext(), ConversationListActivity.class));
|
||||
}
|
||||
@@ -147,12 +137,21 @@ public class AccountManager {
|
||||
|
||||
// ui
|
||||
|
||||
public void showSwitchAccountMenu(Activity activity) {
|
||||
AccountSelectionListFragment dialog = new AccountSelectionListFragment();
|
||||
public void showSwitchAccountMenu(ConversationListActivity activity, boolean selectOnly) {
|
||||
AccountSelectionListFragment dialog = new AccountSelectionListFragment(activity, selectOnly);
|
||||
dialog.show(((FragmentActivity) activity).getSupportFragmentManager(), null);
|
||||
}
|
||||
|
||||
public void addAccountFromSecondDevice(Activity activity, String backupQr) {
|
||||
switchAccountAndStartActivity(activity, 0, backupQr);
|
||||
DcAccounts accounts = DcHelper.getAccounts(activity);
|
||||
if (accounts.getSelectedAccount().isConfigured() == 1) {
|
||||
// the selected account is already configured, create a new one
|
||||
beginAccountCreation(activity);
|
||||
}
|
||||
|
||||
activity.finishAffinity();
|
||||
Intent intent = new Intent(activity, WelcomeActivity.class);
|
||||
intent.putExtra(WelcomeActivity.BACKUP_QR_EXTRA, backupQr);
|
||||
activity.startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,7 +220,7 @@ public class DcEventCenter {
|
||||
break;
|
||||
}
|
||||
|
||||
if (accountId != context.dcContext.getAccountId()) {
|
||||
if (accountId != context.getDcContext().getAccountId()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -60,27 +60,28 @@ public class DcHelper {
|
||||
public static final String CONFIG_MEDIA_QUALITY = "media_quality";
|
||||
public static final String CONFIG_PROXY_ENABLED = "proxy_enabled";
|
||||
public static final String CONFIG_PROXY_URL = "proxy_url";
|
||||
public static final String CONFIG_WEBXDC_REALTIME_ENABLED = "webxdc_realtime_enabled";
|
||||
public static final String CONFIG_PRIVATE_TAG = "private_tag";
|
||||
public static final String CONFIG_STATS_SENDING = "stats_sending";
|
||||
public static final String CONFIG_STATS_ID = "stats_id";
|
||||
|
||||
public static DcContext getContext(@NonNull Context context) {
|
||||
return ApplicationContext.getInstance(context).dcContext;
|
||||
return ApplicationContext.getInstance(context).getDcContext();
|
||||
}
|
||||
|
||||
public static Rpc getRpc(@NonNull Context context) {
|
||||
return ApplicationContext.getInstance(context).rpc;
|
||||
return ApplicationContext.getInstance(context).getRpc();
|
||||
}
|
||||
|
||||
public static DcAccounts getAccounts(@NonNull Context context) {
|
||||
return ApplicationContext.getInstance(context).dcAccounts;
|
||||
return ApplicationContext.getInstance(context).getDcAccounts();
|
||||
}
|
||||
|
||||
public static DcEventCenter getEventCenter(@NonNull Context context) {
|
||||
return ApplicationContext.getInstance(context).eventCenter;
|
||||
return ApplicationContext.getInstance(context).getEventCenter();
|
||||
}
|
||||
|
||||
public static NotificationCenter getNotificationCenter(@NonNull Context context) {
|
||||
return ApplicationContext.getInstance(context).notificationCenter;
|
||||
return ApplicationContext.getInstance(context).getNotificationCenter();
|
||||
}
|
||||
|
||||
public static boolean isConfigured(Context context) {
|
||||
|
||||
@@ -22,6 +22,9 @@ import org.thoughtcrime.securesms.connect.DcHelper;
|
||||
import org.thoughtcrime.securesms.qr.QrCodeHandler;
|
||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||
|
||||
import chat.delta.rpc.types.SecurejoinSource;
|
||||
import chat.delta.rpc.types.SecurejoinUiPath;
|
||||
|
||||
public class NewContactActivity extends PassphraseRequiredActionBarActivity
|
||||
{
|
||||
|
||||
@@ -102,10 +105,10 @@ public class NewContactActivity extends PassphraseRequiredActionBarActivity
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == IntentIntegrator.REQUEST_CODE) {
|
||||
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == RESULT_OK && requestCode == IntentIntegrator.REQUEST_CODE) {
|
||||
IntentResult scanResult = IntentIntegrator.parseActivityResult(resultCode, data);
|
||||
QrCodeHandler qrCodeHandler = new QrCodeHandler(this);
|
||||
qrCodeHandler.onScanPerformed(scanResult);
|
||||
qrCodeHandler.handleOnlySecureJoinQr(scanResult.getContents(), SecurejoinSource.Scan, SecurejoinUiPath.NewContact);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||