@@ -3,13 +3,12 @@ package at.deflow.viennacalling.dao
33import android.util.Log
44import androidx.room.*
55import at.deflow.viennacalling.models.Event
6- import at.deflow.viennacalling.models.xml.RssFeed
76import at.deflow.viennacalling.retrofit.RetrofitInstance
87import kotlinx.coroutines.flow.Flow
9- import org.jsoup.Jsoup
108import retrofit2.Call
119import retrofit2.Callback
1210import retrofit2.Response
11+ import java.net.URLDecoder
1312import java.time.LocalDateTime
1413import java.time.format.DateTimeFormatter
1514
@@ -39,12 +38,11 @@ interface EventsDao {
3938
4039 fun fetchEventRssFeed (
4140 eventList : MutableList <Event >,
42- categoryId : String = "6",
43- subCategory : String = ""
41+ eventListInitial : ArrayList <Event >,
4442 ) {
4543
4644 // If there are no images we select random one of these stock photos)
47- val eventImagesList = listOf (
45+ val eventImagesListDefault = listOf (
4846 " https://cdn.pixabay.com/photo/2016/11/29/06/17/audience-1867754_1280.jpg" ,
4947 " https://cdn.pixabay.com/photo/2015/11/22/19/04/crowd-1056764_1280.jpg" ,
5048 " https://cdn.pixabay.com/photo/2019/10/15/03/16/black-and-white-4550471_1280.jpg" ,
@@ -59,99 +57,82 @@ interface EventsDao {
5957 " https://cdn.pixabay.com/photo/2019/06/11/16/14/vienna-4267377_960_720.jpg" ,
6058 " https://cdn.pixabay.com/photo/2019/08/13/17/17/vienna-state-opera-4403839_960_720.jpg" ,
6159 " https://cdn.pixabay.com/photo/2018/12/17/14/20/vienna-3880488_960_720.jpg" ,
62-
6360 )
6461
65- // here we need to create the date param for the get request with the range current to next year
66- val formatter = DateTimeFormatter .ofPattern(" dd.MM.yyyy" )
67- val current = LocalDateTime .now()
68- val nextYear =
69- current.plusYears(1 ).format(formatter) // To get all events from today + 1 year
70- val currentFormatted = current.format(formatter)
71-
72- val retrofitInstance = RetrofitInstance .api.getEventList(
73- layout = " rss-vadb_neu" ,
74- type = " R" ,
75- hmwd = " d" ,
76- category = categoryId,
77- subCategory = subCategory,
78- startDate = currentFormatted.toString(),
79- endDate = nextYear.toString()
80- )
62+ val retrofitInstance = RetrofitInstance .api.getEventListAll()
8163
8264 // Here we make the actual request to our api and if we get correct data back (which is basically models.xml.* data classes)
8365 // we use it to create a new event for each item from the rss feed and then store it in our event view model
84- retrofitInstance.enqueue(object : Callback <RssFeed ?> {
85- override fun onResponse (call : Call <RssFeed ?>, response : Response <RssFeed ?>) {
86- if (response.isSuccessful) {
87- val formatter = DateTimeFormatter .ofPattern(" dd.MM.yyyy" )
88-
89- // API response
90- response.body()!! .channel?.eventList?.forEach { event ->
91- var startDate = " "
92- var endDate = " "
93-
94- // because we want to use the point for our unique id for every object we manipulate it a little
95- val pointId = event.point?.replace(" [.+\\ s]" .toRegex(), " " )
96-
97- if (event.dtstart != null && event.dtstart!! .first() != ' T' ) {
98- startDate =
99- LocalDateTime .parse(event.dtstart?.take(19 ) ? : " " ).format(formatter)
100- .toString()
101- }
102-
103- if (event.dtend != null && event.dtend!! .first() != ' T' ) {
104- endDate =
105- LocalDateTime .parse(event.dtend?.take(19 ) ? : " " ).format(formatter)
106- .toString()
107- }
108-
109- // New event is created and then saved in our list which is then displayed in the home screen
110- val newEvent = Event (
111- id = " ${
112- event.dtstart?.replace(
113- " +" ,
114- " "
115- )
116- } -$pointId " .replace(" -$" .toRegex(), " " ),
117- title = event.titleList?.get(0 )?.replaceFirstChar { it.uppercase() }
118- ? : " Es ist leider kein Titel vorhanden" ,
119- category = event.category ? : " Es ist leider keine Kategorie vorhanden" ,
120- description = event.descriptionList?.get(0 )
121- ?.let { Jsoup .parse(it).text() }
122- ? : " Es ist leider keine Beschreibung vorhanden" ,
123- link = event.link ? : " Es ist leider kein Link vorhanden" ,
124- url = event.organizer?.url ? : " " ,
125- subject = event.subject ? : " Es ist leider kein Subject vorhanden" ,
126- startTime = startDate,
127- endTime = endDate,
128- startHour = event.startHour ? : " " ,
129- startMin = event.startMin ? : " " ,
130- point = event.point ? : " " ,
131- streetAddress = event.location?.street_address?.replace(
132- " /$" .toRegex(),
133- " "
134- )
135- ?.trim()
136- ? : " " ,
137- plz = event.location?.postal_code ? : " " ,
138- images = event.content?.url ? : eventImagesList.random()
139- )
66+ retrofitInstance.enqueue(object : Callback <ArrayList <Event >? > {
67+ override fun onResponse (
68+ call : Call <ArrayList <Event >? >,
69+ response : Response <ArrayList <Event >? >
70+ ) {
71+
72+ val formatter = DateTimeFormatter .ofPattern(" dd.MM.yyyy" )
73+ Log .d(TAG , " HI" )
74+
75+ // API response
76+ response.body()!! .forEach { event ->
77+ if (event.title == " " || (event.startTime == " " && event.description == " " )) {
78+ return @forEach
79+ }
80+ var startDate = " "
81+ var endDate = " "
82+
83+ // because we want to use the point for our unique id for every object we manipulate it a little
84+ val pointId = event.point.replace(" [.+\\ s]" .toRegex(), " " )
14085
141- eventList.add(newEvent)
86+ if (event.startTime != " " && event.startTime.first() != ' T' ) {
87+ startDate =
88+ LocalDateTime .parse(event.startTime.take(19 )).format(formatter)
89+ .toString()
14290 }
143- } else {
144- Log .d(TAG , " We got no response" )
91+
92+ if (event.endTime != " " && event.endTime.first() != ' T' ) {
93+ endDate =
94+ LocalDateTime .parse(event.endTime.take(19 )).format(formatter)
95+ .toString()
96+ }
97+
98+ // New event is created and then saved in our list which is then displayed in the home screen
99+ val newEvent = Event (
100+ id = " ${
101+ event.startTime.replace(
102+ " +" ,
103+ " "
104+ )
105+ } -$pointId " .replace(" -$" .toRegex(), " " ),
106+ title = if (event.title != " " ) event.title else " Es ist leider kein Titel vorhanden" ,
107+ description = if (event.description != " " ) event.description else " Es ist leider keine Beschreibung vorhanden" ,
108+ category = event.category,
109+ link = if (event.link != " " ) event.link else " Es ist leider kein Link vorhanden" ,
110+ url = event.url,
111+ subject = event.subject,
112+ startTime = startDate,
113+ endTime = endDate,
114+ startHour = event.startHour,
115+ startMin = event.startMin,
116+ point = event.point,
117+ streetAddress = event.streetAddress,
118+ plz = event.plz,
119+ images = if (event.images != " " ) event.images
120+ else
121+ when (event.category) {
122+ " party" -> eventImagesListDefault.random()
123+ " sightseeing" -> eventImagesListDefault.random()
124+ " culture" -> eventImagesListDefault.random()
125+ else -> eventImagesListDefault.random()
126+ }
127+ )
128+ eventList.add(newEvent)
129+ eventListInitial.add(newEvent)
145130 }
146131 }
147132
148- override fun onFailure (call : Call <RssFeed ?>, t : Throwable ) {
149- Log .d(
150- TAG ,
151- " We got a exception while trying to fetch the xml feed: ${t.stackTrace} "
152- )
133+ override fun onFailure (call : Call <ArrayList <Event >? >, t : Throwable ) {
134+ Log .d(TAG , " Failed to fetch data" )
153135 }
154136 })
155137 }
156-
157138}
0 commit comments