diff options
author | Max Kellermann <max@duempel.org> | 2014-01-23 23:30:12 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-01-23 23:30:12 +0100 |
commit | f1f19841bdd291c055f59b6603f69278c66366d8 (patch) | |
tree | 96d674b367234c966df4055686566354a0852072 /src/PlaylistSong.cxx | |
parent | 655ad344140ee250f8becf67544dbe035a3460b1 (diff) | |
download | mpd-f1f19841bdd291c055f59b6603f69278c66366d8.tar.gz mpd-f1f19841bdd291c055f59b6603f69278c66366d8.tar.xz mpd-f1f19841bdd291c055f59b6603f69278c66366d8.zip |
playlist/*: move to playlist/plugins/
Diffstat (limited to 'src/PlaylistSong.cxx')
-rw-r--r-- | src/PlaylistSong.cxx | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/src/PlaylistSong.cxx b/src/PlaylistSong.cxx deleted file mode 100644 index bcbdc30be..000000000 --- a/src/PlaylistSong.cxx +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2003-2014 The Music Player Daemon Project - * http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "config.h" -#include "PlaylistSong.hxx" -#include "Mapper.hxx" -#include "DatabaseSong.hxx" -#include "ls.hxx" -#include "tag/Tag.hxx" -#include "tag/TagBuilder.hxx" -#include "fs/AllocatedPath.hxx" -#include "fs/Traits.hxx" -#include "util/UriUtil.hxx" -#include "util/Error.hxx" -#include "DetachedSong.hxx" - -#include <assert.h> -#include <string.h> - -static void -merge_song_metadata(DetachedSong &add, const DetachedSong &base) -{ - { - TagBuilder builder(add.GetTag()); - builder.Complement(base.GetTag()); - add.SetTag(builder.Commit()); - } - - add.SetLastModified(base.GetLastModified()); -} - -static void -apply_song_metadata(DetachedSong &dest, const DetachedSong &src) -{ - if (!src.GetTag().IsDefined() && - src.GetStartMS() == 0 && src.GetEndMS() == 0) - return; - - merge_song_metadata(dest, src); - - if (dest.GetTag().IsDefined() && dest.GetTag().time > 0 && - src.GetStartMS() > 0 && src.GetEndMS() == 0 && - src.GetStartMS() / 1000 < (unsigned)dest.GetTag().time) - /* the range is open-ended, and the playlist plugin - did not know the total length of the song file - (e.g. last track on a CUE file); fix it up here */ - dest.WritableTag().time = - dest.GetTag().time - src.GetStartMS() / 1000; -} - -static bool -playlist_check_load_song(DetachedSong &song) -{ - const char *const uri = song.GetURI(); - - if (uri_has_scheme(uri)) { - return true; - } else if (PathTraitsUTF8::IsAbsolute(uri)) { - DetachedSong tmp(uri); - if (!tmp.Update()) - return false; - - apply_song_metadata(song, tmp); - return true; - } else { - DetachedSong *tmp = DatabaseDetachSong(uri, IgnoreError()); - if (tmp == nullptr) - return false; - - apply_song_metadata(song, *tmp); - delete tmp; - return true; - } -} - -bool -playlist_check_translate_song(DetachedSong &song, const char *base_uri, - bool secure) -{ - const char *const uri = song.GetURI(); - - if (uri_has_scheme(uri)) - /* valid remote song? */ - return uri_supported_scheme(uri); - - if (base_uri != nullptr && strcmp(base_uri, ".") == 0) - /* PathTraitsUTF8::GetParent() returns "." when there - is no directory name in the given path; clear that - now, because it would break the database lookup - functions */ - base_uri = nullptr; - - if (PathTraitsUTF8::IsAbsolute(uri)) { - /* XXX fs_charset vs utf8? */ - const char *suffix = map_to_relative_path(uri); - assert(suffix != nullptr); - - if (suffix != uri) - song.SetURI(std::string(suffix)); - else if (!secure) - /* local files must be relative to the music - directory when "secure" is enabled */ - return false; - - base_uri = nullptr; - } - - if (base_uri != nullptr) { - song.SetURI(PathTraitsUTF8::Build(base_uri, uri)); - /* repeat the above checks */ - return playlist_check_translate_song(song, nullptr, secure); - } - - return playlist_check_load_song(song); -} |