diff options
author | desperateCoder <echotodevnull@gmail.com> | 2019-12-07 02:03:06 +0300 |
---|---|---|
committer | desperateCoder <echotodevnull@gmail.com> | 2019-12-07 02:03:16 +0300 |
commit | b0efc5c7e23581d94b6e90653fd6db3b2f951b49 (patch) | |
tree | 45d5680cd4a1cde08b935ee4eea0c6578252aa72 /app/src/main/java | |
parent | 2df41bf4a1f3ae03998a261fdc41e271ea2da8c6 (diff) |
#211 upload attachments WIP
Diffstat (limited to 'app/src/main/java')
6 files changed, 90 insertions, 49 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/Attachment.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/Attachment.java index 7a50d224d..e1e48a918 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/model/Attachment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/Attachment.java @@ -33,6 +33,7 @@ public class Attachment extends AbstractRemoteEntity { private String basename; private String extension; private String filename; + private String localPath; public long getCardId() { return cardId; @@ -130,34 +131,19 @@ public class Attachment extends AbstractRemoteEntity { this.filename = filename; } - @Override - public String toString() { - return "Attachment{" + - "cardId=" + cardId + - ", type='" + type + '\'' + - ", data='" + data + '\'' + - ", createdAt=" + createdAt + - ", createdBy='" + createdBy + '\'' + - ", deletedAt=" + deletedAt + - ", filesize=" + filesize + - ", mimetype='" + mimetype + '\'' + - ", dirname='" + dirname + '\'' + - ", basename='" + basename + '\'' + - ", extension='" + extension + '\'' + - ", filename='" + filename + '\'' + - ", localId=" + localId + - ", accountId=" + accountId + - ", id=" + id + - ", status=" + status + - ", lastModified=" + lastModified + - ", lastModifiedLocal=" + lastModifiedLocal + - '}'; + public String getLocalPath() { + return localPath; + } + + public void setLocalPath(String localPath) { + this.localPath = localPath; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; Attachment that = (Attachment) o; @@ -178,12 +164,15 @@ public class Attachment extends AbstractRemoteEntity { return false; if (extension != null ? !extension.equals(that.extension) : that.extension != null) return false; - return filename != null ? filename.equals(that.filename) : that.filename == null; + if (filename != null ? !filename.equals(that.filename) : that.filename != null) + return false; + return localPath != null ? localPath.equals(that.localPath) : that.localPath == null; } @Override public int hashCode() { - int result = (int) (cardId ^ (cardId >>> 32)); + int result = super.hashCode(); + result = 31 * result + (int) (cardId ^ (cardId >>> 32)); result = 31 * result + (type != null ? type.hashCode() : 0); result = 31 * result + (data != null ? data.hashCode() : 0); result = 31 * result + (createdAt != null ? createdAt.hashCode() : 0); @@ -195,6 +184,7 @@ public class Attachment extends AbstractRemoteEntity { result = 31 * result + (basename != null ? basename.hashCode() : 0); result = 31 * result + (extension != null ? extension.hashCode() : 0); result = 31 * result + (filename != null ? filename.hashCode() : 0); + result = 31 * result + (localPath != null ? localPath.hashCode() : 0); return result; } }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java index 3f16206ba..26f82682d 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java @@ -1,8 +1,10 @@ package it.niedermann.nextcloud.deck.persistence.sync; import android.app.Activity; +import android.content.ContentResolver; import android.content.Context; import android.net.Uri; +import android.webkit.MimeTypeMap; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -12,7 +14,6 @@ import androidx.lifecycle.MutableLiveData; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppAccountNotFoundException; import com.nextcloud.android.sso.exceptions.NoCurrentAccountSelectedException; -import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -893,30 +894,38 @@ public class SyncManager { public void addAttachmentToCard(long accountId, long localCardId, @NonNull Uri uri) { doAsync(() -> { - Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId); - Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); - serverAdapter.uploadAttachment(board.getId(), stack.getId(), card.getId(), new File(uri.getPath()), new IResponseCallback<Attachment>(dataBaseAdapter.readAccountDirectly(accountId)) { - @Override - public void onResponse(Attachment response) { - DeckLog.log("uploading "+uri.getPath()+" successful."); - } - }); + if (serverAdapter.hasInternetConnection()) { + Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId); + Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); + Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); + + ContentResolver cR = dataBaseAdapter.getContext().getContentResolver(); + MimeTypeMap mime = MimeTypeMap.getSingleton(); + String type = mime.getExtensionFromMimeType(cR.getType(uri)); + serverAdapter.uploadAttachment(board.getId(), stack.getId(), card.getId(), type, uri, new IResponseCallback<Attachment>(dataBaseAdapter.readAccountDirectly(accountId)) { + @Override + public void onResponse(Attachment response) { + DeckLog.log("uploading " + uri.getPath() + " successful."); + } + }); + } }); } - public void deleteAttachmentToCard(long accountId, long localCardId, long localAttachmentId) { + public void deleteAttachmentOfCard(long accountId, long localCardId, long localAttachmentId) { doAsync(() -> { - Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId); - Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); - Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); - Attachment attachment = dataBaseAdapter.getAttachmentByLocalIdDirectly(accountId, localAttachmentId); - serverAdapter.deleteAttachment(board.getId(), stack.getId(), card.getId(), attachment.getId(), new IResponseCallback<Void>(dataBaseAdapter.readAccountDirectly(accountId)) { - @Override - public void onResponse(Void response) { - DeckLog.log("deleted Attachment "+attachment.getBasename()); - } - }); + if (serverAdapter.hasInternetConnection()) { + Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, localCardId); + Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); + Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); + Attachment attachment = dataBaseAdapter.getAttachmentByLocalIdDirectly(accountId, localAttachmentId); + serverAdapter.deleteAttachment(board.getId(), stack.getId(), card.getId(), attachment.getId(), new IResponseCallback<Void>(dataBaseAdapter.readAccountDirectly(accountId)) { + @Override + public void onResponse(Void response) { + DeckLog.log("deleted Attachment "+attachment.getBasename()); + } + }); + } }); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java index 1b39d0a70..148f333c9 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java @@ -1,13 +1,16 @@ package it.niedermann.nextcloud.deck.persistence.sync.adapters; import android.app.Activity; +import android.content.ContentResolver; import android.content.Context; import android.content.SharedPreferences; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; +import android.net.Uri; import android.preference.PreferenceManager; +import android.webkit.MimeTypeMap; import androidx.annotation.Nullable; @@ -268,8 +271,9 @@ public class ServerAdapter { } // ## ATTACHMENTS - public void uploadAttachment(Long remoteBoardId, long remoteStackId, long remoteCardId, File attachment, IResponseCallback<Attachment> responseCallback) { + public void uploadAttachment(Long remoteBoardId, long remoteStackId, long remoteCardId, String contentType, Uri attachmentUri, IResponseCallback<Attachment> responseCallback) { ensureInternetConnection(); + File attachment = new File(attachmentUri.getPath()); MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", attachment.getName(), RequestBody.create(MediaType.parse("image/*"), attachment)); MultipartBody.Part typePart = MultipartBody.Part.createFormData("type", attachment.getName(), RequestBody.create(MediaType.parse("text/plain"), "deck_file")); RequestHelper.request(sourceActivity, provider, () -> provider.getDeckAPI().uploadAttachment(remoteBoardId, remoteStackId, remoteCardId, typePart, filePart), responseCallback); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java index c477393a4..d96a3c0af 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java @@ -31,11 +31,17 @@ import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiv public class DataBaseAdapter { private DeckDatabase db; + private Context context; public DataBaseAdapter(Context applicationContext) { + this.context = applicationContext; this.db = DeckDatabase.getInstance(applicationContext); } + public Context getContext() { + return context; + } + private <T extends AbstractRemoteEntity> void markAsEditedIfNeeded(T entity, boolean setStatus) { if (!setStatus) return; entity.setStatusEnum(DBStatus.LOCAL_EDITED); @@ -490,6 +496,16 @@ public class DataBaseAdapter { db.getAttachmentDao().update(attachment); } + public void deleteAttachment(long accountId, Attachment attachment, boolean setStatus) { + attachment.setAccountId(accountId); + if (setStatus) { + markAsDeletedIfNeeded(attachment, setStatus); + db.getAttachmentDao().update(attachment); + } else { + db.getAttachmentDao().delete(attachment); + } + } + private void validateSearchTerm(String searchTerm){ if (searchTerm == null || searchTerm.trim().length()<1) { throw new IllegalArgumentException("please provide a proper search term! \""+searchTerm+"\" doesn't seem right..."); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AttachmentDataProvider.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AttachmentDataProvider.java index 2f567e6f9..e84493543 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AttachmentDataProvider.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AttachmentDataProvider.java @@ -1,10 +1,19 @@ package it.niedermann.nextcloud.deck.persistence.sync.helpers.providers; +import android.content.ContentResolver; +import android.net.Uri; +import android.webkit.MimeTypeMap; + +import java.io.File; import java.util.Date; import java.util.List; +import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.api.IResponseCallback; import it.niedermann.nextcloud.deck.model.Attachment; +import it.niedermann.nextcloud.deck.model.Board; +import it.niedermann.nextcloud.deck.model.Card; +import it.niedermann.nextcloud.deck.model.Stack; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.persistence.sync.adapters.ServerAdapter; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DataBaseAdapter; @@ -50,12 +59,25 @@ public class AttachmentDataProvider extends AbstractSyncDataProvider<Attachment> @Override public void deleteInDB(DataBaseAdapter dataBaseAdapter, long accountId, Attachment attachment) { - //TODO: implement + dataBaseAdapter.deleteAttachment(accountId, attachment, false); } @Override public void createOnServer(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, IResponseCallback<Attachment> responder, Attachment entity) { - //TODO: implement + Card card = dataBaseAdapter.getCardByLocalIdDirectly(accountId, entity.getCardId()); + Stack stack = dataBaseAdapter.getStackByLocalIdDirectly(card.getStackId()); + Board board = dataBaseAdapter.getBoardByLocalIdDirectly(stack.getBoardId()); + + ContentResolver cR = dataBaseAdapter.getContext().getContentResolver(); + MimeTypeMap mime = MimeTypeMap.getSingleton(); + Uri uri = Uri.fromFile(new File(entity.getLocalPath())); + String type = mime.getExtensionFromMimeType(cR.getType(uri)); + serverAdapter.uploadAttachment(board.getId(), stack.getId(), card.getId(), type, uri, new IResponseCallback<Attachment>(dataBaseAdapter.readAccountDirectly(accountId)) { + @Override + public void onResponse(Attachment response) { + DeckLog.log("uploading " + uri.getPath() + " successful."); + } + }); } @Override diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java index 94ccbb372..53d8323d4 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java @@ -149,6 +149,6 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentAdapt @Override public void onAttachmentDeleted(Attachment attachment) { - syncManager.deleteAttachmentToCard(accountId, cardId, attachment.getLocalId()); + syncManager.deleteAttachmentOfCard(accountId, cardId, attachment.getLocalId()); } } |