From dd6bc628beda6a25cd20a133903b3e4aba16684b Mon Sep 17 00:00:00 2001 From: Lukas Winkler Date: Tue, 25 Oct 2022 17:07:28 +0200 Subject: [PATCH] add all event view --- .../matomocamp/companion/api/MatomoCampUrls.kt | 2 +- .../org/matomocamp/companion/db/ScheduleDao.kt | 16 ++++++++++++++++ .../companion/fragments/LiveFragment.kt | 4 +++- .../companion/fragments/LiveListFragment.kt | 3 ++- .../companion/viewmodels/LiveViewModel.kt | 6 ++++++ app/src/main/res/values/strings.xml | 2 ++ 6 files changed, 30 insertions(+), 3 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 64ed15f..54ec48e 100644 --- a/app/src/main/java/org/matomocamp/companion/api/MatomoCampUrls.kt +++ b/app/src/main/java/org/matomocamp/companion/api/MatomoCampUrls.kt @@ -8,7 +8,7 @@ package org.matomocamp.companion.api object MatomoCampUrls { val schedule - get() = "https://fosdem.org/schedule/xml" + get() = "https://schedule.matomocamp.org/matomocamp-2022/schedule/export/schedule.xml" val rooms get() = "https://api.fosdem.org/roomstatus/v1/listrooms" val localNavigation 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 2094071..1c31e27 100644 --- a/app/src/main/java/org/matomocamp/companion/db/ScheduleDao.kt +++ b/app/src/main/java/org/matomocamp/companion/db/ScheduleDao.kt @@ -371,6 +371,22 @@ abstract class ScheduleDao(private val appDatabase: AppDatabase) { ORDER BY e.start_time ASC""") abstract fun getEvents(person: Person): PagingSource + /** + * Returns all events. + */ + @Query("""SELECT e.id , e.start_time, e.end_time, e.room_name, e.slug, 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` + JOIN days d ON e.day_index = d.`index` + JOIN tracks t ON e.track_id = t.id + LEFT JOIN events_persons ep ON e.id = ep.event_id + LEFT JOIN persons p ON ep.person_id = p.`rowid` + LEFT JOIN bookmarks b ON e.id = b.event_id + GROUP BY e.id + ORDER BY e.start_time ASC""") + abstract fun getEvents(): PagingSource + /** * Search through matching titles, subtitles, track names, person names. * We need to use an union of 3 sub-queries because a "match" condition can not be diff --git a/app/src/main/java/org/matomocamp/companion/fragments/LiveFragment.kt b/app/src/main/java/org/matomocamp/companion/fragments/LiveFragment.kt index 3e8fbaf..eb01914 100644 --- a/app/src/main/java/org/matomocamp/companion/fragments/LiveFragment.kt +++ b/app/src/main/java/org/matomocamp/companion/fragments/LiveFragment.kt @@ -46,17 +46,19 @@ class LiveFragment : Fragment(R.layout.fragment_live), RecycledViewPoolProvider private val resources = fragment.resources - override fun getItemCount() = 2 + override fun getItemCount() = 3 override fun createFragment(position: Int): Fragment = when (position) { 0 -> NextLiveListFragment() 1 -> NowLiveListFragment() + 2 -> AllLiveListFragment() else -> throw IllegalStateException() } fun getPageTitle(position: Int): CharSequence? = when (position) { 0 -> resources.getString(R.string.next) 1 -> resources.getString(R.string.now) + 2 -> resources.getString(R.string.all) else -> null } } diff --git a/app/src/main/java/org/matomocamp/companion/fragments/LiveListFragment.kt b/app/src/main/java/org/matomocamp/companion/fragments/LiveListFragment.kt index bede41d..3cb97d6 100644 --- a/app/src/main/java/org/matomocamp/companion/fragments/LiveListFragment.kt +++ b/app/src/main/java/org/matomocamp/companion/fragments/LiveListFragment.kt @@ -90,4 +90,5 @@ sealed class LiveListFragment( } class NextLiveListFragment : LiveListFragment(R.string.next_empty, LiveViewModel::nextEvents) -class NowLiveListFragment : LiveListFragment(R.string.now_empty, LiveViewModel::eventsInProgress) \ No newline at end of file +class NowLiveListFragment : LiveListFragment(R.string.now_empty, LiveViewModel::eventsInProgress) +class AllLiveListFragment : LiveListFragment(R.string.all_empty, LiveViewModel::allEvents) \ No newline at end of file diff --git a/app/src/main/java/org/matomocamp/companion/viewmodels/LiveViewModel.kt b/app/src/main/java/org/matomocamp/companion/viewmodels/LiveViewModel.kt index 51b9978..bff29d3 100644 --- a/app/src/main/java/org/matomocamp/companion/viewmodels/LiveViewModel.kt +++ b/app/src/main/java/org/matomocamp/companion/viewmodels/LiveViewModel.kt @@ -57,6 +57,12 @@ class LiveViewModel @Inject constructor(scheduleDao: ScheduleDao) : ViewModel() scheduleDao.getEventsInProgress(now) } + val allEvents: Flow> = createLiveEventsHotFlow { now -> + scheduleDao.getEvents() + } + + + companion object { private val REFRESH_PERIOD = 1.minutes private val NEXT_EVENTS_INTERVAL = Duration.ofHours(3L) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 912e536..fa8851a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -39,6 +39,8 @@ + All + During FOSDEM, all events will be shown here. Next During FOSDEM, the events to come in the next 3 hours will be shown here. Now