- private void fetchData(String uri, SyncResult syncResult, long parentId) {\r
- try {\r
- Log.d(TAG, "fetching " + uri);\r
- \r
- // remote request \r
- PropFindMethod query = new PropFindMethod(uri);\r
- /* Commented code for ugly performance tests\r
- long responseDelay = System.currentTimeMillis();\r
- */\r
- getClient().executeMethod(query);\r
- /* Commented code for ugly performance tests\r
- responseDelay = System.currentTimeMillis() - responseDelay;\r
- Log.e(TAG, "syncing: RESPONSE TIME for " + uri + " contents, " + responseDelay + "ms");\r
- */\r
- MultiStatus resp = null;\r
- resp = query.getResponseBodyAsMultiStatus();\r
- \r
- // insertion or update of files\r
- List<OCFile> updatedFiles = new Vector<OCFile>(resp.getResponses().length - 1);\r
- for (int i = 1; i < resp.getResponses().length; ++i) {\r
- WebdavEntry we = new WebdavEntry(resp.getResponses()[i], getUri().getPath());\r
- OCFile file = fillOCFile(we);\r
- file.setParentId(parentId);\r
- if (getStorageManager().getFileByPath(file.getRemotePath()) != null &&\r
- getStorageManager().getFileByPath(file.getRemotePath()).keepInSync() &&\r
- file.getModificationTimestamp() > getStorageManager().getFileByPath(file.getRemotePath())\r
- .getModificationTimestamp()) {\r
- Intent intent = new Intent(this.getContext(), FileDownloader.class);\r
- intent.putExtra(FileDownloader.EXTRA_ACCOUNT, getAccount());\r
- intent.putExtra(FileDownloader.EXTRA_FILE_PATH, file.getRemotePath());\r
- intent.putExtra(FileDownloader.EXTRA_REMOTE_PATH, file.getRemotePath());\r
- intent.putExtra(FileDownloader.EXTRA_FILE_SIZE, file.getFileLength());\r
- file.setKeepInSync(true);\r
- getContext().startService(intent);\r
- }\r
- if (getStorageManager().getFileByPath(file.getRemotePath()) != null)\r
- file.setKeepInSync(getStorageManager().getFileByPath(file.getRemotePath()).keepInSync());\r
- \r
- //Log.v(TAG, "adding file: " + file);\r
- updatedFiles.add(file);\r
- if (parentId == 0)\r
- parentId = file.getFileId();\r
- }\r
- /* Commented code for ugly performance tests\r
- long saveDelay = System.currentTimeMillis();\r
- */ \r
- getStorageManager().saveFiles(updatedFiles); // all "at once" ; trying to get a best performance in database update\r
- /* Commented code for ugly performance tests\r
- saveDelay = System.currentTimeMillis() - saveDelay;\r
- Log.e(TAG, "syncing: SAVE TIME for " + uri + " contents, " + mSaveDelays[mDelaysIndex] + "ms");\r
- */\r
+ \r
+ \r
+ /**\r
+ * Synchronize the properties of files and folders contained in a remote folder given by remotePath.\r
+ * \r
+ * @param remotePath Remote path to the folder to synchronize.\r
+ * @param parentId Database Id of the folder to synchronize.\r
+ */\r
+ private void fetchData(String remotePath, long parentId) {\r
+ \r
+ if (mFailedResultsCounter > MAX_FAILED_RESULTS || isFinisher(mLastFailedResult))\r
+ return;\r
+ \r
+ // perform folder synchronization\r
+ SynchronizeFolderOperation synchFolderOp = new SynchronizeFolderOperation( remotePath, \r
+ mCurrentSyncTime, \r
+ parentId, \r
+ getStorageManager(), \r
+ getAccount(), \r
+ getContext()\r
+ );\r
+ RemoteOperationResult result = synchFolderOp.execute(getClient());\r
+ \r
+ \r
+ // synchronized folder -> notice to UI - ALWAYS, although !result.isSuccess\r
+ sendStickyBroadcast(true, remotePath, null);\r
+ \r
+ if (result.isSuccess() || result.getCode() == ResultCode.SYNC_CONFLICT) {\r