Audinaut-subsonic-app-android/app/src/main/java/net/nullsum/audinaut/util/SyncUtil.java

108 lines
3.6 KiB
Java

package net.nullsum.audinaut.util;
import android.content.Context;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
/**
* Created by Scott on 11/24/13.
*/
public final class SyncUtil {
private static ArrayList<SyncSet> syncedPlaylists;
private static String url;
private static void checkRestURL(Context context) {
int instance = Util.getActiveServer(context);
String newURL = Util.getRestUrl(context, null, instance, false);
if (url == null || !url.equals(newURL)) {
syncedPlaylists = null;
url = newURL;
}
}
// Playlist sync
public static boolean isSyncedPlaylist(Context context, String playlistId) {
checkRestURL(context);
if (syncedPlaylists == null) {
syncedPlaylists = getSyncedPlaylists(context);
}
return syncedPlaylists.contains(new SyncSet(playlistId));
}
private static ArrayList<SyncSet> getSyncedPlaylists(Context context) {
return getSyncedPlaylists(context, Util.getActiveServer(context));
}
private static ArrayList<SyncSet> getSyncedPlaylists(Context context, int instance) {
String syncFile = getPlaylistSyncFile(context, instance);
ArrayList<SyncSet> playlists = FileUtil.deserializeCompressed(context, syncFile, ArrayList.class);
if (playlists == null) {
playlists = new ArrayList<>();
// Try to convert old style into new style
ArrayList<String> oldPlaylists = FileUtil.deserialize(context, syncFile, ArrayList.class);
// If exists, time to convert!
if (oldPlaylists != null) {
for (String id : oldPlaylists) {
playlists.add(new SyncSet(id));
}
FileUtil.serializeCompressed(context, playlists, syncFile);
}
}
return playlists;
}
public static void removeSyncedPlaylist(Context context, String playlistId) {
int instance = Util.getActiveServer(context);
removeSyncedPlaylist(context, playlistId, instance);
}
private static void removeSyncedPlaylist(Context context, String playlistId, int instance) {
String playlistFile = getPlaylistSyncFile(context, instance);
ArrayList<SyncSet> playlists = getSyncedPlaylists(context, instance);
SyncSet set = new SyncSet(playlistId);
if (playlists.contains(set)) {
playlists.remove(set);
FileUtil.serializeCompressed(context, playlists, playlistFile);
syncedPlaylists = playlists;
}
}
private static String getPlaylistSyncFile(Context context, int instance) {
return "sync-playlist-" + (Util.getRestUrl(context, null, instance, false)).hashCode() + ".ser";
}
public static void removeMostRecentSyncFiles(Context context) {
int total = Util.getServerCount(context);
for (int i = 0; i < total; i++) {
File file = new File(context.getCacheDir(), getMostRecentSyncFile(context, i));
file.delete();
}
}
private static String getMostRecentSyncFile(Context context, int instance) {
return "sync-most_recent-" + (Util.getRestUrl(context, null, instance, false)).hashCode() + ".ser";
}
public static class SyncSet implements Serializable {
public final String id;
public SyncSet(String id) {
this.id = id;
}
@Override
public boolean equals(Object obj) {
return obj instanceof SyncSet && this.id.equals(((SyncSet) obj).id);
}
@Override
public int hashCode() {
return id.hashCode();
}
}
}