Add order to caldav tasks table

pull/996/head
Alex Baker 4 years ago
parent 783898a0bb
commit 0c0d4a79e7

@ -37,8 +37,8 @@ android {
defaultConfig {
testApplicationId = "org.tasks.test"
applicationId = "org.tasks"
versionCode = 90202
versionName = "9.2"
versionCode = 90300
versionName = "9.3"
targetSdkVersion(Versions.targetSdk)
minSdkVersion(Versions.minSdk)
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

File diff suppressed because it is too large Load Diff

@ -21,25 +21,25 @@ import org.tasks.jobs.BackupServiceTests
@ApplicationScope
@Component(modules = [TestModule::class])
interface TestComponent : ApplicationComponent {
fun inject(gtasksListServiceTest: GtasksListServiceTest)
fun inject(reminderServiceTest: ReminderServiceTest)
fun inject(taskTest: TaskTest)
fun inject(taskDaoTests: TaskDaoTests)
fun inject(newSyncTestCase: NewSyncTestCase)
fun inject(subtasksTestCase: SubtasksMovingTest)
fun inject(subtasksHelperTest: SubtasksHelperTest)
fun inject(quickAddMarkupTest: QuickAddMarkupTest)
fun inject(titleParserTest: TitleParserTest)
fun inject(backupServiceTests: BackupServiceTests)
fun inject(alarmServiceTest: AlarmJobServiceTest)
fun inject(repeatTaskHelperTest: RepeatTaskHelperTest)
fun inject(gtasksMetadataServiceTest: GtasksMetadataServiceTest)
fun inject(deletionDaoTests: DeletionDaoTests)
fun inject(googleTaskDaoTests: GoogleTaskDaoTests)
fun inject(tagDataDaoTest: TagDataDaoTest)
fun inject(caldavDaoTests: CaldavDaoTests)
fun inject(taskMoverTest: TaskMoverTest)
fun inject(locationDaoTest: LocationDaoTest)
fun inject(googleTaskListDaoTest: GoogleTaskListDaoTest)
fun inject(caldavTaskAdapterTest: CaldavTaskAdapterTest)
fun inject(tests: GtasksListServiceTest)
fun inject(tests: ReminderServiceTest)
fun inject(tests: TaskTest)
fun inject(tests: TaskDaoTests)
fun inject(tests: NewSyncTestCase)
fun inject(tests: SubtasksMovingTest)
fun inject(tests: SubtasksHelperTest)
fun inject(tests: QuickAddMarkupTest)
fun inject(tests: TitleParserTest)
fun inject(tests: BackupServiceTests)
fun inject(tests: AlarmJobServiceTest)
fun inject(tests: RepeatTaskHelperTest)
fun inject(tests: GtasksMetadataServiceTest)
fun inject(tests: DeletionDaoTests)
fun inject(tests: GoogleTaskDaoTests)
fun inject(tests: TagDataDaoTest)
fun inject(tests: CaldavDaoTests)
fun inject(tests: TaskMoverTest)
fun inject(tests: LocationDaoTest)
fun inject(tests: GoogleTaskListDaoTest)
fun inject(tests: CaldavTaskAdapterTest)
}

@ -7,7 +7,26 @@ import org.tasks.data.*
import org.tasks.notifications.Notification
import org.tasks.notifications.NotificationDao
@Database(entities = [Notification::class, TagData::class, UserActivity::class, TaskAttachment::class, TaskListMetadata::class, Task::class, Alarm::class, Place::class, Geofence::class, Tag::class, GoogleTask::class, Filter::class, GoogleTaskList::class, CaldavCalendar::class, CaldavTask::class, CaldavAccount::class, GoogleTaskAccount::class], version = 74)
@Database(
entities = [
Notification::class,
TagData::class,
UserActivity::class,
TaskAttachment::class,
TaskListMetadata::class,
Task::class,
Alarm::class,
Place::class,
Geofence::class,
Tag::class,
GoogleTask::class,
Filter::class,
GoogleTaskList::class,
CaldavCalendar::class,
CaldavTask::class,
CaldavAccount::class,
GoogleTaskAccount::class],
version = 75)
abstract class Database : RoomDatabase() {
abstract fun notificationDao(): NotificationDao
abstract val tagDataDao: TagDataDao

@ -60,6 +60,7 @@ public class Upgrader {
private static final int V8_5 = 700;
private static final int V8_8 = 717;
private static final int V8_10 = 735;
private static final int V9_3 = 90300;
private final Context context;
private final Preferences preferences;
private final TagDataDao tagDataDao;
@ -125,6 +126,7 @@ public class Upgrader {
preferences.setBoolean(R.string.p_auto_dismiss_datetime_edit_screen, true);
});
run(from, V8_10, this::migrateWidgets);
run(from, V9_3, this::applyCaldavOrder);
preferences.setBoolean(R.string.p_just_updated, true);
}
preferences.setCurrentVersion(to);
@ -201,6 +203,22 @@ public class Upgrader {
}
}
private void applyCaldavOrder() {
for (CaldavTask task : transform(caldavDao.getTasks(), CaldavTaskContainer::getCaldavTask)) {
at.bitfire.ical4android.Task remoteTask = iCalendar.Companion.fromVtodo(task.getVtodo());
if (remoteTask == null) {
continue;
}
Long order = iCalendar.Companion.getOrder(remoteTask);
if (order != null) {
task.setOrder(order);
task.setRemoteOrder(order);
caldavDao.update(task);
}
}
}
private void applyCaldavGeo() {
List<Long> tasksWithLocations =
Lists.transform(locationDao.getActiveGeofences(), Location::getTask);

@ -70,6 +70,11 @@ class iCalendar @Inject constructor(
}
}
}
val Task.order: Long?
get() = unknownProperties
.find { it.name?.equals("x-apple-sort-order", true) == true }
.let { it?.value?.toLong() }
}
fun setPlace(taskId: Long, geo: Geo) {
@ -151,6 +156,7 @@ class iCalendar @Inject constructor(
caldavTask = existing
}
CaldavConverter.apply(task, remote)
caldavTask.remoteOrder = remote.order
val geo = remote.geoPosition
if (geo == null) {
locationDao.getActiveGeofences(task.id).forEach {

@ -40,6 +40,17 @@ class CaldavTask {
@ColumnInfo(name = "cd_remote_parent")
var remoteParent: String? = null
@ColumnInfo(name = "cd_order")
@Transient
var order: Long? = null
@ColumnInfo(name = "cd_remote_order")
var remoteOrder: Long? = null
@ColumnInfo(name = "cd_moved")
@Transient
var moved = false
constructor()
@Ignore
@ -61,7 +72,7 @@ class CaldavTask {
fun isDeleted() = deleted > 0
override fun toString(): String {
return "CaldavTask(id=$id, task=$task, calendar=$calendar, `object`=$`object`, remoteId=$remoteId, etag=$etag, lastSync=$lastSync, deleted=$deleted, vtodo=$vtodo, remoteParent=$remoteParent)"
return "CaldavTask(id=$id, task=$task, calendar=$calendar, `object`=$`object`, remoteId=$remoteId, etag=$etag, lastSync=$lastSync, deleted=$deleted, vtodo=$vtodo, remoteParent=$remoteParent, order=$order, remoteOrder=$remoteOrder, moved=$moved)"
}
companion object {

@ -4,6 +4,7 @@ class SubsetCaldav {
var cd_id: Long = 0
var cd_calendar: String? = null
var cd_remote_parent: String? = null
var cd_order: Long = 0
override fun equals(other: Any?): Boolean {
if (this === other) return true
@ -12,6 +13,7 @@ class SubsetCaldav {
if (cd_id != other.cd_id) return false
if (cd_calendar != other.cd_calendar) return false
if (cd_remote_parent != other.cd_remote_parent) return false
if (cd_order != other.cd_order) return false
return true
}
@ -20,10 +22,11 @@ class SubsetCaldav {
var result = cd_id.hashCode()
result = 31 * result + (cd_calendar?.hashCode() ?: 0)
result = 31 * result + (cd_remote_parent?.hashCode() ?: 0)
result = 31 * result + cd_order.hashCode()
return result
}
override fun toString(): String {
return "SubsetCaldav(id=$cd_id, calendar=$cd_calendar, remoteParent=$cd_remote_parent)"
return "SubsetCaldav(cd_id=$cd_id, cd_calendar=$cd_calendar, cd_remote_parent=$cd_remote_parent, cd_order=$cd_order)"
}
}

@ -428,6 +428,16 @@ public class Migrations {
}
};
private static final Migration MIGRATION_74_75 =
new Migration(74, 75) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE `caldav_tasks` ADD COLUMN `cd_order` INTEGER");
database.execSQL("ALTER TABLE `caldav_tasks` ADD COLUMN `cd_remote_order` INTEGER");
database.execSQL("ALTER TABLE `caldav_tasks` ADD COLUMN `cd_moved` INTEGER NOT NULL DEFAULT 0");
}
};
public static final Migration[] MIGRATIONS =
new Migration[] {
MIGRATION_35_36,
@ -459,7 +469,8 @@ public class Migrations {
MIGRATION_70_71,
MIGRATION_71_72,
MIGRATION_72_73,
MIGRATION_73_74
MIGRATION_73_74,
MIGRATION_74_75
};
private static Migration NOOP(int from, int to) {

@ -11,7 +11,7 @@ object Versions {
const val analytics = "17.4.1"
const val remote_config = "19.1.4"
const val okhttp = "4.6.0"
const val flipper = "0.41.0"
const val flipper = "0.42.0"
const val mockito = "3.3.3"
const val androidx_test = "1.2.0"
const val make_it_easy = "4.0.1"

Loading…
Cancel
Save