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

157 lines
5.7 KiB
Java

package net.nullsum.audinaut.util;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import net.nullsum.audinaut.R;
import net.nullsum.audinaut.activity.SubsonicFragmentActivity;
/**
* Created by Scott on 11/24/13.
*/
public final class SyncUtil {
private static String TAG = SyncUtil.class.getSimpleName();
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));
}
public static ArrayList<SyncSet> getSyncedPlaylists(Context context) {
return getSyncedPlaylists(context, Util.getActiveServer(context));
}
public 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<SyncSet>();
// 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 setSyncedPlaylists(Context context, int instance, ArrayList<SyncSet> playlists) {
FileUtil.serializeCompressed(context, playlists, getPlaylistSyncFile(context, instance));
}
public static void addSyncedPlaylist(Context context, String playlistId) {
String playlistFile = getPlaylistSyncFile(context);
ArrayList<SyncSet> playlists = getSyncedPlaylists(context);
SyncSet set = new SyncSet(playlistId);
if(!playlists.contains(set)) {
playlists.add(set);
}
FileUtil.serializeCompressed(context, playlists, playlistFile);
syncedPlaylists = playlists;
}
public static void removeSyncedPlaylist(Context context, String playlistId) {
int instance = Util.getActiveServer(context);
removeSyncedPlaylist(context, playlistId, instance);
}
public 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;
}
}
public static String getPlaylistSyncFile(Context context) {
int instance = Util.getActiveServer(context);
return getPlaylistSyncFile(context, instance);
}
public static String getPlaylistSyncFile(Context context, int instance) {
return "sync-playlist-" + (Util.getRestUrl(context, null, instance, false)).hashCode() + ".ser";
}
// Most Recently Added
public static ArrayList<String> getSyncedMostRecent(Context context, int instance) {
ArrayList<String> list = FileUtil.deserialize(context, getMostRecentSyncFile(context, instance), ArrayList.class);
if(list == null) {
list = new ArrayList<String>();
}
return list;
}
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();
}
}
public static String getMostRecentSyncFile(Context context, int instance) {
return "sync-most_recent-" + (Util.getRestUrl(context, null, instance, false)).hashCode() + ".ser";
}
public static String joinNames(List<String> names) {
StringBuilder builder = new StringBuilder();
for (String val : names) {
builder.append(val).append(", ");
}
builder.setLength(builder.length() - 2);
return builder.toString();
}
public static class SyncSet implements Serializable {
public String id;
public List<String> synced;
protected SyncSet() {
}
public SyncSet(String id) {
this.id = id;
}
public SyncSet(String id, List<String> synced) {
this.id = id;
this.synced = synced;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof SyncSet) {
return this.id.equals(((SyncSet)obj).id);
} else {
return false;
}
}
@Override
public int hashCode() {
return id.hashCode();
}
}
}