mirror of https://github.com/M66B/FairEmail.git
Support for renaming folders
This commit is contained in:
parent
c4ebff4c09
commit
1ed78da2a0
File diff suppressed because it is too large
Load Diff
|
@ -158,7 +158,7 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
|
|||
}
|
||||
|
||||
private void bindTo(final TupleFolderEx folder) {
|
||||
view.setActivated(folder.tbc != null || folder.tbd != null);
|
||||
view.setActivated(folder.tbc != null || folder.rename != null || folder.tbd != null);
|
||||
view.setAlpha(folder.hide || !folder.selectable || disabledIds.contains(folder.id)
|
||||
? Helper.LOW_LIGHT : 1.0f);
|
||||
|
||||
|
|
|
@ -801,6 +801,18 @@ class Core {
|
|||
db.folder().resetFolderTbc(folder.id);
|
||||
local.put(folder.name, folder);
|
||||
sync_folders = true;
|
||||
|
||||
} else if (folder.rename != null) {
|
||||
Log.i(folder.name + " rename into " + folder.rename);
|
||||
Folder ifolder = istore.getFolder(folder.name);
|
||||
if (ifolder.exists()) {
|
||||
ifolder.renameTo(istore.getFolder(folder.rename));
|
||||
db.folder().renameFolder(folder.account, folder.name, folder.rename);
|
||||
folder.name = folder.rename;
|
||||
}
|
||||
db.folder().resetFolderRename(folder.id);
|
||||
sync_folders = true;
|
||||
|
||||
} else if (folder.tbd != null && folder.tbd) {
|
||||
Log.i(folder.name + " deleting");
|
||||
Folder ifolder = istore.getFolder(folder.name);
|
||||
|
@ -808,6 +820,7 @@ class Core {
|
|||
ifolder.delete(false);
|
||||
db.folder().deleteFolder(folder.id);
|
||||
sync_folders = true;
|
||||
|
||||
} else {
|
||||
local.put(folder.name, folder);
|
||||
if (folder.initialize != 0)
|
||||
|
@ -864,7 +877,7 @@ class Core {
|
|||
String type = EntityFolder.getType(attr, fullName, false);
|
||||
boolean selectable = !Arrays.asList(attr).contains("\\Noselect");
|
||||
|
||||
if (EntityFolder.INBOX.equals(type))
|
||||
if (EntityFolder.INBOX.equals(type) || fullName.equals(childName))
|
||||
childName = null;
|
||||
|
||||
Log.i(account.name + ":" + fullName + " subscribed=" + subscribed +
|
||||
|
|
|
@ -57,7 +57,7 @@ import io.requery.android.database.sqlite.RequerySQLiteOpenHelperFactory;
|
|||
// https://developer.android.com/topic/libraries/architecture/room.html
|
||||
|
||||
@Database(
|
||||
version = 97,
|
||||
version = 98,
|
||||
entities = {
|
||||
EntityIdentity.class,
|
||||
EntityAccount.class,
|
||||
|
@ -984,6 +984,13 @@ public abstract class DB extends RoomDatabase {
|
|||
db.execSQL("ALTER TABLE `folder` ADD COLUMN `uidv` INTEGER");
|
||||
}
|
||||
})
|
||||
.addMigrations(new Migration(97, 98) {
|
||||
@Override
|
||||
public void migrate(@NonNull SupportSQLiteDatabase db) {
|
||||
Log.i("DB migration from version " + startVersion + " to " + endVersion);
|
||||
db.execSQL("ALTER TABLE `folder` ADD COLUMN `rename` TEXT");
|
||||
}
|
||||
})
|
||||
.build();
|
||||
}
|
||||
|
||||
|
|
|
@ -249,7 +249,8 @@ public interface DaoFolder {
|
|||
int setFoldersUser(long account);
|
||||
|
||||
@Query("UPDATE folder" +
|
||||
" SET display = :display" +
|
||||
" SET `rename` = :rename" +
|
||||
", display = :display" +
|
||||
", unified = :unified" +
|
||||
", navigation = :navigation" +
|
||||
", notify = :notify" +
|
||||
|
@ -262,7 +263,7 @@ public interface DaoFolder {
|
|||
", auto_delete = :auto_delete" +
|
||||
" WHERE id = :id")
|
||||
int setFolderProperties(
|
||||
long id,
|
||||
long id, String rename,
|
||||
String display, boolean unified, boolean navigation, boolean notify, boolean hide,
|
||||
boolean synchronize, boolean poll, boolean download,
|
||||
int sync_days, int keep_days, boolean auto_delete);
|
||||
|
@ -288,9 +289,12 @@ public interface DaoFolder {
|
|||
@Query("UPDATE folder SET read_only = :read_only WHERE id = :id")
|
||||
int setFolderReadOnly(long id, boolean read_only);
|
||||
|
||||
@Query("UPDATE folder SET tbc = null WHERE id = :id")
|
||||
@Query("UPDATE folder SET tbc = NULL WHERE id = :id")
|
||||
int resetFolderTbc(long id);
|
||||
|
||||
@Query("UPDATE folder SET `rename` = NULL WHERE id = :id")
|
||||
int resetFolderRename(long id);
|
||||
|
||||
@Query("UPDATE folder SET tbd = 1 WHERE id = :id")
|
||||
int setFolderTbd(long id);
|
||||
|
||||
|
|
|
@ -103,6 +103,7 @@ public class EntityFolder extends EntityOrder implements Serializable {
|
|||
public Integer initialize = DEFAULT_KEEP;
|
||||
public Boolean tbc; // to be created
|
||||
public Boolean tbd; // to be deleted
|
||||
public String rename;
|
||||
public String state;
|
||||
public String sync_state;
|
||||
@NonNull
|
||||
|
@ -311,6 +312,7 @@ public class EntityFolder extends EntityOrder implements Serializable {
|
|||
Helper.equal(this.keywords, other.keywords) &&
|
||||
this.initialize.equals(other.initialize) &&
|
||||
Objects.equals(this.tbc, other.tbc) &&
|
||||
Objects.equals(this.rename, other.rename) &&
|
||||
Objects.equals(this.tbd, other.tbd) &&
|
||||
Objects.equals(this.state, other.state) &&
|
||||
Objects.equals(this.sync_state, other.sync_state) &&
|
||||
|
|
|
@ -222,7 +222,7 @@ public class FragmentFolder extends FragmentBase {
|
|||
|
||||
Helper.setViewsEnabled(view, true);
|
||||
|
||||
etName.setEnabled(folder == null);
|
||||
etName.setEnabled(folder == null || EntityFolder.USER.equals(folder.type));
|
||||
cbPoll.setEnabled(cbSynchronize.isChecked());
|
||||
cbDownload.setEnabled(cbSynchronize.isChecked());
|
||||
etKeepDays.setEnabled(!cbKeepAll.isChecked());
|
||||
|
@ -361,7 +361,7 @@ public class FragmentFolder extends FragmentBase {
|
|||
|
||||
boolean should = args.getBoolean("should");
|
||||
|
||||
if (TextUtils.isEmpty(display))
|
||||
if (TextUtils.isEmpty(display) || display.equals(name))
|
||||
display = null;
|
||||
|
||||
int sync_days = (TextUtils.isEmpty(sync) ? EntityFolder.DEFAULT_SYNC : Integer.parseInt(sync));
|
||||
|
@ -380,6 +380,8 @@ public class FragmentFolder extends FragmentBase {
|
|||
if (folder == null)
|
||||
return !TextUtils.isEmpty(name);
|
||||
|
||||
if (!Objects.equals(folder.name, name))
|
||||
return true;
|
||||
if (!Objects.equals(folder.display, display))
|
||||
return true;
|
||||
if (!Objects.equals(folder.unified, unified))
|
||||
|
@ -406,9 +408,6 @@ public class FragmentFolder extends FragmentBase {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (TextUtils.isEmpty(display) || display.equals(name))
|
||||
display = null;
|
||||
|
||||
if (folder == null) {
|
||||
reload = true;
|
||||
Log.i("Creating folder=" + name + " parent=" + parent);
|
||||
|
@ -423,7 +422,8 @@ public class FragmentFolder extends FragmentBase {
|
|||
|
||||
if (TextUtils.isEmpty(name))
|
||||
throw new IllegalArgumentException(context.getString(R.string.title_folder_name_missing));
|
||||
if (db.folder().getFolderByName(aid, name) != null)
|
||||
EntityFolder target = db.folder().getFolderByName(aid, name);
|
||||
if (target != null)
|
||||
throw new IllegalArgumentException(context.getString(R.string.title_folder_exists, name));
|
||||
|
||||
EntityFolder create = new EntityFolder();
|
||||
|
@ -443,11 +443,19 @@ public class FragmentFolder extends FragmentBase {
|
|||
create.tbc = true;
|
||||
db.folder().insertFolder(create);
|
||||
} else {
|
||||
reload = (!folder.synchronize.equals(synchronize) ||
|
||||
if (!folder.name.equals(name)) {
|
||||
EntityFolder target = db.folder().getFolderByName(folder.account, name);
|
||||
if (target != null)
|
||||
throw new IllegalArgumentException(context.getString(R.string.title_folder_exists, name));
|
||||
}
|
||||
|
||||
reload = (!folder.name.equals(name) ||
|
||||
!folder.synchronize.equals(synchronize) ||
|
||||
!folder.poll.equals(poll));
|
||||
|
||||
Log.i("Updating folder=" + name);
|
||||
Log.i("Updating folder=" + folder.name);
|
||||
db.folder().setFolderProperties(id,
|
||||
folder.name.equals(name) ? null : name,
|
||||
display, unified, navigation, notify, hide,
|
||||
synchronize, poll, download,
|
||||
sync_days, keep_days, auto_delete);
|
||||
|
|
Loading…
Reference in New Issue