import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import java.util.Vector;
import android.accounts.Account;
}
- public void saveConflict(long fileId, boolean inConflict) {
+ public void saveConflict(OCFile file, boolean inConflict) {
ContentValues cv = new ContentValues();
cv.put(ProviderTableMeta.FILE_IN_CONFLICT, inConflict);
+ int updated = 0;
if (getContentResolver() != null) {
- getContentResolver().update(
+ updated = getContentResolver().update(
ProviderTableMeta.CONTENT_URI_FILE,
cv,
ProviderTableMeta._ID + "=?",
- new String[] { String.valueOf(fileId)}
+ new String[] { String.valueOf(file.getFileId())}
);
} else {
try {
- getContentProviderClient().update(
+ updated = getContentProviderClient().update(
ProviderTableMeta.CONTENT_URI_FILE,
cv,
ProviderTableMeta._ID + "=?",
- new String[]{String.valueOf(fileId)}
+ new String[]{String.valueOf(file.getFileId())}
);
} catch (RemoteException e) {
Log_OC.e(TAG, "Failed saving conflict in database " + e.getMessage());
}
}
+
+ Log_OC.d(TAG, "Number of files updated with CONFLICT: " + updated);
+
+ if (updated > 0) {
+ if (inConflict) {
+ /// set conflict in all ancestor folders
+
+ long parentId = file.getParentId();
+ Set<String> ancestorIds = new HashSet<String>();
+ while (parentId != FileDataStorageManager.ROOT_PARENT_ID) {
+ ancestorIds.add(Long.toString(parentId));
+ parentId = getFileById(parentId).getParentId();
+ }
+
+ if (ancestorIds.size() > 0) {
+ StringBuffer whereBuffer = new StringBuffer();
+ whereBuffer.append(ProviderTableMeta._ID).append(" IN (");
+ for (int i = 0; i < ancestorIds.size() - 1; i++) {
+ whereBuffer.append("?,");
+ }
+ whereBuffer.append("?");
+ whereBuffer.append(")");
+
+ if (getContentResolver() != null) {
+ updated = getContentResolver().update(
+ ProviderTableMeta.CONTENT_URI_FILE,
+ cv,
+ whereBuffer.toString(),
+ ancestorIds.toArray(new String[]{})
+ );
+ } else {
+ try {
+ updated = getContentProviderClient().update(
+ ProviderTableMeta.CONTENT_URI_FILE,
+ cv,
+ whereBuffer.toString(),
+ ancestorIds.toArray(new String[]{})
+ );
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Failed saving conflict in database " + e.getMessage());
+ }
+ }
+ } // else file is ROOT folder, no parent to set in conflict
+
+ } else {
+ /// TODO update conflict in ancestor folders
+ // (not directly unset; maybe there are more conflicts below them)
+ }
+ }
+
+ Log_OC.d(TAG, "Number of parents updated with CONFLICT: " + updated);
+
}
}
\r
localStateView.setVisibility(View.INVISIBLE); // default first\r
\r
- if (file.isFolder()) {\r
- if ( //synchronizing\r
- (opsBinder != null &&\r
- opsBinder.isSynchronizing(mAccount, file.getRemotePath())) ||\r
- // downloading\r
- (downloaderBinder != null &&\r
- downloaderBinder.isDownloading(mAccount, file)) ||\r
- // uploading\r
- (uploaderBinder != null &&\r
- uploaderBinder.isUploading(mAccount, file))\r
- ) {\r
-\r
- localStateView.setImageResource(R.drawable.synchronizing_file_indicator);\r
- localStateView.setVisibility(View.VISIBLE);\r
- }\r
-\r
- } else if ( //synchronizing\r
+ if ( //synchronizing\r
opsBinder != null &&\r
opsBinder.isSynchronizing(mAccount, file.getRemotePath())\r
) {\r
downloaderBinder != null &&\r
downloaderBinder.isDownloading(mAccount, file)\r
) {\r
- localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
+ localStateView.setImageResource(\r
+ file.isFolder() ?\r
+ R.drawable.synchronizing_file_indicator :\r
+ R.drawable.downloading_file_indicator\r
+ );\r
localStateView.setVisibility(View.VISIBLE);\r
\r
- } else if (//uploading\r
+ } else if ( //uploading\r
uploaderBinder != null &&\r
uploaderBinder.isUploading(mAccount, file)\r
) {\r
- localStateView.setImageResource(R.drawable.uploading_file_indicator);\r
+ localStateView.setImageResource(\r
+ file.isFolder() ?\r
+ R.drawable.synchronizing_file_indicator :\r
+ R.drawable.uploading_file_indicator\r
+ );\r
localStateView.setVisibility(View.VISIBLE);\r
\r
} else if (file.isInConflict()) { // conflict\r