Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 79017f8b authored by Arnau Mora's avatar Arnau Mora Committed by GitHub
Browse files

Add option to drop DESCRIPTION on sync (#264)



* Added option to ignore description

Signed-off-by: default avatarArnau Mora Gras <arnyminerz@proton.me>

* Implemented description removal

Signed-off-by: default avatarArnau Mora Gras <arnyminerz@proton.me>

* Added title to authentication

Signed-off-by: default avatarArnau Mora Gras <arnyminerz@proton.me>

* Update setting explanation

---------

Signed-off-by: default avatarArnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: default avatarSunik Kupfer <kupfer@bitfire.at>
parent df98e561
Loading
Loading
Loading
Loading
+151 −0
Original line number Diff line number Diff line
{
  "formatVersion": 1,
  "database": {
    "version": 4,
    "identityHash": "1eec5a75f63cbbca3716bc789fd91375",
    "entities": [
      {
        "tableName": "subscriptions",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `calendarId` INTEGER, `url` TEXT NOT NULL, `eTag` TEXT, `displayName` TEXT NOT NULL, `lastModified` INTEGER, `lastSync` INTEGER, `errorMessage` TEXT, `ignoreEmbeddedAlerts` INTEGER NOT NULL, `defaultAlarmMinutes` INTEGER, `defaultAllDayAlarmMinutes` INTEGER, `ignoreDescription` INTEGER NOT NULL DEFAULT 0, `color` INTEGER)",
        "fields": [
          {
            "fieldPath": "id",
            "columnName": "id",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "calendarId",
            "columnName": "calendarId",
            "affinity": "INTEGER",
            "notNull": false
          },
          {
            "fieldPath": "url",
            "columnName": "url",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "eTag",
            "columnName": "eTag",
            "affinity": "TEXT",
            "notNull": false
          },
          {
            "fieldPath": "displayName",
            "columnName": "displayName",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "lastModified",
            "columnName": "lastModified",
            "affinity": "INTEGER",
            "notNull": false
          },
          {
            "fieldPath": "lastSync",
            "columnName": "lastSync",
            "affinity": "INTEGER",
            "notNull": false
          },
          {
            "fieldPath": "errorMessage",
            "columnName": "errorMessage",
            "affinity": "TEXT",
            "notNull": false
          },
          {
            "fieldPath": "ignoreEmbeddedAlerts",
            "columnName": "ignoreEmbeddedAlerts",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "defaultAlarmMinutes",
            "columnName": "defaultAlarmMinutes",
            "affinity": "INTEGER",
            "notNull": false
          },
          {
            "fieldPath": "defaultAllDayAlarmMinutes",
            "columnName": "defaultAllDayAlarmMinutes",
            "affinity": "INTEGER",
            "notNull": false
          },
          {
            "fieldPath": "ignoreDescription",
            "columnName": "ignoreDescription",
            "affinity": "INTEGER",
            "notNull": true,
            "defaultValue": "0"
          },
          {
            "fieldPath": "color",
            "columnName": "color",
            "affinity": "INTEGER",
            "notNull": false
          }
        ],
        "primaryKey": {
          "autoGenerate": true,
          "columnNames": [
            "id"
          ]
        },
        "indices": [],
        "foreignKeys": []
      },
      {
        "tableName": "credentials",
        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`subscriptionId` INTEGER NOT NULL, `username` TEXT NOT NULL, `password` TEXT NOT NULL, PRIMARY KEY(`subscriptionId`), FOREIGN KEY(`subscriptionId`) REFERENCES `subscriptions`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
        "fields": [
          {
            "fieldPath": "subscriptionId",
            "columnName": "subscriptionId",
            "affinity": "INTEGER",
            "notNull": true
          },
          {
            "fieldPath": "username",
            "columnName": "username",
            "affinity": "TEXT",
            "notNull": true
          },
          {
            "fieldPath": "password",
            "columnName": "password",
            "affinity": "TEXT",
            "notNull": true
          }
        ],
        "primaryKey": {
          "autoGenerate": false,
          "columnNames": [
            "subscriptionId"
          ]
        },
        "indices": [],
        "foreignKeys": [
          {
            "table": "subscriptions",
            "onDelete": "CASCADE",
            "onUpdate": "NO ACTION",
            "columns": [
              "subscriptionId"
            ],
            "referencedColumns": [
              "id"
            ]
          }
        ]
      }
    ],
    "views": [],
    "setupQueries": [
      "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1eec5a75f63cbbca3716bc789fd91375')"
    ]
  }
}
 No newline at end of file
+17 −5
Original line number Diff line number Diff line
@@ -16,17 +16,17 @@ import at.bitfire.icsdroid.calendar.LocalCalendar
import at.bitfire.icsdroid.calendar.LocalEvent
import at.bitfire.icsdroid.db.AppDatabase
import at.bitfire.icsdroid.db.entity.Subscription
import at.bitfire.icsdroid.ui.views.EditCalendarActivity
import at.bitfire.icsdroid.ui.NotificationUtils
import at.bitfire.icsdroid.ui.views.EditCalendarActivity
import java.io.InputStream
import java.io.InputStreamReader
import java.time.Duration
import net.fortuna.ical4j.model.Property
import net.fortuna.ical4j.model.PropertyList
import net.fortuna.ical4j.model.component.VAlarm
import net.fortuna.ical4j.model.property.Action
import net.fortuna.ical4j.model.property.Trigger
import okhttp3.MediaType
import java.io.InputStream
import java.io.InputStreamReader
import java.time.Duration

/**
 * Fetches the .ics for a given Webcal subscription and stores the events
@@ -103,6 +103,18 @@ class ProcessEventsTask(
        }
    }

    /**
     * Updates the advanced preferences of the given event according to the [subscription]'s:
     * - [Subscription.ignoreDescription]
     */
    private fun updateAdvancedPreferences(event: Event): Event = event.apply {
        if (subscription.ignoreDescription) {
            // Remove the description
            Log.d(Constants.TAG, "Removing the description from $uid")
            description = null
        }
    }

    private suspend fun processEvents() {
        val uri = subscription.url
        Log.i(Constants.TAG, "Synchronizing $uri, forceResync=$forceResync")
@@ -209,7 +221,7 @@ class ProcessEventsTask(
        val uids = HashSet<String>(events.size)

        for (ev in events) {
            val event = updateAlarms(ev)
            val event = updateAlarms(ev).let(::updateAdvancedPreferences)
            val uid = event.uid!!
            Log.d(Constants.TAG, "Found VEVENT $uid: $event")
            uids += uid
+5 −1
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import at.bitfire.icsdroid.db.entity.Subscription
@TypeConverters(Converters::class)
@Database(
    entities = [Subscription::class, Credential::class],
    version = 3,
    version = 4,
    autoMigrations = [
        AutoMigration (
            from = 1,
@@ -34,6 +34,10 @@ import at.bitfire.icsdroid.db.entity.Subscription
        AutoMigration (
            from = 2,
            to = 3
        ),
        AutoMigration (
            from = 3,
            to = 4
        )
    ]
)
+5 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ package at.bitfire.icsdroid.db.entity
import android.net.Uri
import android.provider.CalendarContract.Calendars
import androidx.core.content.contentValuesOf
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import at.bitfire.icsdroid.calendar.LocalCalendar
@@ -42,6 +43,10 @@ data class Subscription(
    /** setting: Shall a default alarm be added to every all-day event in the calendar? If yes, this field contains the minutes before the event. If no, it is `null`. */
    val defaultAllDayAlarmMinutes: Long? = null,

    /** If true, the `DESCRIPTION` field of events will be dropped when synchronization runs. */
    @ColumnInfo(defaultValue = "0")
    val ignoreDescription: Boolean = false,

    /** The color that represents the subscription. */
    val color: Int? = null
) {
+1 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ class CreateSubscriptionModel(application: Application) : AndroidViewModel(appli
                    ignoreEmbeddedAlerts = subscriptionSettingsModel.ignoreAlerts.value ?: false,
                    defaultAlarmMinutes = subscriptionSettingsModel.defaultAlarmMinutes.value,
                    defaultAllDayAlarmMinutes = subscriptionSettingsModel.defaultAllDayAlarmMinutes.value,
                    ignoreDescription = subscriptionSettingsModel.ignoreDescription.value ?: false,
                )

                /** A list of all the ids of the inserted rows */
Loading