X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/9faab34fbd5353100d73be43690e3b8ee3f2f389..60d0a121b7ccffd0d1668f771ba4061ab0254b2e:/src/com/owncloud/android/files/services/FileUploader.java diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index ea44763f..7956a99b 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -1,3 +1,21 @@ +/* ownCloud Android client application + * Copyright (C) 2012 Bartek Przybylski + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + package com.owncloud.android.files.services; import java.io.File; @@ -46,7 +64,6 @@ import eu.alefzero.webdav.WebdavClient; public class FileUploader extends Service implements OnDatatransferProgressListener { public static final String UPLOAD_FINISH_MESSAGE = "UPLOAD_FINISH"; - public static final String EXTRA_PARENT_DIR_ID = "PARENT_DIR_ID"; public static final String EXTRA_UPLOAD_RESULT = "RESULT"; public static final String EXTRA_REMOTE_PATH = "REMOTE_PATH"; public static final String EXTRA_FILE_PATH = "FILE_PATH"; @@ -263,12 +280,25 @@ public class FileUploader extends Service implements OnDatatransferProgressListe /** * Returns True when the file described by 'file' is being uploaded to the ownCloud account 'account' or waiting for it * + * If 'file' is a directory, returns 'true' if some of its descendant files is downloading or waiting to download. + * * @param account Owncloud account where the remote file will be stored. * @param file A file that could be in the queue of pending uploads */ public boolean isUploading(Account account, OCFile file) { + String targetKey = buildRemoteName(account, file); synchronized (mPendingUploads) { - return (mPendingUploads.containsKey(buildRemoteName(account, file))); + if (file.isDirectory()) { + // this can be slow if there are many downloads :( + Iterator it = mPendingUploads.keySet().iterator(); + boolean found = false; + while (it.hasNext() && !found) { + found = it.next().startsWith(targetKey); + } + return found; + } else { + return (mPendingUploads.containsKey(targetKey)); + } } } } @@ -416,7 +446,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe // parent dir String parentPath = new File(remotePath).getParent(); - parentPath = parentPath.endsWith("/")?parentPath:parentPath+"/" ; + parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : parentPath + OCFile.PATH_SEPARATOR ; OCFile parentDir = storageManager.getFileByPath(parentPath); if (parentDir == null) { throw new IllegalStateException("Can not upload a file to a non existing remote location: " + parentPath); @@ -554,7 +584,6 @@ public class FileUploader extends Service implements OnDatatransferProgressListe end.putExtra(EXTRA_FILE_PATH, upload.getStoragePath()); end.putExtra(ACCOUNT_NAME, upload.getAccount().name); end.putExtra(EXTRA_UPLOAD_RESULT, uploadResult.isSuccess()); - end.putExtra(EXTRA_PARENT_DIR_ID, upload.getFile().getParentId()); sendBroadcast(end); }