source: trunk/src/org/apollo/util/AudioPurger.java@ 1102

Last change on this file since 1102 was 1102, checked in by davidb, 6 years ago

Reworking of the code-base to separate logic from graphics. This version of Expeditee now supports a JFX graphics as an alternative to SWING

File size: 3.0 KB
Line 
1package org.apollo.util;
2
3import java.io.File;
4import java.io.IOException;
5import java.util.HashSet;
6import java.util.List;
7import java.util.Set;
8
9import org.apollo.agents.MelodySearch;
10import org.apollo.io.AudioPathManager;
11import org.apollo.widgets.SampledTrack;
12import org.expeditee.settings.folders.FolderSettings;
13import org.expeditee.items.ItemUtils;
14
15/**
16 * Purges a
17 * @author Brook Novak
18 *
19 */
20public 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 : FolderSettings.FrameDirs.get()) {
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}
Note: See TracBrowser for help on using the repository browser.