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
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2021-03-09 19:15:06 +0300
committerNiedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com>2021-03-10 18:16:20 +0300
commit9d6a6bc1a92ef706833506b8553fe702b50a48e9 (patch)
tree7a38a92ed3206e1522a7180ec97296419ca46d6f
parent0aa214fc6078201c6bfb69fdeb6801a4c8b66bb2 (diff)
Enhance support for file attachments (Deck 1.3.0)
Signed-off-by: Stefan Niedermann <info@niedermann.it>
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI.java8
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java3
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/Attachment.java8
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/enums/EAttachmentType.java32
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/model/ocs/Version.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/ServerAdapter.java24
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/converter/EnumConverter.java14
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/DataPropagationHelper.java2
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/providers/AttachmentDataProvider.java4
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java5
10 files changed, 83 insertions, 21 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI.java
index 1f0148b91..32e340f0f 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/DeckAPI.java
@@ -132,12 +132,12 @@ public interface DeckAPI {
Observable<List<Attachment>> getAttachments(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId);
@Multipart
- @POST("boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments?type=deck_file")
- Observable<Attachment> uploadAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Part MultipartBody.Part type, @Part MultipartBody.Part attachment);
+ @POST("boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments")
+ Observable<Attachment> uploadAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Part MultipartBody.Part type, @Part MultipartBody.Part attachment);
@Multipart
- @PUT("boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments?type=deck_file")
- Observable<Attachment> updateAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId, @Part MultipartBody.Part type, @Part MultipartBody.Part attachment);
+ @PUT("boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments")
+ Observable<Attachment> updateAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId, @Part MultipartBody.Part type, @Part MultipartBody.Part attachment);
@DELETE("boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}")
Observable<Void> deleteAttachment(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Path("attachmentId") long attachmentId);
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java b/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java
index e759f27d4..791b7a4c6 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/api/JsonToEntityParser.java
@@ -23,6 +23,7 @@ import it.niedermann.nextcloud.deck.model.Label;
import it.niedermann.nextcloud.deck.model.Stack;
import it.niedermann.nextcloud.deck.model.User;
import it.niedermann.nextcloud.deck.model.enums.ActivityType;
+import it.niedermann.nextcloud.deck.model.enums.EAttachmentType;
import it.niedermann.nextcloud.deck.model.full.FullBoard;
import it.niedermann.nextcloud.deck.model.full.FullCard;
import it.niedermann.nextcloud.deck.model.full.FullStack;
@@ -457,7 +458,7 @@ public class JsonToEntityParser {
makeTraceableIfFails(() -> {
a.setId(e.get("id").getAsLong());
a.setCardId(e.get("cardId").getAsLong());
- a.setType(e.get("type").getAsString());
+ a.setType(EAttachmentType.findByValue(e.get("type").getAsString()));
a.setEtag(getNullAsNull(e.get("ETag")));
a.setData(e.get("data").getAsString());
a.setLastModified(getTimestampFromLong(e.get("lastModified")));
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 7eabcbe70..ec41d4ef7 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
@@ -8,6 +8,7 @@ import androidx.room.Index;
import java.io.Serializable;
import java.time.Instant;
+import it.niedermann.nextcloud.deck.model.enums.EAttachmentType;
import it.niedermann.nextcloud.deck.model.interfaces.AbstractRemoteEntity;
@Entity(inheritSuperIndices = true,
@@ -24,7 +25,8 @@ import it.niedermann.nextcloud.deck.model.interfaces.AbstractRemoteEntity;
public class Attachment extends AbstractRemoteEntity implements Comparable<Attachment>, Serializable {
private long cardId;
- private String type = "deck_file";
+ // TODO use EAttachmentType
+ private EAttachmentType type = EAttachmentType.DECK_FILE;
private String data;
private Instant createdAt;
private String createdBy;
@@ -48,11 +50,11 @@ public class Attachment extends AbstractRemoteEntity implements Comparable<Attac
this.cardId = cardId;
}
- public String getType() {
+ public EAttachmentType getType() {
return type;
}
- public void setType(String type) {
+ public void setType(EAttachmentType type) {
this.type = type;
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/enums/EAttachmentType.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/enums/EAttachmentType.java
new file mode 100644
index 000000000..60b43c719
--- /dev/null
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/enums/EAttachmentType.java
@@ -0,0 +1,32 @@
+package it.niedermann.nextcloud.deck.model.enums;
+
+public enum EAttachmentType {
+ // Do not change values. They match the Deck server apps values.
+ DECK_FILE(1, "deck_file"),
+ FILE(2, "file");
+
+ private final int id;
+ private final String value;
+
+ EAttachmentType(int id, String value) {
+ this.id = id;
+ this.value = value;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public static EAttachmentType findByValue(String value) {
+ for (EAttachmentType s : EAttachmentType.values()) {
+ if (s.value.equals(value)) {
+ return s;
+ }
+ }
+ throw new IllegalArgumentException("unknown " + EAttachmentType.class.getSimpleName() + " value: " + value);
+ }
+
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/model/ocs/Version.java b/app/src/main/java/it/niedermann/nextcloud/deck/model/ocs/Version.java
index c6b943946..91817b73e 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/model/ocs/Version.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/model/ocs/Version.java
@@ -157,9 +157,7 @@ public class Version implements Comparable<Version> {
* @see <a href="https://github.com/nextcloud/deck/pull/2638">documentation in PR</a>
*/
public boolean supportsFileAttachments() {
- return false;
-// TODO depends on https://github.com/nextcloud/deck/pull/2638
-// return isGreaterOrEqualTo(VERSION_1_3_0);
+ return isGreaterOrEqualTo(VERSION_1_3_0);
}
/**
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 bff8ddfdb..f96ff1da0 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
@@ -24,11 +24,13 @@ import it.niedermann.nextcloud.deck.api.IResponseCallback;
import it.niedermann.nextcloud.deck.api.RequestHelper;
import it.niedermann.nextcloud.deck.exceptions.OfflineException;
import it.niedermann.nextcloud.deck.model.AccessControl;
+import it.niedermann.nextcloud.deck.model.Account;
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.Label;
import it.niedermann.nextcloud.deck.model.Stack;
+import it.niedermann.nextcloud.deck.model.enums.EAttachmentType;
import it.niedermann.nextcloud.deck.model.full.FullBoard;
import it.niedermann.nextcloud.deck.model.full.FullCard;
import it.niedermann.nextcloud.deck.model.full.FullStack;
@@ -281,10 +283,14 @@ public class ServerAdapter {
}
// ## ATTACHMENTS
- public void uploadAttachment(Long remoteBoardId, long remoteStackId, long remoteCardId, String contentType, File attachment, IResponseCallback<Attachment> responseCallback) {
- ensureInternetConnection();
- MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", attachment.getName(), RequestBody.create(MediaType.parse(getMimeType(attachment)), attachment));
- MultipartBody.Part typePart = MultipartBody.Part.createFormData("type", null, RequestBody.create(MediaType.parse(TEXT_PLAIN), "deck_file"));
+ public void uploadAttachment(Long remoteBoardId, long remoteStackId, long remoteCardId, File attachment, IResponseCallback<Attachment> responseCallback) {
+ ensureInternetConnection();
+ final Account account = responseCallback.getAccount();
+ final String type = (account != null && account.getServerDeckVersionAsObject().supportsFileAttachments())
+ ? EAttachmentType.FILE.getValue()
+ : EAttachmentType.DECK_FILE.getValue();
+ final MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", attachment.getName(), RequestBody.create(MediaType.parse(getMimeType(attachment)), attachment));
+ final MultipartBody.Part typePart = MultipartBody.Part.createFormData("type", null, RequestBody.create(MediaType.parse(TEXT_PLAIN), type));
RequestHelper.request(provider, () -> provider.getDeckAPI().uploadAttachment(remoteBoardId, remoteStackId, remoteCardId, typePart, filePart), responseCallback);
}
@@ -304,9 +310,13 @@ public class ServerAdapter {
public void updateAttachment(Long remoteBoardId, long remoteStackId, long remoteCardId, long remoteAttachmentId, 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(contentType), attachment));
- MultipartBody.Part typePart = MultipartBody.Part.createFormData("type", attachment.getName(), RequestBody.create(MediaType.parse(TEXT_PLAIN), "deck_file"));
+ final File attachment = new File(attachmentUri.getPath());
+ final Account account = responseCallback.getAccount();
+ final String type = (account != null && account.getServerDeckVersionAsObject().supportsFileAttachments())
+ ? EAttachmentType.FILE.getValue()
+ : EAttachmentType.DECK_FILE.getValue();
+ final MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", attachment.getName(), RequestBody.create(MediaType.parse(contentType), attachment));
+ final MultipartBody.Part typePart = MultipartBody.Part.createFormData("type", attachment.getName(), RequestBody.create(MediaType.parse(TEXT_PLAIN), type));
RequestHelper.request(provider, () -> provider.getDeckAPI().updateAttachment(remoteBoardId, remoteStackId, remoteCardId, remoteAttachmentId, typePart, filePart), responseCallback);
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/converter/EnumConverter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/converter/EnumConverter.java
index 19bc32fbe..cdf11493b 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/converter/EnumConverter.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/converter/EnumConverter.java
@@ -4,6 +4,7 @@ import androidx.annotation.Nullable;
import androidx.room.TypeConverter;
import it.niedermann.nextcloud.deck.DeckLog;
+import it.niedermann.nextcloud.deck.model.enums.EAttachmentType;
import it.niedermann.nextcloud.deck.model.enums.EDueType;
import it.niedermann.nextcloud.deck.model.enums.ESortCriteria;
import it.niedermann.nextcloud.deck.model.widget.filter.EWidgetType;
@@ -50,4 +51,17 @@ public class EnumConverter {
public static Integer fromSortCriteriaEnum(@Nullable ESortCriteria value) {
return value == null ? null : value.getId();
}
+
+ // #### EAttachmentType
+ @TypeConverter
+ @Nullable
+ public static EAttachmentType toEAttachmentType(@Nullable String value) {
+ return value == null ? null : EAttachmentType.findByValue(value);
+ }
+
+ @TypeConverter
+ @Nullable
+ public static String fromEAttachmentType(@Nullable EAttachmentType value) {
+ return value == null ? null : value.getValue();
+ }
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/DataPropagationHelper.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/DataPropagationHelper.java
index 782b6d951..0c22466f0 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/DataPropagationHelper.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/helpers/DataPropagationHelper.java
@@ -35,7 +35,7 @@ public class DataPropagationHelper {
boolean connected = serverAdapter.hasInternetConnection();
if (connected) {
try {
- provider.createOnServer(serverAdapter, dataBaseAdapter, accountId, new IResponseCallback<T>(new Account(accountId)) {
+ provider.createOnServer(serverAdapter, dataBaseAdapter, accountId, new IResponseCallback<T>(callback.getAccount()) {
@Override
public void onResponse(T response) {
new Thread(() -> {
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 781f7b1f4..4a2b2c613 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,5 +1,6 @@
package it.niedermann.nextcloud.deck.persistence.sync.helpers.providers;
+import android.annotation.SuppressLint;
import android.net.Uri;
import java.io.File;
@@ -67,7 +68,7 @@ public class AttachmentDataProvider extends AbstractSyncDataProvider<Attachment>
@Override
public void createOnServer(ServerAdapter serverAdapter, DataBaseAdapter dataBaseAdapter, long accountId, IResponseCallback<Attachment> responder, Attachment entity) {
File file = new File(entity.getLocalPath());
- serverAdapter.uploadAttachment(board.getId(), stack.getId(), card.getId(), entity.getType(), file, new IResponseCallback<Attachment>(responder.getAccount()) {
+ serverAdapter.uploadAttachment(board.getId(), stack.getId(), card.getId(), file, new IResponseCallback<Attachment>(responder.getAccount()) {
@Override
public void onResponse(Attachment response) {
if (file.delete()) {
@@ -77,6 +78,7 @@ public class AttachmentDataProvider extends AbstractSyncDataProvider<Attachment>
}
}
+ @SuppressLint("MissingSuperCall")
@Override
public void onError(Throwable throwable) {
if (!file.delete()) {
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java
index 041e0de11..d6d8dcb50 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java
@@ -22,6 +22,7 @@ import java.io.InputStream;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.model.Attachment;
+import it.niedermann.nextcloud.deck.model.enums.EAttachmentType;
import it.niedermann.nextcloud.deck.model.ocs.Version;
/**
@@ -39,7 +40,9 @@ public class AttachmentUtil {
* the {@link Attachment} itself will be returned instead.
*/
public static String getThumbnailUrl(@NonNull Version version, @NonNull String accountUrl, @NonNull Long cardRemoteId, @NonNull Attachment attachment, @Px int previewSize) {
- return version.supportsFileAttachments() && !TextUtils.isEmpty(String.valueOf(attachment.getFileId()))
+ return version.supportsFileAttachments() &&
+ EAttachmentType.FILE.equals(attachment.getType()) &&
+ !TextUtils.isEmpty(attachment.getFileId())
? accountUrl + "/index.php/core/preview?fileId=" + attachment.getFileId() + "&x=" + previewSize + "&y=" + previewSize
: getRemoteOrLocalUrl(accountUrl, cardRemoteId, attachment);
}