aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/de/pixart/messenger/entities/Conversation.java12
-rw-r--r--src/main/java/de/pixart/messenger/http/HttpDownloadConnection.java17
-rw-r--r--src/main/java/de/pixart/messenger/parser/PresenceParser.java7
-rw-r--r--src/main/java/de/pixart/messenger/services/XmppConnectionService.java1
-rw-r--r--src/main/java/de/pixart/messenger/ui/ConversationFragment.java7
-rw-r--r--src/main/java/de/pixart/messenger/utils/CryptoHelper.java14
-rw-r--r--src/main/java/de/pixart/messenger/utils/UIHelper.java2
7 files changed, 48 insertions, 12 deletions
diff --git a/src/main/java/de/pixart/messenger/entities/Conversation.java b/src/main/java/de/pixart/messenger/entities/Conversation.java
index 52525e481..922ba614f 100644
--- a/src/main/java/de/pixart/messenger/entities/Conversation.java
+++ b/src/main/java/de/pixart/messenger/entities/Conversation.java
@@ -1057,6 +1057,18 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
}
}
+ public int receivedMessagesCount() {
+ int count = 0;
+ synchronized (this.messages) {
+ for (Message message : messages) {
+ if (message.getStatus() == Message.STATUS_RECEIVED) {
+ ++count;
+ }
+ }
+ }
+ return count;
+ }
+
private int sentMessagesCount() {
int count = 0;
synchronized (this.messages) {
diff --git a/src/main/java/de/pixart/messenger/http/HttpDownloadConnection.java b/src/main/java/de/pixart/messenger/http/HttpDownloadConnection.java
index d49111dbf..722c1dea9 100644
--- a/src/main/java/de/pixart/messenger/http/HttpDownloadConnection.java
+++ b/src/main/java/de/pixart/messenger/http/HttpDownloadConnection.java
@@ -75,9 +75,9 @@ public class HttpDownloadConnection implements Transferable {
this.message.setTransferable(this);
try {
if (message.hasFileOnRemoteHost()) {
- mUrl = message.getFileParams().url;
+ mUrl = CryptoHelper.toHttpsUrl(message.getFileParams().url);
} else {
- mUrl = new URL(message.getBody());
+ mUrl = CryptoHelper.toHttpsUrl(new URL(message.getBody()));
}
String[] parts = mUrl.getPath().toLowerCase().split("\\.");
String lastPart = parts.length >= 1 ? parts[parts.length - 1] : null;
@@ -97,8 +97,8 @@ public class HttpDownloadConnection implements Transferable {
String filename = fileDateFormat.format(new Date(message.getTimeSent())) + "_" + message.getUuid().substring(0, 4);
message.setRelativeFilePath(filename + "." + extension);
this.file = mXmppConnectionService.getFileBackend().getFile(message, false);
- String reference = mUrl.getRef();
- if (reference != null && reference.length() == 96) {
+ final String reference = mUrl.getRef();
+ if (reference != null && reference.matches("([A-Fa-f0-9]{2}){48}")) {
this.file.setKeyAndIv(CryptoHelper.hexToBytes(reference));
}
@@ -342,7 +342,14 @@ public class HttpDownloadConnection implements Transferable {
private void updateImageBounds() {
message.setType(Message.TYPE_FILE);
- mXmppConnectionService.getFileBackend().updateFileParams(message, mUrl);
+ final URL url;
+ final String ref = mUrl.getRef();
+ if (ref != null && ref.matches("([A-Fa-f0-9]{2}){48}")) {
+ url = CryptoHelper.toAesGcmUrl(mUrl);
+ } else {
+ url = mUrl;
+ }
+ mXmppConnectionService.getFileBackend().updateFileParams(message, url);
mXmppConnectionService.updateMessage(message);
}
diff --git a/src/main/java/de/pixart/messenger/parser/PresenceParser.java b/src/main/java/de/pixart/messenger/parser/PresenceParser.java
index f87353ac7..cabac0d0a 100644
--- a/src/main/java/de/pixart/messenger/parser/PresenceParser.java
+++ b/src/main/java/de/pixart/messenger/parser/PresenceParser.java
@@ -53,6 +53,7 @@ public class PresenceParser extends AbstractParser implements
private void processConferencePresence(PresencePacket packet, Conversation conversation) {
MucOptions mucOptions = conversation.getMucOptions();
+ final Jid jid = conversation.getAccount().getJid();
final Jid from = packet.getFrom();
if (!from.isBareJid()) {
final String type = packet.getAttribute("type");
@@ -65,7 +66,7 @@ public class PresenceParser extends AbstractParser implements
if (item != null && !from.isBareJid()) {
mucOptions.setError(MucOptions.Error.NONE);
MucOptions.User user = parseItem(conversation, item, from);
- if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE)) {
+ if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE) || (codes.isEmpty() && jid.equals(item.getAttributeAsJid("jid")))) {
mucOptions.setOnline();
mucOptions.setSelf(user);
if (mucOptions.onRenameListener != null) {
@@ -107,10 +108,8 @@ public class PresenceParser extends AbstractParser implements
}
}
} else if (type.equals("unavailable")) {
- if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE) ||
- packet.getFrom().equals(mucOptions.getConversation().getJid())) {
+ if (codes.contains(MucOptions.STATUS_CODE_SELF_PRESENCE)) {
if (codes.contains(MucOptions.STATUS_CODE_KICKED)) {
- } else if (codes.contains(MucOptions.STATUS_CODE_KICKED)) {
mucOptions.setError(MucOptions.Error.KICKED);
} else if (codes.contains(MucOptions.STATUS_CODE_BANNED)) {
mucOptions.setError(MucOptions.Error.BANNED);
diff --git a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
index 2a0aa62dd..02f9273c7 100644
--- a/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
+++ b/src/main/java/de/pixart/messenger/services/XmppConnectionService.java
@@ -2450,6 +2450,7 @@ public class XmppConnectionService extends Service {
public void onFetchFailed(final Conversation conversation, Element error) {
if (error != null && "remote-server-not-found".equals(error.getName())) {
conversation.getMucOptions().setError(MucOptions.Error.SERVER_NOT_FOUND);
+ updateConversationUi();
} else {
join(conversation);
fetchConferenceConfiguration(conversation);
diff --git a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
index d8eb6eac2..5976bde02 100644
--- a/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
+++ b/src/main/java/de/pixart/messenger/ui/ConversationFragment.java
@@ -1072,7 +1072,11 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
showSnackbar(R.string.joining_conference, 0, null);
break;
case SERVER_NOT_FOUND:
- showSnackbar(R.string.remote_server_not_found, R.string.leave, leaveMuc);
+ if (conversation.receivedMessagesCount() > 0) {
+ showSnackbar(R.string.remote_server_not_found, R.string.try_again, joinMuc);
+ } else {
+ showSnackbar(R.string.remote_server_not_found, R.string.leave, leaveMuc);
+ }
break;
case PASSWORD_REQUIRED:
showSnackbar(R.string.conference_requires_password, R.string.enter_password, enterPassword);
@@ -1094,6 +1098,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
showSnackbar(R.string.conference_shutdown, R.string.join, joinMuc);
break;
default:
+ hideSnackbar();
break;
}
} else if (account.hasPendingPgpIntent(conversation)) {
diff --git a/src/main/java/de/pixart/messenger/utils/CryptoHelper.java b/src/main/java/de/pixart/messenger/utils/CryptoHelper.java
index 06fda4163..d15f4bef5 100644
--- a/src/main/java/de/pixart/messenger/utils/CryptoHelper.java
+++ b/src/main/java/de/pixart/messenger/utils/CryptoHelper.java
@@ -29,6 +29,7 @@ import de.pixart.messenger.Config;
import de.pixart.messenger.R;
import de.pixart.messenger.entities.Account;
import de.pixart.messenger.entities.Message;
+import de.pixart.messenger.http.AesGcmURLStreamHandler;
import de.pixart.messenger.xmpp.jid.InvalidJidException;
import de.pixart.messenger.xmpp.jid.Jid;
@@ -238,7 +239,18 @@ public final class CryptoHelper {
return url;
}
try {
- return new URL("aesgcm" + url.toString().substring(url.getProtocol().length()));
+ return new URL(AesGcmURLStreamHandler.PROTOCOL_NAME + url.toString().substring(url.getProtocol().length()));
+ } catch (MalformedURLException e) {
+ return url;
+ }
+ }
+
+ public static URL toHttpsUrl(URL url) {
+ if (!url.getProtocol().equalsIgnoreCase(AesGcmURLStreamHandler.PROTOCOL_NAME)) {
+ return url;
+ }
+ try {
+ return new URL("https" + url.toString().substring(url.getProtocol().length()));
} catch (MalformedURLException e) {
return url;
}
diff --git a/src/main/java/de/pixart/messenger/utils/UIHelper.java b/src/main/java/de/pixart/messenger/utils/UIHelper.java
index 4f2c5a349..53727b8ee 100644
--- a/src/main/java/de/pixart/messenger/utils/UIHelper.java
+++ b/src/main/java/de/pixart/messenger/utils/UIHelper.java
@@ -253,7 +253,7 @@ public class UIHelper {
} else if (previousWasNumber && (c == '.' || c == ',')) {
previousWasNumber = false;
} else {
- return Character.isWhitespace(c) && previousWasNumber;
+ return (Character.isWhitespace(c) || c == '%' || c == '+') && previousWasNumber;
}
}
return previousWasNumber;