Fixed ClassCastingException
[pub/Android/ownCloud.git] / src / com / owncloud / android / files / services / FileUploader.java
index f0afe0d..8f68554 100644 (file)
@@ -34,6 +34,7 @@ import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.InstantUploadBroadcastReceiver;
 import com.owncloud.android.operations.ChunkedUploadFileOperation;
+import com.owncloud.android.operations.DownloadFileOperation;
 import com.owncloud.android.operations.RemoteOperationResult;
 import com.owncloud.android.operations.UploadFileOperation;
 import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
@@ -324,6 +325,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
          * @param file          A file that could be in the queue of pending uploads
          */
         public boolean isUploading(Account account, OCFile file) {
+            if (account == null || file == null) return false;
             String targetKey = buildRemoteName(account, file);
             synchronized (mPendingUploads) {
                 if (file.isDirectory()) {
@@ -339,6 +341,32 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
                 }
             }
         }
+
+
+        /**
+         * Adds a listener interested in the progress of the download for a concrete file.
+         * 
+         * @param listener      Object to notify about progress of transfer.    
+         * @param account       ownCloud account holding the file of interest.
+         * @param file          {@link OCfile} of interest for listener. 
+         */
+        public void addDatatransferProgressListener (OnDatatransferProgressListener listener, Account account, OCFile file) {
+            if (account == null || file == null) return;
+            String targetKey = buildRemoteName(account, file);
+            UploadFileOperation target = null;
+            synchronized (mPendingUploads) {
+                if (!file.isDirectory()) {
+                    target = mPendingUploads.get(targetKey);
+                } else {
+                    // nothing to do for directories, right now
+                }
+            }
+            if (target != null) {
+                target.addDatatransferProgressListener(listener);
+            }
+        }
+        
+        
     }
     
     
@@ -489,7 +517,8 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
         file.setCreationTimestamp(we.createTimestamp());
         file.setFileLength(we.contentLength());
         file.setMimetype(we.contentType());
-        file.setModificationTimestamp(we.modifiedTimesamp());
+        file.setModificationTimestamp(we.modifiedTimestamp());
+        file.setModificationTimestampAtLastSyncForData(we.modifiedTimestamp());
         // file.setEtag(mCurrentDownload.getEtag());    // TODO Etag, where available
     }
     
@@ -554,6 +583,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
      * 
      * @param upload    Upload operation starting.
      */
+    @SuppressWarnings("deprecation")
     private void notifyUploadStart(UploadFileOperation upload) {
         /// create status notification with a progress bar
         mLastPercent = 0;