diff options
Diffstat (limited to 'src/main/java/de/pixart/messenger/utils')
-rw-r--r-- | src/main/java/de/pixart/messenger/utils/MimeUtils.java | 2 | ||||
-rw-r--r-- | src/main/java/de/pixart/messenger/utils/Resolver.java | 39 | ||||
-rw-r--r-- | src/main/java/de/pixart/messenger/utils/UIHelper.java | 5 |
3 files changed, 39 insertions, 7 deletions
diff --git a/src/main/java/de/pixart/messenger/utils/MimeUtils.java b/src/main/java/de/pixart/messenger/utils/MimeUtils.java index 8603a8a89..31159e27a 100644 --- a/src/main/java/de/pixart/messenger/utils/MimeUtils.java +++ b/src/main/java/de/pixart/messenger/utils/MimeUtils.java @@ -278,6 +278,8 @@ public final class MimeUtils { add("image/jpeg", "jpg"); add("image/jpeg", "jpeg"); add("image/jpeg", "jpe"); + add("image/jpeg", "jfif"); + add("image/jpeg", "jif"); add("image/pcx", "pcx"); add("image/png", "png"); add("image/svg+xml", "svg"); diff --git a/src/main/java/de/pixart/messenger/utils/Resolver.java b/src/main/java/de/pixart/messenger/utils/Resolver.java index ed5e62fd3..a7c286cc7 100644 --- a/src/main/java/de/pixart/messenger/utils/Resolver.java +++ b/src/main/java/de/pixart/messenger/utils/Resolver.java @@ -1,6 +1,7 @@ package de.pixart.messenger.utils; import android.content.ContentValues; +import android.database.Cursor; import android.util.Log; import androidx.annotation.NonNull; @@ -168,6 +169,7 @@ public class Resolver { final Result result = new Result(); result.ip = InetAddress.getByName(domain); result.port = port; + result.authenticated = true; return result; } catch (UnknownHostException e) { e.printStackTrace(); @@ -202,18 +204,20 @@ public class Resolver { })); fallbackThreads.add(new Thread(() -> { try { - for (CNAME cname : resolveWithFallback(record.name, CNAME.class, result.isAuthenticData()).getAnswersOrEmptySet()) { - final List<Result> ipv6s = resolveIp(record, cname.name, AAAA.class, result.isAuthenticData(), directTls); + ResolverResult<CNAME> cnames = resolveWithFallback(record.name, CNAME.class, result.isAuthenticData()); + for (CNAME cname : cnames.getAnswersOrEmptySet()) { + final List<Result> ipv6s = resolveIp(record, cname.name, AAAA.class, cnames.isAuthenticData(), directTls); synchronized (fallbackResults) { fallbackResults.addAll(ipv6s); } - final List<Result> ipv4s = resolveIp(record, cname.name, A.class, result.isAuthenticData(), directTls); + final List<Result> ipv4s = resolveIp(record, cname.name, A.class, cnames.isAuthenticData(), directTls); synchronized (results) { fallbackResults.addAll(ipv4s); } } + Log.d(Config.LOGTAG, Resolver.class.getSimpleName() + "cname in srv (agains RFC2782) - run slow fallback"); } catch (Throwable throwable) { - Log.d(Config.LOGTAG, Resolver.class.getSimpleName() + "error resolving srv cname-fallback records", throwable); + Log.i(Config.LOGTAG, Resolver.class.getSimpleName() + "error resolving srv cname-fallback records", throwable); } })); } @@ -358,12 +362,14 @@ public class Resolver { } public static class Result implements Comparable<Result>, Callable<Result> { + public static final String DOMAIN = "domain"; public static final String IP = "ip"; public static final String HOSTNAME = "hostname"; public static final String PORT = "port"; public static final String PRIORITY = "priority"; public static final String DIRECT_TLS = "directTls"; public static final String AUTHENTICATED = "authenticated"; + public static final String TIME_REQUESTED = "time_requested"; private InetAddress ip; private DNSName hostname; @@ -371,12 +377,14 @@ public class Resolver { private boolean directTls = false; private boolean authenticated = false; private int priority; + private long timeRequested; private Socket socket; private String logID = ""; static Result fromRecord(final SRV srv, final boolean directTls) { Result result = new Result(); + result.timeRequested = System.currentTimeMillis(); result.port = srv.port; result.hostname = srv.name; result.directTls = directTls; @@ -386,6 +394,7 @@ public class Resolver { static Result createDefault(final DNSName hostname, final InetAddress ip, final int port) { Result result = new Result(); + result.timeRequested = System.currentTimeMillis(); result.port = port; result.hostname = hostname; result.ip = ip; @@ -430,6 +439,10 @@ public class Resolver { return authenticated; } + public boolean isOutdated() { + return (System.currentTimeMillis() - timeRequested) > 300_000; + } + public Socket getSocket() { return socket; } @@ -506,6 +519,23 @@ public class Resolver { throw new Exception("Resolver.Result was not possible to connect - should be catched by executor"); } + public static Result fromCursor(Cursor cursor) { + final Result result = new Result(); + try { + result.ip = InetAddress.getByAddress(cursor.getBlob(cursor.getColumnIndex(IP))); + } catch (UnknownHostException e) { + result.ip = null; + } + final String hostname = cursor.getString(cursor.getColumnIndex(HOSTNAME)); + result.hostname = hostname == null ? null : DNSName.from(hostname); + result.port = cursor.getInt(cursor.getColumnIndex(PORT)); + result.directTls = cursor.getInt(cursor.getColumnIndex(DIRECT_TLS)) > 0; + result.authenticated = cursor.getInt(cursor.getColumnIndex(AUTHENTICATED)) > 0; + result.priority = cursor.getInt(cursor.getColumnIndex(PRIORITY)); + result.timeRequested = cursor.getLong(cursor.getColumnIndex(TIME_REQUESTED)); + return result; + } + public ContentValues toContentValues() { final ContentValues contentValues = new ContentValues(); contentValues.put(IP, ip == null ? null : ip.getAddress()); @@ -514,6 +544,7 @@ public class Resolver { contentValues.put(PRIORITY, priority); contentValues.put(DIRECT_TLS, directTls ? 1 : 0); contentValues.put(AUTHENTICATED, authenticated ? 1 : 0); + contentValues.put(TIME_REQUESTED, timeRequested); return contentValues; } } diff --git a/src/main/java/de/pixart/messenger/utils/UIHelper.java b/src/main/java/de/pixart/messenger/utils/UIHelper.java index e2b3c2f2c..7a40ba6d6 100644 --- a/src/main/java/de/pixart/messenger/utils/UIHelper.java +++ b/src/main/java/de/pixart/messenger/utils/UIHelper.java @@ -35,6 +35,7 @@ import de.pixart.messenger.entities.Presence; import de.pixart.messenger.entities.Transferable; import de.pixart.messenger.services.ExportBackupService; import de.pixart.messenger.services.XmppConnectionService; +import de.pixart.messenger.ui.util.MyLinkify; import rocks.xmpp.addr.Jid; import static de.pixart.messenger.entities.Message.DELETED_MESSAGE_BODY; @@ -316,7 +317,7 @@ public class UIHelper { return new Pair<>(context.getString(R.string.x_file_offered_for_download, getFileDescriptionString(context, message)), true); } else { - SpannableStringBuilder styledBody = new SpannableStringBuilder(body); + SpannableStringBuilder styledBody = new SpannableStringBuilder(MyLinkify.replaceYoutube(context, body)); if (textColor != 0) { StylingHelper.format(styledBody, 0, styledBody.length() - 1, textColor); } @@ -603,8 +604,6 @@ public class UIHelper { return new ListItem.Tag(context.getString(R.string.presence_xa), 0xfff44336, 0, account); case DND: return new ListItem.Tag(context.getString(R.string.presence_dnd), 0xfff44336, 0, account); - case OFFLINE: - return new ListItem.Tag(context.getString(R.string.presence_offline), 0xff808080, 1, account); default: return new ListItem.Tag(context.getString(R.string.presence_online), 0xff259b24, 0, account); } |