diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt index e327d770..788e19d5 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt @@ -641,3 +641,8 @@ fun Drawable.setTintColor(color: Int): Drawable { ) return this } + +inline fun List.ifNotEmpty(block: (List) -> Unit) { + if (!isEmpty()) + block(this) +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/Szkolny.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/Szkolny.kt index 867d2690..aba4e9fa 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/Szkolny.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/Szkolny.kt @@ -36,7 +36,7 @@ class Szkolny(val app: App, val callback: EdziennikCallback) { completed() } - fun shareEvent(event: EventFull) { + /*fun shareEvent(event: EventFull) { api.shareEvent(event) completed() } @@ -44,7 +44,7 @@ class Szkolny(val app: App, val callback: EdziennikCallback) { fun unshareEvent(event: EventFull) { api.unshareEvent(event) completed() - } + }*/ private fun completed() { callback.onCompleted() diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt index ccaea91d..2da2ed93 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/SzkolnyApi.kt @@ -15,7 +15,9 @@ import pl.szczodrzynski.edziennik.data.api.szkolny.interceptor.SignatureIntercep import pl.szczodrzynski.edziennik.data.api.szkolny.request.EventShareRequest import pl.szczodrzynski.edziennik.data.api.szkolny.request.ServerSyncRequest import pl.szczodrzynski.edziennik.data.api.szkolny.request.WebPushRequest +import pl.szczodrzynski.edziennik.data.api.szkolny.response.ApiResponse import pl.szczodrzynski.edziennik.data.api.szkolny.response.WebPushResponse +import pl.szczodrzynski.edziennik.data.db.modules.events.Event import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull import pl.szczodrzynski.edziennik.data.db.modules.profiles.ProfileFull import pl.szczodrzynski.edziennik.utils.models.Date @@ -102,29 +104,33 @@ class SzkolnyApi(val app: App) { return events } - fun shareEvent(event: EventFull) { + fun shareEvent(event: EventFull): ApiResponse? { val team = app.db.teamDao().getByIdNow(event.profileId, event.teamId) - api.shareEvent(EventShareRequest( + return api.shareEvent(EventShareRequest( deviceId = app.deviceId, sharedByName = event.sharedByName, shareTeamCode = team.code, event = event - )).execute() + )).execute().body() } - fun unshareEvent(event: EventFull) { + fun unshareEvent(event: Event): ApiResponse? { val team = app.db.teamDao().getByIdNow(event.profileId, event.teamId) - api.shareEvent(EventShareRequest( + return api.shareEvent(EventShareRequest( deviceId = app.deviceId, sharedByName = event.sharedByName, unshareTeamCode = team.code, eventId = event.id - )).execute() + )).execute().body() } - fun pairBrowser(browserId: String?, pairToken: String?): List { + /*fun eventEditRequest(requesterName: String, event: Event): ApiResponse? { + + }*/ + + fun pairBrowser(browserId: String?, pairToken: String?, onError: ((List) -> Unit)? = null): List { val response = api.webPush(WebPushRequest( action = "pairBrowser", deviceId = app.deviceId, @@ -132,10 +138,15 @@ class SzkolnyApi(val app: App) { pairToken = pairToken )).execute().body() + response?.errors?.let { + onError?.invoke(it) + return emptyList() + } + return response?.data?.browsers ?: emptyList() } - fun listBrowsers(): List { + fun listBrowsers(onError: ((List) -> Unit)? = null): List { val response = api.webPush(WebPushRequest( action = "listBrowsers", deviceId = app.deviceId diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/request/EventShareRequest.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/request/EventShareRequest.kt index 90f5d75e..650cdf85 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/request/EventShareRequest.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/szkolny/request/EventShareRequest.kt @@ -14,6 +14,7 @@ data class EventShareRequest ( val sharedByName: String, val shareTeamCode: String? = null, val unshareTeamCode: String? = null, + val requesterName: String? = null, val eventId: Long? = null, val event: EventFull? = null diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/task/SzkolnyTask.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/task/SzkolnyTask.kt index a0aca4d0..d58d806e 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/task/SzkolnyTask.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/task/SzkolnyTask.kt @@ -16,8 +16,8 @@ class SzkolnyTask(val request: Any) : IApiTask(-1) { private const val TAG = "SzkolnyTask" fun sync(profiles: List) = SzkolnyTask(SyncRequest(profiles)) - fun shareEvent(event: EventFull) = SzkolnyTask(ShareEventRequest(event)) - fun unshareEvent(event: EventFull) = SzkolnyTask(UnshareEventRequest(event)) + /*fun shareEvent(event: EventFull) = SzkolnyTask(ShareEventRequest(event)) + fun unshareEvent(event: EventFull) = SzkolnyTask(UnshareEventRequest(event))*/ } private lateinit var szkolny: Szkolny @@ -35,12 +35,12 @@ class SzkolnyTask(val request: Any) : IApiTask(-1) { when (request) { is SyncRequest -> szkolny.sync(request.profiles) - is ShareEventRequest -> szkolny.shareEvent(request.event) - is UnshareEventRequest -> szkolny.unshareEvent(request.event) + /*is ShareEventRequest -> szkolny.shareEvent(request.event) + is UnshareEventRequest -> szkolny.unshareEvent(request.event)*/ } } data class SyncRequest(val profiles: List) - data class ShareEventRequest(val event: EventFull) - data class UnshareEventRequest(val event: EventFull) + /*data class ShareEventRequest(val event: EventFull) + data class UnshareEventRequest(val event: EventFull)*/ } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventDetailsDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventDetailsDialog.kt index f7f58d91..d49a3a84 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventDetailsDialog.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventDetailsDialog.kt @@ -10,6 +10,7 @@ import androidx.appcompat.app.AppCompatActivity import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.* import pl.szczodrzynski.edziennik.* +import pl.szczodrzynski.edziennik.data.api.szkolny.SzkolnyApi import pl.szczodrzynski.edziennik.data.api.task.SzkolnyTask import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull import pl.szczodrzynski.edziennik.databinding.DialogEventDetailsBinding @@ -39,6 +40,10 @@ class EventDetailsDialog( private lateinit var adapter: EventListAdapter + private val api by lazy { + SzkolnyApi(app) + } + init { run { if (activity.isFinishing) return@run @@ -126,19 +131,27 @@ class EventDetailsDialog( } private fun removeEvent() { - if (eventShared && eventOwn) { - Toast.makeText(activity, "Unshare + remove own event", Toast.LENGTH_SHORT).show() + launch { + if (eventShared && eventOwn) { + Toast.makeText(activity, "Unshare + remove own event", Toast.LENGTH_SHORT).show() - SzkolnyTask.unshareEvent(event).enqueue(activity) - finishRemoving() - } - else if (eventShared && !eventOwn) { - Toast.makeText(activity, "Remove + blacklist somebody's event", Toast.LENGTH_SHORT).show() - // TODO - } - else { - Toast.makeText(activity, "Remove event", Toast.LENGTH_SHORT).show() - finishRemoving() + val response = withContext(Dispatchers.Default) { + api.unshareEvent(event!!) + } + + response?.errors?.ifNotEmpty { + Toast.makeText(activity, "Error: "+it[0].reason, Toast.LENGTH_SHORT).show() + return@launch + } + + finishRemoving() + } else if (eventShared && !eventOwn) { + Toast.makeText(activity, "Remove + blacklist somebody's event", Toast.LENGTH_SHORT).show() + // TODO + } else { + Toast.makeText(activity, "Remove event", Toast.LENGTH_SHORT).show() + finishRemoving() + } } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.kt index 4f3d516b..ab713135 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/dialogs/event/EventManualDialog.kt @@ -20,6 +20,7 @@ import com.jaredrummler.android.colorpicker.ColorPickerDialogListener import kotlinx.coroutines.* import pl.szczodrzynski.edziennik.* import pl.szczodrzynski.edziennik.MainActivity.Companion.DRAWER_ITEM_AGENDA +import pl.szczodrzynski.edziennik.data.api.szkolny.SzkolnyApi import pl.szczodrzynski.edziennik.data.api.task.SzkolnyTask import pl.szczodrzynski.edziennik.data.db.modules.events.Event import pl.szczodrzynski.edziennik.data.db.modules.events.EventFull @@ -60,13 +61,17 @@ class EventManualDialog( private val app by lazy { activity.application as App } private lateinit var b: DialogEventManualV2Binding private lateinit var dialog: AlertDialog - private var removeEventDialog: AlertDialog? = null - private var defaultLoaded = false private lateinit var event: Event private var customColor: Int? = null private val editingShared = editingEvent?.sharedBy != null private val editingOwn = editingEvent?.sharedBy == "self" + private var removeEventDialog: AlertDialog? = null + private var defaultLoaded = false + + private val api by lazy { + SzkolnyApi(app) + } init { run { if (activity.isFinishing) @@ -617,7 +622,21 @@ class EventManualDialog( else if (!share && editingShared) { Toast.makeText(activity, "Unshare own event", Toast.LENGTH_SHORT).show() - SzkolnyTask.unshareEvent(eventObject.withMetadata(metadataObject)).enqueue(activity) + eventObject.apply { + sharedBy = null + sharedByName = profile?.studentNameLong + } + + val response = withContext(Dispatchers.Default) { + api.unshareEvent(eventObject) + } + + response?.errors?.ifNotEmpty { + Toast.makeText(activity, "Error: "+it[0].reason, Toast.LENGTH_SHORT).show() + return@launch + } + + eventObject.sharedByName = null finishAdding(eventObject, metadataObject) } else if (share) { @@ -630,7 +649,14 @@ class EventManualDialog( metadataObject.addedDate = System.currentTimeMillis() - SzkolnyTask.shareEvent(eventObject.withMetadata(metadataObject)).enqueue(activity) + val response = withContext(Dispatchers.Default) { + api.shareEvent(eventObject.withMetadata(metadataObject)) + } + + response?.errors?.ifNotEmpty { + Toast.makeText(activity, "Error: "+it[0].reason, Toast.LENGTH_SHORT).show() + return@launch + } eventObject.sharedBy = "self" finishAdding(eventObject, metadataObject) @@ -642,19 +668,27 @@ class EventManualDialog( } private fun removeEvent() { - if (editingShared && editingOwn) { - Toast.makeText(activity, "Unshare + remove own event", Toast.LENGTH_SHORT).show() + launch { + if (editingShared && editingOwn) { + Toast.makeText(activity, "Unshare + remove own event", Toast.LENGTH_SHORT).show() - editingEvent?.let { SzkolnyTask.unshareEvent(it).enqueue(activity) } - finishRemoving() - } - else if (editingShared && !editingOwn) { - Toast.makeText(activity, "Remove + blacklist somebody's event", Toast.LENGTH_SHORT).show() - // TODO - } - else { - Toast.makeText(activity, "Remove event", Toast.LENGTH_SHORT).show() - finishRemoving() + val response = withContext(Dispatchers.Default) { + api.unshareEvent(editingEvent!!) + } + + response?.errors?.ifNotEmpty { + Toast.makeText(activity, "Error: "+it[0].reason, Toast.LENGTH_SHORT).show() + return@launch + } + + finishRemoving() + } else if (editingShared && !editingOwn) { + Toast.makeText(activity, "Remove + blacklist somebody's event", Toast.LENGTH_SHORT).show() + // TODO + } else { + Toast.makeText(activity, "Remove event", Toast.LENGTH_SHORT).show() + finishRemoving() + } } }