mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-01 09:53:33 +00:00
feat: implemented client, service, and repository for sharing APIs
This commit is contained in:
parent
537d0c6d8f
commit
5e486d4794
6 changed files with 179 additions and 1 deletions
|
|
@ -0,0 +1,97 @@
|
||||||
|
package com.cappielloantonio.tempo.repository;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
import com.cappielloantonio.tempo.App;
|
||||||
|
import com.cappielloantonio.tempo.subsonic.base.ApiResponse;
|
||||||
|
import com.cappielloantonio.tempo.subsonic.models.Share;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
|
public class SharingRepository {
|
||||||
|
public MutableLiveData<List<Share>> getShares() {
|
||||||
|
MutableLiveData<List<Share>> shares = new MutableLiveData<>(new ArrayList<>());
|
||||||
|
|
||||||
|
App.getSubsonicClientInstance(false)
|
||||||
|
.getSharingClient()
|
||||||
|
.getShares()
|
||||||
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<ApiResponse> call, @NonNull Response<ApiResponse> response) {
|
||||||
|
if (response.isSuccessful() && response.body() != null && response.body().getSubsonicResponse().getShares() != null && response.body().getSubsonicResponse().getShares().getShares() != null) {
|
||||||
|
shares.setValue(response.body().getSubsonicResponse().getShares().getShares());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<ApiResponse> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return shares;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<Share> createShare(String id, String description, Long expires) {
|
||||||
|
MutableLiveData<Share> share = new MutableLiveData<>();
|
||||||
|
|
||||||
|
App.getSubsonicClientInstance(false)
|
||||||
|
.getSharingClient()
|
||||||
|
.createShare(id, description, expires)
|
||||||
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<ApiResponse> call, @NonNull Response<ApiResponse> response) {
|
||||||
|
if (response.isSuccessful() && response.body() != null && response.body().getSubsonicResponse().getShares() != null && response.body().getSubsonicResponse().getShares().getShares() != null && response.body().getSubsonicResponse().getShares().getShares().get(0) != null) {
|
||||||
|
share.setValue(response.body().getSubsonicResponse().getShares().getShares().get(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<ApiResponse> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return share;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateShare(String id, String description, Long expires) {
|
||||||
|
App.getSubsonicClientInstance(false)
|
||||||
|
.getSharingClient()
|
||||||
|
.updateShare(id, description, expires)
|
||||||
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<ApiResponse> call, @NonNull Response<ApiResponse> response) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<ApiResponse> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteShare(String id) {
|
||||||
|
App.getSubsonicClientInstance(false)
|
||||||
|
.getSharingClient()
|
||||||
|
.deleteShare(id)
|
||||||
|
.enqueue(new Callback<ApiResponse>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<ApiResponse> call, @NonNull Response<ApiResponse> response) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<ApiResponse> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,6 +10,7 @@ import com.cappielloantonio.tempo.subsonic.api.mediaretrieval.MediaRetrievalClie
|
||||||
import com.cappielloantonio.tempo.subsonic.api.playlist.PlaylistClient;
|
import com.cappielloantonio.tempo.subsonic.api.playlist.PlaylistClient;
|
||||||
import com.cappielloantonio.tempo.subsonic.api.podcast.PodcastClient;
|
import com.cappielloantonio.tempo.subsonic.api.podcast.PodcastClient;
|
||||||
import com.cappielloantonio.tempo.subsonic.api.searching.SearchingClient;
|
import com.cappielloantonio.tempo.subsonic.api.searching.SearchingClient;
|
||||||
|
import com.cappielloantonio.tempo.subsonic.api.sharing.SharingClient;
|
||||||
import com.cappielloantonio.tempo.subsonic.api.system.SystemClient;
|
import com.cappielloantonio.tempo.subsonic.api.system.SystemClient;
|
||||||
import com.cappielloantonio.tempo.subsonic.base.Version;
|
import com.cappielloantonio.tempo.subsonic.base.Version;
|
||||||
|
|
||||||
|
|
@ -33,6 +34,7 @@ public class Subsonic {
|
||||||
private MediaLibraryScanningClient mediaLibraryScanningClient;
|
private MediaLibraryScanningClient mediaLibraryScanningClient;
|
||||||
private BookmarksClient bookmarksClient;
|
private BookmarksClient bookmarksClient;
|
||||||
private InternetRadioClient internetRadioClient;
|
private InternetRadioClient internetRadioClient;
|
||||||
|
private SharingClient sharingClient;
|
||||||
|
|
||||||
public Subsonic(SubsonicPreferences preferences) {
|
public Subsonic(SubsonicPreferences preferences) {
|
||||||
this.preferences = preferences;
|
this.preferences = preferences;
|
||||||
|
|
@ -119,6 +121,13 @@ public class Subsonic {
|
||||||
return internetRadioClient;
|
return internetRadioClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SharingClient getSharingClient() {
|
||||||
|
if (sharingClient == null) {
|
||||||
|
sharingClient = new SharingClient(this);
|
||||||
|
}
|
||||||
|
return sharingClient;
|
||||||
|
}
|
||||||
|
|
||||||
public String getUrl() {
|
public String getUrl() {
|
||||||
String url = preferences.getServerUrl() + "/rest/";
|
String url = preferences.getServerUrl() + "/rest/";
|
||||||
return url.replace("//rest", "/rest");
|
return url.replace("//rest", "/rest");
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.cappielloantonio.tempo.subsonic.api.sharing;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.cappielloantonio.tempo.subsonic.RetrofitClient;
|
||||||
|
import com.cappielloantonio.tempo.subsonic.Subsonic;
|
||||||
|
import com.cappielloantonio.tempo.subsonic.base.ApiResponse;
|
||||||
|
|
||||||
|
import retrofit2.Call;
|
||||||
|
|
||||||
|
public class SharingClient {
|
||||||
|
private static final String TAG = "BrowsingClient";
|
||||||
|
|
||||||
|
private final Subsonic subsonic;
|
||||||
|
private final SharingService sharingService;
|
||||||
|
|
||||||
|
public SharingClient(Subsonic subsonic) {
|
||||||
|
this.subsonic = subsonic;
|
||||||
|
this.sharingService = new RetrofitClient(subsonic).getRetrofit().create(SharingService.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Call<ApiResponse> getShares() {
|
||||||
|
Log.d(TAG, "getShares()");
|
||||||
|
return sharingService.getShares(subsonic.getParams());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Call<ApiResponse> createShare(String id, String description, Long expires) {
|
||||||
|
Log.d(TAG, "createShare()");
|
||||||
|
return sharingService.createShare(subsonic.getParams(), id, description, expires);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Call<ApiResponse> updateShare(String id, String description, Long expires) {
|
||||||
|
Log.d(TAG, "updateShare()");
|
||||||
|
return sharingService.updateShare(subsonic.getParams(), id, description, expires);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Call<ApiResponse> deleteShare(String id) {
|
||||||
|
Log.d(TAG, "deleteShare()");
|
||||||
|
return sharingService.deleteShare(subsonic.getParams(), id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.cappielloantonio.tempo.subsonic.api.sharing;
|
||||||
|
|
||||||
|
import com.cappielloantonio.tempo.subsonic.base.ApiResponse;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.http.GET;
|
||||||
|
import retrofit2.http.Query;
|
||||||
|
import retrofit2.http.QueryMap;
|
||||||
|
|
||||||
|
public interface SharingService {
|
||||||
|
@GET("getShares")
|
||||||
|
Call<ApiResponse> getShares(@QueryMap Map<String, String> params);
|
||||||
|
|
||||||
|
@GET("createShare")
|
||||||
|
Call<ApiResponse> createShare(@QueryMap Map<String, String> params, @Query("id") String id, @Query("description") String description, @Query("expires") Long expires);
|
||||||
|
|
||||||
|
@GET("updateShare")
|
||||||
|
Call<ApiResponse> updateShare(@QueryMap Map<String, String> params, @Query("id") String id, @Query("description") String description, @Query("expires") Long expires);
|
||||||
|
|
||||||
|
@GET("deleteShare")
|
||||||
|
Call<ApiResponse> deleteShare(@QueryMap Map<String, String> params, @Query("id") String id);
|
||||||
|
}
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
package com.cappielloantonio.tempo.subsonic.models
|
package com.cappielloantonio.tempo.subsonic.models
|
||||||
|
|
||||||
|
import android.os.Parcelable
|
||||||
import androidx.annotation.Keep
|
import androidx.annotation.Keep
|
||||||
|
import com.google.gson.annotations.SerializedName
|
||||||
|
import kotlinx.parcelize.Parcelize
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
class Share {
|
@Parcelize
|
||||||
|
class Share : Parcelable {
|
||||||
|
@SerializedName("entry")
|
||||||
var entries: List<Child>? = null
|
var entries: List<Child>? = null
|
||||||
var id: String? = null
|
var id: String? = null
|
||||||
var url: String? = null
|
var url: String? = null
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
package com.cappielloantonio.tempo.subsonic.models
|
package com.cappielloantonio.tempo.subsonic.models
|
||||||
|
|
||||||
import androidx.annotation.Keep
|
import androidx.annotation.Keep
|
||||||
|
import com.google.gson.annotations.SerializedName
|
||||||
|
|
||||||
@Keep
|
@Keep
|
||||||
class Shares {
|
class Shares {
|
||||||
|
@SerializedName("share")
|
||||||
var shares: List<Share>? = null
|
var shares: List<Share>? = null
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue