package com.ov3rk1ll.kinocast.utils; import android.content.Context; import android.text.TextUtils; import com.ov3rk1ll.kinocast.api.Parser; import com.ov3rk1ll.kinocast.data.ViewModel; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class BookmarkManager extends ArrayList<BookmarkManager.Bookmark> { private static final String FILENAME = "bookmark.dat"; private transient Context context; private transient boolean autoSave = true; public BookmarkManager(Context context){ this.context = context; restore(); } private void save(){ try { File f = new File(context.getFilesDir(), FILENAME); if(f.exists()) f.delete(); FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE); ObjectOutputStream os = new ObjectOutputStream(fos); os.writeObject(this); os.close(); } catch (Exception e) { e.printStackTrace(); } } public void restore(){ try { FileInputStream fis = context.openFileInput(FILENAME); ObjectInputStream is = new ObjectInputStream(fis); BookmarkManager simpleClass = (BookmarkManager) is.readObject(); is.close(); simpleClass.setAutoSave(false); Collections.sort(simpleClass, new Comparator<Bookmark>() { @Override public int compare(Bookmark s1, Bookmark s2) { return s1.getUrl().compareToIgnoreCase(s2.getUrl()); } }); clear(); for(int i = 0; i < simpleClass.size(); i++){ super.add(simpleClass.get(i)); } } catch (Exception ignored) { } } @Override public boolean add(Bookmark object) { boolean r = super.add(object); if(isAutoSave()) save(); return r; } @Override public boolean remove(Object object) { boolean r = super.remove(object); if(isAutoSave()) save(); return r; } @Override public Bookmark set(int index, Bookmark object) { Bookmark r = super.set(index, object); if(isAutoSave()) save(); return r; } public void addAsPublic(Bookmark bookmark) { bookmark.setInternal(false); int idx = indexOf(bookmark); if(idx == -1){ add(bookmark); } else { set(idx, bookmark); } } public Bookmark findItem(ViewModel item){ Bookmark b = new BookmarkManager.Bookmark(Parser.getInstance().getParserId(), Parser.getInstance().getPageLink(item)); int idx = indexOf(b); if(idx == -1){ return null; } else { return get(idx); } } private boolean isAutoSave() { return autoSave; } private void setAutoSave(boolean autoSave) { this.autoSave = autoSave; } public static class Bookmark implements Serializable{ private int parserId; private String url; private int season = 0; private int episode = 0; private boolean internal = true; public Bookmark(int parserId, String url) { this.parserId = parserId; this.url = url; } public int getParserId() { return parserId; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getEpisode() { return episode; } public void setEpisode(int episode) { this.episode = episode; } public int getSeason() { return season; } public void setSeason(int season) { this.season = season; } public boolean isInternal() { return internal; } public void setInternal(boolean internal) { this.internal = internal; } @Override public boolean equals(Object o) { if(o instanceof Bookmark){ Bookmark b = (Bookmark)o; return b.getParserId() == this.getParserId() && TextUtils.equals(b.getUrl(), this.getUrl()); } return super.equals(o); } } }