Skip to content

Commit

Permalink
Added missing tooltips to main window, save as dialog's file filter d…
Browse files Browse the repository at this point in the history
…efaults to the currently loaded file's type, disabled playlist editing other than reordering for iTunes playlists (MVP), added support for setting the dialog Message to ProgressDialog, and added iTunes URL support.
  • Loading branch information
firewyre committed Aug 1, 2015
1 parent 204ba6e commit c1d9ae5
Show file tree
Hide file tree
Showing 10 changed files with 111 additions and 46 deletions.
5 changes: 1 addition & 4 deletions src/listfix/controller/GUIDriver.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,24 +21,21 @@
package listfix.controller;

import java.io.File;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import listfix.exceptions.MediaDirNotFoundException;

import listfix.io.writers.FileWriter;
import listfix.io.IniFileConverter;
import listfix.io.readers.IniFileReader;
import listfix.io.readers.OptionsReader;
import listfix.io.UNCFile;

import listfix.model.AppOptions;
import listfix.model.PlaylistHistory;

import listfix.util.ArrayFunctions;
import listfix.util.ExStack;

import org.apache.log4j.Logger;

/**
Expand Down
15 changes: 12 additions & 3 deletions src/listfix/io/readers/playlists/ITunesXMLReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,18 @@ private PlaylistEntry iTunesTrackToPlaylistEntry(ITunesTrack track)
{
try
{
ITunesPlaylistEntry result = new ITunesPlaylistEntry(new File((new URI(track.getLocation())).getPath()), track.getArtist() + " - " + track.getName(), track.getDuration(), _listFile, track);
// result.setTrackId(track.getTrackId());
return result;
if (track.getTrackType().equals(ITunesTrack.URL))
{
ITunesPlaylistEntry result = new ITunesPlaylistEntry(new URI(track.getLocation()), track);
// result.setTrackId(track.getTrackId());
return result;
}
else
{
ITunesPlaylistEntry result = new ITunesPlaylistEntry(new File((new URI(track.getLocation())).getPath()), track.getArtist() + " - " + track.getName(), track.getDuration(), _listFile, track);
// result.setTrackId(track.getTrackId());
return result;
}
}
catch (URISyntaxException ex)
{
Expand Down
3 changes: 2 additions & 1 deletion src/listfix/io/writers/playlists/ITunesXMLWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public void save(Playlist list, boolean saveRelative, ProgressAdapter adapter) t
{
Map<String, ITunesTrack> trackMap = new HashMap<>();

// Need to take each entry in the playlist and update the Dict in its corresponding ITunesTrack
// Need to take each entry in the playlist and update the Dict in its corresponding ITunesTrack to point to the proper location
// Add each ITunesTrack to a map
ITunesTrack tempTrack;
for (PlaylistEntry entry : list.getEntries())
Expand Down Expand Up @@ -91,6 +91,7 @@ public void save(Playlist list, boolean saveRelative, ProgressAdapter adapter) t
}

ITunesPlaylist iList = (ITunesPlaylist)list;
iList.getLibrary().setTracks(trackMap);

if (!adapter.getCancelled())
{
Expand Down
5 changes: 2 additions & 3 deletions src/listfix/model/playlists/itunes/ITunesMediaLibrary.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import christophedelory.plist.Array;
import christophedelory.plist.Dict;
import christophedelory.plist.Integer;
import christophedelory.plist.Key;
import christophedelory.plist.PlistObject;

import java.util.ArrayList;
Expand Down Expand Up @@ -80,9 +81,8 @@ public Map<String, ITunesTrack> getTracks()
result.put(key.getValue(), track);
}
return result;
}
}

/**
public void setTracks(Map<String, ITunesTrack> trackMap)
{
Dict rootDict = ((Dict)_plist.getPlist().getPlistObject());
Expand All @@ -96,7 +96,6 @@ public void setTracks(Map<String, ITunesTrack> trackMap)
tracksDictionary.put(plistKey, trackMap.get(key).getTrackDict());
}
}
*/

/**
* Gets the Playlists section of an iTunes library/playlist file as a list of ITunesTrackList objects.
Expand Down
16 changes: 10 additions & 6 deletions src/listfix/model/playlists/itunes/ITunesPlaylistEntry.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@
package listfix.model.playlists.itunes;

import java.io.File;
import java.net.URI;

import listfix.model.playlists.PlaylistEntry;

import org.apache.log4j.Logger;

/**
Expand All @@ -40,6 +43,12 @@ public ITunesPlaylistEntry(File input, String title, long length, File list, ITu
super(input, title, length, list);
_track = track;
}

public ITunesPlaylistEntry(URI input, ITunesTrack track)
{
super(input, "");
_track = track;
}

private ITunesPlaylistEntry(ITunesPlaylistEntry toClone)
{
Expand All @@ -62,11 +71,6 @@ public ITunesTrack getTrack()
@Override
public Object clone()
{
ITunesPlaylistEntry result = null;
if (!this.isURL())
{
result = new ITunesPlaylistEntry(this);
}
return result;
return new ITunesPlaylistEntry(this);
}
}
10 changes: 9 additions & 1 deletion src/listfix/model/playlists/itunes/ITunesTrack.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@
*/
public class ITunesTrack
{
private Dict _trackDict;
private final Dict _trackDict;

public static final String FILE = "File";
public static final String URL = "URL";

/**
* Constructor that takes a christophedelory.plist.Dict object.
Expand Down Expand Up @@ -86,6 +89,11 @@ public String getAlbumArtist()
{
return DictionaryParser.getKeyValueAsString(_trackDict, "Album Artist");
}

public String getTrackType()
{
return DictionaryParser.getKeyValueAsString(_trackDict, "Track Type");
}

/**
* @return the _duration
Expand Down
12 changes: 6 additions & 6 deletions src/listfix/view/GUIScreen.form
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@
<MenuItem class="javax.swing.JMenuItem" name="_miDeletePlaylist">
<Properties>
<Property name="mnemonic" type="int" value="68"/>
<Property name="text" type="java.lang.String" value="Delete Select Playlists"/>
<Property name="toolTipText" type="java.lang.String" value="Delete Select Playlists"/>
<Property name="text" type="java.lang.String" value="Delete Selected"/>
<Property name="toolTipText" type="java.lang.String" value="Delete Selected Folders &amp; Playlists"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="_miDeletePlaylistActionPerformed"/>
Expand Down Expand Up @@ -171,7 +171,7 @@
<Connection type="value" value="&apos;S&apos;" valueType="int"/>
</Property>
<Property name="text" type="java.lang.String" value="Save All"/>
<Property name="toolTipText" type="java.lang.String" value=""/>
<Property name="toolTipText" type="java.lang.String" value="Save All Open Playlists"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="_saveAllMenuItemActionPerformed"/>
Expand Down Expand Up @@ -237,7 +237,7 @@
</Property>
<Property name="mnemonic" type="int" value="112"/>
<Property name="text" type="java.lang.String" value="Options..."/>
<Property name="toolTipText" type="java.lang.String" value=""/>
<Property name="toolTipText" type="java.lang.String" value="Opens the Options Screen"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="_appOptionsMenuItemActionPerformed"/>
Expand Down Expand Up @@ -564,7 +564,7 @@
<Component class="javax.swing.JButton" name="_refreshMediaDirsButton">
<Properties>
<Property name="text" type="java.lang.String" value="Refresh"/>
<Property name="toolTipText" type="java.lang.String" value="The contents of your media library are cached, refresh to pickup changes"/>
<Property name="toolTipText" type="java.lang.String" value="The contents of your media library are cached; refresh to pickup changes"/>
<Property name="focusable" type="boolean" value="false"/>
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
<Insets value="[2, 8, 2, 8]"/>
Expand Down Expand Up @@ -702,7 +702,7 @@
<Component class="javax.swing.JButton" name="_btnSetPlaylistsDir">
<Properties>
<Property name="text" type="java.lang.String" value="Set"/>
<Property name="toolTipText" type="java.lang.String" value="Choose a folder (recursively searched for playlists to be shown here)"/>
<Property name="toolTipText" type="java.lang.String" value="Opens the options screen where you can set your playlists directory "/>
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
<Insets value="[2, 8, 2, 8]"/>
</Property>
Expand Down
62 changes: 50 additions & 12 deletions src/listfix/view/GUIScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
import javax.swing.event.TreeModelListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.filechooser.FileFilter;
import javax.swing.plaf.FontUIResource;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
Expand Down Expand Up @@ -844,8 +845,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt)
_playlistTreeRightClickMenu.add(_miClosestMatchesSearch);

_miDeletePlaylist.setMnemonic('D');
_miDeletePlaylist.setText("Delete Select Playlists");
_miDeletePlaylist.setToolTipText("Delete Select Playlists");
_miDeletePlaylist.setText("Delete Selected");
_miDeletePlaylist.setToolTipText("Delete Selected Folders & Playlists");
_miDeletePlaylist.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
Expand Down Expand Up @@ -946,7 +947,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt)
_mediaLibraryButtonPanel.add(_removeMediaDirButton);

_refreshMediaDirsButton.setText("Refresh");
_refreshMediaDirsButton.setToolTipText("The contents of your media library are cached, refresh to pickup changes");
_refreshMediaDirsButton.setToolTipText("The contents of your media library are cached; refresh to pickup changes");
_refreshMediaDirsButton.setFocusable(false);
_refreshMediaDirsButton.setMargin(new java.awt.Insets(2, 8, 2, 8));
_refreshMediaDirsButton.setMinimumSize(new java.awt.Dimension(71, 25));
Expand Down Expand Up @@ -1002,7 +1003,7 @@ public void keyPressed(java.awt.event.KeyEvent evt)
_playlistsDirectoryButtonPanel.setName(""); // NOI18N

_btnSetPlaylistsDir.setText("Set");
_btnSetPlaylistsDir.setToolTipText("Choose a folder (recursively searched for playlists to be shown here)");
_btnSetPlaylistsDir.setToolTipText("Opens the options screen where you can set your playlists directory ");
_btnSetPlaylistsDir.setMargin(new java.awt.Insets(2, 8, 2, 8));
_btnSetPlaylistsDir.addActionListener(new java.awt.event.ActionListener()
{
Expand Down Expand Up @@ -1225,7 +1226,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt)
_saveAllMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
_saveAllMenuItem.setMnemonic('S');
_saveAllMenuItem.setText("Save All");
_saveAllMenuItem.setToolTipText("");
_saveAllMenuItem.setToolTipText("Save All Open Playlists");
_saveAllMenuItem.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
Expand Down Expand Up @@ -1284,7 +1285,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt)
_appOptionsMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.ALT_MASK));
_appOptionsMenuItem.setMnemonic('p');
_appOptionsMenuItem.setText("Options...");
_appOptionsMenuItem.setToolTipText("");
_appOptionsMenuItem.setToolTipText("Opens the Options Screen");
_appOptionsMenuItem.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
Expand Down Expand Up @@ -1626,7 +1627,7 @@ private void _saveAsMenuItemActionPerformed(java.awt.event.ActionEvent evt)//GEN
return;
}

handleSavePlaylistAs(_currentPlaylist);
handleSaveAs(_currentPlaylist);
}//GEN-LAST:event__saveAsMenuItemActionPerformed

private void openIconButtonActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_openIconButtonActionPerformed
Expand Down Expand Up @@ -1984,7 +1985,7 @@ private void handlePlaylistSave(final Playlist list) throws HeadlessException
{
if (list.isNew())
{
handleSavePlaylistAs(list);
handleSaveAs(list);
}
else
{
Expand All @@ -2001,7 +2002,8 @@ protected Void doInBackground() throws Exception
return null;
}
};
ProgressDialog pd = new ProgressDialog(this, true, worker, "Saving...", false, false);
ProgressDialog pd = new ProgressDialog(this, true, worker, "Saving...", list.getType() == PlaylistType.ITUNES || list.getType() == PlaylistType.XSPF, false);
pd.setMessage("Please wait while your playlist is saved to disk.");
pd.setVisible(true);
worker.get();
}
Expand All @@ -2015,11 +2017,39 @@ protected Void doInBackground() throws Exception
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
}
}

private FileFilter getFileFilterForPlaylist(Playlist list)
{
switch(list.getType())
{
case ITUNES:
return new ExtensionFilter("xml", "iTunes Playlist (*.xml)");
case M3U:
if (list.isUtfFormat() || list.getFile().getPath().endsWith("8"))
{
return new ExtensionFilter("m3u8", "M3U8 Playlist (*.m3u8)");
}
else
{
return new ExtensionFilter("m3u", "M3U Playlist (*.m3u)");
}
case PLS:
return new ExtensionFilter("pls", "PLS Playlist (*.pls)");
case WPL:
return new ExtensionFilter("wpl", "WPL Playlist (*.wpl)");
case XSPF:
return new ExtensionFilter("xspf", "XSPF Playlist (*.xspf)");
case UNKNOWN:
return new ExtensionFilter("m3u8", "M3U8 Playlist (*.m3u8)");
}
return new ExtensionFilter("m3u8", "M3U8 Playlist (*.m3u8)");
}

private boolean handleSavePlaylistAs(Playlist list)
private boolean handleSaveAs(Playlist list)
{
_jSaveFileChooser.setSelectedFile(list.getFile());
_jSaveFileChooser.setFileFilter(getFileFilterForPlaylist(list));
int rc = _jSaveFileChooser.showSaveDialog(this);
if (rc == JFileChooser.APPROVE_OPTION)
{
Expand All @@ -2041,6 +2071,12 @@ private boolean handleSavePlaylistAs(Playlist list)

String extension = ((ExtensionFilter) _jSaveFileChooser.getFileFilter()).getExtension();

if (list.getType() != PlaylistType.ITUNES && extension.equals("xml"))
{
JOptionPane.showMessageDialog(this, new JTransparentTextArea("listFix() can only save iTunes playlists as iTunes XML files. Please save to M3U or M3U8, which can be imported directly into iTunes."));
return false;
}

// make sure file has correct extension
String normalizedName = playlist.getName().trim().toLowerCase();
if (!Playlist.isPlaylist(playlist) || (!normalizedName.endsWith(extension)))
Expand All @@ -2067,7 +2103,9 @@ protected Void doInBackground() throws Exception
return null;
}
};
ProgressDialog pd = new ProgressDialog(this, true, worker, "Saving...", false, false);

ProgressDialog pd = new ProgressDialog(this, true, worker, "Saving...", list.getType() == PlaylistType.ITUNES || list.getType() == PlaylistType.XSPF, false);
pd.setMessage("Please wait while your playlist is saved to disk.");
pd.setVisible(true);

worker.get();
Expand Down Expand Up @@ -2347,7 +2385,7 @@ protected Boolean doInBackground() throws Exception
}
else if (rc == 1)
{
return handleSavePlaylistAs(list);
return handleSaveAs(list);
}
else if (rc == 2)
{
Expand Down
Loading

0 comments on commit c1d9ae5

Please sign in to comment.