package eu.alefzero.owncloud.syncadapter;\r
\r
import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+import java.util.List;\r
import java.util.Vector;\r
\r
import org.apache.jackrabbit.webdav.DavException;\r
this.setContentProvider(provider);\r
this.setStorageManager(new FileDataStorageManager(account,\r
getContentProvider()));\r
-\r
+ \r
Log.d(TAG, "syncing owncloud account " + account.name);\r
\r
- Intent i = new Intent(FileSyncService.SYNC_MESSAGE);\r
- i.putExtra(FileSyncService.IN_PROGRESS, true);\r
- i.putExtra(FileSyncService.ACCOUNT_NAME, account.name);\r
- getContext().sendStickyBroadcast(i);\r
+ sendStickyBroadcast(true, -1); // starting message to the main IU\r
\r
PropFindMethod query;\r
try {\r
syncResult.stats.numIoExceptions++;\r
e.printStackTrace();\r
}\r
- i.putExtra(FileSyncService.IN_PROGRESS, false);\r
- getContext().sendStickyBroadcast(i);\r
+ sendStickyBroadcast(false, -1); \r
}\r
\r
private void fetchData(String uri, SyncResult syncResult, long parentId) {\r
getClient().executeMethod(query);\r
MultiStatus resp = null;\r
resp = query.getResponseBodyAsMultiStatus();\r
+ List<String> paths = new ArrayList<String>();\r
+ List<Long> fileIds = new ArrayList<Long>(); \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
getStorageManager().saveFile(file);\r
if (parentId == 0)\r
parentId = file.getFileId();\r
- if (we.contentType().equals("DIR"))\r
- fetchData(getUri().toString() + we.path(), syncResult, file.getFileId());\r
+ if (we.contentType().equals("DIR")) {\r
+ // for recursive fetch later\r
+ paths.add(we.path());\r
+ fileIds.add(file.getFileId());\r
+ }\r
}\r
+ \r
Vector<OCFile> files = getStorageManager().getDirectoryContent(\r
getStorageManager().getFileById(parentId));\r
for (OCFile file : files) {\r
if (file.getLastSyncDate() != mCurrentSyncTime && file.getLastSyncDate() != 0)\r
getStorageManager().removeFile(file);\r
}\r
+ \r
+ // synched folder -> notice to main thread\r
+ sendStickyBroadcast(true, parentId);\r
+\r
+ // recursive fetch\r
+ Iterator<String> pathsIt = paths.iterator();\r
+ Iterator<Long> fileIdsIt = fileIds.iterator();\r
+ while (pathsIt.hasNext()) {\r
+ fetchData(getUri().toString() + pathsIt.next(), syncResult, fileIdsIt.next());\r
+ }\r
+\r
+\r
} catch (OperationCanceledException e) {\r
e.printStackTrace();\r
} catch (AuthenticatorException e) {\r
file.setLastSyncDate(mCurrentSyncTime);\r
return file;\r
}\r
+ \r
+ \r
+ private void sendStickyBroadcast(boolean inProgress, long OCDirId) {\r
+ Intent i = new Intent(FileSyncService.SYNC_MESSAGE);\r
+ i.putExtra(FileSyncService.IN_PROGRESS, inProgress);\r
+ i.putExtra(FileSyncService.ACCOUNT_NAME, getAccount().name);\r
+ if (OCDirId > 0) {\r
+ i.putExtra(FileSyncService.SYNC_FOLDER, OCDirId);\r
+ }\r
+ getContext().sendStickyBroadcast(i);\r
+ }\r
\r
}\r
case R.id.startSync: {\r
Bundle bundle = new Bundle();\r
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);\r
+ bundle.putString("PROBANDO", "PARAMETRO PASADO AL SYNC");\r
ContentResolver.requestSync(\r
AccountUtils.getCurrentOwnCloudAccount(this),\r
"org.owncloud", bundle);\r
Log.d("FileDisplay", "sync of account " + account_name\r
+ " is in_progress: " + inProgress);\r
setSupportProgressBarIndeterminateVisibility(inProgress);\r
+ \r
+ long OCDirId = intent.getLongExtra(FileSyncService.SYNC_FOLDER, -1);\r
+ if (OCDirId > 0) {\r
+ OCFile syncDir = mStorageManager.getFileById(OCDirId);\r
+ if (syncDir != null && (\r
+ (mCurrentDir == null && syncDir.getFileName().equals("/")) ||\r
+ syncDir.equals(mCurrentDir))\r
+ ) {\r
+ FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
+ if (fileListFragment != null) { \r
+ fileListFragment.listDirectory();\r
+ }\r
+ }\r
+ }\r
+ \r
if (!inProgress) {\r
FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager()\r
.findFragmentById(R.id.fileList);\r