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

Last change on this file since 903 was 903, checked in by davidb, 10 years ago

Changes needed after restructuring of Settings code/classes

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