aboutsummaryrefslogtreecommitdiffstats
path: root/src/eu/siacs/conversations/services
diff options
context:
space:
mode:
authoriNPUTmice <daniel@gultsch.de>2014-10-15 22:08:13 +0200
committeriNPUTmice <daniel@gultsch.de>2014-10-15 22:08:13 +0200
commitf5019ba96647bd1c33153e6e9099d21dcf47bfa7 (patch)
tree5791e6832d3ad617f6e4a3fa3a6761a97d3dee8c /src/eu/siacs/conversations/services
parent89cc4d12477e4c5593d10b69e0ed42cbaedfb190 (diff)
detect deleted files on start up. got rid of lagecy image provider for performance reasons. NOTE: this will prevent you to access images older than version 0.6
Diffstat (limited to '')
-rw-r--r--src/eu/siacs/conversations/services/ImageProvider.java109
-rw-r--r--src/eu/siacs/conversations/services/XmppConnectionService.java32
2 files changed, 31 insertions, 110 deletions
diff --git a/src/eu/siacs/conversations/services/ImageProvider.java b/src/eu/siacs/conversations/services/ImageProvider.java
deleted file mode 100644
index ac78a454..00000000
--- a/src/eu/siacs/conversations/services/ImageProvider.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package eu.siacs.conversations.services;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-
-import eu.siacs.conversations.Config;
-import eu.siacs.conversations.entities.Account;
-import eu.siacs.conversations.entities.Conversation;
-import eu.siacs.conversations.entities.Message;
-import eu.siacs.conversations.persistance.DatabaseBackend;
-import eu.siacs.conversations.persistance.FileBackend;
-import android.content.ContentProvider;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.ParcelFileDescriptor;
-import android.util.Log;
-
-public class ImageProvider extends ContentProvider {
-
- @Override
- public ParcelFileDescriptor openFile(Uri uri, String mode)
- throws FileNotFoundException {
- ParcelFileDescriptor pfd;
- FileBackend fileBackend = new FileBackend(getContext());
- if ("r".equals(mode)) {
- DatabaseBackend databaseBackend = DatabaseBackend
- .getInstance(getContext());
- String uuids = uri.getPath();
- Log.d(Config.LOGTAG, "uuids = " + uuids + " mode=" + mode);
- if (uuids == null) {
- throw new FileNotFoundException();
- }
- String[] uuidsSplited = uuids.split("/", 2);
- if (uuidsSplited.length != 3) {
- throw new FileNotFoundException();
- }
- String conversationUuid = uuidsSplited[1];
- String messageUuid = uuidsSplited[2].split("\\.")[0];
-
- Log.d(Config.LOGTAG, "messageUuid=" + messageUuid);
-
- Conversation conversation = databaseBackend
- .findConversationByUuid(conversationUuid);
- if (conversation == null) {
- throw new FileNotFoundException("conversation "
- + conversationUuid + " could not be found");
- }
- Message message = databaseBackend.findMessageByUuid(messageUuid);
- if (message == null) {
- throw new FileNotFoundException("message " + messageUuid
- + " could not be found");
- }
-
- Account account = databaseBackend.findAccountByUuid(conversation
- .getAccountUuid());
- if (account == null) {
- throw new FileNotFoundException("account "
- + conversation.getAccountUuid() + " cound not be found");
- }
- message.setConversation(conversation);
- conversation.setAccount(account);
-
- File file = fileBackend.getJingleFileLegacy(message);
- pfd = ParcelFileDescriptor.open(file,
- ParcelFileDescriptor.MODE_READ_ONLY);
- return pfd;
- } else {
- throw new FileNotFoundException();
- }
- }
-
- @Override
- public int delete(Uri arg0, String arg1, String[] arg2) {
- return 0;
- }
-
- @Override
- public String getType(Uri arg0) {
- return null;
- }
-
- @Override
- public Uri insert(Uri arg0, ContentValues arg1) {
- return null;
- }
-
- @Override
- public boolean onCreate() {
- return false;
- }
-
- @Override
- public Cursor query(Uri arg0, String[] arg1, String arg2, String[] arg3,
- String arg4) {
- return null;
- }
-
- @Override
- public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
- return 0;
- }
-
- public static Uri getProviderUri(Message message) {
- return Uri.parse("content://eu.siacs.conversations.images/"
- + message.getConversationUuid() + "/" + message.getUuid()
- + ".webp");
- }
-} \ No newline at end of file
diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java
index 07897f8c..04d5711a 100644
--- a/src/eu/siacs/conversations/services/XmppConnectionService.java
+++ b/src/eu/siacs/conversations/services/XmppConnectionService.java
@@ -27,6 +27,7 @@ import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.entities.Bookmark;
import eu.siacs.conversations.entities.Contact;
import eu.siacs.conversations.entities.Conversation;
+import eu.siacs.conversations.entities.Downloadable;
import eu.siacs.conversations.entities.Message;
import eu.siacs.conversations.entities.MucOptions;
import eu.siacs.conversations.entities.MucOptions.OnRenameListener;
@@ -797,11 +798,21 @@ public class XmppConnectionService extends Service {
Account account = accountLookupTable.get(conv.getAccountUuid());
conv.setAccount(account);
conv.setMessages(databaseBackend.getMessages(conv, 50));
+ checkDeletedFiles(conv);
}
}
-
return this.conversations;
}
+
+ private void checkDeletedFiles(Conversation conversation) {
+ for(Message message : conversation.getMessages()) {
+ if (message.getType() == Message.TYPE_IMAGE && message.getEncryption() != Message.ENCRYPTION_PGP) {
+ if (!getFileBackend().isFileAvailable(message)) {
+ message.setDownloadable(new DeletedDownloadable());
+ }
+ }
+ }
+ }
public void populateWithOrderedConversations(List<Conversation> list) {
populateWithOrderedConversations(list, true);
@@ -1833,4 +1844,23 @@ public class XmppConnectionService extends Service {
public HttpConnectionManager getHttpConnectionManager() {
return this.mHttpConnectionManager;
}
+
+ private class DeletedDownloadable implements Downloadable {
+
+ @Override
+ public void start() {
+ return;
+ }
+
+ @Override
+ public int getStatus() {
+ return Downloadable.STATUS_DELETED;
+ }
+
+ @Override
+ public long getFileSize() {
+ return 0;
+ }
+
+ }
}