/*
* Copyright (c) 2008, 2009, 2010 Denis Tulskiy
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work. If not, see <http://www.gnu.org/licenses/>.
*/
package com.tulskiy.musique.playlist.formatting.tokens;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import com.tulskiy.musique.audio.player.Player;
import com.tulskiy.musique.images.Images;
import com.tulskiy.musique.playlist.Track;
import com.tulskiy.musique.system.Application;
import com.tulskiy.musique.util.Util;
/**
* Author: Denis Tulskiy
* Date: Feb 6, 2010
*/
@SuppressWarnings({"UnusedDeclaration"})
public class Methods {
private static ImageIcon playingIcon = Images.loadIcon("play.png");
private static ImageIcon pausedIcon = Images.loadIcon("pause.png");
private Application app = Application.getInstance();
public String if3(Track track, ArrayList<Expression> args) {
for (Expression t : args) {
String s = (String) t.eval(track);
if (notEmpty(s))
return s;
}
return null;
}
public String if1(Track track, ArrayList<Expression> args) {
if (args.size() != 3)
return null;
if (notEmpty((String) args.get(0).eval(track))) {
return (String) args.get(1).eval(track);
} else {
return (String) args.get(2).eval(track);
}
}
public String strcmp(Track track, ArrayList<Expression> args) {
if (args.size() != 2)
return null;
if (args.get(0).eval(track).equals(
args.get(1).eval(track)
))
return "1";
return null;
}
public String greater(Track track, ArrayList<Expression> args) {
if (args.size() != 2) {
return null;
}
try {
String sop1 = (String) args.get(0).eval(track);
String sop2 = (String) args.get(1).eval(track);
if (sop1 != null && sop2 != null) {
int op1 = Integer.valueOf(sop1);
int op2 = Integer.valueOf(sop2);
if (op1 > op2) return "1";
}
} catch (NumberFormatException ignored) {
}
return null;
}
public Object eval(Track track, ArrayList<Expression> args) {
if (args.size() == 1)
return args.get(0).eval(track);
StringBuilder sb = new StringBuilder();
for (Expression expression : args) {
String str = (String) expression.eval(track);
if (str != null)
sb.append(str);
}
if (sb.length() > 0)
return sb.toString();
else
return null;
}
private boolean notEmpty(String str) {
return str != null && str.length() > 0;
}
public String notNull(Track track, ArrayList<Expression> args) {
StringBuilder sb = new StringBuilder();
boolean notEmpty = false;
for (Expression expression : args) {
String str = (String) expression.eval(track);
if (!(expression instanceof TextExpression))
notEmpty |= notEmpty(str);
if (str != null)
sb.append(str);
}
if (notEmpty)
return sb.toString();
else
return "";
}
public Object isPlaying(Track track, ArrayList<Expression> args) {
if (track != null) {
if (app.getPlayer().getTrack() == track) {
if (app.getPlayer().isPaused())
return pausedIcon;
if (app.getPlayer().isPlaying())
return playingIcon;
} else if (track.getQueuePosition() != -1) {
return track.getQueuePosition();
}
}
return null;
}
public String playingTime(Track track, ArrayList<Expression> args) {
Player player = app.getPlayer();
if (player.isPlaying()) {
return Util.samplesToTime(player.getCurrentSample(), player.getTrack().getTrackData().getSampleRate(), 0);
} else {
return null;
}
}
public String combine(Track track, ArrayList<Expression> args) {
if (args.size() != 2) {
return null;
}
Object tagFieldValues = args.get(0).eval(track);
String separator = (String) args.get(1).eval(track);
return Util.formatFieldValues(tagFieldValues, separator);
}
public String escape(Track track, ArrayList<Expression> args) {
Object eval = args.get(0).eval(track);
if (eval != null)
return eval.toString().replaceAll("[\\\\/|:*?<>\"]", "_");
else
return null;
}
}