diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt index 5f9f3c897..0e61aec58 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/activities/MainActivity.kt @@ -38,7 +38,6 @@ import com.simplemobiletools.calendar.pro.helpers.IcsExporter.ExportResult import com.simplemobiletools.calendar.pro.helpers.IcsImporter.ImportResult import com.simplemobiletools.calendar.pro.jobs.CalDAVUpdateListener import com.simplemobiletools.calendar.pro.models.Event -import com.simplemobiletools.calendar.pro.models.EventType import com.simplemobiletools.calendar.pro.models.ListEvent import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.FilePickerDialog @@ -593,10 +592,9 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener { toast(R.string.importing) ensureBackgroundThread { val holidays = getString(R.string.holidays) - var eventTypeId = eventsHelper.getEventTypeIdWithTitle(holidays) + var eventTypeId = eventsHelper.getEventTypeIdWithClass(HOLIDAY_EVENT) if (eventTypeId == -1L) { - val eventType = EventType(null, holidays, resources.getColor(R.color.default_holidays_color)) - eventTypeId = eventsHelper.insertOrUpdateEventTypeSync(eventType) + eventTypeId = eventsHelper.createPredefinedEventType(holidays, R.color.default_holidays_color, HOLIDAY_EVENT, true) } val result = IcsImporter(this).importEvents(selectedHoliday as String, eventTypeId, 0, false, reminders) handleParseResult(result) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt index 65c9e1307..ddc6dd17c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/databases/EventsDatabase.kt @@ -22,7 +22,7 @@ import com.simplemobiletools.calendar.pro.models.Widget import com.simplemobiletools.commons.extensions.getProperPrimaryColor import java.util.concurrent.Executors -@Database(entities = [Event::class, EventType::class, Widget::class, Task::class], version = 7) +@Database(entities = [Event::class, EventType::class, Widget::class, Task::class], version = 8) @TypeConverters(Converters::class) abstract class EventsDatabase : RoomDatabase() { @@ -54,6 +54,7 @@ abstract class EventsDatabase : RoomDatabase() { .addMigrations(MIGRATION_4_5) .addMigrations(MIGRATION_5_6) .addMigrations(MIGRATION_6_7) + .addMigrations(MIGRATION_7_8) .build() db!!.openHelper.setWriteAheadLoggingEnabled(true) } @@ -127,5 +128,13 @@ abstract class EventsDatabase : RoomDatabase() { } } } + + private val MIGRATION_7_8 = object : Migration(7, 8) { + override fun migrate(database: SupportSQLiteDatabase) { + database.apply { + execSQL("ALTER TABLE event_types ADD COLUMN type INTEGER NOT NULL DEFAULT 0") + } + } + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/EditEventTypeDialog.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/EditEventTypeDialog.kt index f5aa59f30..0133c3d2f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/EditEventTypeDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/dialogs/EditEventTypeDialog.kt @@ -5,6 +5,7 @@ import android.widget.ImageView import androidx.appcompat.app.AlertDialog import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.extensions.eventsHelper +import com.simplemobiletools.calendar.pro.helpers.OTHER_EVENT import com.simplemobiletools.calendar.pro.models.EventType import com.simplemobiletools.commons.dialogs.ColorPickerDialog import com.simplemobiletools.commons.extensions.* @@ -59,10 +60,16 @@ class EditEventTypeDialog(val activity: Activity, var eventType: EventType? = nu } private fun eventTypeConfirmed(title: String, dialog: AlertDialog) { - val eventIdWithTitle = activity.eventsHelper.getEventTypeIdWithTitle(title) - var isEventTypeTitleTaken = isNewEvent && eventIdWithTitle != -1L + val eventTypeClass = eventType?.type ?: OTHER_EVENT + val eventTypeId = if (eventTypeClass == OTHER_EVENT) { + activity.eventsHelper.getEventTypeIdWithTitle(title) + } else { + activity.eventsHelper.getEventTypeIdWithClass(eventTypeClass) + } + + var isEventTypeTitleTaken = isNewEvent && eventTypeId != -1L if (!isEventTypeTitleTaken) { - isEventTypeTitleTaken = !isNewEvent && eventType!!.id != eventIdWithTitle && eventIdWithTitle != -1L + isEventTypeTitleTaken = !isNewEvent && eventType!!.id != eventTypeId && eventTypeId != -1L } if (title.isEmpty()) { diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt index 42722770b..893e4cfa2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/extensions/Context.kt @@ -10,6 +10,7 @@ import android.content.Context import android.content.Intent import android.content.pm.ActivityInfo import android.content.res.Resources +import android.database.Cursor import android.graphics.Bitmap import android.media.AudioAttributes import android.net.Uri @@ -677,3 +678,29 @@ fun Context.updateTaskCompletion(event: Event, completed: Boolean) { // mark event as "incomplete" in the main events db eventsDB.updateTaskCompletion(event.id!!, event.flags.removeBit(FLAG_TASK_COMPLETED)) } + +// same as Context.queryCursor but inlined to allow non-local returns +inline fun Context.queryCursorInlined( + uri: Uri, + projection: Array, + selection: String? = null, + selectionArgs: Array? = null, + sortOrder: String? = null, + showErrors: Boolean = false, + callback: (cursor: Cursor) -> Unit +) { + try { + val cursor = contentResolver.query(uri, projection, selection, selectionArgs, sortOrder) + cursor?.use { + if (cursor.moveToFirst()) { + do { + callback(cursor) + } while (cursor.moveToNext()) + } + } + } catch (e: Exception) { + if (showErrors) { + showErrorToast(e) + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt index 34608deec..2f4a4de4f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/CalDAVHelper.kt @@ -6,6 +6,7 @@ import android.content.ContentValues import android.content.Context import android.provider.CalendarContract.* import android.util.SparseIntArray +import android.widget.Toast import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.simplemobiletools.calendar.pro.R @@ -13,11 +14,12 @@ import com.simplemobiletools.calendar.pro.extensions.* import com.simplemobiletools.calendar.pro.models.* import com.simplemobiletools.calendar.pro.objects.States.isUpdatingCalDAV import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.* +import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALENDAR +import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CALENDAR import org.joda.time.DateTimeZone import org.joda.time.format.DateTimeFormat import java.util.* -import kotlin.collections.ArrayList +import kotlin.math.max @SuppressLint("MissingPermission") class CalDAVHelper(val context: Context) { @@ -149,9 +151,12 @@ class CalDAVHelper(val context: Context) { private fun fetchCalDAVCalendarEvents(calendarId: Int, eventTypeId: Long, showToasts: Boolean) { val importIdsMap = HashMap() val fetchedEventIds = ArrayList() + + var errorFetchingLocalEvents = false val existingEvents = try { context.eventsDB.getEventsFromCalDAVCalendar("$CALDAV-$calendarId") } catch (e: Exception) { + errorFetchingLocalEvents = true ArrayList() } @@ -180,14 +185,20 @@ class CalDAVHelper(val context: Context) { ) val selection = "${Events.CALENDAR_ID} = $calendarId" - context.queryCursor(uri, projection, selection, showErrors = showToasts) { cursor -> + context.queryCursorInlined(uri, projection, selection, showErrors = showToasts) { cursor -> val deleted = cursor.getIntValue(Events.DELETED) if (deleted == 1) { - return@queryCursor + return@queryCursorInlined } val id = cursor.getLongValue(Events._ID) val title = cursor.getStringValue(Events.TITLE) ?: "" + + if (errorFetchingLocalEvents) { + context.toast(context.getString(R.string.fetching_event_failed, "\"$title\""), Toast.LENGTH_LONG) + return + } + val description = cursor.getStringValue(Events.DESCRIPTION) ?: "" val startTS = cursor.getLongValue(Events.DTSTART) / 1000L var endTS = cursor.getLongValue(Events.DTEND) / 1000L @@ -238,14 +249,18 @@ class CalDAVHelper(val context: Context) { val parentEvent = context.eventsDB.getEventWithImportId(parentImportId) val originalDayCode = Formatter.getDayCodeFromTS(originalInstanceTime / 1000L) if (parentEvent != null && !parentEvent.repetitionExceptions.contains(originalDayCode)) { + val storedEventId = context.eventsDB.getEventIdWithImportId(importId) + if (storedEventId != null) { + event.id = storedEventId + } event.parentId = parentEvent.id!! parentEvent.addRepetitionException(originalDayCode) - eventsHelper.insertEvent(parentEvent, false, false) + eventsHelper.insertEvent(parentEvent, addToCalDAV = false, showToasts = false) event.parentId = parentEvent.id!! event.addRepetitionException(originalDayCode) - eventsHelper.insertEvent(event, false, false) - return@queryCursor + eventsHelper.insertEvent(event, addToCalDAV = false, showToasts = false) + return@queryCursorInlined } } @@ -262,10 +277,10 @@ class CalDAVHelper(val context: Context) { val formatter = DateTimeFormat.forPattern("yyyyMMdd'T'HHmmss'Z'") val offset = DateTimeZone.getDefault().getOffset(System.currentTimeMillis()) val dt = formatter.parseDateTime(it).plusMillis(offset) - val daycode = Formatter.getDayCodeFromDateTime(dt) - event.repetitionExceptions.add(daycode) + val dayCode = Formatter.getDayCodeFromDateTime(dt) + event.repetitionExceptions.add(dayCode) } else { - var potentialTS = it.substring(0, 8) + val potentialTS = it.substring(0, 8) if (potentialTS.areDigitsOnly()) { event.repetitionExceptions.add(potentialTS) } @@ -287,12 +302,12 @@ class CalDAVHelper(val context: Context) { if (existingEvent.hashCode() != event.hashCode() && title.isNotEmpty()) { event.id = originalEventId - eventsHelper.updateEvent(event, false, false) + eventsHelper.updateEvent(event, updateAtCalDAV = false, showToasts = false) } } else { if (title.isNotEmpty()) { importIdsMap[event.importId] = event - eventsHelper.insertEvent(event, false, false) + eventsHelper.insertEvent(event, addToCalDAV = false, showToasts = false) } } } @@ -300,9 +315,9 @@ class CalDAVHelper(val context: Context) { val eventIdsToDelete = ArrayList() importIdsMap.keys.filter { !fetchedEventIds.contains(it) }.forEach { val caldavEventId = it - existingEvents.forEach { - if (it.importId == caldavEventId) { - eventIdsToDelete.add(it.id!!) + existingEvents.forEach { event -> + if (event.importId == caldavEventId) { + eventIdsToDelete.add(event.id!!) } } } @@ -428,7 +443,7 @@ class CalDAVHelper(val context: Context) { private fun getDurationCode(event: Event): String { return if (event.getIsAllDay()) { - val dur = Math.max(1, (event.endTS - event.startTS) / DAY) + val dur = max(1, (event.endTS - event.startTS) / DAY) "P${dur}D" } else { Parser().getDurationCode((event.endTS - event.startTS) / 60L) diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt index 43519c25d..a2ddc1b9b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/Constants.kt @@ -41,6 +41,7 @@ const val REMINDER_DEFAULT_VALUE = "${REMINDER_OFF},${REMINDER_OFF},${REMINDER_O const val OTHER_EVENT = 0 const val BIRTHDAY_EVENT = 1 const val ANNIVERSARY_EVENT = 2 +const val HOLIDAY_EVENT = 3 const val ITEM_EVENT = 0 const val ITEM_SECTION_DAY = 1 diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt index ae55f19db..b98fe0cff 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/helpers/EventsHelper.kt @@ -3,6 +3,7 @@ package com.simplemobiletools.calendar.pro.helpers import android.app.Activity import android.content.Context import android.widget.Toast +import androidx.annotation.ColorRes import androidx.collection.LongSparseArray import com.simplemobiletools.calendar.pro.R import com.simplemobiletools.calendar.pro.extensions.* @@ -76,8 +77,12 @@ class EventsHelper(val context: Context) { fun getEventTypeIdWithTitle(title: String) = eventTypesDB.getEventTypeIdWithTitle(title) ?: -1L + fun getEventTypeIdWithClass(classId: Int) = eventTypesDB.getEventTypeIdWithClass(classId) ?: -1L + private fun getLocalEventTypeIdWithTitle(title: String) = eventTypesDB.getLocalEventTypeIdWithTitle(title) ?: -1L + private fun getLocalEventTypeIdWithClass(classId: Int) = eventTypesDB.getLocalEventTypeIdWithClass(classId) ?: -1L + fun getEventTypeWithCalDAVCalendarId(calendarId: Int) = eventTypesDB.getEventTypeWithCalDAVCalendarId(calendarId) fun deleteEventTypes(eventTypes: ArrayList, deleteEvents: Boolean) { @@ -338,22 +343,36 @@ class EventsHelper(val context: Context) { callback(events) } + fun createPredefinedEventType(title: String, @ColorRes colorResId: Int, type: Int, caldav: Boolean = false): Long { + val eventType = EventType(id = null, title = title, color = context.resources.getColor(colorResId), type = type) + + // check if the event type already exists but without the type (e.g. BIRTHDAY_EVENT) so as to avoid duplication + val originalEventTypeId = if (caldav) { + getEventTypeIdWithTitle(title) + } else { + getLocalEventTypeIdWithTitle(title) + } + if (originalEventTypeId != -1L) { + eventType.id = originalEventTypeId + } + + return insertOrUpdateEventTypeSync(eventType) + } + fun getLocalBirthdaysEventTypeId(createIfNotExists: Boolean = true): Long { - val birthdays = context.getString(R.string.birthdays) - var eventTypeId = getLocalEventTypeIdWithTitle(birthdays) + var eventTypeId = getLocalEventTypeIdWithClass(BIRTHDAY_EVENT) if (eventTypeId == -1L && createIfNotExists) { - val eventType = EventType(null, birthdays, context.resources.getColor(R.color.default_birthdays_color)) - eventTypeId = insertOrUpdateEventTypeSync(eventType) + val birthdays = context.getString(R.string.birthdays) + eventTypeId = createPredefinedEventType(birthdays, R.color.default_birthdays_color, BIRTHDAY_EVENT) } return eventTypeId } fun getAnniversariesEventTypeId(createIfNotExists: Boolean = true): Long { - val anniversaries = context.getString(R.string.anniversaries) - var eventTypeId = getLocalEventTypeIdWithTitle(anniversaries) + var eventTypeId = getLocalEventTypeIdWithClass(ANNIVERSARY_EVENT) if (eventTypeId == -1L && createIfNotExists) { - val eventType = EventType(null, anniversaries, context.resources.getColor(R.color.default_anniversaries_color)) - eventTypeId = insertOrUpdateEventTypeSync(eventType) + val anniversaries = context.getString(R.string.anniversaries) + eventTypeId = createPredefinedEventType(anniversaries, R.color.default_anniversaries_color, ANNIVERSARY_EVENT) } return eventTypeId } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventTypesDao.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventTypesDao.kt index afef1d7c6..1f8e2e185 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventTypesDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/interfaces/EventTypesDao.kt @@ -17,6 +17,12 @@ interface EventTypesDao { @Query("SELECT id FROM event_types WHERE title = :title AND caldav_calendar_id = 0 COLLATE NOCASE") fun getLocalEventTypeIdWithTitle(title: String): Long? + @Query("SELECT id FROM event_types WHERE type = :classId") + fun getEventTypeIdWithClass(classId: Int): Long? + + @Query("SELECT id FROM event_types WHERE type = :classId AND caldav_calendar_id = 0") + fun getLocalEventTypeIdWithClass(classId: Int): Long? + @Query("SELECT * FROM event_types WHERE caldav_calendar_id = :calendarId") fun getEventTypeWithCalDAVCalendarId(calendarId: Int): EventType? diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventType.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventType.kt index 696e81436..12aff09bd 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventType.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/pro/models/EventType.kt @@ -4,15 +4,18 @@ import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Index import androidx.room.PrimaryKey +import com.simplemobiletools.calendar.pro.helpers.OTHER_EVENT @Entity(tableName = "event_types", indices = [(Index(value = ["id"], unique = true))]) data class EventType( - @PrimaryKey(autoGenerate = true) var id: Long?, - @ColumnInfo(name = "title") var title: String, - @ColumnInfo(name = "color") var color: Int, - @ColumnInfo(name = "caldav_calendar_id") var caldavCalendarId: Int = 0, - @ColumnInfo(name = "caldav_display_name") var caldavDisplayName: String = "", - @ColumnInfo(name = "caldav_email") var caldavEmail: String = "") { + @PrimaryKey(autoGenerate = true) var id: Long?, + @ColumnInfo(name = "title") var title: String, + @ColumnInfo(name = "color") var color: Int, + @ColumnInfo(name = "caldav_calendar_id") var caldavCalendarId: Int = 0, + @ColumnInfo(name = "caldav_display_name") var caldavDisplayName: String = "", + @ColumnInfo(name = "caldav_email") var caldavEmail: String = "", + @ColumnInfo(name = "type") var type: Int = OTHER_EVENT +) { fun getDisplayTitle() = if (caldavCalendarId == 0) title else "$caldavDisplayName ($caldavEmail)" fun isSyncedEventType() = caldavCalendarId != 0 diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index b10880905..d3d356198 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed الإثنين diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index fdeca179c..0b94935d7 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed Bazar ertəsi diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 0838f232f..24a5433ea 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Заняты + Fetching event %s failed панядзелак diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 1e873f3aa..c2b6d89d7 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -228,6 +228,7 @@ Не са намерени календари, които да могат да се синхронизират Свободно Заето + Fetching event %s failed Понеделник @@ -280,4 +281,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 9f97e6cbb..54bfed41a 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -227,6 +227,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed সোমবার diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 663dd20a7..8ecccb6ab 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed Lun diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 14d07594f..a80ce6805 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -228,6 +228,7 @@ No s\'ha trobat cap calendari que es pugui sincronitzar Lliure Ocupat + Fetching event %s failed dilluns @@ -280,4 +281,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 5e578eec0..41e7b06f1 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -228,6 +228,7 @@ Nebyly nalezeny žádné synchronizovatelné kalendáře K dispozici Zaneprázdněný + Fetching event %s failed pondělí @@ -283,4 +284,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index f7989224b..374752cdb 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -228,6 +228,7 @@ Der er ikke fundet nogen kalendere der kan synkroniseres Ledig Optaget + Fetching event %s failed Mandag diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e0ac0c308..90ba76b7e 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -228,6 +228,7 @@ Es wurden keine synchronisierbaren Kalender gefunden Verfügbar Beschäftigt + Fetching event %s failed Montag @@ -280,4 +281,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 9b86e0917..199502c77 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -228,6 +228,7 @@ Δεν μπόρεσαν να βρεθούν συγχρονισμένα Ημερολόγια Ελεύθερα Κατειλημμένα + Fetching event %s failed Δευτέρα diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index eaac5016b..030c9dfd1 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed lundo diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 587c7ec2d..0d2cce9fb 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -228,6 +228,7 @@ No se han encontrado calendarios para sincronizar Libre Ocupado + Fetching event %s failed lunes diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index a07d46407..7dba6c524 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed Monday diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 9a26e91e3..ad6798796 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -228,6 +228,7 @@ Sinkronizatu daitekeen egutegirik ez da aurkitu Free Busy + Fetching event %s failed astelehenean diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 3544e96f8..419ca0df1 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -228,6 +228,7 @@ Synkronoitavia kalentereita ei löytynyt Vapaa Varattu + Fetching event %s failed Maanantaisin diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6e2878374..d9edddc10 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -228,6 +228,7 @@ Aucun agenda synchronisable n\'a été trouvé Disponible Occupé + Fetching event %s failed Lundi @@ -280,4 +281,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 26cb97e28..127130409 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -228,6 +228,7 @@ Non se atoparon calendarios sincronizados Free Busy + Fetching event %s failed luns diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index c16f25ce0..6ce17dab6 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed Monday diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 03ecd9d2c..2fcfe4873 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -228,6 +228,7 @@ Nijedan sinkronizirajući kalendar nije pronađen Slobodan/Slobodna Zauzet/Zauzeta + Fetching event %s failed Ponedjeljak diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 5847e8ed0..f1840979c 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -228,6 +228,7 @@ Nem találhatók szinkronizálható naptárak Szabad Elfoglalt + Fetching event %s failed hétfőn diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index f2fa485cd..19b8b5c60 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed Senin diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 7057a6e29..3707d2589 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -228,6 +228,7 @@ Non é stato trovato nessun calendario sincronizzabile Disponibile Occupato + Fetching event %s failed Lunedì @@ -280,4 +281,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index ceccb0cb7..2d6bd3f95 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -228,6 +228,7 @@ לא נמצאו לוחות שנה הניתנים לסנכרון Free עסוק + Fetching event %s failed שני diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index a45469abe..234c9dee8 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -229,6 +229,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed 月曜日 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 71c0e4f65..7a9c41b29 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed 월요일 diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index d27f5a1a1..88a3cf999 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -228,6 +228,7 @@ Nerasta jokių sinchronizuojamų kalendorių Laisvas Užimtas + Fetching event %s failed Pirmadienį diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index bb9dec332..b0af9ab46 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed pirmdiena diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 8932e944a..52adde734 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed Mandag diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index cb1482644..51cb4275b 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -224,6 +224,7 @@ Er zijn geen gesynchroniseerde agenda\'s gevonden. Vrij Bezet + Fetching event %s failed maandag @@ -276,4 +277,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 49190e975..6b0c7c325 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -228,6 +228,7 @@ Nie znaleziono kalendarzy, które można zsynchronizować Wolny Zajęty + Fetching event %s failed poniedziałek @@ -286,4 +287,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index a60302f94..350c368c7 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -228,6 +228,7 @@ Nenhum calendário encontrado para a sincronização Livre Ocupado + Fetching event %s failed Segunda diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index a13273d9f..24e3b3a93 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -228,6 +228,7 @@ Não existem calendários passíveis de sincronização Livre Ocupado + Fetching event %s failed segunda diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 26f618140..e2ed74f8f 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -228,6 +228,7 @@ Nu au fost găsite calendare care pot fi sincronizate Liber Ocupat + Fetching event %s failed Luni diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f415a2005..4e7886e90 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -228,6 +228,7 @@ Синхронизируемые календари не найдены Свободен Занят + Fetching event %s failed понедельник @@ -286,4 +287,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 30fcc115a..80efa451a 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -228,6 +228,7 @@ Nenašli sa žiadne synchronizovateľné kalendáre Dostupný Zaneprázdnený + Pridávanie udalosti %s zlyhalo pondelok diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 9511f2d21..db3aa9cb8 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -228,6 +228,7 @@ Inga synkroniserbara kalendrar har hittats Ledig Upptagen + Fetching event %s failed Måndag diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 6ed6bc404..3e316f8d2 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed Monday diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index db3870254..1f7413c94 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -228,6 +228,7 @@ Eşzamanlanabilir takvim bulunamadı Serbest Meşgul + Fetching event %s failed Pazartesi @@ -280,4 +281,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 274e3494d..cd579d30d 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -228,6 +228,7 @@ Не знайдено календарів для синхронізації Free Зайнятий + Fetching event %s failed понеділок @@ -286,4 +287,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index d068808e8..b219dc301 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -228,6 +228,7 @@ 未发现可同步的日历 空闲 繁忙 + Fetching event %s failed 星期一 @@ -277,4 +278,4 @@ Haven't found some strings? There's more at https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res --> - \ No newline at end of file + diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 725fb285e..f63732ff0 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found 空閒 繁忙 + Fetching event %s failed 星期一 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index c4ff6325d..9af5961e6 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -228,6 +228,7 @@ No synchronizable calendars have been found 空閒 繁忙 + Fetching event %s failed 星期一 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 42e33acdc..20dee0b97 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -239,6 +239,7 @@ No synchronizable calendars have been found Free Busy + Fetching event %s failed