Skip to content

Commit 1c6414b

Browse files
committed
feat: implement methods and network operation to delete a space on the server
1 parent 61670e7 commit 1c6414b

11 files changed

Lines changed: 48 additions & 17 deletions

File tree

‎owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/SpacesListFragment.kt‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,16 @@ class SpacesListFragment :
238238
}
239239
}
240240

241+
collectLatestLifecycleFlow(spacesListViewModel.deleteSpaceFlow) { event ->
242+
event?.let {
243+
when (val uiResult = event.peekContent()) {
244+
is UIResult.Success -> { showMessageInSnackbar(getString(R.string.delete_space_correctly)) }
245+
is UIResult.Loading -> { }
246+
is UIResult.Error -> { showErrorInSnackbar(R.string.delete_space_failed, uiResult.error) }
247+
}
248+
}
249+
}
250+
241251
collectLatestLifecycleFlow(spacesListViewModel.menuOptions) { menuOptions ->
242252
showSpaceMenuOptionsDialog(menuOptions)
243253
}
@@ -384,7 +394,7 @@ class SpacesListFragment :
384394
title = getString(R.string.delete_space_dialog_title, currentSpace.name),
385395
message = getString(R.string.delete_space_dialog_message),
386396
positiveButtonText = getString(R.string.common_yes),
387-
positiveButtonListener = { _: DialogInterface?, _: Int -> },
397+
positiveButtonListener = { _: DialogInterface?, _: Int -> spacesListViewModel.deleteSpace(currentSpace.id) },
388398
negativeButtonText = getString(R.string.common_no)
389399
)
390400
}

‎owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/SpacesListViewModel.kt‎

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ class SpacesListViewModel(
9797
private val _enableSpaceFlow = MutableSharedFlow<Event<UIResult<Unit>>?>()
9898
val enableSpaceFlow: SharedFlow<Event<UIResult<Unit>>?> = _enableSpaceFlow
9999

100+
private val _deleteSpaceFlow = MutableSharedFlow<Event<UIResult<Unit>>?>()
101+
val deleteSpaceFlow: SharedFlow<Event<UIResult<Unit>>?> = _deleteSpaceFlow
102+
100103
init {
101104
viewModelScope.launch(coroutinesDispatcherProvider.io) {
102105
refreshSpacesFromServer()
@@ -202,7 +205,7 @@ class SpacesListViewModel(
202205

203206
fun disableSpace(spaceId: String){
204207
viewModelScope.launch(coroutinesDispatcherProvider.io) {
205-
when (val result = disableSpaceUseCase(DisableSpaceUseCase.Params(accountName, spaceId))) {
208+
when (val result = disableSpaceUseCase(DisableSpaceUseCase.Params(accountName, spaceId, false))) {
206209
is UseCaseResult.Success -> _disableSpaceFlow.emit(Event(UIResult.Success(result.getDataOrNull())))
207210
is UseCaseResult.Error -> _disableSpaceFlow.emit(Event(UIResult.Error(error = result.getThrowableOrNull())))
208211
}
@@ -220,6 +223,16 @@ class SpacesListViewModel(
220223
}
221224
}
222225

226+
fun deleteSpace(spaceId: String){
227+
viewModelScope.launch(coroutinesDispatcherProvider.io) {
228+
when (val result = disableSpaceUseCase(DisableSpaceUseCase.Params(accountName, spaceId, true))) {
229+
is UseCaseResult.Success -> _deleteSpaceFlow.emit(Event(UIResult.Success(result.getDataOrNull())))
230+
is UseCaseResult.Error -> _deleteSpaceFlow.emit(Event(UIResult.Error(error = result.getThrowableOrNull())))
231+
}
232+
refreshSpacesFromServerAsyncUseCase(RefreshSpacesFromServerAsyncUseCase.Params(accountName))
233+
}
234+
}
235+
223236
data class SpacesListUiState(
224237
val spaces: List<OCSpace>,
225238
val rootFolderFromSelectedSpace: OCFile? = null,

‎owncloudApp/src/main/res/values/strings.xml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,8 @@
866866
<string name="delete_space">Delete space</string>
867867
<string name="delete_space_dialog_title">Do you really want to delete the space: %1$s?</string>
868868
<string name="delete_space_dialog_message">If you delete the selected space, it can no longer be accessed and files will be deleted from the server.</string>
869+
<string name="delete_space_correctly">Space deleted correctly</string>
870+
<string name="delete_space_failed">Space could not be deleted</string>
869871

870872
<string name="feedback_dialog_get_in_contact_description"><![CDATA[ Ask for help in our <a href=\"%1$s\"><b>forum</b></a> or contribute in our <a href=\"%2$s\"><b>GitHub repo</b></a>]]></string>
871873

‎owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/spaces/DisableRemoteSpaceOperation.kt‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ import timber.log.Timber
3030
import java.net.URL
3131

3232
class DisableRemoteSpaceOperation(
33-
private val spaceId: String
33+
private val spaceId: String,
34+
private val deleteMode: Boolean
3435
): RemoteOperation<Unit>() {
3536
override fun run(client: OwnCloudClient): RemoteOperationResult<Unit> {
3637
var result: RemoteOperationResult<Unit>
@@ -40,7 +41,9 @@ class DisableRemoteSpaceOperation(
4041
appendEncodedPath(spaceId)
4142
}
4243

43-
val deleteMethod = DeleteMethod(URL(uriBuilder.build().toString()))
44+
val deleteMethod = DeleteMethod(URL(uriBuilder.build().toString())).apply {
45+
if (deleteMode) addRequestHeader(PURGE_HEADER, PURGE_HEADER_VALUE)
46+
}
4447

4548
val status = client.executeHttpMethod(deleteMethod)
4649

@@ -51,17 +54,19 @@ class DisableRemoteSpaceOperation(
5154
result = RemoteOperationResult(ResultCode.OK)
5255
} else {
5356
result = RemoteOperationResult(deleteMethod)
54-
Timber.e("Failed response while disabling the space; status code: $status, response: $response")
57+
Timber.e("Failed response while disabling/deleting the space; status code: $status, response: $response")
5558
}
5659
} catch (e: Exception) {
5760
result = RemoteOperationResult(e)
58-
Timber.e(e, "Exception while disabling the space $spaceId")
61+
Timber.e(e, "Exception while disabling/deleting the space $spaceId")
5962
}
6063
return result
6164
}
6265

6366
companion object {
6467
private const val GRAPH_API_SPACES_PATH = "graph/v1.0/drives/"
68+
private const val PURGE_HEADER = "Purge"
69+
private const val PURGE_HEADER_VALUE = "T"
6570
}
6671

6772
}

‎owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/spaces/services/OCSpacesService.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ class OCSpacesService(override val client: OwnCloudClient) : SpacesService {
4545
override fun editSpace(spaceId: String, spaceName: String, spaceSubtitle: String, spaceQuota: Long?): RemoteOperationResult<SpaceResponse> =
4646
EditRemoteSpaceOperation(spaceId, spaceName, spaceSubtitle, spaceQuota).execute(client)
4747

48-
override fun disableSpace(spaceId: String): RemoteOperationResult<Unit> =
49-
DisableRemoteSpaceOperation(spaceId).execute(client)
48+
override fun disableSpace(spaceId: String, deleteMode: Boolean): RemoteOperationResult<Unit> =
49+
DisableRemoteSpaceOperation(spaceId, deleteMode).execute(client)
5050

5151
override fun enableSpace(spaceId: String): RemoteOperationResult<SpaceResponse> =
5252
EnableRemoteSpaceOperation(spaceId).execute(client)

‎owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/spaces/services/SpacesService.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ interface SpacesService : Service {
3131
fun createSpace(spaceName: String, spaceSubtitle: String, spaceQuota: Long): RemoteOperationResult<SpaceResponse>
3232
fun getSpacePermissions(spaceId: String): RemoteOperationResult<List<String>>
3333
fun editSpace(spaceId: String, spaceName: String, spaceSubtitle: String, spaceQuota: Long?): RemoteOperationResult<SpaceResponse>
34-
fun disableSpace(spaceId: String): RemoteOperationResult<Unit>
34+
fun disableSpace(spaceId: String, deleteMode: Boolean): RemoteOperationResult<Unit>
3535
fun enableSpace(spaceId: String): RemoteOperationResult<SpaceResponse>
3636
}

‎owncloudData/src/main/java/com/owncloud/android/data/spaces/datasources/RemoteSpacesDataSource.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ interface RemoteSpacesDataSource {
2727
fun createSpace(accountName: String, spaceName: String, spaceSubtitle: String, spaceQuota: Long): OCSpace
2828
fun getSpacePermissions(accountName: String, spaceId: String): List<String>
2929
fun editSpace(accountName: String, spaceId: String, spaceName: String, spaceSubtitle: String, spaceQuota: Long?): OCSpace
30-
fun disableSpace(accountName: String, spaceId: String)
30+
fun disableSpace(accountName: String, spaceId: String, deleteMode: Boolean)
3131
fun enableSpace(accountName: String, spaceId: String)
3232
}

‎owncloudData/src/main/java/com/owncloud/android/data/spaces/datasources/implementation/OCRemoteSpacesDataSource.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ class OCRemoteSpacesDataSource(
6363
return spaceResponse.toModel(accountName)
6464
}
6565

66-
override fun disableSpace(accountName: String, spaceId: String) {
67-
executeRemoteOperation { clientManager.getSpacesService(accountName).disableSpace(spaceId) }
66+
override fun disableSpace(accountName: String, spaceId: String, deleteMode: Boolean) {
67+
executeRemoteOperation { clientManager.getSpacesService(accountName).disableSpace(spaceId, deleteMode) }
6868
}
6969

7070
override fun enableSpace(accountName: String, spaceId: String) {

‎owncloudData/src/main/java/com/owncloud/android/data/spaces/repository/OCSpacesRepository.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ class OCSpacesRepository(
8888
remoteSpacesDataSource.editSpace(accountName, spaceId, spaceName, spaceSubtitle, spaceQuota)
8989
}
9090

91-
override fun disableSpace(accountName: String, spaceId: String) {
92-
remoteSpacesDataSource.disableSpace(accountName, spaceId)
91+
override fun disableSpace(accountName: String, spaceId: String, deleteMode: Boolean) {
92+
remoteSpacesDataSource.disableSpace(accountName, spaceId, deleteMode)
9393
}
9494

9595
override fun enableSpace(accountName: String, spaceId: String) {

‎owncloudDomain/src/main/java/com/owncloud/android/domain/spaces/SpacesRepository.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ interface SpacesRepository {
3737
fun getWebDavUrlForSpace(accountName: String, spaceId: String?): String?
3838
fun createSpace(accountName: String, spaceName: String, spaceSubtitle: String, spaceQuota: Long)
3939
fun editSpace(accountName: String, spaceId: String, spaceName: String, spaceSubtitle: String, spaceQuota: Long?)
40-
fun disableSpace(accountName: String, spaceId: String)
40+
fun disableSpace(accountName: String, spaceId: String, deleteMode: Boolean)
4141
fun enableSpace(accountName: String, spaceId: String)
4242
}

0 commit comments

Comments
 (0)