Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authordesperateCoder <echotodevnull@gmail.com>2019-12-07 02:03:06 +0300
committerdesperateCoder <echotodevnull@gmail.com>2019-12-07 02:03:16 +0300
commitb0efc5c7e23581d94b6e90653fd6db3b2f951b49 (patch)
tree45d5680cd4a1cde08b935ee4eea0c6578252aa72 /app/src
parent2df41bf4a1f3ae03998a261fdc41e271ea2da8c6 (diff)
#211 upload attachments WIP
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/Attachment.java38
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java51
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java6
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java16
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AttachmentDataProvider.java26
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java2
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());
}
}