mirror of
https://github.com/playmusicexporter/playmusicexporter
synced 2024-05-14 12:46:42 +00:00
7502842cdd
Tidy up tag list dialog (missing \n in de) Include {playlist} in the separate tag list for the playlists.
198 lines
7.5 KiB
Java
198 lines
7.5 KiB
Java
/*
|
|
* Copyright (c) 2015 David Schulte
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
* THE SOFTWARE.
|
|
*/
|
|
|
|
package re.jcg.playmusicexporter.utils;
|
|
|
|
import android.text.TextUtils;
|
|
|
|
import de.arcus.framework.logger.Logger;
|
|
import de.arcus.playmusiclib.items.MusicTrack;
|
|
|
|
/**
|
|
* Helper class te create a path by a user defined structure
|
|
*/
|
|
public class MusicPathBuilder {
|
|
/**
|
|
* Hides the constructor
|
|
*/
|
|
private MusicPathBuilder() {}
|
|
|
|
/**
|
|
* Generates a path from a user defined patter
|
|
* @param musicTrack The music track data
|
|
* @param patter The patter
|
|
* @return Returns the file path
|
|
*/
|
|
public static String Build(MusicTrack musicTrack, String patter)
|
|
{
|
|
String path = "";
|
|
int pos = 0;
|
|
|
|
// While there is an open tag
|
|
while (patter.indexOf('{', pos) >= 0)
|
|
{
|
|
// Gets the start and the end of the tag
|
|
int posStart = patter.indexOf('{', pos);
|
|
int posEnd = patter.indexOf('}', posStart);
|
|
|
|
// Gets the equal sign
|
|
int posEqual = patter.indexOf('=', posStart);
|
|
|
|
// Adds the part between this tag and the last one to the path
|
|
path += patter.substring(pos, posStart);
|
|
|
|
if (posEnd >= 0) {
|
|
// Name of the tag
|
|
String name;
|
|
String value = "";
|
|
|
|
// There is an equal sign
|
|
if (posEqual >= 0 && posEqual < posEnd) {
|
|
name = patter.substring(posStart + 1, posEqual);
|
|
} else {
|
|
name = patter.substring(posStart + 1, posEnd);
|
|
}
|
|
|
|
// Trim and lower
|
|
name = name.trim().toLowerCase();
|
|
|
|
// Gets the values
|
|
switch (name) {
|
|
case "album-artist":
|
|
if (!TextUtils.isEmpty(musicTrack.getAlbumArtist()))
|
|
value = musicTrack.getAlbumArtist();
|
|
break;
|
|
case "album":
|
|
if (!TextUtils.isEmpty(musicTrack.getAlbum()))
|
|
value = musicTrack.getAlbum();
|
|
break;
|
|
case "playlist":
|
|
case "group": //previous name, for compatability
|
|
if (!TextUtils.isEmpty(musicTrack.getContainerName()))
|
|
value = musicTrack.getContainerName();
|
|
break;
|
|
case "artist":
|
|
if (!TextUtils.isEmpty(musicTrack.getArtist()))
|
|
value = musicTrack.getArtist();
|
|
break;
|
|
case "title":
|
|
if (!TextUtils.isEmpty(musicTrack.getTitle()))
|
|
value = musicTrack.getTitle();
|
|
break;
|
|
case "disc":
|
|
if (musicTrack.getDiscNumber() > 0)
|
|
value = String.valueOf(musicTrack.getDiscNumber());
|
|
break;
|
|
case "no":
|
|
if (musicTrack.getTrackNumber() > 0)
|
|
value = String.valueOf(musicTrack.getTrackNumber());
|
|
break;
|
|
case "group-no":
|
|
if (musicTrack.getContainerPosition() > 0)
|
|
value = String.valueOf(musicTrack.getContainerPosition());
|
|
break;
|
|
case "year":
|
|
if (!TextUtils.isEmpty(musicTrack.getYear()))
|
|
value = musicTrack.getYear();
|
|
break;
|
|
case "genre":
|
|
if (!TextUtils.isEmpty(musicTrack.getGenre()))
|
|
value = musicTrack.getGenre();
|
|
break;
|
|
default:
|
|
// Unknown tag
|
|
Logger.getInstance().logWarning("MusicPathBuilder", "Unknown tag '" + name + "'");
|
|
break;
|
|
}
|
|
|
|
// Equal sign exists
|
|
if (posEqual >= 0 && posEqual < posEnd && !TextUtils.isEmpty(value)) {
|
|
String format = patter.substring(posEqual + 1, posEnd);
|
|
|
|
// Gets the insert sign
|
|
int posInsertStart = format.indexOf('$');
|
|
if (posInsertStart >= 0) {
|
|
|
|
int posInsertEnd = posInsertStart + 1;
|
|
// Search the end
|
|
while(posInsertEnd < format.length() && format.charAt(posInsertEnd) == '$') {
|
|
posInsertEnd ++;
|
|
}
|
|
|
|
// Fill Zeros
|
|
while(value.length() < posInsertEnd - posInsertStart) {
|
|
value = "0" + value;
|
|
}
|
|
|
|
// Adds the rest of the format to the value
|
|
value = format.substring(0, posInsertStart) + value + format.substring(posInsertEnd);
|
|
|
|
} else {
|
|
// Missing insert sign
|
|
Logger.getInstance().logWarning("MusicPathBuilder", "Cloud not find replace symbol ('$') of format attribute in tag '" + name + "'");
|
|
}
|
|
}
|
|
|
|
// Adds the value
|
|
path += cleanFilename(value);
|
|
|
|
pos = posEnd + 1;
|
|
} else {
|
|
path += "{";
|
|
pos = posStart + 1;
|
|
Logger.getInstance().logWarning("MusicPathBuilder", "Cloud not find end symbol ('}') of the tag in patter '" + patter + "'");
|
|
}
|
|
}
|
|
|
|
// Insert end
|
|
path += patter.substring(pos, patter.length());
|
|
|
|
// Remove double slash
|
|
while(path.contains("//"))
|
|
path = path.replace("//", "/");
|
|
|
|
// Return path
|
|
return path;
|
|
}
|
|
|
|
/**
|
|
* Removes forbidden chars in the filename
|
|
* @param filename The filename
|
|
* @return Returns the new clean filename
|
|
*/
|
|
public static String cleanFilename(String filename)
|
|
{
|
|
// Forbidden chars
|
|
filename = filename.replace('\\', '-');
|
|
filename = filename.replace('/', '-');
|
|
filename = filename.replace(':', '-');
|
|
filename = filename.replace('*', '-');
|
|
filename = filename.replace('?', '-');
|
|
filename = filename.replace('"', '-');
|
|
filename = filename.replace('<', '-');
|
|
filename = filename.replace('>', '-');
|
|
filename = filename.replace('|', '-');
|
|
|
|
return filename;
|
|
}
|
|
}
|