diff --git a/CHANGELOG.md b/CHANGELOG.md
index 98f7cb83d..ff2b7b07b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+### Version 2.6.1
+* fixes for Jingle IBB file transfer
+* fixes for repeated corrections filling up the database
+* switched to Last Message Correction v1.1
+
### Version 2.6.0
* Introduce expert setting to perform channel discovery on local server instead of [search.jabber.network](https://search.jabber.network)
* Enable delivery check marks by default and remove setting
diff --git a/README.md b/README.md
index 42f0861a5..1bb4ff085 100644
--- a/README.md
+++ b/README.md
@@ -354,8 +354,6 @@ Read more about the concept on https://gultsch.de/trust.html
#### What happened to OTR support?
OTR was removed because it was highly unreliable. It didn’t work with multiple devices and was never really specified to work with XMPP. The codebase was a mess (There was an HTML parser in there for crying out loud to deal with the garbage some OTR clients would send.) Verification was implemented in a non-blocking way. It would tell you if the current session was using an unknown fingerprint but it didn’t actively stopped you from sending messages until you have confirmed the new fingerprint. (Like Conversations would do now with BTBV after verification or when BTBV is turned off.) Considering the previous points there was little to no desire from my point to fix this potential security issue or clean up the code base. Another reason for the removal was that people would use it *accidentally* even to communicate between two Conversations clients because they read somewhere that OTR is good.
-OTR is still available in [Conversations Legacy](https://github.com/siacs/Conversations/tree/legacy).
-
### What clients do I use on other platforms
There are XMPP Clients available for all major platforms.
#### Windows / Linux
diff --git a/build.gradle b/build.gradle
index 643e08ba1..703bfec86 100644
--- a/build.gradle
+++ b/build.gradle
@@ -84,8 +84,8 @@ android {
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
- versionCode 350
- versionName "2.6.0.1"
+ versionCode 351
+ versionName "2.6.1"
archivesBaseName += "-$versionName"
applicationId "eu.sum7.conversations"
resValue "string", "applicationId", applicationId
diff --git a/src/conversations/res/values-de/strings.xml b/src/conversations/res/values-de/strings.xml
index 00854ebf0..529995491 100644
--- a/src/conversations/res/values-de/strings.xml
+++ b/src/conversations/res/values-de/strings.xml
@@ -3,7 +3,7 @@
Wähle deinen XMPP-Provider
Benutze chat.sum7.eu
Neues Konto erstellen
- Hast du bereits ein XMPP-Konto? Dies kann der Fall sein, wenn du bereits einen anderen XMPP-Client verwendest oder bereits Conversations verwendet hast. Wenn nicht, kannst du jetzt ein neues XMPP-Konto erstellen.\nHinweis: Einige E-Mail-Anbieter bieten auch XMPP-Konten an.
- XMPP ist ein anbieterunabhängiges Instant Messaging Netzwerk. Du kannst diesen Client mit jedem beliebigen XMPP-Server nutzen.\nUm es dir leicht zu machen, haben wir die Möglichkeit geschaffen, ein Konto auf chat.sum7.eu anzulegen; ein Anbieter, der speziell für die Verwendung mit Conversations geeignet ist.
+ Hast du bereits ein XMPP-Konto? Dies kann der Fall sein, wenn du bereits einen anderen XMPP-Client verwendest oder bereits Conv6sations verwendet hast. Wenn nicht, kannst du jetzt ein neues XMPP-Konto erstellen.\nTipp: Einige E-Mail-Anbieter bieten auch XMPP-Konten an.
+ XMPP ist ein anbieterunabhängiges Instant Messaging Netzwerk. Du kannst diesen Client mit jedem beliebigen XMPP-Server nutzen.\nUm es dir leicht zu machen, haben wir die Möglichkeit geschaffen, ein Konto auf chat.sum7.eu anzulegen; ein Anbieter, der speziell für die Verwendung mit Conv6sations geeignet ist.
diff --git a/src/conversations/res/values-hu/strings.xml b/src/conversations/res/values-hu/strings.xml
index 284815ce5..da1df867f 100644
--- a/src/conversations/res/values-hu/strings.xml
+++ b/src/conversations/res/values-hu/strings.xml
@@ -1,9 +1,9 @@
Válassza ki az XMPP szolgáltatóját
- chat.sum7.eu használata
+ A chat.sum7.eu használata
Új fiók létrehozása
- Már rendelkezik XMPP fiókkal? Ez az eset állhat fenn, ha már egy másik XMPP klienst használ vagy ha már korábban használta a Conversations-t. Ha nem, akkor most létrehozhat egy új XMPP fiókot.\nTipp: Egyes e-mail szolgáltatók is biztosítanak XMPP fiókokat is.
- Az XMPP egy szolgáltató független, azonnali üzenetküldő hálózat. Ezt az ügyfél programot bármelyik XMPP szerverhez használhatja.\nDe a könnyebbség kedvéért létrehozhat egy fiókot a chat.sum7.eu szolgáltatón is; ami kifejezetten a Conversations programmal való használatra lett tervezve.
+ Már rendelkezik XMPP-fiókkal? Ez az eset állhat fenn, ha már egy másik XMPP-klienst használ, vagy ha már korábban használta a Conv6sations alkalmazást. Ha nem, akkor most létrehozhat egy új XMPP-fiókot.\nTipp: egyes e-mail szolgáltatók is biztosítanak XMPP-fiókokat.
+ Az XMPP egy szolgáltatófüggetlen, azonnali üzenetküldő hálózat. Ezt a kliensprogramot bármely XMPP-kiszolgálóhoz használhatja.\nAzonban a kényelem érdekében megkönnyítettük a chat.sum7.eu szolgáltatón való fióklétrehozást, ami kifejezetten a Conv6sations alkalmazással történő használatra lett tervezve.
diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java
index b7af9659b..5ef34e996 100644
--- a/src/main/java/eu/siacs/conversations/Config.java
+++ b/src/main/java/eu/siacs/conversations/Config.java
@@ -90,7 +90,7 @@ public final class Config {
public static final int REFRESH_UI_INTERVAL = 500;
public static final int MAX_DISPLAY_MESSAGE_CHARS = 4096;
- public static final int MAX_STORAGE_MESSAGE_CHARS = 1024 * 1024; //1MB
+ public static final int MAX_STORAGE_MESSAGE_CHARS = 2 * 1024 * 1024; //2MB
public static final long MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000;
@@ -117,7 +117,7 @@ public final class Config {
public static final boolean IGNORE_ID_REWRITE_IN_MUC = true;
public static final boolean MUC_LEAVE_BEFORE_JOIN = true;
- public static final boolean USE_LMC_VERSION_1_1 = false;
+ public static final boolean USE_LMC_VERSION_1_1 = true;
public static final long MAM_MAX_CATCHUP = MILLISECONDS_IN_DAY * 5;
public static final int MAM_MAX_MESSAGES = 750;
diff --git a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java
index 59ff20fe5..44336d4fc 100644
--- a/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java
+++ b/src/main/java/eu/siacs/conversations/crypto/axolotl/AxolotlService.java
@@ -843,7 +843,8 @@ public class AxolotlService implements OnAdvancedStreamFeaturesLoaded {
final String node = AxolotlService.PEP_BUNDLES + ":" + getOwnDeviceId();
final IqPacket deleteBundleNode = mXmppConnectionService.getIqGenerator().deleteNode(node);
mXmppConnectionService.sendIqPacket(account, deleteBundleNode, null);
- publishDeviceIdsAndRefineAccessModel(getOwnDeviceIds());
+ final Set ownDeviceIds = getOwnDeviceIds();
+ publishDeviceIdsAndRefineAccessModel(ownDeviceIds == null ? Collections.emptySet() : ownDeviceIds);
}
public List getCryptoTargets(Conversation conversation) {
diff --git a/src/main/java/eu/siacs/conversations/entities/Contact.java b/src/main/java/eu/siacs/conversations/entities/Contact.java
index 63bab5787..026804712 100644
--- a/src/main/java/eu/siacs/conversations/entities/Contact.java
+++ b/src/main/java/eu/siacs/conversations/entities/Contact.java
@@ -338,7 +338,9 @@ public class Contact implements ListItem, Blockable {
}
public boolean showInContactList() {
- return showInRoster() || getOption(Options.SYNCED_VIA_OTHER);
+ return showInRoster()
+ || getOption(Options.SYNCED_VIA_OTHER)
+ || (QuickConversationsService.isQuicksy() && systemAccount != null);
}
public void parseSubscriptionFromElement(Element item) {
diff --git a/src/main/java/eu/siacs/conversations/entities/Edit.java b/src/main/java/eu/siacs/conversations/entities/Edit.java
new file mode 100644
index 000000000..a3865bdd0
--- /dev/null
+++ b/src/main/java/eu/siacs/conversations/entities/Edit.java
@@ -0,0 +1,97 @@
+package eu.siacs.conversations.entities;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Edit {
+
+ private final String editedId;
+ private final String serverMsgId;
+
+ Edit(String editedId, String serverMsgId) {
+ this.editedId = editedId;
+ this.serverMsgId = serverMsgId;
+ }
+
+ static String toJson(List edits) throws JSONException {
+ JSONArray jsonArray = new JSONArray();
+ for (Edit edit : edits) {
+ jsonArray.put(edit.toJson());
+ }
+ return jsonArray.toString();
+ }
+
+ static boolean wasPreviouslyEditedRemoteMsgId(List edits, String remoteMsgId) {
+ for (Edit edit : edits) {
+ if (edit.editedId != null && edit.editedId.equals(remoteMsgId)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ static boolean wasPreviouslyEditedServerMsgId(List edits, String serverMsgId) {
+ for (Edit edit : edits) {
+ if (edit.serverMsgId != null && edit.serverMsgId.equals(serverMsgId)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static Edit fromJson(JSONObject jsonObject) throws JSONException {
+ String edited = jsonObject.has("edited_id") ? jsonObject.getString("edited_id") : null;
+ String serverMsgId = jsonObject.has("server_msg_id") ? jsonObject.getString("server_msg_id") : null;
+ return new Edit(edited, serverMsgId);
+ }
+
+ static List fromJson(String input) {
+ final ArrayList list = new ArrayList<>();
+ if (input == null) {
+ return list;
+ }
+ try {
+ final JSONArray jsonArray = new JSONArray(input);
+ for (int i = 0; i < jsonArray.length(); ++i) {
+ list.add(fromJson(jsonArray.getJSONObject(i)));
+ }
+ return list;
+ } catch (JSONException e) {
+ return list;
+ }
+ }
+
+ private JSONObject toJson() throws JSONException {
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("edited_id", editedId);
+ jsonObject.put("server_msg_id", serverMsgId);
+ return jsonObject;
+ }
+
+ String getEditedId() {
+ return editedId;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Edit edit = (Edit) o;
+
+ if (editedId != null ? !editedId.equals(edit.editedId) : edit.editedId != null)
+ return false;
+ return serverMsgId != null ? serverMsgId.equals(edit.serverMsgId) : edit.serverMsgId == null;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = editedId != null ? editedId.hashCode() : 0;
+ result = 31 * result + (serverMsgId != null ? serverMsgId.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/src/main/java/eu/siacs/conversations/entities/Edited.java b/src/main/java/eu/siacs/conversations/entities/Edited.java
deleted file mode 100644
index 3e5b3ec0c..000000000
--- a/src/main/java/eu/siacs/conversations/entities/Edited.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package eu.siacs.conversations.entities;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class Edited {
-
- private final String editedId;
- private final String serverMsgId;
-
- public Edited(String editedId, String serverMsgId) {
- this.editedId = editedId;
- this.serverMsgId = serverMsgId;
- }
-
- public static String toJson(List edits) throws JSONException {
- JSONArray jsonArray = new JSONArray();
- for (Edited edited : edits) {
- jsonArray.put(edited.toJson());
- }
- return jsonArray.toString();
- }
-
- public static boolean wasPreviouslyEditedRemoteMsgId(List editeds, String remoteMsgId) {
- for (Edited edited : editeds) {
- if (edited.editedId != null && edited.editedId.equals(remoteMsgId)) {
- return true;
- }
- }
- return false;
- }
-
- public static boolean wasPreviouslyEditedServerMsgId(List editeds, String serverMsgId) {
- for (Edited edited : editeds) {
- if (edited.serverMsgId != null && edited.serverMsgId.equals(serverMsgId)) {
- return true;
- }
- }
- return false;
- }
-
- public static Edited fromJson(JSONObject jsonObject) throws JSONException {
- String edited = jsonObject.getString("edited_id");
- String serverMsgId = jsonObject.getString("server_msg_id");
- return new Edited(edited, serverMsgId);
- }
-
- public static List fromJson(String input) {
- ArrayList list = new ArrayList<>();
- if (input == null) {
- return list;
- }
- try {
- JSONArray jsonArray = new JSONArray(input);
- for (int i = 0; i < jsonArray.length(); ++i) {
- list.add(fromJson(jsonArray.getJSONObject(i)));
- }
-
- } catch (JSONException e) {
- list = new ArrayList<>();
- list.add(new Edited(input, null));
- }
- return list;
- }
-
- public JSONObject toJson() throws JSONException {
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("edited_id", editedId);
- jsonObject.put("server_msg_id", serverMsgId);
- return jsonObject;
- }
-
- public String getEditedId() {
- return editedId;
- }
-}
diff --git a/src/main/java/eu/siacs/conversations/entities/Message.java b/src/main/java/eu/siacs/conversations/entities/Message.java
index 2035d8ac8..cc73222c5 100644
--- a/src/main/java/eu/siacs/conversations/entities/Message.java
+++ b/src/main/java/eu/siacs/conversations/entities/Message.java
@@ -97,7 +97,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
protected boolean deleted = false;
protected boolean carbon = false;
protected boolean oob = false;
- protected List edits = new ArrayList<>();
+ protected List edits = new ArrayList<>();
protected String relativeFilePath;
protected boolean read = true;
protected String remoteMsgId = null;
@@ -174,7 +174,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
this.serverMsgId = serverMsgId;
this.axolotlFingerprint = fingerprint;
this.read = read;
- this.edits = Edited.fromJson(edited);
+ this.edits = Edit.fromJson(edited);
this.oob = oob;
this.errorMessage = errorMessage;
this.readByMarkers = readByMarkers == null ? new HashSet<>() : readByMarkers;
@@ -263,7 +263,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
values.put(FINGERPRINT, axolotlFingerprint);
values.put(READ, read ? 1 : 0);
try {
- values.put(EDITED, Edited.toJson(edits));
+ values.put(EDITED, Edit.toJson(edits));
} catch (JSONException e) {
Log.e(Config.LOGTAG,"error persisting json for edits",e);
}
@@ -434,11 +434,14 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
}
public void putEdited(String edited, String serverMsgId) {
- this.edits.add(new Edited(edited, serverMsgId));
+ final Edit edit = new Edit(edited, serverMsgId);
+ if (this.edits.size() < 128 && !this.edits.contains(edit)) {
+ this.edits.add(edit);
+ }
}
- public boolean remoteMsgIdMatchInEdit(String id) {
- for(Edited edit : this.edits) {
+ boolean remoteMsgIdMatchInEdit(String id) {
+ for(Edit edit : this.edits) {
if (id.equals(edit.getEditedId())) {
return true;
}
@@ -507,8 +510,8 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
boolean similar(Message message) {
if (!isPrivateMessage() && this.serverMsgId != null && message.getServerMsgId() != null) {
- return this.serverMsgId.equals(message.getServerMsgId()) || Edited.wasPreviouslyEditedServerMsgId(edits, message.getServerMsgId());
- } else if (Edited.wasPreviouslyEditedServerMsgId(edits, message.getServerMsgId())) {
+ return this.serverMsgId.equals(message.getServerMsgId()) || Edit.wasPreviouslyEditedServerMsgId(edits, message.getServerMsgId());
+ } else if (Edit.wasPreviouslyEditedServerMsgId(edits, message.getServerMsgId())) {
return true;
} else if (this.body == null || this.counterpart == null) {
return false;
@@ -524,7 +527,7 @@ public class Message extends AbstractEntity implements AvatarService.Avatarable
final boolean matchingCounterpart = this.counterpart.equals(message.getCounterpart());
if (message.getRemoteMsgId() != null) {
final boolean hasUuid = CryptoHelper.UUID_PATTERN.matcher(message.getRemoteMsgId()).matches();
- if (hasUuid && matchingCounterpart && Edited.wasPreviouslyEditedRemoteMsgId(edits, message.getRemoteMsgId())) {
+ if (hasUuid && matchingCounterpart && Edit.wasPreviouslyEditedRemoteMsgId(edits, message.getRemoteMsgId())) {
return true;
}
return (message.getRemoteMsgId().equals(this.remoteMsgId) || message.getRemoteMsgId().equals(this.uuid))
diff --git a/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java b/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java
index 3e2761101..c4babe81c 100644
--- a/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java
+++ b/src/main/java/eu/siacs/conversations/entities/ServiceDiscoveryResult.java
@@ -158,7 +158,7 @@ public class ServiceDiscoveryResult {
}
public String getVer() {
- return new String(Base64.encode(this.ver, Base64.DEFAULT)).trim();
+ return Base64.encodeToString(this.ver, Base64.NO_WRAP);
}
public List getIdentities() {
diff --git a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java
index df15f39e2..a24a4ba0d 100644
--- a/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java
+++ b/src/main/java/eu/siacs/conversations/generator/AbstractGenerator.java
@@ -99,8 +99,8 @@ public abstract class AbstractGenerator {
for (String feature : getFeatures(account)) {
s.append(feature).append('<');
}
- byte[] sha1 = md.digest(s.toString().getBytes());
- return new String(Base64.encode(sha1, Base64.DEFAULT)).trim();
+ final byte[] sha1 = md.digest(s.toString().getBytes());
+ return Base64.encodeToString(sha1, Base64.NO_WRAP);
}
public static String getTimestamp(long time) {
diff --git a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java
index 1f9de7e6c..62670c408 100644
--- a/src/main/java/eu/siacs/conversations/generator/IqGenerator.java
+++ b/src/main/java/eu/siacs/conversations/generator/IqGenerator.java
@@ -160,10 +160,6 @@ public class IqGenerator extends AbstractGenerator {
return publish("urn:xmpp:avatar:data", item, options);
}
- public IqPacket publishElement(final String namespace, final Element element, final Bundle options) {
- return publishElement(namespace, element, "curent", options);
- }
-
public IqPacket publishElement(final String namespace, final Element element, String id, final Bundle options) {
final Element item = new Element("item");
item.setAttribute("id", id);
@@ -263,17 +259,17 @@ public class IqGenerator extends AbstractGenerator {
final Element signedPreKeyPublic = bundle.addChild("signedPreKeyPublic");
signedPreKeyPublic.setAttribute("signedPreKeyId", signedPreKeyRecord.getId());
ECPublicKey publicKey = signedPreKeyRecord.getKeyPair().getPublicKey();
- signedPreKeyPublic.setContent(Base64.encodeToString(publicKey.serialize(), Base64.DEFAULT));
+ signedPreKeyPublic.setContent(Base64.encodeToString(publicKey.serialize(), Base64.NO_WRAP));
final Element signedPreKeySignature = bundle.addChild("signedPreKeySignature");
- signedPreKeySignature.setContent(Base64.encodeToString(signedPreKeyRecord.getSignature(), Base64.DEFAULT));
+ signedPreKeySignature.setContent(Base64.encodeToString(signedPreKeyRecord.getSignature(), Base64.NO_WRAP));
final Element identityKeyElement = bundle.addChild("identityKey");
- identityKeyElement.setContent(Base64.encodeToString(identityKey.serialize(), Base64.DEFAULT));
+ identityKeyElement.setContent(Base64.encodeToString(identityKey.serialize(), Base64.NO_WRAP));
final Element prekeys = bundle.addChild("prekeys", AxolotlService.PEP_PREFIX);
for (PreKeyRecord preKeyRecord : preKeyRecords) {
final Element prekey = prekeys.addChild("preKeyPublic");
prekey.setAttribute("preKeyId", preKeyRecord.getId());
- prekey.setContent(Base64.encodeToString(preKeyRecord.getKeyPair().getPublicKey().serialize(), Base64.DEFAULT));
+ prekey.setContent(Base64.encodeToString(preKeyRecord.getKeyPair().getPublicKey().serialize(), Base64.NO_WRAP));
}
return publish(AxolotlService.PEP_BUNDLES + ":" + deviceId, item, publishOptions);
@@ -287,13 +283,13 @@ public class IqGenerator extends AbstractGenerator {
for (int i = 0; i < certificates.length; ++i) {
try {
Element certificate = chain.addChild("certificate");
- certificate.setContent(Base64.encodeToString(certificates[i].getEncoded(), Base64.DEFAULT));
+ certificate.setContent(Base64.encodeToString(certificates[i].getEncoded(), Base64.NO_WRAP));
certificate.setAttribute("index", i);
} catch (CertificateEncodingException e) {
Log.d(Config.LOGTAG, "could not encode certificate");
}
}
- verification.addChild("signature").setContent(Base64.encodeToString(signature, Base64.DEFAULT));
+ verification.addChild("signature").setContent(Base64.encodeToString(signature, Base64.NO_WRAP));
return publish(AxolotlService.PEP_VERIFICATION + ":" + deviceId, item);
}
diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java
index 14b1608c2..b07143cb9 100644
--- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java
+++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java
@@ -52,6 +52,7 @@ import eu.siacs.conversations.entities.ServiceDiscoveryResult;
import eu.siacs.conversations.services.QuickConversationsService;
import eu.siacs.conversations.services.ShortcutService;
import eu.siacs.conversations.utils.CryptoHelper;
+import eu.siacs.conversations.utils.CursorUtils;
import eu.siacs.conversations.utils.FtsUtils;
import eu.siacs.conversations.utils.MimeUtils;
import eu.siacs.conversations.xmpp.InvalidJid;
@@ -61,7 +62,7 @@ import rocks.xmpp.addr.Jid;
public class DatabaseBackend extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "history";
- private static final int DATABASE_VERSION = 45;
+ private static final int DATABASE_VERSION = 46;
private static DatabaseBackend instance = null;
private static String CREATE_CONTATCS_STATEMENT = "create table "
+ Contact.TABLENAME + "(" + Contact.ACCOUNT + " TEXT, "
@@ -180,7 +181,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
@Override
public void onConfigure(SQLiteDatabase db) {
db.execSQL("PRAGMA foreign_keys=ON");
- db.rawQuery("PRAGMA secure_delete=ON", null);
+ db.rawQuery("PRAGMA secure_delete=ON", null).close();
}
@Override
@@ -527,6 +528,15 @@ public class DatabaseBackend extends SQLiteOpenHelper {
db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN " + Message.BODY_LANGUAGE);
}
+ if (oldVersion < 46 && newVersion >= 46) {
+ final long start = SystemClock.elapsedRealtime();
+ db.rawQuery("PRAGMA secure_delete = FALSE", null).close();
+ db.execSQL("update "+Message.TABLENAME+" set "+Message.EDITED+"=NULL");
+ db.rawQuery("PRAGMA secure_delete=ON", null).close();
+ final long diff = SystemClock.elapsedRealtime() - start;
+ Log.d(Config.LOGTAG,"deleted old edit information in "+diff+"ms");
+ }
+
db.execSQL("DROP TABLE IF EXISTS resolver_results");
}
@@ -562,14 +572,14 @@ public class DatabaseBackend extends SQLiteOpenHelper {
String newJid;
try {
newJid = Jid.of(cursor.getString(cursor.getColumnIndex(Contact.JID))).toString();
- } catch (IllegalArgumentException ignored) {
+ } catch (final IllegalArgumentException e) {
Log.e(Config.LOGTAG, "Failed to migrate Contact JID "
+ cursor.getString(cursor.getColumnIndex(Contact.JID))
- + ": " + ignored + ". Skipping...");
+ + ": Skipping...", e);
continue;
}
- String updateArgs[] = {
+ final String[] updateArgs = {
newJid,
cursor.getString(cursor.getColumnIndex(Contact.ACCOUNT)),
cursor.getString(cursor.getColumnIndex(Contact.JID)),
@@ -709,12 +719,10 @@ public class DatabaseBackend extends SQLiteOpenHelper {
null, null, Message.TIME_SENT + " DESC",
String.valueOf(limit));
}
+ CursorUtils.upgradeCursorWindowSize(cursor);
while (cursor.moveToNext()) {
try {
- final Message message = Message.fromCursor(cursor, conversation);
- if (message != null) {
- list.add(0, message);
- }
+ list.add(0, Message.fromCursor(cursor, conversation));
} catch (Exception e) {
Log.e(Config.LOGTAG,"unable to restore message");
}
diff --git a/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java b/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java
index c393a9f22..bb028f96c 100644
--- a/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java
+++ b/src/main/java/eu/siacs/conversations/services/MemorizingTrustManager.java
@@ -179,7 +179,7 @@ public class MemorizingTrustManager {
File dir = app.getDir(KEYSTORE_DIR, Context.MODE_PRIVATE);
keyStoreFile = new File(dir + File.separator + KEYSTORE_FILE);
- poshCacheDir = app.getFilesDir().getAbsolutePath()+"/posh_cache/";
+ poshCacheDir = app.getCacheDir().getAbsolutePath()+"/posh_cache/";
appKeyStore = loadAppKeyStore();
}
@@ -427,14 +427,18 @@ public class MemorizingTrustManager {
} catch (CertificateException e) {
boolean trustSystemCAs = !PreferenceManager.getDefaultSharedPreferences(master).getBoolean("dont_trust_system_cas", false);
if (domain != null && isServer && trustSystemCAs && !isIp(domain)) {
- String hash = getBase64Hash(chain[0],"SHA-256");
- List fingerprints = getPoshFingerprints(domain);
- if (hash != null && fingerprints.contains(hash)) {
- Log.d("mtm","trusted cert fingerprint of "+domain+" via posh");
- return;
+ final String hash = getBase64Hash(chain[0],"SHA-256");
+ final List fingerprints = getPoshFingerprints(domain);
+ if (hash != null && fingerprints.size() > 0) {
+ if (fingerprints.contains(hash)) {
+ Log.d("mtm","trusted cert fingerprint of "+domain+" via posh");
+ return;
+ }
+ if (getPoshCacheFile(domain).delete()) {
+ Log.d("mtm", "deleted posh file for "+domain+" after not being able to verify");
+ }
}
}
- e.printStackTrace();
if (interactive) {
interactCert(chain, authType, e);
} else {
diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/KnownHostsAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/KnownHostsAdapter.java
index e0ade6491..61177d0dc 100644
--- a/src/main/java/eu/siacs/conversations/ui/adapter/KnownHostsAdapter.java
+++ b/src/main/java/eu/siacs/conversations/ui/adapter/KnownHostsAdapter.java
@@ -15,7 +15,7 @@ import eu.siacs.conversations.Config;
public class KnownHostsAdapter extends ArrayAdapter {
- private static Pattern E164_PATTERN = Pattern.compile("^\\+?[1-9]\\d{1,14}$");
+ private static Pattern E164_PATTERN = Pattern.compile("^\\+[1-9]\\d{1,14}$");
private ArrayList domains;
private Filter domainFilter = new Filter() {
diff --git a/src/main/java/eu/siacs/conversations/utils/CursorUtils.java b/src/main/java/eu/siacs/conversations/utils/CursorUtils.java
new file mode 100644
index 000000000..91befa229
--- /dev/null
+++ b/src/main/java/eu/siacs/conversations/utils/CursorUtils.java
@@ -0,0 +1,22 @@
+package eu.siacs.conversations.utils;
+
+import android.database.AbstractWindowedCursor;
+import android.database.Cursor;
+import android.database.CursorWindow;
+import android.database.sqlite.SQLiteCursor;
+
+public class CursorUtils {
+
+ public static void upgradeCursorWindowSize(final Cursor cursor) {
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
+ if (cursor instanceof AbstractWindowedCursor) {
+ final AbstractWindowedCursor windowedCursor = (AbstractWindowedCursor) cursor;
+ windowedCursor.setWindow(new CursorWindow("4M", 4 * 1024 * 1024));
+ }
+ if (cursor instanceof SQLiteCursor) {
+ ((SQLiteCursor) cursor).setFillWindowForwardOnly(true);
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
index 8851dc590..2596f9960 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnection.java
@@ -95,7 +95,11 @@ public class JingleConnection implements Transferable {
private OnIqPacketReceived responseListener = (account, packet) -> {
if (packet.getType() != IqPacket.TYPE.RESULT) {
- fail(IqParser.extractErrorMessage(packet));
+ if (mJingleStatus != JINGLE_STATUS_FAILED && mJingleStatus != JINGLE_STATUS_FINISHED) {
+ fail(IqParser.extractErrorMessage(packet));
+ } else {
+ Log.d(Config.LOGTAG,"ignoring late delivery of jingle packet to jingle session with status="+mJingleStatus+": "+packet.toString());
+ }
}
};
private byte[] expectedHash = new byte[0];
@@ -674,7 +678,7 @@ public class JingleConnection implements Transferable {
}
private void sendAcceptIbb() {
- this.transport = new JingleInbandTransport(this, this.transportId, this.ibbBlockSize);
+ this.transport = new JingleInBandTransport(this, this.transportId, this.ibbBlockSize);
final JinglePacket packet = bootstrapPacket("session-accept");
final Content content = new Content(contentCreator, contentName);
content.setFileOffer(fileOffer, ftVersion);
@@ -734,7 +738,7 @@ public class JingleConnection implements Transferable {
}
}
respondToIq(packet, true);
- this.transport = new JingleInbandTransport(this, this.transportId, this.ibbBlockSize);
+ this.transport = new JingleInBandTransport(this, this.transportId, this.ibbBlockSize);
this.transport.connect(onIbbTransportConnected);
} else {
respondToIq(packet, false);
@@ -943,7 +947,7 @@ public class JingleConnection implements Transferable {
}
}
this.transportId = packet.getJingleContent().getTransportId();
- this.transport = new JingleInbandTransport(this, this.transportId, this.ibbBlockSize);
+ this.transport = new JingleInBandTransport(this, this.transportId, this.ibbBlockSize);
final JinglePacket answer = bootstrapPacket("transport-accept");
@@ -994,7 +998,7 @@ public class JingleConnection implements Transferable {
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": unable to parse block size in transport-accept");
}
}
- this.transport = new JingleInbandTransport(this, this.transportId, this.ibbBlockSize);
+ this.transport = new JingleInBandTransport(this, this.transportId, this.ibbBlockSize);
if (sid == null || !sid.equals(this.transportId)) {
Log.w(Config.LOGTAG, String.format("%s: sid in transport-accept (%s) did not match our sid (%s) ", account.getJid().asBareJid(), sid, transportId));
@@ -1015,7 +1019,7 @@ public class JingleConnection implements Transferable {
this.mJingleStatus = JINGLE_STATUS_FINISHED;
this.mXmppConnectionService.markMessage(this.message, Message.STATUS_SEND_RECEIVED);
this.disconnectSocks5Connections();
- if (this.transport instanceof JingleInbandTransport) {
+ if (this.transport instanceof JingleInBandTransport) {
this.transport.disconnect();
}
this.message.setTransferable(null);
@@ -1033,7 +1037,7 @@ public class JingleConnection implements Transferable {
void abort(final String reason) {
this.disconnectSocks5Connections();
- if (this.transport instanceof JingleInbandTransport) {
+ if (this.transport instanceof JingleInBandTransport) {
this.transport.disconnect();
}
sendSessionTerminate(reason);
@@ -1057,7 +1061,7 @@ public class JingleConnection implements Transferable {
private void fail(String errorMessage) {
this.mJingleStatus = JINGLE_STATUS_FAILED;
this.disconnectSocks5Connections();
- if (this.transport instanceof JingleInbandTransport) {
+ if (this.transport instanceof JingleInBandTransport) {
this.transport.disconnect();
}
FileBackend.close(mFileInputStream);
diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java
index f354c25af..60d6ebfe2 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleConnectionManager.java
@@ -23,151 +23,151 @@ import eu.siacs.conversations.xmpp.stanzas.IqPacket;
import rocks.xmpp.addr.Jid;
public class JingleConnectionManager extends AbstractConnectionManager {
- private List connections = new CopyOnWriteArrayList<>();
+ private List connections = new CopyOnWriteArrayList<>();
- private HashMap primaryCandidates = new HashMap<>();
+ private HashMap primaryCandidates = new HashMap<>();
- @SuppressLint("TrulyRandom")
- private SecureRandom random = new SecureRandom();
+ @SuppressLint("TrulyRandom")
+ private SecureRandom random = new SecureRandom();
- public JingleConnectionManager(XmppConnectionService service) {
- super(service);
- }
+ public JingleConnectionManager(XmppConnectionService service) {
+ super(service);
+ }
- public void deliverPacket(Account account, JinglePacket packet) {
- if (packet.isAction("session-initiate")) {
- JingleConnection connection = new JingleConnection(this);
- connection.init(account, packet);
- connections.add(connection);
- } else {
- for (JingleConnection connection : connections) {
- if (connection.getAccount() == account
- && connection.getSessionId().equals(
- packet.getSessionId())
- && connection.getCounterPart().equals(packet.getFrom())) {
- connection.deliverPacket(packet);
- return;
- }
- }
- IqPacket response = packet.generateResponse(IqPacket.TYPE.ERROR);
- Element error = response.addChild("error");
- error.setAttribute("type", "cancel");
- error.addChild("item-not-found",
- "urn:ietf:params:xml:ns:xmpp-stanzas");
- error.addChild("unknown-session", "urn:xmpp:jingle:errors:1");
- account.getXmppConnection().sendIqPacket(response, null);
- }
- }
+ public void deliverPacket(Account account, JinglePacket packet) {
+ if (packet.isAction("session-initiate")) {
+ JingleConnection connection = new JingleConnection(this);
+ connection.init(account, packet);
+ connections.add(connection);
+ } else {
+ for (JingleConnection connection : connections) {
+ if (connection.getAccount() == account
+ && connection.getSessionId().equals(
+ packet.getSessionId())
+ && connection.getCounterPart().equals(packet.getFrom())) {
+ connection.deliverPacket(packet);
+ return;
+ }
+ }
+ Log.d(Config.LOGTAG, "unable to route jingle packet: " + packet);
+ IqPacket response = packet.generateResponse(IqPacket.TYPE.ERROR);
+ Element error = response.addChild("error");
+ error.setAttribute("type", "cancel");
+ error.addChild("item-not-found",
+ "urn:ietf:params:xml:ns:xmpp-stanzas");
+ error.addChild("unknown-session", "urn:xmpp:jingle:errors:1");
+ account.getXmppConnection().sendIqPacket(response, null);
+ }
+ }
- public JingleConnection createNewConnection(Message message) {
- Transferable old = message.getTransferable();
- if (old != null) {
- old.cancel();
- }
- JingleConnection connection = new JingleConnection(this);
- mXmppConnectionService.markMessage(message,Message.STATUS_WAITING);
- connection.init(message);
- this.connections.add(connection);
- return connection;
- }
+ public JingleConnection createNewConnection(Message message) {
+ Transferable old = message.getTransferable();
+ if (old != null) {
+ old.cancel();
+ }
+ JingleConnection connection = new JingleConnection(this);
+ mXmppConnectionService.markMessage(message, Message.STATUS_WAITING);
+ connection.init(message);
+ this.connections.add(connection);
+ return connection;
+ }
- public JingleConnection createNewConnection(final JinglePacket packet) {
- JingleConnection connection = new JingleConnection(this);
- this.connections.add(connection);
- return connection;
- }
+ public JingleConnection createNewConnection(final JinglePacket packet) {
+ JingleConnection connection = new JingleConnection(this);
+ this.connections.add(connection);
+ return connection;
+ }
- public void finishConnection(JingleConnection connection) {
- this.connections.remove(connection);
- }
+ public void finishConnection(JingleConnection connection) {
+ this.connections.remove(connection);
+ }
- public void getPrimaryCandidate(final Account account, final boolean initiator, final OnPrimaryCandidateFound listener) {
- if (Config.DISABLE_PROXY_LOOKUP) {
- listener.onPrimaryCandidateFound(false, null);
- return;
- }
- if (!this.primaryCandidates.containsKey(account.getJid().asBareJid())) {
- final Jid proxy = account.getXmppConnection().findDiscoItemByFeature(Namespace.BYTE_STREAMS);
- if (proxy != null) {
- IqPacket iq = new IqPacket(IqPacket.TYPE.GET);
- iq.setTo(proxy);
- iq.query(Namespace.BYTE_STREAMS);
- account.getXmppConnection().sendIqPacket(iq,new OnIqPacketReceived() {
+ public void getPrimaryCandidate(final Account account, final boolean initiator, final OnPrimaryCandidateFound listener) {
+ if (Config.DISABLE_PROXY_LOOKUP) {
+ listener.onPrimaryCandidateFound(false, null);
+ return;
+ }
+ if (!this.primaryCandidates.containsKey(account.getJid().asBareJid())) {
+ final Jid proxy = account.getXmppConnection().findDiscoItemByFeature(Namespace.BYTE_STREAMS);
+ if (proxy != null) {
+ IqPacket iq = new IqPacket(IqPacket.TYPE.GET);
+ iq.setTo(proxy);
+ iq.query(Namespace.BYTE_STREAMS);
+ account.getXmppConnection().sendIqPacket(iq, new OnIqPacketReceived() {
- @Override
- public void onIqPacketReceived(Account account, IqPacket packet) {
- Element streamhost = packet.query().findChild("streamhost", Namespace.BYTE_STREAMS);
- final String host = streamhost == null ? null : streamhost.getAttribute("host");
- final String port = streamhost == null ? null : streamhost.getAttribute("port");
- if (host != null && port != null) {
- try {
- JingleCandidate candidate = new JingleCandidate(nextRandomId(), true);
- candidate.setHost(host);
- candidate.setPort(Integer.parseInt(port));
- candidate.setType(JingleCandidate.TYPE_PROXY);
- candidate.setJid(proxy);
- candidate.setPriority(655360 + (initiator ? 30 : 0));
- primaryCandidates.put(account.getJid().asBareJid(),candidate);
- listener.onPrimaryCandidateFound(true,candidate);
- } catch (final NumberFormatException e) {
- listener.onPrimaryCandidateFound(false,null);
- return;
- }
- } else {
- listener.onPrimaryCandidateFound(false,null);
- }
- }
- });
- } else {
- listener.onPrimaryCandidateFound(false, null);
- }
+ @Override
+ public void onIqPacketReceived(Account account, IqPacket packet) {
+ Element streamhost = packet.query().findChild("streamhost", Namespace.BYTE_STREAMS);
+ final String host = streamhost == null ? null : streamhost.getAttribute("host");
+ final String port = streamhost == null ? null : streamhost.getAttribute("port");
+ if (host != null && port != null) {
+ try {
+ JingleCandidate candidate = new JingleCandidate(nextRandomId(), true);
+ candidate.setHost(host);
+ candidate.setPort(Integer.parseInt(port));
+ candidate.setType(JingleCandidate.TYPE_PROXY);
+ candidate.setJid(proxy);
+ candidate.setPriority(655360 + (initiator ? 30 : 0));
+ primaryCandidates.put(account.getJid().asBareJid(), candidate);
+ listener.onPrimaryCandidateFound(true, candidate);
+ } catch (final NumberFormatException e) {
+ listener.onPrimaryCandidateFound(false, null);
+ return;
+ }
+ } else {
+ listener.onPrimaryCandidateFound(false, null);
+ }
+ }
+ });
+ } else {
+ listener.onPrimaryCandidateFound(false, null);
+ }
- } else {
- listener.onPrimaryCandidateFound(true,
- this.primaryCandidates.get(account.getJid().asBareJid()));
- }
- }
+ } else {
+ listener.onPrimaryCandidateFound(true,
+ this.primaryCandidates.get(account.getJid().asBareJid()));
+ }
+ }
- public String nextRandomId() {
- return new BigInteger(50, random).toString(32);
- }
+ public String nextRandomId() {
+ return new BigInteger(50, random).toString(32);
+ }
- public void deliverIbbPacket(Account account, IqPacket packet) {
- String sid = null;
- Element payload = null;
- if (packet.hasChild("open", "http://jabber.org/protocol/ibb")) {
- payload = packet.findChild("open", "http://jabber.org/protocol/ibb");
- sid = payload.getAttribute("sid");
- } else if (packet.hasChild("data", "http://jabber.org/protocol/ibb")) {
- payload = packet.findChild("data", "http://jabber.org/protocol/ibb");
- sid = payload.getAttribute("sid");
- } else if (packet.hasChild("close","http://jabber.org/protocol/ibb")) {
- payload = packet.findChild("close", "http://jabber.org/protocol/ibb");
- sid = payload.getAttribute("sid");
- }
- if (sid != null) {
- for (JingleConnection connection : connections) {
- if (connection.getAccount() == account
- && connection.hasTransportId(sid)) {
- JingleTransport transport = connection.getTransport();
- if (transport instanceof JingleInbandTransport) {
- JingleInbandTransport inbandTransport = (JingleInbandTransport) transport;
- inbandTransport.deliverPayload(packet, payload);
- return;
- }
- }
- }
- Log.d(Config.LOGTAG,"couldn't deliver payload: " + payload.toString());
- } else {
- Log.d(Config.LOGTAG, "no sid found in incoming ibb packet");
- }
- }
+ public void deliverIbbPacket(Account account, IqPacket packet) {
+ String sid = null;
+ Element payload = null;
+ if (packet.hasChild("open", "http://jabber.org/protocol/ibb")) {
+ payload = packet.findChild("open", "http://jabber.org/protocol/ibb");
+ sid = payload.getAttribute("sid");
+ } else if (packet.hasChild("data", "http://jabber.org/protocol/ibb")) {
+ payload = packet.findChild("data", "http://jabber.org/protocol/ibb");
+ sid = payload.getAttribute("sid");
+ } else if (packet.hasChild("close", "http://jabber.org/protocol/ibb")) {
+ payload = packet.findChild("close", "http://jabber.org/protocol/ibb");
+ sid = payload.getAttribute("sid");
+ }
+ if (sid != null) {
+ for (JingleConnection connection : connections) {
+ if (connection.getAccount() == account
+ && connection.hasTransportId(sid)) {
+ JingleTransport transport = connection.getTransport();
+ if (transport instanceof JingleInBandTransport) {
+ JingleInBandTransport inbandTransport = (JingleInBandTransport) transport;
+ inbandTransport.deliverPayload(packet, payload);
+ return;
+ }
+ }
+ }
+ }
+ Log.d(Config.LOGTAG, "unable to deliver ibb packet: " + packet.toString());
+ account.getXmppConnection().sendIqPacket(packet.generateResponse(IqPacket.TYPE.ERROR), null);
+ }
- public void cancelInTransmission() {
- for (JingleConnection connection : this.connections) {
- if (connection.getJingleStatus() == JingleConnection.JINGLE_STATUS_TRANSMITTING) {
- connection.abort("connectivity-error");
- }
- }
- }
+ public void cancelInTransmission() {
+ for (JingleConnection connection : this.connections) {
+ if (connection.getJingleStatus() == JingleConnection.JINGLE_STATUS_TRANSMITTING) {
+ connection.abort("connectivity-error");
+ }
+ }
+ }
}
diff --git a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInBandTransport.java
similarity index 86%
rename from src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java
rename to src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInBandTransport.java
index b4e5039aa..4182da08c 100644
--- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java
+++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInBandTransport.java
@@ -15,26 +15,25 @@ import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.DownloadableFile;
import eu.siacs.conversations.persistance.FileBackend;
import eu.siacs.conversations.services.AbstractConnectionManager;
-import eu.siacs.conversations.utils.CryptoHelper;
import eu.siacs.conversations.xml.Element;
import eu.siacs.conversations.xmpp.OnIqPacketReceived;
import eu.siacs.conversations.xmpp.stanzas.IqPacket;
import rocks.xmpp.addr.Jid;
-public class JingleInbandTransport extends JingleTransport {
+public class JingleInBandTransport extends JingleTransport {
- private Account account;
- private Jid counterpart;
- private int blockSize;
+ private final Account account;
+ private final Jid counterpart;
+ private final int blockSize;
private int seq = 0;
- private String sessionId;
+ private final String sessionId;
private boolean established = false;
private boolean connected = true;
private DownloadableFile file;
- private JingleConnection connection;
+ private final JingleConnection connection;
private InputStream fileInputStream = null;
private InputStream innerInputStream = null;
@@ -61,15 +60,16 @@ public class JingleInbandTransport extends JingleTransport {
}
};
- public JingleInbandTransport(final JingleConnection connection, final String sid, final int blocksize) {
+ JingleInBandTransport(final JingleConnection connection, final String sid, final int blockSize) {
this.connection = connection;
this.account = connection.getAccount();
this.counterpart = connection.getCounterPart();
- this.blockSize = blocksize;
+ this.blockSize = blockSize;
this.sessionId = sid;
}
private void sendClose() {
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": sending ibb close");
IqPacket iq = new IqPacket(IqPacket.TYPE.SET);
iq.setTo(this.counterpart);
Element close = iq.addChild("close", "http://jabber.org/protocol/ibb");
@@ -178,9 +178,9 @@ public class JingleInbandTransport extends JingleTransport {
this.seq++;
connection.updateProgress((int) ((((double) (this.fileSize - this.remainingSize)) / this.fileSize) * 100));
if (this.remainingSize <= 0) {
- sendClose();
file.setSha1Sum(digest.digest());
this.onFileTransmissionStatusChanged.onFileTransmitted(file);
+ sendClose();
fileInputStream.close();
}
} catch (IOException e) {
@@ -200,11 +200,7 @@ public class JingleInbandTransport extends JingleTransport {
this.fileOutputStream.write(buffer);
this.digest.update(buffer);
if (this.remainingSize <= 0) {
- file.setSha1Sum(digest.digest());
- fileOutputStream.flush();
- fileOutputStream.close();
- Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": receive next block nothing remaining");
- this.onFileTransmissionStatusChanged.onFileTransmitted(file);
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received last block. waiting for close");
} else {
connection.updateProgress((int) ((((double) (this.fileSize - this.remainingSize)) / this.fileSize) * 100));
}
@@ -215,7 +211,20 @@ public class JingleInbandTransport extends JingleTransport {
}
}
- public void deliverPayload(IqPacket packet, Element payload) {
+ private void done() {
+ try {
+ file.setSha1Sum(digest.digest());
+ fileOutputStream.flush();
+ fileOutputStream.close();
+ this.onFileTransmissionStatusChanged.onFileTransmitted(file);
+ } catch (Exception e) {
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": " + e.getMessage());
+ FileBackend.close(fileOutputStream);
+ this.onFileTransmissionStatusChanged.onFileTransferAborted();
+ }
+ }
+
+ void deliverPayload(IqPacket packet, Element payload) {
if (payload.getName().equals("open")) {
if (!established) {
established = true;
@@ -235,10 +244,16 @@ public class JingleInbandTransport extends JingleTransport {
this.connected = false;
this.account.getXmppConnection().sendIqPacket(
packet.generateResponse(IqPacket.TYPE.RESULT), null);
- Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received ibb close");
+ if (this.remainingSize <= 0) {
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received ibb close. done");
+ done();
+ } else {
+ Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": received ibb close with " + this.remainingSize + " remaining");
+ FileBackend.close(fileOutputStream);
+ this.onFileTransmissionStatusChanged.onFileTransferAborted();
+ }
} else {
- Log.d(Config.LOGTAG, payload.toString());
- // TODO some sort of exception
+ this.account.getXmppConnection().sendIqPacket(packet.generateResponse(IqPacket.TYPE.ERROR), null);
}
}
}
diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml
index d2c46b24c..a576e443b 100644
--- a/src/main/res/values-gl/strings.xml
+++ b/src/main/res/values-gl/strings.xml
@@ -124,7 +124,7 @@
Nunca enviar informe de erros
Enviando volcados de pilas axudas ao desenvolvemento de Conversations
Confirmación de mensaxes
- Permitir aos seus contactos saber si recibiu e leu as súas mensaxes
+ Permitir aos seus contactos saber si recibeu e leu as súas mensaxes
Interface
OpenKeychain informou de un fallo.
Chave incorrecta para cifrar.
@@ -557,7 +557,9 @@
Decorado
Escolla a gama de cores
Decorado claro
- Decorado oscuro
+ Decorado escuro
+ Fondo verde
+ Utilizar fondo verde para mensaxes recibidas
Non se puido conectar con OpenKeychain
Este dispositivo xa non está en uso
Computadora
@@ -689,9 +691,9 @@
¿Está segura de que quere desactivar o cifrado OMEMO para esta conversación? Isto permitirá que o administrador do seu servidor lea as súas mensaxes, pero pode ser a única forma de comunicarse con persoas que usan clientes obsoletos.
Desactivar agora
Borrador:
- Encriptación OMEMO
+ Cifrado OMEMO
OMEMO sempre se utilizará para charlas individuais e privadas en grupo.
- OMEMO utilizarase por defecto para as novas conversacións.
+ OMEMO utilizarase por defecto para as novas conversas.
OMEMO terá que ser activado explícitamente para novas conversacións.
Crear acceso directo
Tamaño da fonte
diff --git a/src/main/res/values-hu/strings.xml b/src/main/res/values-hu/strings.xml
index c59821692..1c06e8aa1 100644
--- a/src/main/res/values-hu/strings.xml
+++ b/src/main/res/values-hu/strings.xml
@@ -5,194 +5,196 @@
Fiókok kezelése
Fiók kezelése
Beszélgetés bezárása
- Kapcsolat részletek
- Konferencia részletei
+ Partner részletei
+ Csoportos csevegés részletei
Csatorna részletei
Biztonságos beszélgetés
Fiók hozzáadása
Név szerkesztése
- Címjegyzékhez hozzáad
- Névsorból törlés
- Ismerős tiltása
- Tiltás feloldása
+ Hozzáadás a címjegyzékhez
+ Törlés a névsorból
+ Partner tiltása
+ Partner tiltásának feloldása
Tartomány tiltása
- Tartomány feloldása
- Résztvevő letiltása
- Résztvevő feloldása
+ Tartomány tiltásának feloldása
+ Résztvevő tiltása
+ Résztvevő tiltásának feloldása
Fiókok kezelése
Beállítások
- Megosztás Conversation-nel
- Beszélgessünk!
- Válassz névjegyet
- Válassz névjegyeket
+ Megosztás a Conversationnel
+ Beszélgetés indítása
+ Partner kiválasztása
+ Partnerek kiválasztása
Megosztás fiókon keresztül
Tiltólista
- Éppen most
+ éppen most
1 perce
%d perce
- küldés...
- Üzenet dekódolása. Kérem várjon...
- OpenPGP kódolású üzenet
- A becenév már foglalt
+ %d olvasatlan beszélgetés
+ küldés…
+ Üzenet visszafejtése. Kérem várjon…
+ OpenPGP-vel titkosított üzenet
+ A becenév már használatban van
Érvénytelen becenév
Adminisztrátor
Tulajdonos
Moderátor
Résztvevő
Látogató
- Szeretnéd eltávolítani %s nevű ismerősöd a listádról? A beszélgetésetek nem fog törlődni.
- Szeretnéd tiltani %s nevű ismerősödet, hogy ne tudjon neked küldeni üzenetet?
- Szeretnéd %s nevű ismerősöd tiltását feloldani és megengedni az üzenetváltást vele?
- %s minden névjegyét tiltja?
- %s minden tiltását feloldja
- Ismerős letiltva
- Letiltva
- Szeretnéd eltávolítani %s nevű névjegyet a könyvjelzőkből? A beszélgetésetek nem fog törlődni.
- Új fiók létrehozása a szerveren
- Jelszó megváltoztatása a szerveren
- Megosztás...
- Beszélgetés kezdeményezése
- Ismerős meghívása
- Meghív
- Névjegyek
- Kapcsolat
+ El szeretné távolítani %s partnert a névsorból? A partnerhez rendelt beszélgetések nem lesznek eltávolítva
+ Szeretné tiltani %s partnert, hogy ne tudjon üzeneteket küldeni?
+ Szeretné feloldani %s partner tiltását és lehetővé tenni számára az üzenetek küldését?
+ %s összes partnerét tiltja?
+ %s összes partnerének tiltását feloldja?
+ Partner tiltva
+ Tiltva
+ El szeretné távolítani %s partnert a könyvjelzőkből? A könyvjelzőhöz rendelt beszélgetések nem lesznek eltávolítva.
+ Új fiók regisztrálása a kiszolgálón
+ Jelszó megváltoztatása a kiszolgálón
+ Megosztás ezzel…
+ Beszélgetés indítása
+ Partner meghívása
+ Meghívás
+ Partnerek
+ Partner
Mégse
- Beállít
- Hozzáad
- Kész
- Töröl
- Tilt
- Tiltás vége
+ Beállítás
+ Hozzáadás
+ Szerkesztés
+ Törlés
+ Tiltás
+ Tiltás feloldása
Mentés
Rendben
A Conversations összeomlott
- Veremkövetések beküldésével segítesz a Conversations folyamatos fejlesztésében\nFigyelem: Ez a XMPP fiókodat fogja használni az adatküldéshez.
- Elküldi most
- Ne kérdezze többször
- Nem sikerül a fiókhoz csatlakozni
- Nem sikerül fiókokhoz csatlakozni
- Érintsd meg itt fiókjaid beállításához
+ A veremkiíratások elküldésével segíti a Conversations alkalmazás folyamatos fejlesztését\nFigyelmeztetés: Ez a XMPP-fiókját fogja használni a veremkövetés elküldéséhez a fejlesztő számára.
+ Küldés most
+ Sose kérdezzen újra
+ Nem sikerült kapcsolódni a fiókhoz
+ Nem sikerült kapcsolódni több fiókokhoz
+ Érintse meg itt a fiókjai kezeléséhez
Fájl csatolása
- Az ismerős nincs a névsorodban. Hozzáadod?
- Ismerős hozzáadása
- Kézbesítés meghiúsult
- A kép átvitelének előkészítése
+ A partner nincs a névsorán. Szeretné hozzáadni?
+ Partner hozzáadása
+ kézbesítés sikertelen
+ Kép előkészítése az átvitelhez
Képek előkészítése az átvitelhez
- Fájlok megosztása. Kérlek várj...
+ Fájlok megosztása. Kérem várjon…
Előzmények törlése
- Beszélgetés előzményének törlése
- Biztosan szeretnéd az üzeneteket törölni ebben a beszélgetésben?\n\nFigyelem: Ez nem törli más eszközökön vagy szervereken tárolt üzeneteidet.
+ Beszélgetés előzményeinek törlése
+ Biztosan törölni szeretné az összes üzenetet a beszélgetésen belül?\n\nFigyelmeztetés: Ez nem fogja törölni azoknak az üzeneteknek a másolatait, amelyek más eszközökön vagy kiszolgálókon vannak tárolva.
Fájl törlése
- Biztosan szeretnéd ezt a fájlt törölni?\n\nFigyelem: Ez nem törli más eszközökön vagy szervereken tárolt fájljaidat.
- A beszélgetést is zárja be
+ Biztosan törölni szeretné ezt a fájlt?\n\nFigyelmeztetés: Ez nem fogja törölni a fájlnak azon másolatait, amelyek más eszközökön vagy kiszolgálókon vannak tárolva.
+ A beszélgetés bezárása azután
Eszköz kiválasztása
- Titkosítatlan üzenetküldés
+ Titkosítatlan üzenet küldése
Üzenet küldése
- Üzenet elküldése %s számára
- OMEMO titkosított üzenet küldése
- OMEMO v\\titkosított üzenet küldése
- OpenPGP titkosított üzenet küldése
- Beceneved megváltozott
- Küldés titkosítás nélkül
- Dekódolás nem sikerült. Lehet, hogy nincs megfelelő személyes kulcsod?
+ Üzenet küldése %s számára
+ OMEMO titkosítású üzenet küldése
+ v\\OMEMO titkosítású üzenet küldése
+ OpenPGP titkosítású üzenet küldése
+ A beceneve megváltozott
+ Küldés titkosítatlanul
+ A visszafejtés sikertelen. Talán nem rendelkezik a megfelelő személyes kulccsal.
OpenKeychain
- A Conversations egy harmadik fél által biztosított alkalmazást használ: OpenKeychain arra, hogy titkosítsa az üzeneteket és kezelje a publikus kulcsokat.n\nAz OpenKeychain GPLv3 engedélyes és letölthető az F-Droid-ról és a Google Play-ről.\n\n(Kérjük, indítsa újra a Conversations programot ezután.)
- Újrakezd
- Telepít
- Kérlek telepítsd az OpenKeychain-t
- felajánlás alatt...
- várakozik...
- Nem talált OpenPGP kulcsot
- A Conversations nem tudja titkosítani az üzeneteit, mert a kapcsolata nem jelenti be a nyilvános kulcsát.\n\nKérje meg a kapcsolatát, hogy állítsa be az OpenPGP-t.
- Nem talált OpenPGP kulcsokat
- A Conversations nem képes titkosítani az üzeneteket, mert az ismerősei nem jelentik be a nyilvános kulcsaikat.\n\n Kérje meg az ismerőseit, hogy állítsák be az OpenPGP-t.
+ A Conversations egy OpenKeychain nevű, harmadik fél által fejlesztett alkalmazást használ az üzenetek titkosításához és visszafejtéséhez, valamint a személyes kulcsai kezeléséhez.n\nAz OpenKeychain GPLv3 szerint licencelt, és elérhető az F-Droid és a Google Play szoftveráruházakban.\n\n(Ezután indítsa újra a Conversations alkalmazást.)
+ Újraindítás
+ Telepítés
+ Telepítse az OpenKeychain alkalmazás
+ felajánlás…
+ várakozás…
+ Nem található OpenPGP kulcs
+ A Conversations nem tudja titkosítani az üzeneteit, mert a partnere nem közölte a nyilvános kulcsát.\n\nKérje meg a partnerét, hogy állítsa be az OpenPGP-t.
+ Nem találhatók OpenPGP kulcsok
+ A Conversations nem tudja titkosítani az üzeneteit, mert a partnerei nem közölték a nyilvános kulcsukat.\n\nKérje meg a partnereit, hogy állítsák be az OpenPGP-t.
Általános
Fájlok fogadása
- Automatikusan fogadjon ennél kisebb fájlokat...
- Csatolmányok
+ Fájlok automatikus fogadása, amelyek kisebbek mint…
+ Mellékletek
Értesítés
Rezgés
- Rezegjen új üzenet érkezésekor
+ Rezegés új üzenet érkezésekor
LED értesítés
- Villogjon a LED új üzenet érkezésekor
+ Értesítési fény villogása új üzenet érkezésekor
Csengőhang
- Hangeffekt lejátszása új üzenet érkezésekor
+ Hang lejátszása új üzenet érkezésekor
Türelmi idő
- Fejlett funkciók
- Ne küldjön programhiba jelentéseket
- A hibák jelentésével segíted a Conversations program fejlesztését
+ Az időtartam, amíg az értesítések némítva vannak az egyéb eszközei egyikén történt tevékenység észlelése után.
+ Speciális
+ Sose küldjön összeomlási jelentéseket
+ A veremkiíratások elküldésével segíti a Conversations alkalmazás folyamatos fejlesztését
Üzenetek megerősítése
- Jelzed az ismerőseidnek, hogy megkaptad és elolvastad az üzeneteiket
- Kezelőfelület
- Az OpenKeychain hibát jelzett.
+ Tudassa a partnereivel, hogy megkapta és elolvasta az üzeneteiket
+ Felhasználói felület
+ Az OpenKeychain hibát jelentett.
Rossz kulcs a titkosításhoz.
- Elfogad
+ Elfogadás
Hiba történt
Hiba
- Fiókod
- Állapot frissítések küldése
- Állapot frissítések fogadása
- Állapot frissítések kérése
- Kép kiválasztása
- Kép készítése
- Megadja a feliratkozás kérelmekre az engedélyt
- A kiválasztott fájl nem képfájl
- Hiba történt a kép konvertálása közben
- Nem található fájl
- Általános íráshiba. Talán elfogyott a hely?
- A kép kiválasztásához használt alkalmazás nem adott meg elegendő engedélyt a fájl olvasásához.\n\nEgy másik fájlkezelővel válassza ki a képet
- Nem ismert
+ Az Ön fiókja
+ Jelenlétfrissítések küldése
+ Jelenlétfrissítések fogadása
+ Jelenlétfrissítések kérése
+ Fénykép kiválasztása
+ Fénykép készítése
+ Feliratkozási kérelem előzetes engedélyezése
+ A kiválasztott fájl nem kép
+ Hiba történt a képfájl átalakításakor
+ A fájl nem található
+ Általános bemeneti/kimeneti hiba. Talán elfogyott a tárolóhely?
+ A kép kiválasztásához használt alkalmazás nem biztosított számunkra elegendő jogosultságot a fájl olvasásához.\n\nHasználjon másik fájlkezelőt a kép kiválasztásához
+ Ismeretlen
Átmenetileg letiltva
- Kapcsolódva
+ Elérhető
Kapcsolódás\u2026
- Szétkapcsolva
+ Kilépett
Nem engedélyezett
- Szerver nem található
+ A kiszolgáló nem található
Nincs kapcsolat
- Regisztráció nem sikerült
- Ez a felhasználónév már foglalt
- Sikeres regisztráció
- A szerver nem támogatja a regisztrációt
- A TLS-tárgyalás sikertelen
+ Regisztráció sikertelen
+ A felhasználónév már használatban van
+ Regisztráció befejezve
+ A kiszolgáló nem támogatja a regisztrációt
+ A TLS-egyeztetés sikertelen
Irányelv megsértése
- Nem kompatibilis szerver
- Adatfolyam hiba
+ Nem kompatibilis kiszolgáló
+ Adatfolyamhiba
Adatfolyam megnyitási hiba
Titkosítatlan
OTR
OpenPGP
OMEMO
Fiók törlése
- Letiltja átmenetileg
- Önarckép megadása
- OpenPGP publikus kulcs megadása
+ Letiltás átmenetileg
+ Profilkép közzététele
+ OpenPGP nyilvános kulcs közzététele
OpenPGP nyilvános kulcs eltávolítása
- Biztosan eltávolítja az OpenPGP nyilvános kulcsát a jelenléti bejelentésből?\nA kapcsolatai többé nem tudnak OpenPGP titkosított üzeneteket küldeni Önnek.
- OpenPGP publikus kulcs meg lett adva.
- Fiók bekapcsolása
- Biztos vagy ebben?
- Ha törli fiókját, az egész beszélgetési előzménye elvész
- Hang felvétele
- XMPP cím
- XMPP cím blokkolása
- felhasznalo@peldaoldal.com
+ Biztosan el szeretné távolítani az OpenPGP nyilvános kulcsát a jelenléti közleményéből?\nA partnerei többé nem lesznek képesek OpenPGP titkosítású üzeneteket küldeni Önnek.
+ Az OpenPGP nyilvános kulcs közzé lett téve.
+ Fiók engedélyezése
+ Biztos benne?
+ Ha törli fiókját, akkor a teljes beszélgetési előzménye el fog veszi
+ Hang rögzítése
+ XMPP-cím
+ XMPP-cím tiltása
+ felhasznalonev@pelda.hu
Jelszó
- Ez nem egy érvényes XMPP cím
- Nincs elég memória. Képfájl túl nagy
- Szeretnéd %s nevű személyt hozzáadni a névjegyzékhez?
- Szerver részletek
+ Ez nem érvényes XMPP-cím
+ Nincs elég memória. A kép túl nagy
+ Hozzá szeretné adni %s partnert a címjegyzékéhez?
+ Kiszolgáló-információk
XEP-0313: MAM
- XEP-0280: Message Carbons
- XEP-0352: Client State Indication
- XEP-0191: Blocking Command
- XEP-0237: Roster Versioning
- XEP-0198: Stream Management
- XEP-0163: PEP (Avatars / OMEMO)
- XEP-0363: HTTP File Upload
- XEP-0357: Push
- támogatott
- nem támogatott
- Hiányzó nyilvános kulcs megadások
+ XEP-0280: Üzenetindigók
+ XEP-0352: Kliensállapot-jelzés
+ XEP-0191: Tiltóparancs
+ XEP-0237: Névsorverziózás
+ XEP-0198: Adatfolyam-kezelés
+ XEP-0163: PEP (profilképek / OMEMO)
+ XEP-0363: HTTP fájlfeltöltés
+ XEP-0357: Leküldés
+ elérhető
+ nem érhető el
+ Hiányzó nyilvános kulcs bejelentései
éppen most volt aktív
1 perce volt aktív
%d perce volt aktív
@@ -200,412 +202,417 @@
%d órája volt aktív
1 napja volt aktív
%d napja volt aktív
- Titkosított üzenet. Kérlek telepítsd az OpenKeychain-t a dekódoláshoz.
- OpenPGP kódolású üzeneteket találtunk
- OpenPGP Kulcs Azonosító
+ Titkosított üzenet. Telepítse az OpenKeychain alkalmazást a visszafejtéshez.
+ OpenPGP titkosítású üzenetek találhatók
+ OpenPGP kulcsazonosító
OMEMO ujjlenyomat
v\\OMEMO ujjlenyomat
Az üzenet OMEMO ujjlenyomata
- v\\OMEMO ujjlenyomata az üzenetnek
+ Az üzenet v\\OMEMO ujjlenyomata
Más eszközök
- OMEMO ujjlenyomatokban megbízik
- Kulcsok beszerzése...
+ Megbízás az OMEMO ujjlenyomatokban
+ Kulcsok lekérése…
Kész
- Dekódol
+ Visszafejtés
Könyvjelzők
Keresés
- Névjegy megadása
- Névjegy törlése
- Ismerős névjegyének részletei
- Ismerős tiltása
- Tiltás feloldása
- Létrehoz
- Kiválaszt
- A névjegy már létezik
- Csatlakozik
- channel@conference.example.com/nick
- channel@conference.example.com
- Könyvjelzőkhöz hozzáadás
+ Partner megadása
+ Partner törlése
+ Partner részleteinek megtekintése
+ Partner tiltása
+ Partner tiltásának feloldása
+ Létrehozás
+ Kiválasztás
+ A partner már létezik
+ Csatlakozás
+ csatorna@konferencia.pelda.hu/becenev
+ csatorna@konferencia.pelda.hu
+ Mentés könyvjelzőként
Könyvjelző törlése
- Konferencia megszüntetése
- Csatorna megszűntetése
- Biztos, hogy meg akarod szüntetni ezt a konferenciát?\n\nFigyelem: A konferencia véglegesen törlődik a szerverről.
- Biztos, hogy meg akarod szüntetni ezt a nyilvános csatornát?\n\nFigyelem: A csatorna véglegesen törlődik a szerverről.
- Nem lehetett megszüntetni a konferenciát
- Nem lehet megszüntetni a csatornát
+ Csoportos csevegés megszüntetése
+ Csatorna megszüntetése
+ Biztosan meg szeretné szüntetni ezt a csoportos csevegést?\n\nFigyelmeztetés: A csoportos csevegés teljesen el lesz távolítva a kiszolgálóról.
+ Biztosan meg szeretné szüntetni ezt a nyilvános csatornát?\n\nFigyelmeztetés: A csatorna teljesen el lesz távolítva a kiszolgálóról.
+ Nem sikerült megszüntetni a csoportos csevegést
+ Nem sikerült megszüntetni a csatornát
A könyvjelző már létezik
- Konferencia témájának beállítása
+ Csoportos csevegés tárgyának szerkesztése
Téma
- Konferenciához csatlakozás...
- Távozás
- Ez a felhasználó hozzáadott téged a névjegyeihez
+ Csatlakozás csoportos csevegéshez…
+ Kilépés
+ A partner hozzáadta Önt a partnerlistához
Én is hozzáadom
- %s eddig olvasta
- %seddig olvasta
- %1$s+ %2$dis eddig olvasta
- Mindenki elolvasta eddig
- Közzétesz
- Érintsd meg a piktogramot kép kiválasztásához
- Közzétesz...
- A szerver elutasította a kérésedet
- Valami hiba történt a képed átalakítása közben
- Nem tudja menteni a képedet a tárhelyre
- (Vagy nyomd hosszan az alapbeállításért)
- A szerver nem támogatja a profilkép közzétételét
- elsuttogott
+ %s elolvasta eddig a pontig
+ %selolvasta eddig a pontig
+ %1$s+ %2$dpartner elolvasta eddig a pontig
+ Mindenki elolvasta eddig a pontig
+ Közzététel
+ Érintse meg a profilképet egy fénykép kiválasztásához a galériából
+ Közzététel…
+ A kiszolgáló elutasította a közzétételt
+ Valami hiba történt a fénykép átalakítása közben
+ Nem sikerült elmenteni a profilképet a lemezre
+ (Vagy nyomja hosszan az alapértelmezett visszaállításához)
+ A kiszolgáló nem támogatja a profilképek közzétételét
+ suttogva
%s részére
- Privát üzenet küldése %s részére
+ Személyes üzenet küldése %s részére
Kapcsolódás
- A fiók már létezik
+ Ez a fiók már létezik
Következő
- Munkafolyamat létrehozva:
+ Jelenlegi munkamenet kiépítve
Kihagyás
Értesítések letiltása
- Engedélyez
- A konferenciához jelszó szükséges
- Írd be a jelszót
- Kérlek, kérd először az állapot frissítéseket az ismerősödtől.\n\nEz segíteni fog abban, hogy kiderítsük, milyen klienst használ.
- Lekérés folyamatban
- Mellőz
- Figyelem:Az elküldés ismeretlen problémákat okozhat, mert nincs beállítva a kölcsönös jelenlét frissítés.\n\nNézze át a kapcsolat részleteket és ellenőrizze az állapot frissítéseket.
+ Engedélyezés
+ A csoportos csevegés jelszót igényel
+ Adja meg a jelszót
+ Először kérjen jelenlétfrissítéseket a partnereitől.\n\nEz annak felismeréséhez lesz használva, hogy milyen klienseket használ a partnere.
+ Kérés most
+ Mellőzés
+ Figyelmeztetés: Ennek elküldése kölcsönös jelenlétfrissítések nélkül váratlan problémákat okozhat.\n\nMenjen a partner részleteihez, és ellenőrizze a jelenlét-feliratkozásokat.
Biztonság
- Üzenetek kijavításának engedélyezése
- Visszamenőlegesen is megengedi az üzenetek szerkesztését
- Haladó beállítások
- Kérlek, légy óvatos!
- A programról %s
- Csöndes órák
- Kezdése
- Befejezése
- Csöndes órák engedélyezése
- Értesítések el lesznek némítva a csöndes órákban
+ Üzenetjavítás engedélyezése
+ Engedélyezés a partnereknek, hogy visszamenőlegesen szerkesszék az üzeneteiket
+ Szakértő beállítások
+ Legyen óvatos ezekkel
+ A %s névjegye
+ Csendes órák
+ Kezdési idő
+ Befejezési idő
+ Csendes órák engedélyezése
+ Az értesítések el lesznek némítva a csendes órák alatt
Egyéb
- Szinkronizáljon könyvjelzőkkel
- Csatlakozzon és hagyja ott a csoportos beszélgetéseket a könyvjelzők automatikus csatlakozásának megfelelően.
- Az OMEMO ujjlenyomat vágólapra lett másolva!
- Ki vagy tiltva ebből a konferenciából
- Ez a konferencia csak tagoknak szól
- Erőforráskorlát
- Ki lettél rúgva ebből a konferenciából
- A konferencia le lett állítva
- Ön már nincs benne ebben a konferenciában
+ Szinkronizálás a könyvjelzőkkel
+ Csatlakozás és kilépés a csoportos csevegésekből a könyvjelzőkben lévő automatikus csatlakozási jelző szerint.
+ Az OMEMO ujjlenyomat a vágólapra lett másolva!
+ Ki van tiltva ebből a csoportos csevegésből
+ Ez a csoportos csevegés csak tagoknak szól
+ Erőforráskényszer
+ Ki lett rúgva ebből a csoportos csevegésből
+ A csoportos csevegés le lett állítva
+ Többé már nincs ebben a csoportos csevegésben
használt fiók: %s
- Ellenőrzés alatt %s a HTTP gazdán
- Nem kapcsolódik. Próbálja újra később
- Ellenőrizze a %s méretét
- Ellenőrizze a %1$s méretét a %2$s oldalon
- Műveletek üzenetekkel
- Idéz
+ %s ellenőrzése a HTTP gépen
+ Nincs kapcsolódva. Próbálja meg később újra
+ %s méretének ellenőrzése
+ %1$s méretének ellenőrzése itt: %2$s
+ Üzenet beállításai
+ Idézet
Beillesztés idézetként
Eredeti URL másolása
- Elküldi újra
+ Küldés újra
Fájl URL-je
- URL vágólapra másolása
- XMPP cím a vágólapra másolva
- A hibaüzenetet a vágólapra másoltuk
+ Az URL a vágólapra másolva
+ Az XMPP-cím a vágólapra másolva
+ A hibaüzenet a vágólapra másolva
webcím
- 2D vonalkód olvasás
- 2D vonalkód mutatása
- Tiltólista mutatása
- Fiók részletek
- Jóváhagy
- megpróbálja újra
- Előtérben futtassa a programot
- Megakadályozza az operációs rendszert abban, hogy megszakítsa a kapcsolatot a szerverrel a háttérben
- Biztonsági mentés
- A biztonsági mentési fájlok tárolva lesznek, itt: %s
- Biztonsági fájlok létrehozása
- A biztonsági mentés létrejött
- A biztonsági mentési fájlok el lettek tárolva itt: %s
- A biztonsági mentés visszaállítása
- A biztonsági mentés visszaállt
+ 2D vonalkód beolvasása
+ 2D vonalkód megjelenítése
+ Tiltólista megjelenítése
+ Fiók részletei
+ Megerősítés
+ Próbálja újra
+ Szolgáltatás előtérben tartása
+ Megakadályozza az operációs rendszert abban, hogy kilője a kapcsolatát
+ Biztonsági mentés léterhozása
+ A biztonsági mentés fájljai itt lesznek tárolva: %s
+ Biztonsági mentés fájljainak létrehozása
+ A biztonsági mentés létrehozva
+ A biztonsági mentés fájljai itt lettek eltárolva: %s
+ Biztonsági mentés visszaállítása
+ A biztonsági mentés vissza lett állítva
Ne felejtse el engedélyezni a fiókot.
Fájl kiválasztása
- %1$s fogadás alatt (%2$d%% kész)
+ %1$s fogadása (%2$d%% kész)
%s letöltése
%s törlése
fájl
%s megnyitása
- Küldés alatt (%1$d%% kész)
- Fájl előkészítése az átvitelhez.
- %s letöltésre ajánlották
+ küldés (%1$d%% kész)
+ Fájl előkészítése az átvitelhez
+ %s felajánlva letöltésre
Átvitel megszakítása
- fájlátvitel meghiúsult
- A fájl törlésre került
- Nincs alkalmazás a fájl megnyitására
- Nincs alkalmazás a link megnyitására
- A névjegy megtekintéséhez nincs alkalmazás
+ a fájlátvitel sikertelen
+ a fájlátvitel megszakítva
+ A fájl törölve lett
+ Nem található alkalmazás a fájl megnyitásához
+ Nem található alkalmazás a hivatkozás megnyitásához
+ Nem található alkalmazás a partner megtekintéséhez
Dinamikus címkék
- Információs címkék megjelenítése a partnerek alatt
- Értesítések bekapcsolása
- Nem található konferencia szerver
- Konferencia létrehozás meghiúsult!
- Fiók profilkép
- Másolja az OMEMO ujjlenyomatát a vágólapra
- OMEMO kulcs regenerálása
- Eszközök tisztítása
- Biztosan törölni kívánja az összes többi eszközt az OMEMO bejelentéséből? A következő alkalommal, amikor a készülékei csatlakoznak, újra bejelentik magukat, de előfordulhat, hogy nem kapják meg az időközben elküldött üzeneteket.
- Ehhez a kapcsolathoz nem áll rendelkezésre használható kulcs.\n A kiszolgáló új kulcsainak letöltése sikertelen volt. Talán van valami baj a kapcsolattartó szerverével.
- Ehhez a kapcsolathoz nem áll rendelkezésre használható kulcs.\nGyőződjön meg róla, hogy kölcsönösen felíratkoztak egymás állapotfrissítéseire.
- Valami nem jó alakult
- Előzmények lekérése a szerverről
- Nincs több előzmény a szerveren
- Frissítés...
- Jelszó megváltozott!
- Nem lehet a jelszót megváltoztatni
+ Csak olvasható címkék megjelenítése a partnerek alatt
+ Értesítések engedélyezése
+ Nem található csoportos csevegés kiszolgáló
+ A csoportos csevegés létrehozása nem sikerült!
+ Fiók profilképe
+ OMEMO ujjlenyomat másolása a vágólapra
+ OMEMO kulcs újra előállítása
+ Eszközök törlése
+ Biztosan törölni szeretné az összes többi eszközt az OMEMO bejelentésből? A következő alkalommal, amikor az eszközei kapcsolódnak, újra bejelentik magukat, de előfordulhat, hogy nem kapják meg az időközben elküldött üzeneteket.
+ Nem érhetők el használható kulcsok ehhez a partnerhez.\nAz új kulcsok letöltése a kiszolgálóról sikeretlen volt. Talán valami hiba történt a partnere kiszolgálójával.
+ Nem érhetők el használható kulcsok ehhez a partnerhez.\nGyőződjön meg arról, hogy kölcsönösen feliratkoztak-e egymás jelenlétfrissítéseire.
+ Valami hiba történt
+ Előzmények lekérése a kiszolgálóról
+ Nincs több előzmény a kiszolgálón
+ Frissítés…
+ Jelszó megváltoztatva!
+ Nem sikerült megváltoztatni a jelszót
Jelszó megváltoztatása
Jelenlegi jelszó
Új jelszó
- Jelszó nem lehet üres
- Minden fiók bekapcsolása
- Minden fiók letiltása
- Cselekvés végzése
- Nincs helye
- Nem elérhető
+ A jelszó nem lehet üres
+ Összes fiók engedélyezése
+ Összes fiók letiltása
+ Művelet végrehajtása ezzel
+ Nincs hovatartozás
+ Kilépett
Kiközösített
Tag
- Haladó mód
- Tag jogkör megadása
- Tag jogkör megvonása
- Admin jogok megadása
- Admin jogok visszavonása
- Tulajdonosi jogok megadása
- Tulajdonosi jogok visszavonása
- Konferenciából eltávolítás
+ Speciális mód
+ Tagi jogosultságok megadása
+ Tagi jogosultságok visszavonása
+ Adminisztrátori jogosultságok megadása
+ Adminisztrátor jogosultságok visszavonása
+ Tulajdonosi jogosultságok megadása
+ Tulajdonosi jogosultságok visszavonása
+ Eltávolítás a csoportos csevegésből
Eltávolítás a csatornából
- %s hovatartozását nem lehetett megváltoztatni
- Konferenciából kitiltás
+ Nem sikerült %s hovatartozását megváltoztatni
+ Kitiltás a csoportos csevegésből
Kitiltás a csatornából
- Ön megpróbálta eltávolítani %s nevű tagot a nyilvános csatornából. Az egyetlen módja ennek, hogy örökre kitiltja a felhasználót.
+ Megpróbálta %s eltávolítását egy nyilvános csatornából. Ennek egyetlen módja, ha örökre kitiltja a felhasználót.
Kitiltás most
- Nem lehetett %s szerepét megváltoztatni
- Privát konferencia beállítások
- Nyilvános csatorna beállítások
- Privát, csak tagoknak
- Tedd az XMPP címeket bárki által láthatóvá
- Tedd a csatornát moderálttá
- Nem vagy résztvevő
- Módosította a konferencia beállításokat!
- Nem tudta módosítani a konferencia beállításokat!
+ Nem sikerült %s szerepét megváltoztatni
+ Személyes csoportos csevegés beállításai
+ Nyilvános csatorna beállításai
+ Személyes, csak tagoknak
+ XMPP-címek láthatóvá tétele bárki számára
+ Csatorna moderálttá tétele
+ Ön nem résztvevő
+ Csoportos csevegés beállításai módosítva!
+ Nem sikerült módosítani a csoportos csevegés beállításait
Soha
További értesítésig
Szundi
Válasz
- Elolvasva
+ Megjelölés olvasottként
Bevitel
- Enter gomb küldjön
- Használja az Enter-t üzenet küldésre
- Enter gombot mutassa
- Hangulatjel helyett enter-t használjon
- hanganyag
+ Küldés enterrel
+ Az enter billentyű használata az üzenet küldéséhez
+ Enter billentyű megjelenítése
+ Hangulatjelek billentyű megváltoztatása az enter billentyűre
+ hang
videó
kép
- PDF dokumentum
- Android applikáció
- Névjegy
- A önarckép publikálva lett!
- Küldés alatt: %s
- Felajánlás alatt: %s
- Kilépettek rejtve
- %s éppen ír...
+ PDF-dokumentum
+ Android alkalmazás
+ Partner
+ A profilkép közzé lett téve!
+ %s küldése
+ %s felajánlása
+ Kilépettek elrejtése
+ %s éppen ír…
%s abbahagyta az írást
%s éppen ír…
%s abbahagyta az írást
- Gépeléssel kapcsolatos üzenetek
- Jelzed az ismerőseidnek, hogy mikor írsz nekik
+ Gépelési értesítések
+ Tudassa a partnereivel, hogy mikor ír nekik üzeneteket
Hely küldése
- Hely mutatása
- Nincs alkalmazás a helyzetének megjelenítéséhez
+ Hely megjelenítése
+ Nem található alkalmazás a hely megjelenítéséhez
Hely
- A beszélgetés lezárult
- A privát konferenciát elhagyta
- A nyilvános csatornát elhagyta
- Ne bízzon a rendszer hitelesítésekben
- Minden tanúsítványt kézzel kell jóváhagyni
+ A beszélgetés bezárva
+ Kilépett a személyes csoportos csevegésből
+ Kilépett a nyilvános csatornából
+ Ne bízzon meg a rendszer hitelesítésszolgáltatóiban
+ Az összes tanúsítványt kézzel kell jóváhagyni
Tanúsítványok eltávolítása
- Törölje a kézzel jóváhagyott tanúsítványokat
- Nincs kézzel jóváhagyott tanúsítvány
+ Kézzel jóváhagyott tanúsítványok törlése
+ Nincsenek kézzel jóváhagyott tanúsítványok
Tanúsítványok eltávolítása
- Kiválasztás törlése
+ Kijelölés törlése
Mégse
- %d tanúsítvány törölve
- %d tanúsítvány törölve
- Küldés gomb helyett választott funkciógomb
- Gyors gomb
- Semmi
+ Küldés gomb cseréje gyors művelettel
+ Gyors művelet
+ Nincs
Legutóbb használt
- Gyors gomb funkciója
- Névjegyek keresése
+ Gyors művelet kiválasztása
+ Partnerek keresése
Könyvjelzők keresése
- Privát üzenet küldése
- %1$s elhagyta a konferenciát!
+ Személyes üzenet küldése
+ %1$s kilépett a csoportos csevegésből!
Felhasználónév
Felhasználónév
- Ez nem egy érvényes felhasználónév
- Letöltés sikertelen: A kiszolgáló nem található
- Letöltés sikertelen: A fájl nem található
- Letöltés sikertelen: Nem sikerült csatlakozni a fogadó félhez
- Letöltés sikertelen: a fájl írása meghiúsult
+ Ez nem érvényes felhasználónév
+ Letöltés sikertelen: a kiszolgáló nem található
+ Letöltés sikertelen: a fájl nem található
+ Letöltés sikertelen: nem sikerült kapcsolódni a géphez
+ Letöltés sikertelen: nem sikerült írni a fájlt
A Tor hálózat nem érhető el
- Bind hiba
- A szerver nem felel a domain-ért
- Hibás
+ Kötési hiba
+ A kiszolgáló nem felelős a tartományért
+ Törött
Elérhetőség
- \"Távol\" állapot lezárt telefonnál
- Kikapcsolt képernyőnél a neved alatt egy \"távol\" címke látható
- \"Ne zavarjon\" csöndes módban
- Az eszközt \"Ne zavarjon\" jelzéssel jelöli, ha csendes üzemmódban van
- A rezgést kezelje úgy mint csöndes módot
- Az eszközt \"Ne zavarjon\" jelzéssel jelöli, ha rezgő módban van
- Kiterjesztett kapcsolat beállítások
- Mutassa a gazdanevet és a port beállításokat új fiók létrehozásakor
+ „Távol”, ha a kijelző ki van kapcsolva
+ „Távol” állapotként jelöli az erőforrást, ha a kijelző ki van kapcsolva
+ „Ne zavarjon” csendes módban
+ „Ne zavarjon” állapotként jelöli az erőforrást, ha az eszköz csendes módban van
+ Rezgés kezelése csendes módként
+ „Ne zavarjon” állapotként jelöli az erőforrást, ha az eszköz rezgő módban van
+ Kiterjesztett kapcsolati beállítások
+ Gépnév és port beállításainak megjelenítése egy fiók beállításakor
xmpp.example.com
Fiók hozzáadása tanúsítvánnyal
- A tanúsítvány nem értelmezhető
- Hagyja üresen tanúsítvánnyal hitelesítéshez
- Archívum beállításai
- Szerveroldali mentés beállításai
- Archiválási beállítások betöltése. Kérem várjon...
- Nem lehet az archiválási beállításokat betölteni
+ Nem sikerült feldolgozni a tanúsítványt
+ Hagyja üresen w/ tanúsítvánnyal történő hitelesítéshez
+ Archiválási beállítások
+ Kiszolgáló oldali archiválási beállítások
+ Archiválási beállítások lekérése. Kérem várjon…
+ Nem sikerült lekérni az archiválási beállításokat
Captcha szükséges
- Írja be a fenti képen található szöveget
+ Írja be a fenti képen lévő szöveget
A tanúsítványlánc nem megbízható
- Az XMPP cím nem egyezik a tanúsítvánnyal
+ Az XMPP-cím nem egyezik a tanúsítvánnyal
Tanúsítvány megújítása
- Hiba történt az OMEMO kulcs megszerzésében!
- Igazolt OMEMO kulcs tanúsítvánnyal!
- A készülék nem támogatja az ügyfél-tanúsítványok kiválasztását!
+ Hiba történt az OMEMO kulcs lekérésekor!
+ Ellenőrzött OMEMO kulcs tanúsítvánnyal!
+ A készüléke nem támogatja az ügyféltanúsítványok kiválasztását!
Kapcsolat
- Kapcsolódás a Tor hálózatán keresztül
- Minden kapcsolat átvezetése a Tor hálózatán. Szükséges hozzá az Orbot
- Gazdanév
+ Kapcsolódás a Tor hálózaton keresztül
+ Az összes kapcsolat átvezetése a Tor hálózaton. Az Orbot alkalmazás szükséges hozzá
+ Gépnév
Port
- Szerver vagy .onion Cím
- Ez nem egy érvényes portszám
- Ez nem egy érvényes gazdanév
- %1$d a %2$d fiókból csatlakozott
+ Kiszolgálócím vagy .onion-cím
+ Ez nem érvényes portszám
+ Ez nem érvényes gépnév
+ %1$d/%2$d fiók kapcsolódott
- %d üzenet
- %d üzenet
További üzenetek betöltése
- %s partnerrel fájlt osztott meg
- %s partnerrel képet osztott meg
- %s partnerrel képeket osztott meg
- %s partnerrel szöveget osztott meg
- A Conversations-nek hozzáférésre lenne szüksége a külső tárhelyhez
- A Conversations-nek hozzáférésre lenne szüksége a kamerához
- Szinkronizáljon a névjegyekkel
- A Conversations szeretné megfeleltetni a szerver oldali partnerlistát a helyi címjegyzékkel, hogy megmutassa az ismerősök teljes nevét és arcképet.\n\nA Conversations csak olvassa a névjegyeit és helyileg felelteti meg őket anélkül, hogy feltöltené azokat a szerverre.\n\nMost meg lesz kérdezve, hogy engedélyezi-e a névjegyekhez való hozzáférést.
-
E telefonszámok másolatát nem tároljuk.\n\nTöbb információért olvassa el az adatvédelmi irányelvek.
Most megkérjük, adjon engedélyt a névjegyek eléréséhez.]]>
- Értesítsen minden üzenetnél
- Csak akkor értesítsen, ha megemlítenek
+ %s partnerrel megosztott fájl
+ %s partnerrel megosztott kép
+ %s partnerrel megosztott képek
+ %s partnerrel megosztott szöveg
+ A Conversations alkalmazásnak hozzáférésre van szüksége a külső tárolóhoz
+ A Conversations alkalmazásnak hozzáférésre van szüksége a kamerához
+ Szinkronizálás a partnerekkel
+ A Conversations szeretné megfeleltetni a kiszolgáló oldali partnerlistát a helyi címjegyzékkel, hogy megjelenítse a partnerek teljes nevét és profilképét.\n\nA Conversations csak olvassa a névjegyeit, és helyileg felelteti meg őket, anélkül hogy feltöltené azokat a kiszolgálóra.\n\nMost arra fogják kérni, hogy adjon jogosultságot a névjegyek eléréséhez.
+
A telefonszámok másolatát nem fogjuk eltárolni.\n\nTovábbi információkért olvassa el az adatvédelmi irányelveinket.
Most arra fogják kérni, hogy adjon jogosultságot a névjegyek eléréséhez.]]>
+ Értesítés az összes üzenetről
+ Csak akkor értesítsen, ha megemlítik
Értesítések letiltva
Értesítések szüneteltetve
- Kép tömörítés
+ Képtömörítés
+ Tipp: használja a „Fájl kiválasztása” lehetőséget a „Fénykép kiválasztása” helyett az egyes képek tömörítetlen küldéséhez ettől a beállítástól függetlenül.
Mindig
- Akkumulátor optimalizációk engedélyezve
- A készülék erős akkumulátor optimalizálást végez a Conversations programon, ami késleltetett értesítésekhez, vagy akár üzenetek elvesztéséhet is vezethet.\nJavasolt kikapcsolni ezt.
- A készülék erős akkumulátor optimalizálást végez a Conversations programon, ami késleltetett értesítésekhez, vagy akár üzenetek elvesztéséhet is vezethet.\nMost meg lesz kérve az optimalizáció letiltására.
- Letilt
- A kiválasztott terület túl nagy
- (Nincs aktivált fiók)
+ Csak nagy képek
+ Akkumulátor-optimalizációk engedélyezve
+ A készülék erős akkumulátor-optimalizálást végez a Conversations programon, ami késleltetett értesítésekhez, vagy akár üzenetek elvesztéséhez is vezethet.\nAjánlott kikapcsolni ezeket.
+ A készülék erős akkumulátor-optimalizálást végez a Conversations programon, ami késleltetett értesítésekhez, vagy akár üzenetek elvesztéséhez is vezethet.\nMost arra fogják kérni, hogy tiltsa le azokat.
+ Letiltás
+ A kijelölt terület túl nagy
+ (Nincsenek aktivált fiókok)
Ez a mező kötelező
- Üzenet szerkesztése
- Kijavított üzenet küldése
- Már megbízik ebben a kapcsolatban. A \"kész\" beállítás kiválasztásával csak megerősíti, hogy %s része a konferenciának.
+ Üzenet javítása
+ Javított üzenet küldése
+ Már megbízik ebben a partnerben. A „kész” kiválasztásával csak megerősíti, hogy %s része ennek a csoportos csevegésnek.
Letiltotta ezt a fiókot
- Biztonsági hiba: Érvénytelen fájl hozzáférés
- Nem találtunk URI-t használó alkalmazást
- Megosztás URI-ként
-
Regisztráljon a telefonszámával, és a Quicksy automatikusan – a címjegyzékében szereplő telefonszámok alapján – jelzi a lehetséges kapcsolatokat.
A regisztrációval elfogadja azadatvédelmi irányelveinket.]]>
- Egyetért & folytatás
- Végigvezetjük a chat.sum7.eu-en való fiók létrehozás folyamatán.\nHa a chat.sum7.eu-et választja szolgáltatójának, akkor képes lesz kommunikálni a más szolgáltatóknál lévő felhasználókkal, ha megadja nekik a teljes XMPP címét.
- A teljes XMPP címe ez lesz: %s
+ Biztonsági hiba: érvénytelen fájlhozzáférés
+ Nem található alkalmazás az URI megosztásához
+ URI megosztása ezzel…
+
Regisztráljon a telefonszámával, és a Quicksy automatikusan – a címjegyzékében szereplő telefonszámok alapján – javaslatot tesz a lehetséges partnerekre.
A regisztrációval elfogadja azadatvédelmi irányelveinket.]]>
+ Elfogadás és folytatás
+ Végigvezetjük a chat.sum7.eu oldalon való fiók létrehozásának folyamatán.\nHa a chat.sum7.eu szolgáltatást választja szolgáltatóként, akkor képes lesz kommunikálni a más szolgáltatóknál lévő felhasználókkal, ha megadja nekik a teljes XMPP-címét.
+ A teljes XMPP-címe ez lesz: %s
Fiók létrehozása
Saját szolgáltató használata
- Válassz felhasználónevet
- Elérhetőség manuális beállítása
- Az állapotüzenet szerkesztésekor állítsa be elérhetőségét
+ Válasszon felhasználónevet
+ Elérhetőség kezelése kézzel
+ Az elérhetőségének beállítása az állapotüzenet szerkesztésekor.
Állapotüzenet
- Beszélgetésre kész
+ Csevegésre kész
Elérhető
Távol
- Nem elérhető
+ Nem érhető el
Elfoglalt
- Egy biztonságos jelszó lett létrehozva
- Az Eszközöd nem támogatja az akkumulátor-optimalizálás kikapcsolását
- Regisztráció nem sikerült: Próbálkozzon később
- Regisztráció nem sikerült: Jelszó túl gyenge
- Válaszd ki a résztvevőket
- Konferencia létrehozása ...
- Meghívja újra
- Letilt
+ Egy biztonságos jelszó lett előállítva
+ Az eszköze nem támogatja az akkumulátor-optimalizálás kikapcsolását
+ Regisztráció sikertelen: próbálja meg később újra
+ Regisztráció sikertelen: a jelszó túl gyenge
+ Résztvevők kiválasztása
+ Csoportos csevegés létrehozása…
+ Meghívás újra
+ Letiltás
Rövid
- Közepesen hosszú
+ Közepes
Hosszú
- Legutolsó használat megadása
- Minden ismerősöd tudja meg, hogy mikor használod a Conversations-t
- Személyes
- Kinézet
- Színséma kiválasztása
+ Legutolsó felhasználó-interakció szétküldése
+ Tudassa az összes partnerével, hogy a Conversations alkalmazást használja
+ Adatvédelem
+ Téma
+ Színpaletta kiválasztása
Világos téma
Sötét téma
- Nem sikerült csatlakozni a OpenKeychain-hez
- Ez az eszköz már nincs használatban
+ Zöld háttér
+ Zöld háttér használata a fogadott üzenetekhez
+ Nem sikerült kapcsolódni a OpenKeychain alkalmazáshoz
+ Ez az eszköz többé nincs használatban
Számítógép
Mobiltelefon
Táblagép
- Böngésző
+ Webböngésző
Konzol
Fizetés szükséges
- Hiányzó internet engedély
+ Hiányzó internet jogosultság
Én
- Ismerősöd állapot frissítéseket kér
- Megenged
- Nincs jogosultságod, hogy hozzáférj ehhez: %s
- A távoli szerver nem található
- Távoli szerver időtúllépés
+ A partner jelenlét-feliratkozást kér
+ Engedélyezés
+ Nincs jogosultság hozzáférni ehhez: %s
+ A távoli kiszolgáló nem található
+ Távoli kiszolgáló időtúllépés
Nem sikerült frissíteni a fiókot
- Jelentse ezt a JID-et, mint nemkívánatos üzenetek küldőjét.
- OMEMO identitások törlése
- Regenerálja a OMEMO kulcsokat. Minden ismerősödnek engedélyezni kell majd az új kulcsodat. Ezt csak a legvégső esetben érdemes használni.
- Kiválasztott kulcsok törlése
- Csatlakozni kell, hogy közzé tudd tenni a arcképedet.
- Hibaüzenet mutatása
+ A Jabber-azonosító jelentése, mivel nemkívánatos üzeneteket küld.
+ OMEMO személyazonosságok törlése
+ Az OMEMO kulcsok újra előállítása. Az összes partnerének újra ellenőriznie kell majd Önt. Ezt csak a legvégső esetben használja.
+ Kijelölt kulcsok törlése
+ Kapcsolódva kell lennie a profilkép közzétételéhez.
+ Hibaüzenet megjelenítése
Hibaüzenet
- Adatspórolás engedélyezve
- Az operációs rendszer korlátozza a Conversations hozzáférését az internethez, amikor az a háttérben fut. Ahhoz, hogy értesítéseket kapjon az új üzenetekről aktív Adatspórolás esetén is, lehetővé kell tennie a Conversations korlátlan hozzáférését.\nA Conversations továbbra is arra törekszik, hogy spóroljon az adatforgalmon, ha ez lehetséges.
- Az eszköz nem támogatja az adatspórolás letiltását.
- Nem sikerült létrehozni egy ideiglenes fájlt
- Ez a készülék ellenőrzött
+ Adatsporolás engedélyezve
+ Az operációs rendszer korlátozza a Conversations hozzáférését az internethez, amikor az a háttérben fut. Ahhoz, hogy értesítéseket kapjon az új üzenetekről aktív adatspórolás esetén is, lehetővé kell tennie a Conversations korlátlan hozzáférését.\nA Conversations továbbra is arra törekszik, hogy spóroljon az adatforgalmon, ahol lehetséges.
+ Az eszköze nem támogatja az adatspórolás letiltását a Conversations alkalmazásnál.
+ Nem sikerült létrehozni átmeneti fájlt
+ Ez a készülék ellenőrizve lett
Ujjlenyomat másolása
- Minden OMEMO kulcs ellenőrizve lett
+ Az összes OMEMO kulcs ellenőrizve lett
A vonalkód nem tartalmaz ujjlenyomatokat ehhez a beszélgetéshez.
Ellenőrzött ujjlenyomatok
- Használja a kamerát, hogy beolvassa az ismerős vonalkódját
- Kérjük várjon a kulcsok lekérésére
- Megosztás vonalkóddal
+ Használja a kamerát egy partner vonalkódjának beolvasásához
+ Várjon a kulcsok lekérésére
+ Megosztás vonalkódként
Megosztás XMPP URI-ként
- Megosztás HTTP linkkel
- Megerősítés előtti \"vak bizalom\"
- Automatikusan megbízik ismerőseid új, ellenőrizetlen eszközeiben. Ilyen esetekben manuális megerősítésre buzdítja a felhasználót.
- Megerősítetlen OMEMO kulcsok
+ Megosztás HTTP hivatkozásként
+ Vak bizalom ellenőrzés előtt
+ Automatikus megbízás a partnerek összes új eszközében, amelyek nem lettek korábban ellenőrizve, és kézi megerősítés kérése minden alkalommal, amikor egy ellenőrzött partner új eszközt ad hozzá.
+ Vakon megbízott OMEMO kulcsok
Nem megbízható
Érvénytelen 2D vonalkód
- Gyorsítótár mappa kitisztítása (Kamera szoftver által használt)
+ Gyorsítótármappa törlése (Kamera alkalmazás által használt)
Gyorsítótár törlése
Személyes tárhely törlése
- Személyes tárhelyét törli, ahol fájljai vannak (Ezeket újra lehet tölteni a kiszolgálóról)
- Egy megbízható forrásból követtem ezt a linket
- A linkre kattintás után %1$s OMEMO kulcsát ellenőrizni fogja. Ez csak akkor biztonságos, ha ezt a linket egy megbízható forrásból kapta, ahol csak %2$s tudta közzétenni ezt a linket.
+ Személyes tárhely törlése, ahol a fájlok vannak (Ezek újra letölthetők a kiszolgálóról)
+ Egy megbízható forrásból követtem ezt a hivatkozást
+ %1$s OMEMO kulcsainak ellenőrzésére készül egy hivatkozásra kattintás után. Ez csak akkor biztonságos, ha ezt a hivatkozást megbízható forrásból követte, ahol csak %2$s tudta közzétenni a hivatkozást.
OMEMO kulcsok ellenőrzése
Inaktívak megjelenítése
Inaktívak elrejtése
- Ne bízzon az eszközben
- Biztos benne, hogy el szeretné távolítani az eszköz ellenőrzését?\nAz eszköz és az eszközről érkező üzenetek nem megbízhatóak lesznek ezentúl.
+ Ne bízzon meg az eszközben
+ Biztosan el szeretné távolítani az ellenőrzését ennél az eszköznél?\nAz eszköz és az eszközről érkező üzenetek nem megbízhatóként lesznek megjelölve.
- %d másodperc
- %d másodperc
@@ -630,237 +637,247 @@
- %d hónap
- %d hónap
- Automatikus üzenet törlés
- Automatikusan törli az üzeneteket az eszközön, amennyiben régebbiek, mint a beállított időkeret.
+ Automatikus üzenettörlés
+ Üzenetek automatikus törlése erről az eszközről, amelyek régebbiek a beállított időkeretnél.
Üzenet titkosítása
- Nem tölt le üzeneteket a helyi megőrzési időszak miatt.
+ Nincs üzenetletöltés a helyi megőrzési időszak miatt.
Videó tömörítése
- Hasonló beszélgetések be lettek zárva.
- Ismerős blokkolva.
+ A megfelelő beszélgetések lezárultak.
+ Partner tiltva.
Értesítések idegenektől
- Értesítsen az idegenektől kapott üzenetekről.
- Üzenete érkezett egy idegentől
- Idegen blokkolása
- Egész domain blokkolása
- Jelenleg elérhető
- Próbálja újra a dekódolást
- Munkamenet hiba
+ Értesítés az idegenektől kapott üzenetekről.
+ Üzenet érkezett egy idegentől
+ Idegen tiltása
+ Teljes tartomány tiltása
+ éppen most elérhető
+ Visszafejtés újrapróbálása
+ Munkamenethiba
Csökkentett SASL mechanizmus
- A szervernek regisztrációra van szüksége a weboldalon
+ A kiszolgáló a weboldalon történő regisztrációt igényli
Weboldal megnyitása
Nem található alkalmazás a weboldal megnyitásához
Figyelmeztető értesítések
- Figyelmeztető értesítéseket mutat
+ Figyelmeztető értesítések megjelenítése
Ma
Tegnap
- Gazdanév validálása DNSSEC-el
- A hitelesített gazdanevet tartalmazó kiszolgálói tanúsítványok hitelesek
- A tanúsítvány nem tartalmaz XMPP címet
+ Gépnév ellenőrzése DNSSEC használatával
+ Az ellenőrzött gépnevet tartalmazó kiszolgálótanúsítványok ellenőrzöttként lesznek figyelembe véve
+ A tanúsítvány nem tartalmaz XMPP-címet
részleges
- Videó felvétele
- Másolja a vágólapra
+ Videó rögzítése
+ Másolás a vágólapra
Üzenet a vágólapra másolva
Üzenet
- A privát üzenetek le vannak tiltva
+ A személyes üzenetek le vannak tiltva
Védett alkalmazások
- Ha értesítést szeretne kapni, még akkor is, ha a képernyő ki van kapcsolva, hozzá kell adnia a Conversations-t a védett alkalmazások listájához.
- Ismeretlen tanúsítvány elfogadása?
- A szervertanúsítványt nem írta alá ismert Tanúsító Hatóság.
- Elfogadja a nem megfelelő kiszolgáló nevét?
- A kiszolgáló nem tudta hitelesíteni mint \"%s\". A tanúsítvány csak az alábbiakra érvényes:
- Szeretnél akárhogyan is csatlakozni?
- Tanúsítvány részletek:
+ Ha akkor is szeretne értesítéseket kapni, amikor a kijelző ki van kapcsolva, hozzá kell adnia a Conversations alkalmazást a védett alkalmazások listájához.
+ Elfogadja az ismeretlen tanúsítványt?
+ A kiszolgáló tanúsítványa nincs aláírva egy ismert hitelesítésszolgáltató által.
+ Elfogadja a nem egyező kiszolgálónevet?
+ A kiszolgáló nem tudta hitelesíteni mint „%s”. A tanúsítvány csak az alábbiakra érvényes:
+ Mindenképp szeretne csatlakozni?
+ Tanúsítvány részletei:
Egyszer
- A QR-kódos szkennernek hozzáférésre van szüksége a fényképezőgéphez
+ A QR-kód olvasónak kamerahozzáférésre van szüksége
Görgessen az aljára
Görgessen le egy üzenet elküldése után
Állapotüzenet szerkesztése
- állapotüzenet szerkesztése
- A titkosítás letiltása
- A Conversations nem tud titkosított üzeneteket küldeni neki: %1$s. Ez a kapcsolattól függhet, mivel az elavult kiszolgáló vagy ügyfél nem tudja kezelni az OMEMO-t.
+ Állapotüzenet szerkesztése
+ Titkosítás letiltása
+ A Conversations nem tud titkosított üzeneteket küldeni %1$s részére. Ez amiatt lehet, hogy a partnere elavult kiszolgálót vagy kliensprogramot használ, amely nem tudja kezelni az OMEMO-t.
Nem sikerült lekérni az eszközlistát
Nem sikerült lekérni az eszközcsomagokat
- Tipp: Bizonyos esetekben ez úgy oldható meg, hogy egymást felveszik a névjegyzékben.
- Biztosan le szeretné tiltani az OMEMO titkosítást ehhez a beszélgetéshez?\nEz lehetővé fogja tenni a kiszolgáló rendszergazdájának, hogy elolvassa az üzeneteket(ha rosszat akar); de ez lehet az egyetlen módja annak, hogy kommunikáljon az elavult ügyfeleket használó emberekkel.
+ Tipp: bizonyos esetekben ez megoldható azzal, hogy hozzáadják egymást a partnerlistákhoz.
+ Biztosan le szeretné tiltani az OMEMO titkosítást ennél a beszélgetésnél?\nEz lehetővé fogja tenni a kiszolgáló rendszergazdájának, hogy elolvassa az üzeneteket, de ez lehet az egyetlen módja annak, hogy kommunikáljon az elavult programokat használó emberekkel.
Letiltás most
Vázlat:
OMEMO titkosítás
- OMEMO lesz mindig használva az egy-egy és egyéni csoportos beszélgetésekhez.
- OMEMO lesz az alapértelmezett az új beszélgetésekhez.
+ Mindig az OMEMO lesz használva az egymással történő üzenetváltásokhoz és a személyes csoportos csevegésekhez.
+ Az OMEMO lesz alapértelmezetten használva az új beszélgetésekhez.
Az OMEMO-t kifejezetten be kell majd kapcsolni az új beszélgetésekhez.
- Parancsikon létrehozása
+ Gyorsbillentyű létrehozása
Betűméret
- Az alkalmazásban használt relatív betűméret.
- Bekapcsolva alapból
- Kikapcsolva alapból
+ Az alkalmazáson belül használt relatív betűméret.
+ Alapértelmezetten be
+ Alapértelmezetten ki
Kicsi
Közepes
Nagy
- Az üzenet nem volt titkosított erre az eszközre.
+ Az üzenet nem volt titkosított ehhez az eszközhöz.
Nem sikerült az OMEMO üzenet visszafejtése.
- visszacsinál
+ visszavonás
A helymegosztás le van tiltva
- Pozíció fixálása
- Pozíció feloldása
- Hely Másolása
- Hely Megosztása
- Útvonal
+ Helyzet rögzítése
+ Helyzet feloldása
+ Hely másolása
+ Hely megosztása
+ Irányok
Hely megosztása
Hely megjelenítése
- Megoszt
- Nem sikerült elkezdeni a felvételt
- Kérlek várj…
- A Conversations-nek hozzáférésre van szüksége a mikrofonhoz
+ Megosztás
+ Nem sikerült elindítani a rögzítést
+ Kérem várjon…
+ A Conversations alkalmazásnak mikrofonhozzáférésre van szüksége
Üzenetek keresése
GIF
Beszélgetés megtekintése
Helymegosztás bővítmény
- A beépített térkép helyett használja a \"Share Location Plugin\"-t
+ A helymegosztás bővítmény használata a beépített térkép helyett
Webcím másolása
- XMPP cím másolása
- HTTP fájlmegosztás S3-nak
+ XMPP-cím másolása
+ HTTP fájlmegosztás S3-hoz
Közvetlen keresés
- A \"Beszélgessünk\" képernyőn nyissa meg a billentyűzetet, és helyezze a kurzort a keresőmezőbe
- Konferencia profilkép
- A gazdagép nem támogatja a konferencia profilképeket
- Csak a tulajdonos tudja megváltoztatni a csoport profilképét
- Kapcsolatnév
+ A „Beszélgetés indítása” képernyőn nyissa meg a billentyűzetet, és helyezze a kurzort a keresőmezőbe
+ Csoportos csevegés profilképe
+ A gép nem támogatja a csoportos csevegés profilképeket
+ Csak a tulajdonos tudja megváltoztatni a csoportos csevegés profilképét
+ Partner neve
Becenév
Név
- A név megadása nem kötelező
- Konferencia neve
- Ez a konferencia megszűnt
- Nem sikerült rögzíteni a felvételt
+ A név megadása elhagyható
+ Csoportos csevegés neve
+ Ezt a csoportos csevegést megszüntették
+ Nem sikerült elmenteni a felvételt
Előtér szolgáltatás
- Ez az értesítési kategória állandó értesítést jelenít meg arról, hogy a Conversation fut.
- Állapotinformáció
+ Ezt az értesítési kategóriát egy állandó értesítés megjelenítéséhez használják, beleértve azt is, hogy a Conversations fut.
+ Állapotinformációk
Kapcsolódási problémák
- Ez az értesítési kategória megjelenít egy értesítést, ha probléma merül fel a fiókhoz való kapcsolódással.
+ Ezt az értesítési kategóriát egy értesítés megjelenítéséhez használják abban az esetben, ha probléma merül fel a fiókhoz való kapcsolódásnál.
Üzenetek
Üzenetek
Csendes üzenetek
- Ez az értesítési csoport olyan értesítéseket jelenít meg, amelyek nem okozhatnak hangot. Például amikor egy másik eszközön aktív (Türelmi idő).
- Értesítés beállítások
- Fontosság, Hang, Vibrálás
- Videó tömörítés
- Multimédia megtekintése
- A résztvevők megtekintése
+ Ezt az értesítési csoportot olyan értesítések megjelenítéséhez használják, amelyek nem aktiválhatnak hangot. Például ha aktívvá válik egy másik eszközön (türelmi idő).
+ Értesítési beállítások
+ Fontosság, hang, rezgés
+ Videó tömörítése
+ Média megtekintése
+ Résztvevők megtekintése
Résztvevők
- Multimédia böngésző
+ Médiaböngésző
A fájl ki lett hagyva a biztonság megsértése miatt.
- Videó minőség
- Alacsonyabb minőség kisebb fájlt jelent
+ Videó minősége
+ Az alacsonyabb minőség kisebb fájlokat jelent
Közepes (360p)
Magas (720p)
- visszavonva
- Már írja az üzenet vázlatát.
- A funkció nem működik
+ megszakítva
+ Már elmentett vázlatként egy üzenetet.
+ A funkció nincs megvalósítva
Érvénytelen országkód
- Válassz egy országot
+ Válasszon egy országot
telefonszám
- Erősítsd meg a telefonszámod
- A Quicksy SMS-üzenetet küld (a szolgáltató díjat számolhat fel), hogy ellenőrizze a telefonszámát. Írja be az ország kódját és telefonszámát:
-
%s
Ez rendben van, vagy szeretné szerkeszteni a számot?]]>
- %s nem egy valós telefonszám.
- Kérlek add meg a telefonszámod.
+ Erősítse meg a telefonszámát
+ A Quicksy SMS-üzenetet fog küldeni (a szolgáltató díjat számolhat fel), hogy ellenőrizze a telefonszámát. Írja be az országkódot és telefonszámát:
+
%s
Ez rendben van, vagy szeretné szerkeszteni a számot?]]>
+ A(z) %s nem érvényes telefonszám.
+ Adja meg a telefonszámát.
Országok keresése
- Ellenőrzés %s
+ %s ellenőrzése
%s.]]>
- Küldtünk neked egy másik 6 számjegyű kódot SMS-ben.
- Kérjük adja meg az alábbi 6 számjegyű PIN-t.
+ Küldtünk egy 6 számjegyű kódot egy másik SMS-ben.
+ Adja meg az alábbi 6 számjegyű PIN-t.
SMS újraküldése
SMS újraküldése (%s)
- Kérjük várjon (%s)
+ Kérem várjon (%s)
vissza
- Automatikusan beillesztett lehetséges PIN a vágólapról.
- Kérjük adja meg a 6 számjegyű PIN-t.
- Biztosan meg akarja szakítani a regisztrációs folyamatot?
+ Automatikusan beillesztett lehetséges PIN-kód a vágólapról.
+ Adja meg a 6 számjegyű PIN-kódot.
+ Biztosan meg szeretné szakítani a regisztrációs folyamatot?
Igen
Nem
- Ellenőrzés...
- SMS kérése...
- A beírt PIN helytelen.
- A PIN amit küldtünk lejárt.
+ Ellenőrzés…
+ SMS kérése…
+ A beírt PIN-kód helytelen.
+ Az általunk küldött PIN-kód lejárt.
Ismeretlen hálózati hiba.
- Ismeretlen válasz a szervertől.
- Nem sikerül a szerverhez csatlakozni.
- Nem sikerül biztonságos kapcsolatot létrehozni.
- Nem sikerül szervert találni.
- Valami hiba történt a kérelem feldolgozása során.
+ Ismeretlen válasz a kiszolgálótól.
+ Nem sikerült kapcsolódni a kiszolgálóhoz.
+ Nem sikerült biztonságos kapcsolatot kiépíteni.
+ Nem sikerült megtalálni a kiszolgálót.
+ Valami hiba történt a kérés feldolgozásakor.
Érvénytelen felhasználói bevitel
- Ideiglenesen nem elérhető. Próbáld újra később.
+ Átmenetileg nem érhető el. Próbálja meg később újra.
Nincs hálózati kapcsolat.
- Kérjük próbálja meg %s múlva
- Az Ön rátája limitált
+ Próbálja meg újra %s múlva
+ A sebessége korlátozott
Túl sok próbálkozás
Az alkalmazás elavult verzióját használja.
Frissítés
Ez a telefonszám jelenleg egy másik eszközzel van bejelentkezve.
- Kérjük, adja meg nevét, hogy az emberek, akiknek nincs benne a címjegyzékében, tudják, kicsoda Ön.
- A neve
+ Adja meg nevét, hogy azok az emberek is tudják, hogy Ön kicsoda, akiknél nincs benne a címjegyzékükben.
+ Az Ön neve
Adja meg nevét
- A szerkesztő gombbal állítsa be a nevét.
+ Használja a szerkesztés gombot a neve beállításához.
Kérés elutasítása
Orbot telepítése
Orbot indítása
- Nincs telepítve piaci alkalmazás.
- Ez a csatorna nyilvánossá teszi az XMPP címét
+ Nincs bolti alkalmazás telepítve.
+ Ez a csatorna nyilvánossá teszi az XMPP-címét
e-könyv
Eredeti (tömörítetlen)
- Megnyitni ezzel...
+ Megnyitás ezzel…
Conversations profilkép
- Válasszon fiókot
- Állítsd vissza a biztonsági mentést
- Visszaállít
- A biztonsági mentés visszaállításához adja meg a jelszavát ehhez a fiókhoz: %s.
- Ne használja a biztonsági mentés visszaállítása funkciót a telepítés klónozására (egyidőben több azonos futtatására). Ezt csak áttelepítés céljára, ill. az eredeti eszköz elveszítése esetén használja.
+ Fiók kiválasztása
+ Biztonsági mentés visszaállítása
+ Visszaállítás
+ Adja meg a(z) %s fiók jelszavát a biztonsági mentés visszaállításához.
+ Ne használja a biztonsági mentés visszaállítása funkciót egy telepítés klónozásának (egyidejűleg történő futtatásának) kísérletéhez. A biztonsági mentés visszaállítása csak költöztetésekhez való, illetve arra az esetre, ha elveszti az eredeti eszközt.
Nem sikerült visszaállítani a biztonsági mentést.
- Nem sikerült a biztonsági mentést visszafejteni. Biztos abban, hogy a megfelelő jelszót adta meg?
+ Nem sikerült visszafejteni a biztonsági mentést. Helyes a jelszó?
Biztonsági mentés és visszaállítás
- Adja meg az XMPP címet
- Konferencia létrehozása
- Belépés a nyilvános csatornába
- Privát konferencia létrehozása
+ Adja meg az XMPP-címet
+ Csoportos csevegés létrehozása
+ Csatlakozás nyilvános csatornához
+ Személyes csoportos csevegés létrehozása
Nyilvános csatorna létrehozása
Csatorna neve
- XMPP cím
- Kérem, adjon egy nevet a csatornának
- Kérem, adjon meg egy XMPP címet
- Ez egy XMPP cím. Kérem, hogy egy nevet adjon meg.
- Nyilvános csatorna létrehozása folyamatban…
+ XMPP-cím
+ Adjon egy nevet a csatornának
+ Adjon meg egy XMPP-címet
+ Ez egy XMPP-cím. Adjon meg egy nevet.
+ Nyilvános csatorna létrehozása…
Ez a csatorna már létezik
Csatlakozott egy meglévő csatornához
- Nem sikerült beállítani a csatorna beállításokat
- Bárkinek megengedett a téma szerkesztése
- Bárkinek megengedett mások meghívása
+ Nem sikerült beállítani a csatorna beállításait
+ Bárkinek engedélyezett a téma szerkesztése
+ Bárkinek engedélyezett mások meghívása
Bárki szerkesztheti a témát.
A tulajdonosok szerkeszthetik a témát.
Az adminisztrátorok szerkeszthetik a témát.
A tulajdonosok meghívhatnak másokat.
Bárki meghívhat másokat.
- Az XMPP címeket az adminisztrátorok láthatják.
- Az XMPP címeket bárki láthatja.
- Ennek a nyilvános csatornának nincsenek résztvevői. Hívja meg a kapcsolatait vagy használja a megosztás gombot hogy terjessze ennek az XMPP címét.
- Ennek a privát konferenciának nincsenek résztvevői.
+ Az XMPP-címek láthatóak az adminisztrátoroknak.
+ Az XMPP-címek láthatóak bárkinek.
+ Ennek a nyilvános csatornának nincsenek résztvevői. Hívja meg a partnereit, vagy használja a megosztás gombot a csatorna XMPP-címének terjesztéséhez.
+ Ennek a személyes csoportos csevegésnek nincsenek résztvevői.
Jogosultságok kezelése
Résztvevők keresése
A fájl túl nagy
- Csatol
+ Csatolás
Csatornák felderítése
Csatornák keresése
Magánélet lehetséges megsértése!
- Már rendelkezem fiókkal
- Már létező fiók hozzáadása
- Új fiók létrehozása
- Ez egy domain címnek tűnik
- Akkor is adja hozzá
- Ez egy csatorna címnek tűnik
- Biztonsági mentések megosztása
+ search.jabber.network nevű, harmadik féltől származó szolgáltatást használja.
A funkció használata elküldi az IP-címét és a keresési kifejezést annak a szolgáltatásnak. További információkért nézze meg az adatvédelmi irányelveiket.]]>
+ Már van fiókom
+ Meglévő fiók hozzáadása
+ Új fiók regisztrálása
+ Ez egy tartománycímnek tűnik
+ Hozzáadás mindenképp
+ Ez egy csatornacímnek tűnik
+ Biztonsági mentés fájlok megosztása
Conversations biztonsági mentés
Esemény
Biztonsági mentés megnyitása
- A kiválasztott fájl nem a Conversations biztonsági mentése
+ A kiválasztott fájl nem Conversations biztonsági mentés fájl
Ez a fiók már be lett állítva
- Kérem, adja meg a fiókhoz tartozó jelszót
- Nem sikerült ezt a cselekvést elvégezni
+ Adja meg a fiók jelszavát
+ Nem sikerült végrehajtani ezt a műveletet
+ Csatlakozás nyilvános csatornához…
+ A megosztási alkalmazás nem adott jogosultságot a fájl eléréséhez.
+
+ jabber.network
+ Helyi kiszolgáló
+ A legtöbb felhasználónak a „jabber.network” lehetőséget kell választania a nyilvános XMPP ökoszisztéma egészéből származó jobb javaslatokért.
+ Csatornafelderítés módszere
+ Biztonsági mentés
+ Névjegy
diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml
index 3c7e1d2a9..48b2d40fa 100644
--- a/src/main/res/values-it/strings.xml
+++ b/src/main/res/values-it/strings.xml
@@ -119,6 +119,7 @@
Suono di notifica
Esegui un suono quando arriva un nuovo messaggio
Periodo di grazia
+ Il periodo di tempo in cui le notifiche vengono silenziate dopo aver rilevato attività su uno dei tuoi altri dispositivi.
Avanzate
Non inviare mai segnalazioni di errore
Se scegli di inviare una segnalazione dell’errore aiuterai lo sviluppo di Conversations
@@ -337,8 +338,8 @@
Nessuna applicazione trovata per aprire il file
Nessuna applicazione trovata per aprire il link
Nessuna applicazione trovata per vedere il contatto
- Tag dinamici
- Mostra tag in sola lettura sotto i contatti
+ Etichette dinamiche
+ Mostra etichette in sola lettura sotto i contatti
Attiva le notifiche
Nessun server per chat di gruppo trovato
Creazione della chat di gruppo fallita!
@@ -507,7 +508,9 @@
Notifiche disattivate
Notifiche in pausa
Compressione immagini
+ Suggerimento: usa \"Scegli un file\" invece di \"Scegli un\'immagine\" per inviare singole immagini non compresse a prescindere da questa impostazione.
Sempre
+ Solo immagini grandi
Ottimizzazioni batteria attivate
Il tuo dispositivo sta facendo delle ingenti ottimizzazioni della batteria per Conversations che potrebbero portare ritardi alle notifiche o anche perdita di messaggi.\nSi consiglia di disattivarle.
Il tuo dispositivo sta facendo delle ingenti ottimizzazioni della batteria per Conversations che potrebbero portare ritardi alle notifiche o anche perdita di messaggi.\n\nTi verrà ora chiesto di disattivarle.
@@ -867,4 +870,12 @@
Inserisci la password per questo account
Impossibile eseguire questa azione
Entra in un canale pubblico...
+ L\'applicazione di condivisione non ha concesso l\'autorizzazione per accedere a questo file.
+
+ jabber.network
+ Server locale
+ La maggior parte degli utenti dovrebbe scegliere ‘jabber.network’ per migliori suggerimenti dall\'intero ecosistema XMPP pubblico.
+ Metodo di scoperta canali
+ Backup
+ Al riguardo
diff --git a/src/main/res/values-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml
index 3620e43ac..e10389330 100644
--- a/src/main/res/values-pt-rBR/strings.xml
+++ b/src/main/res/values-pt-rBR/strings.xml
@@ -508,7 +508,9 @@
Notificações desabilitadas
Notificações pausadas
Compressão de imagem
+ Dica: Use \'Selecione o arquivo\' em vez de \'Selecionar uma imagem\' para enviar uma cópia da imagem original, sem redução de qualidade.
Sempre
+ Apenas imagens grandes
Otimizações de bateria habilitadas
O seu dispositivo está aplicando uma otimização intensa de bateria no Conversations, que pode levar a atraso nas notificações ou até mesmo perda de mensagens.\nÉ recomendável desabilitar isso.
O seu dispositivo está aplicando uma otimização intensa de bateria no Conversations, que pode levar a atraso nas notificações ou até mesmo perda de mensagens.\nAgora você será solicitado a desabilitá-la.
@@ -868,4 +870,11 @@
Não foi possível executar essa ação
Entrar no canal público...
O aplicativo de compartilhamento não permitiu o acesso a esse arquivo.
+
+ jabber.network
+ Servidor local
+ A maioria dos usuários devem escolher \'jabber.network\' para melhores sugestões de toda rede pública do XMPP
+ Método de descoberta de canais
+ Backup
+ Sobre
diff --git a/src/quicksy/res/values-de/strings.xml b/src/quicksy/res/values-de/strings.xml
index 2e8a87a29..ace234eb7 100644
--- a/src/quicksy/res/values-de/strings.xml
+++ b/src/quicksy/res/values-de/strings.xml
@@ -20,7 +20,7 @@
Diese Benachrichtigungsart wird verwendet, um eine permanente Benachrichtigung anzuzeigen, die anzeigt, dass Quicksy gerade ausgeführt wird.
Quicksy Profilbild
Quicksy ist in deinem Land nicht verfügbar.
- Die Überprüfung der Serveridentität ist nicht möglich.
+ Überprüfung der Serveridentität ist nicht möglich.
Unbekannter Sicherheitsfehler.
Zeitüberschreitung bei der Verbindung zum Server.