From 432fd3e3bfc4ff4a0141db4ce283e805fab7cecf Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 12 Nov 2019 09:12:05 +0100 Subject: [PATCH 01/18] remove mentioning of Conversations Legacy --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 07414ad93..4f8cc33bd 100644 --- a/README.md +++ b/README.md @@ -389,8 +389,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 From 9fb94d83db5f506a71be986c09c634686fd7187c Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 17 Nov 2019 20:56:48 +0000 Subject: [PATCH 02/18] remove link to amazon app store --- README.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/README.md b/README.md index 4f8cc33bd..8090c3521 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,7 @@

- Google Play - - - Amazon App Store + Google Play

From 10c5d151d3e027b79681b989d10cdfa8b51c9008 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 18 Nov 2019 19:12:04 +0100 Subject: [PATCH 03/18] delete cached posh file after not being able to verify --- .../services/MemorizingTrustManager.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) 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 { From a99d7a74003d40bb3ec8b670052bfd397312322e Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 2 Dec 2019 13:20:53 +0100 Subject: [PATCH 04/18] increase cursor window size on Android P when restoring messages --- .../java/eu/siacs/conversations/Config.java | 2 +- .../persistance/DatabaseBackend.java | 7 +++--- .../conversations/utils/CursorUtils.java | 22 +++++++++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 src/main/java/eu/siacs/conversations/utils/CursorUtils.java diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index b4d7d506e..016f44870 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; diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index bc4fde0ae..5b0db42d7 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.utils.Resolver; @@ -754,12 +755,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/utils/CursorUtils.java b/src/main/java/eu/siacs/conversations/utils/CursorUtils.java new file mode 100644 index 000000000..d54bd7c02 --- /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("8k", 8 * 1024 * 1024)); + } + if (cursor instanceof SQLiteCursor) { + ((SQLiteCursor) cursor).setFillWindowForwardOnly(true); + } + } + } + +} From b135486bb48d7818c23bdabb922aa5b6093ed5ac Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 2 Dec 2019 13:21:18 +0100 Subject: [PATCH 05/18] prevent crash when deleting account on servers that don't support omemo --- .../eu/siacs/conversations/crypto/axolotl/AxolotlService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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) { From 83520ad8e7b83be623d6df6b0029dd3efd0dbbbc Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 2 Dec 2019 13:50:58 +0100 Subject: [PATCH 06/18] show jabber accounts from local address in Quicksy flavor --- src/main/java/eu/siacs/conversations/entities/Contact.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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) { From c5ea734761c29e174ec17ab2500fb5d090589783 Mon Sep 17 00:00:00 2001 From: Licaon_Kter Date: Wed, 4 Dec 2019 14:01:04 +0000 Subject: [PATCH 07/18] Update example versions (#3594) --- .github/ISSUE_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index b5f52feda..f14554454 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,10 +1,10 @@ #### General information -* **Version:** 2.5.3 +* **Version:** 2.6.0 * **Device:** Xiaomi Mi A1 * **Android Version:** Android 9 (stock) * **Server name:** conversations.im, jabber.at or self hosted -* **Server software:** ejabberd 16.04 or prosody 0.10 (if known) +* **Server software:** ejabberd 19.09.1 or prosody 0.11.3 (if known) * **Installed server modules:** Stream Managment, CSI, MAM * **Conversations source:** PlayStore, PlayStore Beta Channel, F-Droid, self build (latest HEAD) From b3c00d7163924b7ed26f6e40d90ea08b90945df1 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 4 Dec 2019 17:35:06 +0100 Subject: [PATCH 08/18] use Base64.NO_WRAP instead of trim() --- .../entities/ServiceDiscoveryResult.java | 2 +- .../generator/AbstractGenerator.java | 4 ++-- .../conversations/generator/IqGenerator.java | 16 ++++++---------- .../siacs/conversations/utils/CursorUtils.java | 2 +- 4 files changed, 10 insertions(+), 14 deletions(-) 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/utils/CursorUtils.java b/src/main/java/eu/siacs/conversations/utils/CursorUtils.java index d54bd7c02..832bed7dc 100644 --- a/src/main/java/eu/siacs/conversations/utils/CursorUtils.java +++ b/src/main/java/eu/siacs/conversations/utils/CursorUtils.java @@ -11,7 +11,7 @@ public class CursorUtils { 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("8k", 8 * 1024 * 1024)); + windowedCursor.setWindow(new CursorWindow("8M", 8 * 1024 * 1024)); } if (cursor instanceof SQLiteCursor) { ((SQLiteCursor) cursor).setFillWindowForwardOnly(true); From cc79d8f6b300b3c7661e39c3af81fb3bddad8f2e Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 4 Dec 2019 19:15:30 +0100 Subject: [PATCH 09/18] properly restore LMC edits. switch to LMC v1.1 fixes #3566 closes #3592 --- .../java/eu/siacs/conversations/Config.java | 2 +- .../eu/siacs/conversations/entities/Edit.java | 97 +++++++++++++++++++ .../siacs/conversations/entities/Edited.java | 80 --------------- .../siacs/conversations/entities/Message.java | 21 ++-- .../persistance/DatabaseBackend.java | 6 +- .../conversations/utils/CursorUtils.java | 2 +- 6 files changed, 116 insertions(+), 92 deletions(-) create mode 100644 src/main/java/eu/siacs/conversations/entities/Edit.java delete mode 100644 src/main/java/eu/siacs/conversations/entities/Edited.java diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index 016f44870..b86e2b65d 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/src/main/java/eu/siacs/conversations/Config.java @@ -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/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/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index 5b0db42d7..823ac8d28 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -63,7 +63,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, " @@ -546,6 +546,10 @@ public class DatabaseBackend extends SQLiteOpenHelper { if (oldVersion < 45 && newVersion >= 45) { db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN " + Message.BODY_LANGUAGE); } + + if (oldVersion < 46 && newVersion >= 46) { + db.execSQL("update "+Message.TABLENAME+" set "+Message.EDITED+"=NULL"); + } } private void canonicalizeJids(SQLiteDatabase db) { diff --git a/src/main/java/eu/siacs/conversations/utils/CursorUtils.java b/src/main/java/eu/siacs/conversations/utils/CursorUtils.java index 832bed7dc..28f17b585 100644 --- a/src/main/java/eu/siacs/conversations/utils/CursorUtils.java +++ b/src/main/java/eu/siacs/conversations/utils/CursorUtils.java @@ -11,7 +11,7 @@ public class CursorUtils { 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("8M", 8 * 1024 * 1024)); + windowedCursor.setWindow(new CursorWindow("4M", 8 * 1024 * 1024)); } if (cursor instanceof SQLiteCursor) { ((SQLiteCursor) cursor).setFillWindowForwardOnly(true); From 8a5d658b2a63ad596309e1a57ff4846c17e9875a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 4 Dec 2019 20:46:22 +0100 Subject: [PATCH 10/18] reduce cursor size back to 4m; now that the cause is fixed --- src/main/java/eu/siacs/conversations/utils/CursorUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/eu/siacs/conversations/utils/CursorUtils.java b/src/main/java/eu/siacs/conversations/utils/CursorUtils.java index 28f17b585..91befa229 100644 --- a/src/main/java/eu/siacs/conversations/utils/CursorUtils.java +++ b/src/main/java/eu/siacs/conversations/utils/CursorUtils.java @@ -11,7 +11,7 @@ public class CursorUtils { 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", 8 * 1024 * 1024)); + windowedCursor.setWindow(new CursorWindow("4M", 4 * 1024 * 1024)); } if (cursor instanceof SQLiteCursor) { ((SQLiteCursor) cursor).setFillWindowForwardOnly(true); From 1cf7a2b8321a39c4eecb6008563be9a6bc0fc911 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 4 Dec 2019 20:58:22 +0100 Subject: [PATCH 11/18] pulled translations from transifex --- src/conversations/res/values-de/strings.xml | 2 +- src/main/res/values-it/strings.xml | 15 +++++++++++++-- src/quicksy/res/values-de/strings.xml | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/conversations/res/values-de/strings.xml b/src/conversations/res/values-de/strings.xml index 3bfcffe74..44e7405ca 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 conversations.im 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. + 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.\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 conversations.im¹ anzulegen; ein Anbieter, der speziell für die Verwendung mit Conversations geeignet ist. \ No newline at end of file diff --git a/src/main/res/values-it/strings.xml b/src/main/res/values-it/strings.xml index 514880e5e..105179733 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. @@ -869,4 +872,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/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. From 8263fb73e95b41310672be57a9f2e743c8de3270 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 5 Dec 2019 13:28:08 +0100 Subject: [PATCH 12/18] jingle ibb: wait to receive ibb previously we signalled succesfull file reception after receiving enough bytes on ibb; however that causes us to race with the session-info file hash. now the recipient will wait for and the sender will make sure to send the session-info before sending close. closes #3500 --- ...nsport.java => JingleInBandTransport.java} | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) rename src/main/java/eu/siacs/conversations/xmpp/jingle/{JingleInbandTransport.java => JingleInBandTransport.java} (90%) 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 90% 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..64a9ff846 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInbandTransport.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInBandTransport.java @@ -15,7 +15,6 @@ 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; @@ -70,6 +69,7 @@ public class JingleInbandTransport extends JingleTransport { } 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,6 +211,19 @@ public class JingleInbandTransport extends JingleTransport { } } + 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(); + } + } + public void deliverPayload(IqPacket packet, Element payload) { if (payload.getName().equals("open")) { if (!established) { @@ -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); } } } From a3d639747adc71aed3b2b7d88bd9d2d36ec6b438 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 5 Dec 2019 14:03:54 +0100 Subject: [PATCH 13/18] fixups for last commit --- .../xmpp/jingle/JingleConnection.java | 20 +- .../xmpp/jingle/JingleConnectionManager.java | 268 +++++++++--------- .../xmpp/jingle/JingleInBandTransport.java | 18 +- 3 files changed, 155 insertions(+), 151 deletions(-) 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 index 64a9ff846..4182da08c 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInBandTransport.java +++ b/src/main/java/eu/siacs/conversations/xmpp/jingle/JingleInBandTransport.java @@ -20,20 +20,20 @@ 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; @@ -60,11 +60,11 @@ 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; } @@ -224,7 +224,7 @@ public class JingleInbandTransport extends JingleTransport { } } - public void deliverPayload(IqPacket packet, Element payload) { + void deliverPayload(IqPacket packet, Element payload) { if (payload.getName().equals("open")) { if (!established) { established = true; From 4e66b25c11e2585f412596a75cbbdabe8c822dcf Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 6 Dec 2019 10:51:15 +0100 Subject: [PATCH 14/18] pulled translations from transifex --- src/conversations/res/values-hu/strings.xml | 2 +- src/main/res/values-gl/strings.xml | 8 +- src/main/res/values-hu/strings.xml | 861 ++++++++++---------- 3 files changed, 438 insertions(+), 433 deletions(-) diff --git a/src/conversations/res/values-hu/strings.xml b/src/conversations/res/values-hu/strings.xml index 954a8d993..d80909969 100644 --- a/src/conversations/res/values-hu/strings.xml +++ b/src/conversations/res/values-hu/strings.xml @@ -1,7 +1,7 @@ Válassza ki az XMPP szolgáltatóját - conversations.im használata + A conversations.im 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 conversations.im¹ szolgáltatón is; ami kifejezetten a Conversations programmal való használatra lett tervezve. diff --git a/src/main/res/values-gl/strings.xml b/src/main/res/values-gl/strings.xml index 5299c97b2..53cb075e5 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,7 @@ 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 @@ -691,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 9a3c89335..bcf7a4a58 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 lehet kapcsolódni a fiókhoz + Nem lehet 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 + Állapotfrissítések küldése + Állapotfrissítések fogadása + Állapotfrissí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,408 +202,411 @@ %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 állapotfrissí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 állapotfrissítések nélkül váratlan problémákat okozhat.\n\nMenjen a partner részleteihez, és ellenőrizze az állapot-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 + Ü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 Csöndes órák - Kezdése - Befejezése + Kezdési idő + Befejezési idő Csöndes órák engedélyezése - Értesítések el lesznek némítva a csöndes órákban + Az értesítések el lesznek némítva a csöndes ó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 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 állapotfrissí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 képernyő ki van kapcsolva + „Ne zavarjon” csöndes módban + „Ne zavarjon” állapotként jelöli az erőforrást, ha az eszköz csendes módban van + Rezgés kezelése csöndes 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 lehet 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 lehet 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 conversations.im-en való fiók létrehozás folyamatán.¹\nHa a conversations.im-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 conversations.im oldalon való fiók létrehozásának folyamatán.¹\nHa a conversations.im 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 Zöld háttér - Használjon zöld hátteret a kapott üzenetek kiemelésére - Nem sikerült csatlakozni a OpenKeychain-hez - Ez az eszköz már nincs használatban + Zöld háttér használata a fogadott üzenetekhez + Nem lehet 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 - 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 partner állapotfeliratkozá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 lehet frissíteni a fiókot + 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 lehet 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 + 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 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. OMEMO kulcsok ellenőrzése Inaktívak megjelenítése From 00361e1e3d3326ff8a2407f6c38abde83b4b5b99 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 6 Dec 2019 11:16:33 +0100 Subject: [PATCH 15/18] make + in e164 pattern not optional --- .../eu/siacs/conversations/ui/adapter/KnownHostsAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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() { From 1dad17ada4cd14e2bebd4a2ca60d46884f24790a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 8 Dec 2019 11:32:09 +0100 Subject: [PATCH 16/18] pulled translations from transifex --- src/conversations/res/values-hu/strings.xml | 4 +- src/main/res/values-hu/strings.xml | 340 ++++++++++---------- src/main/res/values-pt-rBR/strings.xml | 9 + 3 files changed, 186 insertions(+), 167 deletions(-) diff --git a/src/conversations/res/values-hu/strings.xml b/src/conversations/res/values-hu/strings.xml index d80909969..868f4d667 100644 --- a/src/conversations/res/values-hu/strings.xml +++ b/src/conversations/res/values-hu/strings.xml @@ -3,7 +3,7 @@ Válassza ki az XMPP szolgáltatóját A conversations.im 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 conversations.im¹ 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 Conversations 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 conversations.im¹ szolgáltatón való fióklétrehozást, ami kifejezetten a Conversations alkalmazással történő használatra lett tervezve.
\ No newline at end of file diff --git a/src/main/res/values-hu/strings.xml b/src/main/res/values-hu/strings.xml index bcf7a4a58..da71c269c 100644 --- a/src/main/res/values-hu/strings.xml +++ b/src/main/res/values-hu/strings.xml @@ -70,8 +70,8 @@ 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 lehet kapcsolódni a fiókhoz - Nem lehet kapcsolódni több fiókokhoz + 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 A partner nincs a névsorán. Szeretné hozzáadni? @@ -132,9 +132,9 @@ Hiba történt Hiba Az Ön fiókja - Állapotfrissítések küldése - Állapotfrissítések fogadása - Állapotfrissítések kérése + 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 @@ -266,21 +266,21 @@ Engedélyezés A csoportos csevegés jelszót igényel Adja meg a jelszót - Először kérjen állapotfrissítéseket a partnereitől.\n\nEz annak felismeréséhez lesz használva, hogy milyen klienseket használ a partnere. + 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 állapotfrissítések nélkül váratlan problémákat okozhat.\n\nMenjen a partner részleteihez, és ellenőrizze az állapot-feliratkozásokat. + 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 Ü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 - Csöndes órák + Csendes órák Kezdési idő Befejezési idő - Csöndes órák engedélyezése - Az értesítések el lesznek némítva a csöndes órák alatt + Csendes órák engedélyezése + Az értesítések el lesznek némítva a csendes órák alatt Egyéb 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. @@ -293,7 +293,7 @@ Többé már nincs ebben a csoportos csevegésben használt fiók: %s %s ellenőrzése a HTTP gépen - Nincs kapcsolódva. Próbálja később újra + 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 @@ -349,7 +349,7 @@ 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 állapotfrissítéseire. + 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 @@ -457,21 +457,21 @@ Törött Elérhetőség „Távol”, ha a kijelző ki van kapcsolva - „Távol” állapotként jelöli az erőforrást, ha a képernyő ki van kapcsolva - „Ne zavarjon” csöndes módban + „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 csöndes módként + 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 - Nem lehet feldolgozni a tanúsítványt + 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 lehet lekérni az archiválási beállításokat + Nem sikerült lekérni az archiválási beállításokat Captcha szükséges Írja be a fenti képen lévő szöveget A tanúsítványlánc nem megbízható @@ -560,7 +560,7 @@ Sötét téma Zöld háttér Zöld háttér használata a fogadott üzenetekhez - Nem lehet kapcsolódni a OpenKeychain alkalmazáshoz + Nem sikerült kapcsolódni a OpenKeychain alkalmazáshoz Ez az eszköz többé nincs használatban Számítógép Mobiltelefon @@ -570,12 +570,12 @@ Fizetés szükséges Hiányzó internet jogosultság Én - A partner állapotfeliratkozást kér + 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 lehet frissíteni a fiókot + Nem sikerült frissíteni a fiókot 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. @@ -586,7 +586,7 @@ 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 lehet létrehozni átmeneti fájlt + Nem sikerült létrehozni átmeneti fájlt Ez a készülék ellenőrizve lett Ujjlenyomat másolása Az összes OMEMO kulcs ellenőrizve lett @@ -607,12 +607,12 @@ Személyes tárhely törlése 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 - 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. + %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 @@ -637,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-pt-rBR/strings.xml b/src/main/res/values-pt-rBR/strings.xml index e2413b916..659132c10 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. @@ -871,4 +873,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 From 8d245fc75480905c380bc05d69ff3d3e2d31d8bd Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 8 Dec 2019 11:33:09 +0100 Subject: [PATCH 17/18] =?UTF-8?q?don=E2=80=99t=20use=20secure=20delete=20w?= =?UTF-8?q?hen=20migrating=20edit=20column?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../conversations/persistance/DatabaseBackend.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index 823ac8d28..02ac484da 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -195,7 +195,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 @@ -548,7 +548,12 @@ public class DatabaseBackend extends SQLiteOpenHelper { } 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"); } } @@ -584,14 +589,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)), From 94ee4d48c679d228e88f7d40704a5574f7ec9d54 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 8 Dec 2019 12:02:20 +0100 Subject: [PATCH 18/18] version bump to 2.6.1 + changelog --- CHANGELOG.md | 5 +++++ build.gradle | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) 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/build.gradle b/build.gradle index 59f6a627d..2275c90aa 100644 --- a/build.gradle +++ b/build.gradle @@ -84,8 +84,8 @@ android { defaultConfig { minSdkVersion 16 targetSdkVersion 28 - versionCode 349 - versionName "2.6.0" + versionCode 351 + versionName "2.6.1" archivesBaseName += "-$versionName" applicationId "eu.siacs.conversations" resValue "string", "applicationId", applicationId