package vazkii.minetunes.playlist; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import net.minecraft.nbt.NBTTagCompound; import vazkii.minetunes.MineTunes; import vazkii.minetunes.config.CacheHelper; import vazkii.minetunes.gui.GuiDevTools; // So meta public final class PlaylistList { private static final String PLAYLISTS_FILE = "playlists.dat"; private static final String TAG_PLAYLIST_COUNT = "playlistCount"; private static final String TAG_PLAYLIST_PREFIX = "playlist"; public static volatile List<String> playlistNames = new ArrayList(); public static volatile HashMap<String, Playlist> playlists = new LinkedHashMap(); public static void loadPlaylist(File file, String name) { if(MineTunes.playlistCreatorThread == null) MineTunes.startPlaylistCreatorThread(file, name); } public static void findCompoundAndLoad() { try { playlists.clear(); playlistNames.clear(); File file = CacheHelper.getCacheFile(PLAYLISTS_FILE); NBTTagCompound cmp = CacheHelper.getCacheCompound(file); int count = cmp.getInteger(TAG_PLAYLIST_COUNT); for(int i = 0; i < count; i++) { NBTTagCompound cmp1 = cmp.getCompoundTag(TAG_PLAYLIST_PREFIX + i); Playlist playlist = Playlist.build(cmp1); playlistNames.add(playlist.storeName); playlists.put(playlist.storeName, playlist); } } catch (IOException e) { GuiDevTools.logThrowable(e); } } public static void findCompoundAndWrite() { try { findCompoundAndWrite(CacheHelper.getCacheFile(PLAYLISTS_FILE)); } catch (IOException e) { GuiDevTools.logThrowable(e); } } public static void findCompoundAndWrite(File f) { NBTTagCompound cmp = new NBTTagCompound(); cmp.setInteger(TAG_PLAYLIST_COUNT, playlists.size()); int i = 0; for(String key : playlists.keySet()) { Playlist playlist = playlists.get(key); NBTTagCompound cmp1 = new NBTTagCompound(); playlist.writeToNBT(cmp1, key); cmp.setTag(TAG_PLAYLIST_PREFIX + i, cmp1); i++; } CacheHelper.injectNBTToFile(f, cmp); } }