Changeset 82

Show
Ignore:
Timestamp:
09/17/07 19:49:04 (1 year ago)
Author:
chris
Message:

Completes #27
Set your own "Various Artist" strings

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/main/org/lastpod/ModelImpl.java

    r79 r82  
    8383        String parseMultiPlayTracksStr = fPrefs.get("parseMultiPlayTracks", "1"); 
    8484        boolean parseVariousArtists = parseVariousArtistsStr.equals("1") ? true : false; 
     85        String variousArtistsString = fPrefs.get("variousArtistsString", "Various Artists"); 
     86        String[] splitVariousArtistStrings = splitVariousArtistsString(variousArtistsString); 
    8587        boolean parseMultiPlayTracks = parseMultiPlayTracksStr.equals("1") ? true : false; 
    8688 
     
    9193        } 
    9294 
    93         ItunesDbParser itunesDbParser = new ItunesDbParser(iTunesPath, parseVariousArtists); 
     95        ItunesDbParser itunesDbParser = 
     96            new ItunesDbParser(iTunesPath, parseVariousArtists, splitVariousArtistStrings); 
    9497        PlayCountsParser playCountsParser = new PlayCountsParser(iTunesPath, parseMultiPlayTracks); 
    9598        DbReader reader = new DbReader(itunesDbParser, playCountsParser); 
     
    204207        return filteredRecentPlayed; 
    205208    } 
     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    } 
    206224} 
  • trunk/src/main/org/lastpod/PreferencesEditor.java

    r79 r82  
    7777    private JCheckBox parseMultiPlayTracksCheck; 
    7878    private JTextField iTunesfield; 
     79    private JTextField parseVariousArtistsField; 
    7980    private JCheckBox iTCheck; 
    8081    private JLabel iTunesStatus; 
     82    private JLabel parseVariousArtistsStatus; 
    8183    private JButton browsebuttoniTunes; 
    8284 
     
    176178                    if (iTCheck.isSelected()) { 
    177179                        iTunesStatus.setText("Enabled"); 
     180                        iTunesfield.setEditable(true); 
     181                        browsebuttoniTunes.setEnabled(true); 
    178182                    } else { 
    179183                        iTunesStatus.setText("Disabled"); 
     184                        iTunesfield.setEditable(false); 
     185                        browsebuttoniTunes.setEnabled(false); 
    180186                    } 
    181187                } 
     
    229235        p.add(p4); 
    230236 
     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 
    231308        //Options Panel 
    232309        JPanel p3 = new JPanel(); 
     
    240317            + "submitted to both Last.fm and the given URL.  This allows one<br>" 
    241318            + "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>" 
    248319            + "If parse multi-play tracks is enabled, LastPod will generate<br>" 
    249320            + "a new track as needed.  This provides more accurate statistics,<br>" 
     
    255326        backupUrlField = new JTextField(); 
    256327        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); 
    271328 
    272329        JLabel parseMultiPlayTracksLabel = new JLabel("Parse Multi-Play Tracks: "); 
     
    284341        p3.add(parseMultiPlayTracksCheck); 
    285342 
    286         SpringUtilities.makeCompactGrid(p3, 3, 2, 5, 2, 3, 4); 
     343        SpringUtilities.makeCompactGrid(p3, 2, 2, 5, 2, 3, 4); 
    287344        p.add(p3); 
    288345 
     
    372429        this.backupUrlField.setText(fPrefs.get("backupUrl", "")); 
    373430        this.iTunesfield.setText(fPrefs.get("iT Path", "")); 
     431        parseVariousArtistsField.setText(fPrefs.get("variousArtistsString", "Various Artists")); 
    374432 
    375433        if (fPrefs.get("iTunes Status", "Enabled").equals("Enabled")) { 
     
    386444 
    387445        if (fPrefs.get("parseVariousArtists", "1").equals("1")) { 
    388             parseVariousArtistsCheck.setText("Enabled"); 
     446            parseVariousArtistsStatus.setText("Enabled"); 
    389447            parseVariousArtistsCheck.setSelected(true); 
     448            parseVariousArtistsField.setEditable(true); 
    390449        } else { 
    391             parseVariousArtistsCheck.setText("Disabled"); 
     450            parseVariousArtistsStatus.setText("Disabled"); 
    392451            parseVariousArtistsCheck.setSelected(false); 
     452            parseVariousArtistsField.setEditable(false); 
    393453        } 
    394454 
     
    423483        fPrefs.put("backupUrl", this.backupUrlField.getText()); 
    424484        fPrefs.put("iT Path", this.iTunesfield.getText()); 
     485        fPrefs.put("variousArtistsString", parseVariousArtistsField.getText()); 
    425486        fPrefs.put("iTunes Status", this.iTunesStatus.getText()); 
    426487        fPrefs.put("parseVariousArtists", parseVariousArtists); 
  • trunk/src/main/org/lastpod/TrackItem.java

    r79 r82  
    3737 
    3838    /** 
     39     * A set of strings that will be used to parse various artists. 
     40     */ 
     41    private String[] variousArtistsStrings; 
     42 
     43    /** 
    3944     * Default constructor. 
    4045     */ 
     
    105110    public String getArtist() { 
    106111        /* If required parse the track String to obtain the proper artist. */ 
    107         if (isVariousArtistAlbum(parseVariousArtists)) { 
     112        if (isVariousArtistAlbum(parseVariousArtists, variousArtistsStrings)) { 
    108113            return track.split("-")[0].trim(); 
    109114        } 
     
    118123     * checked to see if it is a "Various Artist" track.  If so, the artist 
    119124     * information will be parsed from the track title. 
     125     * @param variousArtistsString  The set of Strings to are used for various arists. 
    120126     * @return  <code>true</code> if this is a "Various Artist" album. 
    121127     */ 
    122     public boolean isVariousArtistAlbum(boolean parseVariousArtists) { 
     128    public boolean isVariousArtistAlbum(boolean parseVariousArtists, String[] variousArtistsString) { 
    123129        /* Returns false if "Various Artist" tracks should not be parsed. */ 
    124130        if (!parseVariousArtists) { 
     
    126132        } 
    127133 
     134        /* Ensures that variousArtistsString is being used. */ 
     135        if ((variousArtistsString == null) || (variousArtistsString.length < 1)) { 
     136            return false; 
     137        } 
     138 
    128139        /* In addition to other checks, this makes sure the track is not null, 
    129140         * 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; 
    132151    } 
    133152 
     
    187206    public String getTrack() { 
    188207        /* If required parse the track String to obtain the proper track. */ 
    189         if (isVariousArtistAlbum(parseVariousArtists)) { 
     208        if (isVariousArtistAlbum(parseVariousArtists, variousArtistsStrings)) { 
    190209            return track.split("-")[1].trim(); 
    191210        } 
     
    234253    public void setParseVariousArtists(boolean parseVariousArtists) { 
    235254        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; 
    236272    } 
    237273 
  • trunk/src/main/org/lastpod/parser/ItunesDbParser.java

    r79 r82  
    5050 
    5151    /** 
     52     * Stores the strings used to parse various artists. 
     53     */ 
     54    String[] variousArtistsStrings; 
     55 
     56    /** 
    5257     * Default constructor should not be used. 
    5358     */ 
     
    6368     * @param parseVariousArtists  If <code>true</code> then parses "Various 
    6469     * 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) { 
    6775        if (!iTunesPath.endsWith(File.separator)) { 
    6876            iTunesPath += File.separator; 
     
    7179        this.iTunesFile = iTunesPath + "iTunesDB"; 
    7280        this.parseVariousArtists = parseVariousArtists; 
     81        this.variousArtistsStrings = variousArtistsStrings; 
    7382    } 
    7483 
     
    138147        TrackItem track = new TrackItem(); 
    139148        track.setParseVariousArtists(parseVariousArtists); 
     149        track.setVariousArtistsStrings(variousArtistsStrings); 
    140150 
    141151        itunesistream.mark(1048576); //mark beginning of MHIT location 
  • trunk/src/test/org/lastpod/MockModel.java

    r78 r82  
    2525 
    2626public 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" }; 
    2732    private List recentlyPlayed = null; 
    2833 
     
    7782        cal.set(Calendar.SECOND, 0); 
    7883 
    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(); 
    81164            trackItem.setTrackid(1); 
    82165            trackItem.setLength(60); 
  • trunk/src/test/org/lastpod/TrackItemTest.java

    r79 r82  
    2828 */ 
    2929public 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 
    3036    /** 
    3137     * Returns a JUnit TestSuite for this test case. 
     
    8490        trackItem.setParseVariousArtists(true); 
    8591 
    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)); 
    8894        assertEquals("My Chemical Romance", trackItem.getArtist()); 
    8995        assertEquals("The Black Parade", trackItem.getAlbum()); 
     
    110116        trackItem.setParseVariousArtists(false); 
    111117 
    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)); 
    114120        assertEquals("Various Artists", trackItem.getArtist()); 
    115121        assertEquals("A 1940's Christmas", trackItem.getAlbum()); 
     
    131137        trackItem.setLastplayed(1); 
    132138        trackItem.setParseVariousArtists(true); 
     139        trackItem.setVariousArtistsStrings(VARIOUS_ARTISTS_STRING); 
    133140 
    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)); 
    136189        assertEquals("Bing Crosby", trackItem.getArtist()); 
    137190        assertEquals("A 1940's Christmas", trackItem.getAlbum());