From 5014c121d70ae202464115961c9cb53a9e00369f Mon Sep 17 00:00:00 2001 From: Lukas Winkler Date: Wed, 22 Sep 2021 14:23:10 +0200 Subject: [PATCH] store URL from API response --- .../companion/api/MatomoCampUrls.kt | 3 --- .../matomocamp/companion/db/BookmarksDao.kt | 4 ++-- .../matomocamp/companion/db/ScheduleDao.kt | 19 ++++++++++--------- .../companion/db/entities/EventEntity.kt | 1 + .../companion/inject/DatabaseModule.kt | 4 ++-- .../org/matomocamp/companion/model/Event.kt | 6 +----- .../companion/parsers/EventsParser.kt | 3 +++ 7 files changed, 19 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/org/matomocamp/companion/api/MatomoCampUrls.kt b/app/src/main/java/org/matomocamp/companion/api/MatomoCampUrls.kt index ab9eeb0..c3a19cb 100644 --- a/app/src/main/java/org/matomocamp/companion/api/MatomoCampUrls.kt +++ b/app/src/main/java/org/matomocamp/companion/api/MatomoCampUrls.kt @@ -17,9 +17,6 @@ object MatomoCampUrls { val volunteer get() = "https://fosdem.org/volunteer/" - fun getEvent(slug: String, year: Int): String { - return "https://fosdem.org/$year/schedule/event/$slug/" - } fun getPerson(slug: String, year: Int): String { return "https://fosdem.org/$year/schedule/speaker/$slug/" diff --git a/app/src/main/java/org/matomocamp/companion/db/BookmarksDao.kt b/app/src/main/java/org/matomocamp/companion/db/BookmarksDao.kt index 0f38121..10909c1 100644 --- a/app/src/main/java/org/matomocamp/companion/db/BookmarksDao.kt +++ b/app/src/main/java/org/matomocamp/companion/db/BookmarksDao.kt @@ -20,7 +20,7 @@ abstract class BookmarksDao(private val appDatabase: AppDatabase) { * * @param minStartTime When greater than 0, only return the events starting after this time. */ - @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type FROM bookmarks b JOIN events e ON b.event_id = e.id @@ -34,7 +34,7 @@ abstract class BookmarksDao(private val appDatabase: AppDatabase) { ORDER BY e.start_time ASC""") abstract fun getBookmarks(minStartTime: Long): LiveData> - @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type FROM bookmarks b JOIN events e ON b.event_id = e.id diff --git a/app/src/main/java/org/matomocamp/companion/db/ScheduleDao.kt b/app/src/main/java/org/matomocamp/companion/db/ScheduleDao.kt index eafa239..4ba3d76 100644 --- a/app/src/main/java/org/matomocamp/companion/db/ScheduleDao.kt +++ b/app/src/main/java/org/matomocamp/companion/db/ScheduleDao.kt @@ -115,6 +115,7 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { event.endTime, event.roomName, event.slug, + event.url, trackId, event.abstractText, event.description @@ -258,7 +259,7 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { /** * Returns the event with the specified id, or null if not found. */ - @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type FROM events e JOIN events_titles et ON e.id = et.`rowid` @@ -273,7 +274,7 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { /** * Returns all found events whose id is part of the given list. */ - @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type, b.event_id IS NOT NULL AS is_bookmarked FROM events e @@ -291,7 +292,7 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { /** * Returns the events for a specified track. */ - @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type, b.event_id IS NOT NULL AS is_bookmarked FROM events e @@ -309,7 +310,7 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { /** * Returns a snapshot of the events for a specified track (without the bookmark status). */ - @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type FROM events e JOIN events_titles et ON e.id = et.`rowid` @@ -325,7 +326,7 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { /** * Returns events starting in the specified interval, ordered by ascending start time. */ - @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type, b.event_id IS NOT NULL AS is_bookmarked FROM events e @@ -343,7 +344,7 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { /** * Returns events in progress at the specified time, ordered by descending start time. */ - @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type, b.event_id IS NOT NULL AS is_bookmarked FROM events e @@ -361,7 +362,7 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { /** * Returns the events presented by the specified person. */ - @Query("""SELECT e.id , e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id , e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type, b.event_id IS NOT NULL AS is_bookmarked FROM events e JOIN events_titles et ON e.id = et.`rowid` @@ -379,7 +380,7 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { /** * Returns the events presented by the specified person. */ - @Query("""SELECT e.id , e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id , e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type, b.event_id IS NOT NULL AS is_bookmarked FROM events e JOIN events_titles et ON e.id = et.`rowid` @@ -397,7 +398,7 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { * We need to use an union of 3 sub-queries because a "match" condition can not be * accompanied by other conditions in a "where" statement. */ - @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, et.title, et.subtitle, e.abstract, e.description, + @Query("""SELECT e.id, e.start_time, e.end_time, e.room_name, e.slug, e.url, et.title, et.subtitle, e.abstract, e.description, GROUP_CONCAT(p.name, ', ') AS persons, e.day_index, d.date AS day_date, e.track_id, t.name AS track_name, t.type AS track_type, b.event_id IS NOT NULL AS is_bookmarked FROM events e diff --git a/app/src/main/java/org/matomocamp/companion/db/entities/EventEntity.kt b/app/src/main/java/org/matomocamp/companion/db/entities/EventEntity.kt index 0f0f22f..6043d30 100644 --- a/app/src/main/java/org/matomocamp/companion/db/entities/EventEntity.kt +++ b/app/src/main/java/org/matomocamp/companion/db/entities/EventEntity.kt @@ -28,6 +28,7 @@ class EventEntity( @ColumnInfo(name = "room_name") val roomName: String?, val slug: String?, + val url: String?, @ColumnInfo(name = "track_id") val trackId: Long, @ColumnInfo(name = "abstract") diff --git a/app/src/main/java/org/matomocamp/companion/inject/DatabaseModule.kt b/app/src/main/java/org/matomocamp/companion/inject/DatabaseModule.kt index 29490e1..1f08c42 100644 --- a/app/src/main/java/org/matomocamp/companion/inject/DatabaseModule.kt +++ b/app/src/main/java/org/matomocamp/companion/inject/DatabaseModule.kt @@ -25,7 +25,7 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object DatabaseModule { - private const val DB_FILE = "fosdem.sqlite" + private const val DB_FILE = "matomocamp.sqlite" private const val DB_PREFS_FILE = "database" @Provides @@ -40,7 +40,7 @@ object DatabaseModule { val MIGRATION_1_2 = object : Migration(1, 2) { override fun migrate(database: SupportSQLiteDatabase) = with(database) { // Events: make primary key and track_id not null - execSQL("CREATE TABLE tmp_${EventEntity.TABLE_NAME} (id INTEGER PRIMARY KEY NOT NULL, day_index INTEGER NOT NULL, start_time INTEGER, end_time INTEGER, room_name TEXT, slug TEXT, track_id INTEGER NOT NULL, abstract TEXT, description TEXT)") + execSQL("CREATE TABLE tmp_${EventEntity.TABLE_NAME} (id INTEGER PRIMARY KEY NOT NULL, day_index INTEGER NOT NULL, start_time INTEGER, end_time INTEGER, room_name TEXT, slug TEXT, url TEXT, track_id INTEGER NOT NULL, abstract TEXT, description TEXT)") execSQL("INSERT INTO tmp_${EventEntity.TABLE_NAME} SELECT * FROM ${EventEntity.TABLE_NAME}") execSQL("DROP TABLE ${EventEntity.TABLE_NAME}") execSQL("ALTER TABLE tmp_${EventEntity.TABLE_NAME} RENAME TO ${EventEntity.TABLE_NAME}") diff --git a/app/src/main/java/org/matomocamp/companion/model/Event.kt b/app/src/main/java/org/matomocamp/companion/model/Event.kt index 2433d1f..7317a0c 100644 --- a/app/src/main/java/org/matomocamp/companion/model/Event.kt +++ b/app/src/main/java/org/matomocamp/companion/model/Event.kt @@ -26,6 +26,7 @@ data class Event( @ColumnInfo(name = "room_name") val roomName: String?, val slug: String?, + val url: String?, val title: String?, @ColumnInfo(name = "subtitle") val subTitle: String?, @@ -50,11 +51,6 @@ data class Event( 0 } else ((endTime.time - startTime.time) / android.text.format.DateUtils.MINUTE_IN_MILLIS).toInt() - val url: String? - get() { - val s = slug ?: return null - return MatomoCampUrls.getEvent(s, DateUtils.getYear(day.date.time)) - } override fun toString(): String = title ?: "" } \ No newline at end of file diff --git a/app/src/main/java/org/matomocamp/companion/parsers/EventsParser.kt b/app/src/main/java/org/matomocamp/companion/parsers/EventsParser.kt index 70d9a2b..489b857 100644 --- a/app/src/main/java/org/matomocamp/companion/parsers/EventsParser.kt +++ b/app/src/main/java/org/matomocamp/companion/parsers/EventsParser.kt @@ -68,6 +68,7 @@ class EventsParser : Parser> { var startTime: Date? = null var duration: String? = null var slug: String? = null + var url: String? = null var title: String? = null var subTitle: String? = null var trackName = "" @@ -93,6 +94,7 @@ class EventsParser : Parser> { } "duration" -> duration = parser.nextText() "slug" -> slug = parser.nextText() + "url" -> url = parser.nextText() "title" -> title = parser.nextText() "subtitle" -> subTitle = parser.nextText() "track" -> trackName = parser.nextText() @@ -142,6 +144,7 @@ class EventsParser : Parser> { startTime = startTime, endTime = endTime, slug = slug, + url = url, title = title, subTitle = subTitle, track = Track(name = trackName, type = trackType),