anotherim/src/eu/siacs/conversations/services/ImageProvider.java

109 lines
3 KiB
Java
Raw Normal View History

package eu.siacs.conversations.services;
import java.io.File;
import java.io.FileNotFoundException;
2014-08-31 14:28:21 +00:00
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 {
2014-05-13 14:48:39 +00:00
ParcelFileDescriptor pfd;
FileBackend fileBackend = new FileBackend(getContext());
2014-05-13 14:48:39 +00:00
if ("r".equals(mode)) {
DatabaseBackend databaseBackend = DatabaseBackend
.getInstance(getContext());
String uuids = uri.getPath();
2014-08-31 14:28:21 +00:00
Log.d(Config.LOGTAG, "uuids = " + uuids + " mode=" + mode);
2014-05-13 14:48:39 +00:00
if (uuids == null) {
throw new FileNotFoundException();
}
String[] uuidsSplited = uuids.split("/");
if (uuidsSplited.length != 3) {
throw new FileNotFoundException();
}
String conversationUuid = uuidsSplited[1];
String messageUuid = uuidsSplited[2].split("\\.")[0];
2014-08-31 14:28:21 +00:00
Log.d(Config.LOGTAG, "messageUuid=" + messageUuid);
2014-05-13 14:48:39 +00:00
Conversation conversation = databaseBackend
.findConversationByUuid(conversationUuid);
if (conversation == null) {
2014-08-31 14:28:21 +00:00
throw new FileNotFoundException("conversation "
+ conversationUuid + " could not be found");
2014-05-13 14:48:39 +00:00
}
Message message = databaseBackend.findMessageByUuid(messageUuid);
if (message == null) {
throw new FileNotFoundException("message " + messageUuid
+ " could not be found");
}
2014-08-31 14:28:21 +00:00
2014-05-13 14:48:39 +00:00
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);
2014-08-31 14:28:21 +00:00
File file = fileBackend.getJingleFileLegacy(message);
2014-05-13 14:48:39 +00:00
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;
}
2014-08-31 14:28:21 +00:00
public static Uri getProviderUri(Message message) {
2014-08-31 14:28:21 +00:00
return Uri.parse("content://eu.siacs.conversations.images/"
+ message.getConversationUuid() + "/" + message.getUuid()
+ ".webp");
}
2014-05-13 14:48:39 +00:00
}