treat URL as file if URL is in oob or contains key
This commit is contained in:
parent
26badb7f4c
commit
99565a6876
|
@ -123,7 +123,7 @@ public class PgpDecryptionService {
|
|||
message.setEncryption(Message.ENCRYPTION_DECRYPTED);
|
||||
final HttpConnectionManager manager = mXmppConnectionService.getHttpConnectionManager();
|
||||
if (message.trusted()
|
||||
&& message.treatAsDownloadable() != Message.Decision.NEVER
|
||||
&& message.treatAsDownloadable()
|
||||
&& manager.getAutoAcceptFileSize() > 0) {
|
||||
manager.createNewDownloadConnection(message);
|
||||
}
|
||||
|
|
|
@ -167,7 +167,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
|
|||
for (final Message message : this.messages) {
|
||||
if (message.getUuid().equals(uuid)
|
||||
&& message.getEncryption() != Message.ENCRYPTION_PGP
|
||||
&& (message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE || message.treatAsDownloadable() != Message.Decision.NEVER)) {
|
||||
&& (message.getType() == Message.TYPE_IMAGE || message.getType() == Message.TYPE_FILE || message.treatAsDownloadable())) {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -492,8 +492,8 @@ public class Message extends AbstractEntity {
|
|||
this.getBody().length() + message.getBody().length() <= Config.MAX_DISPLAY_MESSAGE_CHARS &&
|
||||
!GeoHelper.isGeoUri(message.getBody()) &&
|
||||
!GeoHelper.isGeoUri(this.body) &&
|
||||
message.treatAsDownloadable() == Decision.NEVER &&
|
||||
this.treatAsDownloadable() == Decision.NEVER &&
|
||||
!message.treatAsDownloadable() &&
|
||||
!this.treatAsDownloadable() &&
|
||||
!message.getBody().startsWith(ME_COMMAND) &&
|
||||
!this.getBody().startsWith(ME_COMMAND) &&
|
||||
!this.bodyIsHeart() &&
|
||||
|
@ -603,12 +603,6 @@ public class Message extends AbstractEntity {
|
|||
this.oob = isOob;
|
||||
}
|
||||
|
||||
public enum Decision {
|
||||
MUST,
|
||||
SHOULD,
|
||||
NEVER,
|
||||
}
|
||||
|
||||
private static String extractRelevantExtension(URL url) {
|
||||
String path = url.getPath();
|
||||
return extractRelevantExtension(path);
|
||||
|
@ -651,38 +645,20 @@ public class Message extends AbstractEntity {
|
|||
}
|
||||
}
|
||||
|
||||
public Decision treatAsDownloadable() {
|
||||
public boolean treatAsDownloadable() {
|
||||
if (body.trim().contains(" ")) {
|
||||
return Decision.NEVER;
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
URL url = new URL(body);
|
||||
String ref = url.getRef();
|
||||
final URL url = new URL(body);
|
||||
final String ref = url.getRef();
|
||||
final String protocol = url.getProtocol();
|
||||
final boolean encrypted = ref != null && ref.matches("([A-Fa-f0-9]{2}){48}");
|
||||
if (AesGcmURLStreamHandler.PROTOCOL_NAME.equalsIgnoreCase(protocol) && encrypted) {
|
||||
return Decision.MUST;
|
||||
}
|
||||
if (!url.getProtocol().equalsIgnoreCase("http") && !url.getProtocol().equalsIgnoreCase("https")) {
|
||||
return Decision.NEVER;
|
||||
} else if (oob || encrypted) {
|
||||
return Decision.MUST;
|
||||
}
|
||||
final String extension = extractRelevantExtension(url);
|
||||
|
||||
if (extension == null
|
||||
|| encryption == Message.ENCRYPTION_OTR
|
||||
|| encryption == Message.ENCRYPTION_AXOLOTL) {
|
||||
return Decision.NEVER;
|
||||
} else if (Transferable.VALID_IMAGE_EXTENSIONS.contains(extension)
|
||||
|| Transferable.WELL_KNOWN_EXTENSIONS.contains(extension)) {
|
||||
return Decision.SHOULD;
|
||||
} else {
|
||||
return Decision.NEVER;
|
||||
}
|
||||
return (AesGcmURLStreamHandler.PROTOCOL_NAME.equalsIgnoreCase(protocol) && encrypted)
|
||||
|| ((protocol.equalsIgnoreCase("http") || protocol.equalsIgnoreCase("https")) && (oob || encrypted));
|
||||
|
||||
} catch (MalformedURLException e) {
|
||||
return Decision.NEVER;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -619,7 +619,7 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece
|
|||
|
||||
mXmppConnectionService.databaseBackend.createMessage(message);
|
||||
final HttpConnectionManager manager = this.mXmppConnectionService.getHttpConnectionManager();
|
||||
if (message.trusted() && message.treatAsDownloadable() != Message.Decision.NEVER && manager.getAutoAcceptFileSize() > 0) {
|
||||
if (message.trusted() && message.treatAsDownloadable() && manager.getAutoAcceptFileSize() > 0) {
|
||||
manager.createNewDownloadConnection(message);
|
||||
} else if (notify) {
|
||||
if (query != null && query.isCatchup()) {
|
||||
|
|
|
@ -472,10 +472,7 @@ public class NotificationService {
|
|||
|
||||
private Message getFirstDownloadableMessage(final Iterable<Message> messages) {
|
||||
for (final Message message : messages) {
|
||||
if (message.getTransferable() != null
|
||||
&& (message.getType() == Message.TYPE_FILE
|
||||
|| message.getType() == Message.TYPE_IMAGE
|
||||
|| message.treatAsDownloadable() != Message.Decision.NEVER)) {
|
||||
if (message.getTransferable() != null || (message.getType() == Message.TYPE_TEXT && message.treatAsDownloadable())) {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -665,7 +665,7 @@ public class ConversationActivity extends XmppActivity
|
|||
if (!transferable.start()) {
|
||||
Toast.makeText(this, R.string.not_connected_try_again, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
} else if (message.treatAsDownloadable() != Message.Decision.NEVER) {
|
||||
} else if (message.treatAsDownloadable()) {
|
||||
xmppConnectionService.getHttpConnectionManager().createNewDownloadConnection(message, true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -609,13 +609,12 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
|
|||
MenuItem shareWith = menu.findItem(R.id.share_with);
|
||||
MenuItem sendAgain = menu.findItem(R.id.send_again);
|
||||
MenuItem copyUrl = menu.findItem(R.id.copy_url);
|
||||
MenuItem downloadFile = menu.findItem(R.id.download_file);
|
||||
MenuItem cancelTransmission = menu.findItem(R.id.cancel_transmission);
|
||||
MenuItem deleteFile = menu.findItem(R.id.delete_file);
|
||||
MenuItem showErrorMessage = menu.findItem(R.id.show_error_message);
|
||||
if (!treatAsFile
|
||||
&& !GeoHelper.isGeoUri(m.getBody())
|
||||
&& m.treatAsDownloadable() != Message.Decision.MUST) {
|
||||
&& !m.treatAsDownloadable()) {
|
||||
copyText.setVisible(true);
|
||||
selectText.setVisible(ListSelectionManager.isSupported());
|
||||
}
|
||||
|
@ -635,15 +634,10 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
|
|||
}
|
||||
if (m.hasFileOnRemoteHost()
|
||||
|| GeoHelper.isGeoUri(m.getBody())
|
||||
|| m.treatAsDownloadable() == Message.Decision.MUST
|
||||
|| m.treatAsDownloadable()
|
||||
|| (t != null && t instanceof HttpDownloadConnection)) {
|
||||
copyUrl.setVisible(true);
|
||||
}
|
||||
if ((m.getType() == Message.TYPE_TEXT && t == null && m.treatAsDownloadable() != Message.Decision.NEVER)
|
||||
|| (m.isFileOrImage() && t instanceof TransferablePlaceholder && m.hasFileOnRemoteHost())){
|
||||
downloadFile.setVisible(true);
|
||||
downloadFile.setTitle(activity.getString(R.string.download_x_file,UIHelper.getFileDescriptionString(activity, m)));
|
||||
}
|
||||
boolean waitingOfferedSending = m.getStatus() == Message.STATUS_WAITING
|
||||
|| m.getStatus() == Message.STATUS_UNSEND
|
||||
|| m.getStatus() == Message.STATUS_OFFERED;
|
||||
|
@ -684,9 +678,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
|
|||
case R.id.copy_url:
|
||||
copyUrl(selectedMessage);
|
||||
return true;
|
||||
case R.id.download_file:
|
||||
downloadFile(selectedMessage);
|
||||
return true;
|
||||
case R.id.cancel_transmission:
|
||||
cancelTransmission(selectedMessage);
|
||||
return true;
|
||||
|
@ -808,11 +799,6 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
|
|||
}
|
||||
}
|
||||
|
||||
private void downloadFile(Message message) {
|
||||
activity.xmppConnectionService.getHttpConnectionManager()
|
||||
.createNewDownloadConnection(message,true);
|
||||
}
|
||||
|
||||
private void cancelTransmission(Message message) {
|
||||
Transferable transferable = message.getTransferable();
|
||||
if (transferable != null) {
|
||||
|
|
|
@ -766,7 +766,7 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
|
|||
displayLocationMessage(viewHolder,message);
|
||||
} else if (message.bodyIsHeart()) {
|
||||
displayHeartMessage(viewHolder, message.getBody().trim());
|
||||
} else if (message.treatAsDownloadable() == Message.Decision.MUST) {
|
||||
} else if (message.treatAsDownloadable()) {
|
||||
try {
|
||||
URL url = new URL(message.getBody());
|
||||
displayDownloadableMessage(viewHolder,
|
||||
|
|
|
@ -196,7 +196,7 @@ public class UIHelper {
|
|||
} else {
|
||||
return new Pair<>(context.getString(R.string.location), true);
|
||||
}
|
||||
} else if (message.treatAsDownloadable() == Message.Decision.MUST) {
|
||||
} else if (message.treatAsDownloadable()) {
|
||||
return new Pair<>(context.getString(R.string.x_file_offered_for_download,
|
||||
getFileDescriptionString(context,message)),true);
|
||||
} else {
|
||||
|
|
|
@ -33,10 +33,6 @@
|
|||
android:id="@+id/send_again"
|
||||
android:title="@string/send_again"
|
||||
android:visible="false"/>
|
||||
<item
|
||||
android:id="@+id/download_file"
|
||||
android:title="@string/download_x_file"
|
||||
android:visible="false"/>
|
||||
<item
|
||||
android:id="@+id/cancel_transmission"
|
||||
android:title="@string/cancel_transmission"
|
||||
|
|
Loading…
Reference in a new issue