[357] | 1 | package org.apollo.util;
|
---|
| 2 |
|
---|
| 3 | import java.io.File;
|
---|
| 4 | import java.io.IOException;
|
---|
| 5 | import java.util.HashSet;
|
---|
| 6 | import java.util.List;
|
---|
| 7 | import java.util.Set;
|
---|
| 8 |
|
---|
| 9 | import org.apollo.agents.MelodySearch;
|
---|
| 10 | import org.apollo.io.AudioPathManager;
|
---|
| 11 | import org.apollo.widgets.SampledTrack;
|
---|
| 12 | import org.expeditee.gui.UserSettings;
|
---|
| 13 | import org.expeditee.items.ItemUtils;
|
---|
| 14 |
|
---|
| 15 | /**
|
---|
| 16 | * Purges a
|
---|
| 17 | * @author Brook Novak
|
---|
| 18 | *
|
---|
| 19 | */
|
---|
| 20 | public final class AudioPurger {
|
---|
| 21 |
|
---|
| 22 | private AudioPurger() {
|
---|
| 23 |
|
---|
| 24 | }
|
---|
| 25 |
|
---|
| 26 | public static void purgeLocalAudio() {
|
---|
| 27 |
|
---|
| 28 | String[] audioFiles = AudioPathManager.getAudioFileNames();
|
---|
| 29 | if (audioFiles == null || audioFiles.length == 0) return;
|
---|
| 30 |
|
---|
| 31 |
|
---|
| 32 | // Search every profile and frameset
|
---|
| 33 | Set<String> referencedAudio = new HashSet<String>();
|
---|
| 34 |
|
---|
| 35 | for (String path : UserSettings.FrameDirs) {
|
---|
| 36 |
|
---|
| 37 | File frameDir = new File(path);
|
---|
| 38 |
|
---|
| 39 | if (frameDir.exists() && frameDir.isDirectory()) {
|
---|
| 40 |
|
---|
| 41 | try {
|
---|
| 42 | getReferenceAudioFiles(frameDir, referencedAudio);
|
---|
| 43 | } catch (IOException e) {
|
---|
| 44 | e.printStackTrace();
|
---|
| 45 | }
|
---|
| 46 | }
|
---|
| 47 | }
|
---|
| 48 |
|
---|
| 49 | // Delelete all unferenced audio thats using up precious disk space
|
---|
| 50 | for (String audioFile : audioFiles) {
|
---|
| 51 | if (!referencedAudio.contains(audioFile)) {
|
---|
| 52 |
|
---|
| 53 | File unreferencedFile = new File(AudioPathManager.AUDIO_HOME_DIRECTORY + audioFile);
|
---|
| 54 | ApolloSystemLog.println("Deleting unreference audio file \"" + audioFile + "\"");
|
---|
| 55 | unreferencedFile.delete();
|
---|
| 56 |
|
---|
| 57 | // Also delete any melody meta
|
---|
| 58 | File melodyMetaFile = new File(
|
---|
| 59 | AudioPathManager.AUDIO_HOME_DIRECTORY +
|
---|
| 60 | MelodySearch.MELODY_METAFILE_PREFIX +
|
---|
| 61 | audioFile +
|
---|
| 62 | MelodySearch.MELODY_METAFILE_SUFFIX);
|
---|
| 63 |
|
---|
| 64 | if (melodyMetaFile.exists()) melodyMetaFile.delete();
|
---|
| 65 |
|
---|
| 66 | }
|
---|
| 67 | }
|
---|
| 68 |
|
---|
| 69 | }
|
---|
| 70 |
|
---|
| 71 | private static void getReferenceAudioFiles(File dir, Set<String> refedAudio) throws IOException {
|
---|
| 72 |
|
---|
| 73 | String[] filenames = dir.list();
|
---|
| 74 | if (filenames == null) throw new IOException();
|
---|
| 75 |
|
---|
| 76 | String trackPrefix = ItemUtils.GetTag(ItemUtils.TAG_IWIDGET)
|
---|
| 77 | + ": " + SampledTrack.class.getName();
|
---|
| 78 |
|
---|
| 79 | int filenameMetaLength = SampledTrack.META_LOCALNAME_TAG.length();
|
---|
| 80 |
|
---|
| 81 | for (String frameFile : filenames) {
|
---|
| 82 |
|
---|
| 83 | File f = new File(dir.getPath() + File.separatorChar + frameFile);
|
---|
| 84 | if (!f.exists()) continue;
|
---|
| 85 |
|
---|
| 86 | // Recurse
|
---|
| 87 | if (f.isDirectory()) {
|
---|
| 88 | getReferenceAudioFiles(f, refedAudio);
|
---|
| 89 | continue;
|
---|
| 90 | }
|
---|
| 91 |
|
---|
| 92 | // Perform text search on sampled track widgets
|
---|
| 93 | List<TextItemSearchResult> results =
|
---|
| 94 | ExpediteeFileTextSearch.prefixSearch(f.getAbsolutePath(), new String[] {trackPrefix});
|
---|
| 95 |
|
---|
| 96 | // For each track widget
|
---|
| 97 | for (TextItemSearchResult result : results) {
|
---|
| 98 |
|
---|
| 99 | // For each peice of meta data
|
---|
| 100 | if (result.data != null) {
|
---|
| 101 | for (String meta : result.data) {
|
---|
| 102 |
|
---|
| 103 | // Find the local-filename meta
|
---|
| 104 | if (meta.length() > filenameMetaLength &&
|
---|
| 105 | meta.startsWith(SampledTrack.META_LOCALNAME_TAG)) {
|
---|
| 106 |
|
---|
| 107 | // Keep meta
|
---|
| 108 | refedAudio.add(meta.substring(filenameMetaLength));
|
---|
| 109 | break;
|
---|
| 110 | }
|
---|
| 111 | }
|
---|
| 112 | }
|
---|
| 113 | }
|
---|
| 114 |
|
---|
| 115 |
|
---|
| 116 |
|
---|
| 117 | }
|
---|
| 118 | }
|
---|
| 119 |
|
---|
| 120 | public static void main(String[] args) {
|
---|
| 121 | purgeLocalAudio();
|
---|
| 122 | }
|
---|
| 123 |
|
---|
| 124 | }
|
---|