Browse Source

Retrieve and persist more locking attributes from remote files

Signed-off-by: Álvaro Brey Vilas <alvaro.brey@nextcloud.com>
Álvaro Brey Vilas 3 years ago
parent
commit
68b2535481

+ 11 - 0
app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -45,6 +45,7 @@ import com.owncloud.android.lib.common.network.WebdavEntry;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation;
+import com.owncloud.android.lib.resources.files.model.FileLockType;
 import com.owncloud.android.lib.resources.files.model.RemoteFile;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.ShareType;
@@ -495,9 +496,14 @@ public class FileDataStorageManager {
         cv.put(ProviderTableMeta.FILE_ETAG_IN_CONFLICT, file.getEtagInConflict());
         cv.put(ProviderTableMeta.FILE_HAS_PREVIEW, file.isPreviewAvailable() ? 1 : 0);
         cv.put(ProviderTableMeta.FILE_LOCKED, file.isLocked());
+        cv.put(ProviderTableMeta.FILE_LOCK_TYPE, file.getLockType() != null ? file.getLockType().getValue() : -1);
         cv.put(ProviderTableMeta.FILE_LOCK_OWNER, file.getLockOwnerId());
         cv.put(ProviderTableMeta.FILE_LOCK_OWNER_DISPLAY_NAME, file.getLockOwnerDisplayName());
+        cv.put(ProviderTableMeta.FILE_LOCK_OWNER_EDITOR, file.getLockOwnerEditor());
         cv.put(ProviderTableMeta.FILE_LOCK_TIMESTAMP, file.getLockTimestamp());
+        cv.put(ProviderTableMeta.FILE_LOCK_TIMEOUT, file.getLockTimeout());
+        cv.put(ProviderTableMeta.FILE_LOCK_TOKEN, file.getLockToken());
+
         return cv;
     }
 
@@ -991,9 +997,14 @@ public class FileDataStorageManager {
             ocFile.setNote(cursor.getString(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_NOTE)));
             ocFile.setRichWorkspace(cursor.getString(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_RICH_WORKSPACE)));
             ocFile.setLocked(cursor.getInt(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_LOCKED)) == 1);
+            final int lockTypeInt = cursor.getInt(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_LOCK_TYPE));
+            ocFile.setLockType(lockTypeInt != -1 ? FileLockType.fromValue(lockTypeInt) : null);
             ocFile.setLockOwnerId(cursor.getString(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_LOCK_OWNER)));
             ocFile.setLockOwnerDisplayName(cursor.getString(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_LOCK_OWNER_DISPLAY_NAME)));
+            ocFile.setLockOwnerEditor(cursor.getString(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_LOCK_OWNER_EDITOR)));
             ocFile.setLockTimestamp(cursor.getInt(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_LOCK_TIMESTAMP)));
+            ocFile.setLockTimeout(cursor.getInt(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_LOCK_TIMEOUT)));
+            ocFile.setLockToken(cursor.getString(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_LOCK_TOKEN)));
 
 
             String sharees = cursor.getString(cursor.getColumnIndexOrThrow(ProviderTableMeta.FILE_SHAREES));

+ 65 - 6
app/src/main/java/com/owncloud/android/datamodel/OCFile.java

@@ -33,6 +33,7 @@ import com.owncloud.android.R;
 import com.owncloud.android.lib.common.network.WebdavEntry;
 import com.owncloud.android.lib.common.network.WebdavUtils;
 import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.files.model.FileLockType;
 import com.owncloud.android.lib.resources.files.model.ServerFileInterface;
 import com.owncloud.android.lib.resources.shares.ShareeUser;
 import com.owncloud.android.utils.MimeType;
@@ -96,13 +97,22 @@ public class OCFile implements Parcelable, Comparable<OCFile>, ServerFileInterfa
     private List<ShareeUser> sharees;
     private String richWorkspace;
     private boolean locked;
+    @Nullable
+    private FileLockType lockType;
+    @Nullable
     private String lockOwnerId;
+    @Nullable
     private String lockOwnerDisplayName;
+    @Nullable
+    private String lockOwnerEditor;
     private long lockTimestamp;
+    private long lockTimeout;
+    @Nullable
+    private String lockToken;
 
     /**
-     * URI to the local path of the file contents, if stored in the device; cached after first call
-     * to {@link #getStorageUri()}
+     * URI to the local path of the file contents, if stored in the device; cached after first call to {@link
+     * #getStorageUri()}
      */
     private Uri localUri;
 
@@ -166,10 +176,14 @@ public class OCFile implements Parcelable, Comparable<OCFile>, ServerFileInterfa
         richWorkspace = source.readString();
         previewAvailable = source.readInt() == 1;
         firstShareTimestamp = source.readLong();
-        locked =  source.readInt() == 1;
+        locked = source.readInt() == 1;
+        lockType = FileLockType.fromValue(source.readInt());
         lockOwnerId = source.readString();
         lockOwnerDisplayName = source.readString();
+        lockOwnerDisplayName = source.readString();
         lockTimestamp = source.readLong();
+        lockTimeout = source.readLong();
+        lockToken = source.readString();
     }
 
     @Override
@@ -204,10 +218,14 @@ public class OCFile implements Parcelable, Comparable<OCFile>, ServerFileInterfa
         dest.writeString(richWorkspace);
         dest.writeInt(previewAvailable ? 1 : 0);
         dest.writeLong(firstShareTimestamp);
-        dest.writeInt(locked ? 1:0);
+        dest.writeInt(locked ? 1 : 0);
+        dest.writeInt(lockType != null ? lockType.getValue() : -1);
         dest.writeString(lockOwnerId);
         dest.writeString(lockOwnerDisplayName);
+        dest.writeString(lockOwnerEditor);
         dest.writeLong(lockTimestamp);
+        dest.writeLong(lockTimeout);
+        dest.writeString(lockToken);
     }
 
     public void setDecryptedRemotePath(String path) {
@@ -472,9 +490,13 @@ public class OCFile implements Parcelable, Comparable<OCFile>, ServerFileInterfa
         richWorkspace = "";
         firstShareTimestamp = 0;
         locked = false;
+        lockType = null;
         lockOwnerId = null;
         lockOwnerDisplayName = null;
+        lockOwnerEditor = null;
         lockTimestamp = 0;
+        lockTimeout = 0;
+        lockToken = null;
     }
 
     /**
@@ -856,22 +878,42 @@ public class OCFile implements Parcelable, Comparable<OCFile>, ServerFileInterfa
         this.locked = locked;
     }
 
+    @Nullable
+    public FileLockType getLockType() {
+        return lockType;
+    }
+
+    public void setLockType(@Nullable FileLockType lockType) {
+        this.lockType = lockType;
+    }
+
+    @Nullable
     public String getLockOwnerId() {
         return lockOwnerId;
     }
 
-    public void setLockOwnerId(String lockOwnerId) {
+    public void setLockOwnerId(@Nullable String lockOwnerId) {
         this.lockOwnerId = lockOwnerId;
     }
 
+    @Nullable
     public String getLockOwnerDisplayName() {
         return lockOwnerDisplayName;
     }
 
-    public void setLockOwnerDisplayName(String lockOwnerDisplayName) {
+    public void setLockOwnerDisplayName(@Nullable String lockOwnerDisplayName) {
         this.lockOwnerDisplayName = lockOwnerDisplayName;
     }
 
+    @Nullable
+    public String getLockOwnerEditor() {
+        return lockOwnerEditor;
+    }
+
+    public void setLockOwnerEditor(@Nullable String lockOwnerEditor) {
+        this.lockOwnerEditor = lockOwnerEditor;
+    }
+
     public long getLockTimestamp() {
         return lockTimestamp;
     }
@@ -879,4 +921,21 @@ public class OCFile implements Parcelable, Comparable<OCFile>, ServerFileInterfa
     public void setLockTimestamp(long lockTimestamp) {
         this.lockTimestamp = lockTimestamp;
     }
+
+    public long getLockTimeout() {
+        return lockTimeout;
+    }
+
+    public void setLockTimeout(long lockTimeout) {
+        this.lockTimeout = lockTimeout;
+    }
+
+    @Nullable
+    public String getLockToken() {
+        return lockToken;
+    }
+
+    public void setLockToken(@Nullable String lockToken) {
+        this.lockToken = lockToken;
+    }
 }

+ 9 - 1
app/src/main/java/com/owncloud/android/db/ProviderMeta.java

@@ -118,9 +118,13 @@ public class ProviderMeta {
         public static final String FILE_SHAREES = "sharees";
         public static final String FILE_RICH_WORKSPACE = "rich_workspace";
         public static final String FILE_LOCKED = "locked";
+        public static final String FILE_LOCK_TYPE = "lock_type";
         public static final String FILE_LOCK_OWNER = "lock_owner";
         public static final String FILE_LOCK_OWNER_DISPLAY_NAME = "lock_owner_display_name";
+        public static final String FILE_LOCK_OWNER_EDITOR = "lock_owner_editor";
         public static final String FILE_LOCK_TIMESTAMP = "lock_timestamp";
+        public static final String FILE_LOCK_TIMEOUT = "lock_timeout";
+        public static final String FILE_LOCK_TOKEN = "lock_token";
 
         public static final List<String> FILE_ALL_COLUMNS = Collections.unmodifiableList(Arrays.asList(
             _ID,
@@ -159,9 +163,13 @@ public class ProviderMeta {
             FILE_SHAREES,
             FILE_RICH_WORKSPACE,
             FILE_LOCKED,
+            FILE_LOCK_TYPE,
             FILE_LOCK_OWNER,
             FILE_LOCK_OWNER_DISPLAY_NAME,
-            FILE_LOCK_TIMESTAMP));
+            FILE_LOCK_OWNER_EDITOR,
+            FILE_LOCK_TIMESTAMP,
+            FILE_LOCK_TIMEOUT,
+            FILE_LOCK_TOKEN));
         public static final String FILE_DEFAULT_SORT_ORDER = FILE_NAME + " collate nocase asc";
 
         // Columns of ocshares table

+ 13 - 1
app/src/main/java/com/owncloud/android/providers/FileContentProvider.java

@@ -755,9 +755,13 @@ public class FileContentProvider extends ContentProvider {
                        + ProviderTableMeta.FILE_SHAREES + TEXT
                        + ProviderTableMeta.FILE_RICH_WORKSPACE + TEXT
                        + ProviderTableMeta.FILE_LOCKED + INTEGER // boolean
+                       + ProviderTableMeta.FILE_LOCK_TYPE + INTEGER
                        + ProviderTableMeta.FILE_LOCK_OWNER + TEXT
                        + ProviderTableMeta.FILE_LOCK_OWNER_DISPLAY_NAME + TEXT
-                       + ProviderTableMeta.FILE_LOCK_TIMESTAMP + " INTEGER );"
+                       + ProviderTableMeta.FILE_LOCK_OWNER_EDITOR + TEXT
+                       + ProviderTableMeta.FILE_LOCK_TIMESTAMP + INTEGER
+                       + ProviderTableMeta.FILE_LOCK_TIMEOUT + INTEGER
+                       + ProviderTableMeta.FILE_LOCK_TOKEN + " TEXT );"
         );
     }
 
@@ -2470,12 +2474,20 @@ public class FileContentProvider extends ContentProvider {
                     // locking properties
                     db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
                                    ADD_COLUMN + ProviderTableMeta.FILE_LOCKED + " INTEGER "); // boolean
+                    db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
+                                   ADD_COLUMN + ProviderTableMeta.FILE_LOCK_TYPE + " INTEGER ");
                     db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
                                    ADD_COLUMN + ProviderTableMeta.FILE_LOCK_OWNER + " TEXT ");
                     db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
                                    ADD_COLUMN + ProviderTableMeta.FILE_LOCK_OWNER_DISPLAY_NAME + " TEXT ");
+                    db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
+                                   ADD_COLUMN + ProviderTableMeta.FILE_LOCK_OWNER_EDITOR + " TEXT ");
                     db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
                                    ADD_COLUMN + ProviderTableMeta.FILE_LOCK_TIMESTAMP + " INTEGER ");
+                    db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
+                                   ADD_COLUMN + ProviderTableMeta.FILE_LOCK_TIMEOUT + " INTEGER ");
+                    db.execSQL(ALTER_TABLE + ProviderTableMeta.FILE_TABLE_NAME +
+                                   ADD_COLUMN + ProviderTableMeta.FILE_LOCK_TOKEN + " TEXT ");
                     db.execSQL("UPDATE " + ProviderTableMeta.FILE_TABLE_NAME + " SET " + ProviderTableMeta.FILE_ETAG + " = '' WHERE 1=1");
 
                     db.setTransactionSuccessful();

+ 4 - 0
app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java

@@ -234,9 +234,13 @@ public final class FileStorageUtils {
         file.setSharees(new ArrayList<>(Arrays.asList(remote.getSharees())));
         file.setRichWorkspace(remote.getRichWorkspace());
         file.setLocked(remote.isLocked());
+        file.setLockType(remote.getLockType());
         file.setLockOwnerId(remote.getLockOwner());
         file.setLockOwnerDisplayName(remote.getLockOwnerDisplayName());
+        file.setLockOwnerEditor(remote.getLockOwnerEditor());
         file.setLockTimestamp(remote.getLockTimestamp());
+        file.setLockTimeout(remote.getLockTimeout());
+        file.setLockToken(remote.getLockToken());
 
         return file;
     }