Changeset 82
- Timestamp:
- 09/17/07 19:49:04 (1 year ago)
- Files:
-
- trunk/src/main/org/lastpod/ModelImpl.java (modified) (3 diffs)
- trunk/src/main/org/lastpod/PreferencesEditor.java (modified) (9 diffs)
- trunk/src/main/org/lastpod/TrackItem.java (modified) (6 diffs)
- trunk/src/main/org/lastpod/parser/ItunesDbParser.java (modified) (4 diffs)
- trunk/src/test/org/lastpod/MockModel.java (modified) (2 diffs)
- trunk/src/test/org/lastpod/ModelImplTest.java (added)
- trunk/src/test/org/lastpod/TrackItemTest.java (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/main/org/lastpod/ModelImpl.java
r79 r82 83 83 String parseMultiPlayTracksStr = fPrefs.get("parseMultiPlayTracks", "1"); 84 84 boolean parseVariousArtists = parseVariousArtistsStr.equals("1") ? true : false; 85 String variousArtistsString = fPrefs.get("variousArtistsString", "Various Artists"); 86 String[] splitVariousArtistStrings = splitVariousArtistsString(variousArtistsString); 85 87 boolean parseMultiPlayTracks = parseMultiPlayTracksStr.equals("1") ? true : false; 86 88 … … 91 93 } 92 94 93 ItunesDbParser itunesDbParser = new ItunesDbParser(iTunesPath, parseVariousArtists); 95 ItunesDbParser itunesDbParser = 96 new ItunesDbParser(iTunesPath, parseVariousArtists, splitVariousArtistStrings); 94 97 PlayCountsParser playCountsParser = new PlayCountsParser(iTunesPath, parseMultiPlayTracks); 95 98 DbReader reader = new DbReader(itunesDbParser, playCountsParser); … … 204 207 return filteredRecentPlayed; 205 208 } 209 210 /** 211 * Splits a ; seperated String of various artist strings. 212 * @param variousArtistsString The String to split 213 * @return A split and trimmed String array. 214 */ 215 public static String[] splitVariousArtistsString(String variousArtistsString) { 216 String[] splitVariousArtistsString = variousArtistsString.split(";"); 217 218 for (int i = 0; i < splitVariousArtistsString.length; i++) { 219 splitVariousArtistsString[i] = splitVariousArtistsString[i].trim(); 220 } 221 222 return splitVariousArtistsString; 223 } 206 224 } trunk/src/main/org/lastpod/PreferencesEditor.java
r79 r82 77 77 private JCheckBox parseMultiPlayTracksCheck; 78 78 private JTextField iTunesfield; 79 private JTextField parseVariousArtistsField; 79 80 private JCheckBox iTCheck; 80 81 private JLabel iTunesStatus; 82 private JLabel parseVariousArtistsStatus; 81 83 private JButton browsebuttoniTunes; 82 84 … … 176 178 if (iTCheck.isSelected()) { 177 179 iTunesStatus.setText("Enabled"); 180 iTunesfield.setEditable(true); 181 browsebuttoniTunes.setEnabled(true); 178 182 } else { 179 183 iTunesStatus.setText("Disabled"); 184 iTunesfield.setEditable(false); 185 browsebuttoniTunes.setEnabled(false); 180 186 } 181 187 } … … 229 235 p.add(p4); 230 236 237 // Various Artists Panel 238 JPanel p6 = new JPanel(); 239 p6.setLayout(new SpringLayout()); 240 p.add(new JLabel()); 241 242 TitledBorder b6 = BorderFactory.createTitledBorder("Various Artists:"); 243 p6.setBorder(b6); 244 p6.setToolTipText("<html>If the parse various artists option is enabled,<br>" 245 + "LastPod will parse the track information when the artist is<br>" 246 + "\"Various Artists\". The parsing consists of spliting the artist<br>" 247 + "and track from the original track String. (For example, \"Bing<br>" 248 + "Crosby - I'll Be Home for Christmas\" becomes artist=Bing<br>" 249 + "Crosby and track name=I'll Be Home for Christmas.)<br><br>" 250 + "You may also specify a semi-colon seperated list of various<br>" 251 + "artist strings. For example, you could have the following:<br>" 252 + "Various Artists;__Soundtracks;__Compilations"); 253 254 JPanel p61 = new JPanel(); 255 parseVariousArtistsCheck = new JCheckBox(); 256 parseVariousArtistsCheck.addActionListener(new ActionListener() { 257 public void actionPerformed(ActionEvent e) { 258 if (parseVariousArtistsCheck.isSelected()) { 259 parseVariousArtistsStatus.setText("Enabled"); 260 parseVariousArtistsField.setEditable(true); 261 } else { 262 parseVariousArtistsStatus.setText("Disabled"); 263 parseVariousArtistsField.setEditable(false); 264 } 265 } 266 }); 267 p61.add(parseVariousArtistsCheck); 268 parseVariousArtistsStatus = new JLabel(); 269 parseVariousArtistsStatus.addMouseListener(new MouseListener() { 270 public void mouseClicked(MouseEvent e) { 271 if (parseVariousArtistsStatus.getText().equals("Disabled")) { 272 parseVariousArtistsCheck.setSelected(true); 273 parseVariousArtistsStatus.setText("Enabled"); 274 parseVariousArtistsField.setEditable(true); 275 } else { 276 parseVariousArtistsCheck.setSelected(false); 277 parseVariousArtistsStatus.setText("Disabled"); 278 parseVariousArtistsField.setEditable(false); 279 } 280 } 281 282 public void mouseEntered(MouseEvent e) { 283 } 284 285 public void mouseExited(MouseEvent e) { 286 } 287 288 public void mouseReleased(MouseEvent e) { 289 } 290 291 public void mousePressed(MouseEvent e) { 292 } 293 }); 294 p61.add(parseVariousArtistsStatus); 295 296 p6.add(p61); 297 p6.add(new JLabel()); 298 299 JLabel variousArtistsLabel = new JLabel("Various Artists String:"); 300 p6.add(variousArtistsLabel); 301 parseVariousArtistsField = new JTextField(); 302 parseVariousArtistsField.setPreferredSize(new Dimension(250, 20)); 303 p6.add(parseVariousArtistsField); 304 305 SpringUtilities.makeCompactGrid(p6, 2, 2, 5, 4, 3, 4); 306 p.add(p6); 307 231 308 //Options Panel 232 309 JPanel p3 = new JPanel(); … … 240 317 + "submitted to both Last.fm and the given URL. This allows one<br>" 241 318 + "to perform a backup of the Last.fm data.<br><br>" 242 + "If the parse various artists option is enabled, LastPod will<br>"243 + "parse the track information when the artist is \"Various<br>"244 + "Artists\". The parsing consists of spliting the artist and track<br>"245 + "from the original track String. (For example, \"Bing<br>"246 + "Crosby - I'll Be Home for Christmas\" becomes artist=Bing<br>"247 + "Crosby and track name=I'll Be Home for Christmas.<br><br>"248 319 + "If parse multi-play tracks is enabled, LastPod will generate<br>" 249 320 + "a new track as needed. This provides more accurate statistics,<br>" … … 255 326 backupUrlField = new JTextField(); 256 327 p3.add(backupUrlField); 257 258 JLabel parseVariousArtistsLabel = new JLabel("Parse \"Various Artists\" Tracks: ");259 p3.add(parseVariousArtistsLabel);260 parseVariousArtistsCheck = new JCheckBox();261 parseVariousArtistsCheck.addActionListener(new ActionListener() {262 public void actionPerformed(ActionEvent e) {263 if (parseVariousArtistsCheck.isSelected()) {264 parseVariousArtistsCheck.setText("Enabled");265 } else {266 parseVariousArtistsCheck.setText("Disabled");267 }268 }269 });270 p3.add(parseVariousArtistsCheck);271 328 272 329 JLabel parseMultiPlayTracksLabel = new JLabel("Parse Multi-Play Tracks: "); … … 284 341 p3.add(parseMultiPlayTracksCheck); 285 342 286 SpringUtilities.makeCompactGrid(p3, 3, 2, 5, 2, 3, 4);343 SpringUtilities.makeCompactGrid(p3, 2, 2, 5, 2, 3, 4); 287 344 p.add(p3); 288 345 … … 372 429 this.backupUrlField.setText(fPrefs.get("backupUrl", "")); 373 430 this.iTunesfield.setText(fPrefs.get("iT Path", "")); 431 parseVariousArtistsField.setText(fPrefs.get("variousArtistsString", "Various Artists")); 374 432 375 433 if (fPrefs.get("iTunes Status", "Enabled").equals("Enabled")) { … … 386 444 387 445 if (fPrefs.get("parseVariousArtists", "1").equals("1")) { 388 parseVariousArtists Check.setText("Enabled");446 parseVariousArtistsStatus.setText("Enabled"); 389 447 parseVariousArtistsCheck.setSelected(true); 448 parseVariousArtistsField.setEditable(true); 390 449 } else { 391 parseVariousArtists Check.setText("Disabled");450 parseVariousArtistsStatus.setText("Disabled"); 392 451 parseVariousArtistsCheck.setSelected(false); 452 parseVariousArtistsField.setEditable(false); 393 453 } 394 454 … … 423 483 fPrefs.put("backupUrl", this.backupUrlField.getText()); 424 484 fPrefs.put("iT Path", this.iTunesfield.getText()); 485 fPrefs.put("variousArtistsString", parseVariousArtistsField.getText()); 425 486 fPrefs.put("iTunes Status", this.iTunesStatus.getText()); 426 487 fPrefs.put("parseVariousArtists", parseVariousArtists); trunk/src/main/org/lastpod/TrackItem.java
r79 r82 37 37 38 38 /** 39 * A set of strings that will be used to parse various artists. 40 */ 41 private String[] variousArtistsStrings; 42 43 /** 39 44 * Default constructor. 40 45 */ … … 105 110 public String getArtist() { 106 111 /* If required parse the track String to obtain the proper artist. */ 107 if (isVariousArtistAlbum(parseVariousArtists )) {112 if (isVariousArtistAlbum(parseVariousArtists, variousArtistsStrings)) { 108 113 return track.split("-")[0].trim(); 109 114 } … … 118 123 * checked to see if it is a "Various Artist" track. If so, the artist 119 124 * information will be parsed from the track title. 125 * @param variousArtistsString The set of Strings to are used for various arists. 120 126 * @return <code>true</code> if this is a "Various Artist" album. 121 127 */ 122 public boolean isVariousArtistAlbum(boolean parseVariousArtists ) {128 public boolean isVariousArtistAlbum(boolean parseVariousArtists, String[] variousArtistsString) { 123 129 /* Returns false if "Various Artist" tracks should not be parsed. */ 124 130 if (!parseVariousArtists) { … … 126 132 } 127 133 134 /* Ensures that variousArtistsString is being used. */ 135 if ((variousArtistsString == null) || (variousArtistsString.length < 1)) { 136 return false; 137 } 138 128 139 /* In addition to other checks, this makes sure the track is not null, 129 140 * because track will need to be parsed. */ 130 return (track != null) && (artist != null) 131 && artist.trim().toLowerCase().equals("various artists"); 141 if ((track != null) && (artist != null)) { 142 /* If the track matches then return true right away. */ 143 for (int i = 0; i < variousArtistsString.length; i++) { 144 if (artist.trim().toLowerCase().equals(variousArtistsString[i].toLowerCase())) { 145 return true; 146 } 147 } 148 } 149 150 return false; 132 151 } 133 152 … … 187 206 public String getTrack() { 188 207 /* If required parse the track String to obtain the proper track. */ 189 if (isVariousArtistAlbum(parseVariousArtists )) {208 if (isVariousArtistAlbum(parseVariousArtists, variousArtistsStrings)) { 190 209 return track.split("-")[1].trim(); 191 210 } … … 234 253 public void setParseVariousArtists(boolean parseVariousArtists) { 235 254 this.parseVariousArtists = parseVariousArtists; 255 } 256 257 /** 258 * Gets the set of strings that will be used to parse various artists. 259 * @return The set of strings that will be used to parse various artists. 260 */ 261 public String[] getVariousArtistsStrings() { 262 return variousArtistsStrings; 263 } 264 265 /** 266 * Sets the set of strings that will be used to parse various artists. 267 * @param variousArtistsStrings The set of strings that will be used to parse 268 * various artists. 269 */ 270 public void setVariousArtistsStrings(String[] variousArtistsStrings) { 271 this.variousArtistsStrings = variousArtistsStrings; 236 272 } 237 273 trunk/src/main/org/lastpod/parser/ItunesDbParser.java
r79 r82 50 50 51 51 /** 52 * Stores the strings used to parse various artists. 53 */ 54 String[] variousArtistsStrings; 55 56 /** 52 57 * Default constructor should not be used. 53 58 */ … … 63 68 * @param parseVariousArtists If <code>true</code> then parses "Various 64 69 * Artists" 65 */ 66 public ItunesDbParser(String iTunesPath, boolean parseVariousArtists) { 70 * @param variousArtistsStrings A String array containing the various artist 71 * strings that should be parsed. 72 */ 73 public ItunesDbParser(String iTunesPath, boolean parseVariousArtists, 74 String[] variousArtistsStrings) { 67 75 if (!iTunesPath.endsWith(File.separator)) { 68 76 iTunesPath += File.separator; … … 71 79 this.iTunesFile = iTunesPath + "iTunesDB"; 72 80 this.parseVariousArtists = parseVariousArtists; 81 this.variousArtistsStrings = variousArtistsStrings; 73 82 } 74 83 … … 138 147 TrackItem track = new TrackItem(); 139 148 track.setParseVariousArtists(parseVariousArtists); 149 track.setVariousArtistsStrings(variousArtistsStrings); 140 150 141 151 itunesistream.mark(1048576); //mark beginning of MHIT location trunk/src/test/org/lastpod/MockModel.java
r78 r82 25 25 26 26 public class MockModel implements Model { 27 /** 28 * A constant that stores the default "Various Artists" string. 29 */ 30 private static final String[] VARIOUS_ARTISTS_STRING = 31 { "Various Artists", "__Compilations", "__Soundtracks" }; 27 32 private List recentlyPlayed = null; 28 33 … … 77 82 cal.set(Calendar.SECOND, 0); 78 83 79 for (int i = 0; i <= 30; i++) { 80 TrackItem trackItem = new TrackItem(); 84 /* This item should not parse out Various Artists. */ 85 TrackItem trackItem = new TrackItem(); 86 trackItem.setTrackid(1); 87 trackItem.setLength(60); 88 trackItem.setArtist("Various Artists"); 89 trackItem.setAlbum("A 1940's Christmas"); 90 trackItem.setTrack("Bing Crosby - I'll Be Home for Christmas"); 91 trackItem.setPlaycount(1); 92 trackItem.setLastplayed(cal.getTimeInMillis() / 1000); 93 94 if (History.getInstance(".").isInHistory(trackItem.getLastplayed())) { 95 trackItem.setActive(Boolean.FALSE); 96 } 97 98 recentlyPlayed.add(trackItem); 99 100 cal.add(Calendar.HOUR, 1); 101 102 /* This item should parse out Various Artists. */ 103 trackItem = new TrackItem(); 104 trackItem.setTrackid(1); 105 trackItem.setLength(60); 106 trackItem.setArtist("Various Artists"); 107 trackItem.setAlbum("A 1940's Christmas"); 108 trackItem.setTrack("Bing Crosby - I'll Be Home for Christmas"); 109 trackItem.setPlaycount(1); 110 trackItem.setLastplayed(cal.getTimeInMillis() / 1000); 111 trackItem.setParseVariousArtists(true); 112 trackItem.setVariousArtistsStrings(VARIOUS_ARTISTS_STRING); 113 114 if (History.getInstance(".").isInHistory(trackItem.getLastplayed())) { 115 trackItem.setActive(Boolean.FALSE); 116 } 117 118 recentlyPlayed.add(trackItem); 119 120 cal.add(Calendar.HOUR, 1); 121 122 /* This item should parse out __Compilations. */ 123 trackItem = new TrackItem(); 124 trackItem.setTrackid(1); 125 trackItem.setLength(60); 126 trackItem.setArtist("__Compilations"); 127 trackItem.setAlbum("A 1940's Christmas"); 128 trackItem.setTrack("Bing Crosby - I'll Be Home for Christmas"); 129 trackItem.setPlaycount(1); 130 trackItem.setLastplayed(cal.getTimeInMillis() / 1000); 131 trackItem.setParseVariousArtists(true); 132 trackItem.setVariousArtistsStrings(VARIOUS_ARTISTS_STRING); 133 134 if (History.getInstance(".").isInHistory(trackItem.getLastplayed())) { 135 trackItem.setActive(Boolean.FALSE); 136 } 137 138 recentlyPlayed.add(trackItem); 139 140 cal.add(Calendar.HOUR, 1); 141 142 /* This item should parse out __Soundtracks. */ 143 trackItem = new TrackItem(); 144 trackItem.setTrackid(1); 145 trackItem.setLength(60); 146 trackItem.setArtist("__Soundtracks"); 147 trackItem.setAlbum("A 1940's Christmas"); 148 trackItem.setTrack("Bing Crosby - I'll Be Home for Christmas"); 149 trackItem.setPlaycount(1); 150 trackItem.setLastplayed(cal.getTimeInMillis() / 1000); 151 trackItem.setParseVariousArtists(true); 152 trackItem.setVariousArtistsStrings(VARIOUS_ARTISTS_STRING); 153 154 if (History.getInstance(".").isInHistory(trackItem.getLastplayed())) { 155 trackItem.setActive(Boolean.FALSE); 156 } 157 158 recentlyPlayed.add(trackItem); 159 160 cal.add(Calendar.HOUR, 1); 161 162 for (int i = 0; i <= 27; i++) { 163 trackItem = new TrackItem(); 81 164 trackItem.setTrackid(1); 82 165 trackItem.setLength(60); trunk/src/test/org/lastpod/TrackItemTest.java
r79 r82 28 28 */ 29 29 public class TrackItemTest extends TestCase { 30 /** 31 * A constant that stores the default "Various Artists" string. 32 */ 33 private static final String[] VARIOUS_ARTISTS_STRING = 34 { "Various Artists", "__Compilations", "__Soundtracks" }; 35 30 36 /** 31 37 * Returns a JUnit TestSuite for this test case. … … 84 90 trackItem.setParseVariousArtists(true); 85 91 86 assertFalse(trackItem.isVariousArtistAlbum(true ));87 assertFalse(trackItem.isVariousArtistAlbum(false ));92 assertFalse(trackItem.isVariousArtistAlbum(true, VARIOUS_ARTISTS_STRING)); 93 assertFalse(trackItem.isVariousArtistAlbum(false, VARIOUS_ARTISTS_STRING)); 88 94 assertEquals("My Chemical Romance", trackItem.getArtist()); 89 95 assertEquals("The Black Parade", trackItem.getAlbum()); … … 110 116 trackItem.setParseVariousArtists(false); 111 117 112 assertTrue(trackItem.isVariousArtistAlbum(true ));113 assertFalse(trackItem.isVariousArtistAlbum(false ));118 assertTrue(trackItem.isVariousArtistAlbum(true, VARIOUS_ARTISTS_STRING)); 119 assertFalse(trackItem.isVariousArtistAlbum(false, VARIOUS_ARTISTS_STRING)); 114 120 assertEquals("Various Artists", trackItem.getArtist()); 115 121 assertEquals("A 1940's Christmas", trackItem.getAlbum()); … … 131 137 trackItem.setLastplayed(1); 132 138 trackItem.setParseVariousArtists(true); 139 trackItem.setVariousArtistsStrings(VARIOUS_ARTISTS_STRING); 133 140 134 assertTrue(trackItem.isVariousArtistAlbum(true)); 135 assertFalse(trackItem.isVariousArtistAlbum(false)); 141 assertTrue(trackItem.isVariousArtistAlbum(true, VARIOUS_ARTISTS_STRING)); 142 assertFalse(trackItem.isVariousArtistAlbum(false, VARIOUS_ARTISTS_STRING)); 143 assertEquals("Bing Crosby", trackItem.getArtist()); 144 assertEquals("A 1940's Christmas", trackItem.getAlbum()); 145 assertEquals("I'll Be Home for Christmas", trackItem.getTrack()); 146 } 147 148 /** 149 * Tests a "Various Artists" __Compilations track. 150 */ 151 public void testCompilationTrack() { 152 TrackItem trackItem = new TrackItem(); 153 trackItem.setTrackid(1); 154 trackItem.setActive(Boolean.TRUE); 155 trackItem.setLength(60); 156 trackItem.setArtist("__Compilations"); 157 trackItem.setAlbum("A 1940's Christmas"); 158 trackItem.setTrack("Bing Crosby - I'll Be Home for Christmas"); 159 trackItem.setPlaycount(1); 160 trackItem.setLastplayed(1); 161 trackItem.setParseVariousArtists(true); 162 trackItem.setVariousArtistsStrings(VARIOUS_ARTISTS_STRING); 163 164 assertTrue(trackItem.isVariousArtistAlbum(true, VARIOUS_ARTISTS_STRING)); 165 assertFalse(trackItem.isVariousArtistAlbum(false, VARIOUS_ARTISTS_STRING)); 166 assertEquals("Bing Crosby", trackItem.getArtist()); 167 assertEquals("A 1940's Christmas", trackItem.getAlbum()); 168 assertEquals("I'll Be Home for Christmas", trackItem.getTrack()); 169 } 170 171 /** 172 * Tests a "Various Artists" __Soundtracks track. 173 */ 174 public void testSoundtrackTrack() { 175 TrackItem trackItem = new TrackItem(); 176 trackItem.setTrackid(1); 177 trackItem.setActive(Boolean.TRUE); 178 trackItem.setLength(60); 179 trackItem.setArtist("__Soundtracks"); 180 trackItem.setAlbum("A 1940's Christmas"); 181 trackItem.setTrack("Bing Crosby - I'll Be Home for Christmas"); 182 trackItem.setPlaycount(1); 183 trackItem.setLastplayed(1); 184 trackItem.setParseVariousArtists(true); 185 trackItem.setVariousArtistsStrings(VARIOUS_ARTISTS_STRING); 186 187 assertTrue(trackItem.isVariousArtistAlbum(true, VARIOUS_ARTISTS_STRING)); 188 assertFalse(trackItem.isVariousArtistAlbum(false, VARIOUS_ARTISTS_STRING)); 136 189 assertEquals("Bing Crosby", trackItem.getArtist()); 137 190 assertEquals("A 1940's Christmas", trackItem.getAlbum());
