diff options
-rw-r--r-- | Makefile.am | 4 | ||||
-rw-r--r-- | src/DatabasePrint.cxx | 8 | ||||
-rw-r--r-- | src/DatabaseVisitor.hxx | 4 | ||||
-rw-r--r-- | src/Directory.cxx | 2 | ||||
-rw-r--r-- | src/PlaylistDatabase.cxx | 9 | ||||
-rw-r--r-- | src/PlaylistInfo.cxx | 46 | ||||
-rw-r--r-- | src/PlaylistInfo.hxx | 17 | ||||
-rw-r--r-- | src/PlaylistVector.cxx | 30 | ||||
-rw-r--r-- | src/PlaylistVector.hxx | 8 | ||||
-rw-r--r-- | src/UpdateWalk.cxx | 13 | ||||
-rw-r--r-- | src/db/ProxyDatabasePlugin.cxx | 10 | ||||
-rw-r--r-- | test/DumpDatabase.cxx | 4 |
12 files changed, 53 insertions, 102 deletions
diff --git a/Makefile.am b/Makefile.am index 28d39cfe7..c5379a31e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -303,7 +303,7 @@ src_mpd_SOURCES = \ src/PlaylistState.cxx src/PlaylistState.hxx \ src/PlaylistQueue.cxx src/PlaylistQueue.hxx \ src/PlaylistVector.cxx src/PlaylistVector.hxx \ - src/PlaylistInfo.cxx src/PlaylistInfo.hxx \ + src/PlaylistInfo.hxx \ src/PlaylistDatabase.cxx \ src/queue.c \ src/QueuePrint.cxx src/QueuePrint.hxx \ @@ -1072,7 +1072,7 @@ test_DumpDatabase_SOURCES = test/DumpDatabase.cxx \ src/DatabaseRegistry.cxx \ src/DatabaseSelection.cxx \ src/Directory.cxx src/DirectorySave.cxx \ - src/PlaylistVector.cxx src/PlaylistInfo.cxx src/PlaylistDatabase.cxx \ + src/PlaylistVector.cxx src/PlaylistDatabase.cxx \ src/DatabaseLock.cxx src/DatabaseSave.cxx \ src/Song.cxx src/song_sort.c src/SongSave.cxx \ src/tag.c src/tag_pool.c src/TagSave.cxx \ diff --git a/src/DatabasePrint.cxx b/src/DatabasePrint.cxx index 87e41be8e..1e2842091 100644 --- a/src/DatabasePrint.cxx +++ b/src/DatabasePrint.cxx @@ -91,19 +91,19 @@ PrintSongFull(struct client *client, song &song) static bool PrintPlaylistBrief(struct client *client, - const playlist_metadata &playlist, + const PlaylistInfo &playlist, const directory &directory) { - print_playlist_in_directory(client, directory, playlist.name); + print_playlist_in_directory(client, directory, playlist.name.c_str()); return true; } static bool PrintPlaylistFull(struct client *client, - const playlist_metadata &playlist, + const PlaylistInfo &playlist, const directory &directory) { - print_playlist_in_directory(client, directory, playlist.name); + print_playlist_in_directory(client, directory, playlist.name.c_str()); if (playlist.mtime > 0) time_print(client, "Last-Modified", playlist.mtime); diff --git a/src/DatabaseVisitor.hxx b/src/DatabaseVisitor.hxx index 10f907cef..c10deae19 100644 --- a/src/DatabaseVisitor.hxx +++ b/src/DatabaseVisitor.hxx @@ -26,11 +26,11 @@ struct directory; struct song; -struct playlist_metadata; +struct PlaylistInfo; typedef std::function<bool(const directory &, GError **)> VisitDirectory; typedef std::function<bool(struct song &, GError **)> VisitSong; -typedef std::function<bool(const playlist_metadata &, const directory &, +typedef std::function<bool(const PlaylistInfo &, const directory &, GError **)> VisitPlaylist; typedef std::function<bool(const char *, GError **)> VisitString; diff --git a/src/Directory.cxx b/src/Directory.cxx index 59859a0fd..84545e54f 100644 --- a/src/Directory.cxx +++ b/src/Directory.cxx @@ -307,7 +307,7 @@ directory::Walk(bool recursive, const SongFilter *filter, } if (visit_playlist) { - struct playlist_metadata *i; + PlaylistInfo *i; directory_for_each_playlist(i, this) if (!visit_playlist(*i, *this, error_r)) return false; diff --git a/src/PlaylistDatabase.cxx b/src/PlaylistDatabase.cxx index a2062a517..bbfdf7481 100644 --- a/src/PlaylistDatabase.cxx +++ b/src/PlaylistDatabase.cxx @@ -38,20 +38,19 @@ playlist_database_quark(void) void playlist_vector_save(FILE *fp, const struct list_head *pv) { - struct playlist_metadata *pm; + PlaylistInfo *pm; playlist_vector_for_each(pm, pv) fprintf(fp, PLAYLIST_META_BEGIN "%s\n" "mtime: %li\n" "playlist_end\n", - pm->name, (long)pm->mtime); + pm->name.c_str(), (long)pm->mtime); } bool playlist_metadata_load(FILE *fp, struct list_head *pv, const char *name, GString *buffer, GError **error_r) { - struct playlist_metadata pm; - pm.mtime = 0; + PlaylistInfo pm(name, 0); char *line, *colon; const char *value; @@ -77,6 +76,6 @@ playlist_metadata_load(FILE *fp, struct list_head *pv, const char *name, } } - playlist_vector_update_or_add(pv, name, pm.mtime); + playlist_vector_update_or_add(pv, std::move(pm)); return true; } diff --git a/src/PlaylistInfo.cxx b/src/PlaylistInfo.cxx deleted file mode 100644 index 392178795..000000000 --- a/src/PlaylistInfo.cxx +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2003-2013 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 "PlaylistInfo.hxx" - -#include <glib.h> - -#include <assert.h> - -struct playlist_metadata * -playlist_metadata_new(const char *name, time_t mtime) -{ - assert(name != NULL); - - struct playlist_metadata *pm = g_slice_new(struct playlist_metadata); - pm->name = g_strdup(name); - pm->mtime = mtime; - return pm; -} - -void -playlist_metadata_free(struct playlist_metadata *pm) -{ - assert(pm != NULL); - assert(pm->name != NULL); - - g_free(pm->name); - g_slice_free(struct playlist_metadata, pm); -} diff --git a/src/PlaylistInfo.hxx b/src/PlaylistInfo.hxx index 2d21178ed..fffafd819 100644 --- a/src/PlaylistInfo.hxx +++ b/src/PlaylistInfo.hxx @@ -23,26 +23,29 @@ #include "check.h" #include "util/list.h" +#include <string> + #include <sys/time.h> /** * A directory entry pointing to a playlist file. */ -struct playlist_metadata { +struct PlaylistInfo { struct list_head siblings; /** * The UTF-8 encoded name of the playlist file. */ - char *name; + std::string name; time_t mtime; -}; -struct playlist_metadata * -playlist_metadata_new(const char *name, time_t mtime); + template<typename N> + PlaylistInfo(N &&_name, time_t _mtime) + :name(std::forward<N>(_name)), mtime(_mtime) {} -void -playlist_metadata_free(struct playlist_metadata *pm); + PlaylistInfo(const PlaylistInfo &other) = delete; + PlaylistInfo(PlaylistInfo &&) = default; +}; #endif diff --git a/src/PlaylistVector.cxx b/src/PlaylistVector.cxx index 726a69337..f1f13567f 100644 --- a/src/PlaylistVector.cxx +++ b/src/PlaylistVector.cxx @@ -30,50 +30,48 @@ playlist_vector_deinit(struct list_head *pv) { assert(pv != NULL); - struct playlist_metadata *pm, *n; + PlaylistInfo *pm, *n; playlist_vector_for_each_safe(pm, n, pv) - playlist_metadata_free(pm); + delete pm; } -struct playlist_metadata * +PlaylistInfo * playlist_vector_find(struct list_head *pv, const char *name) { assert(holding_db_lock()); assert(pv != NULL); assert(name != NULL); - struct playlist_metadata *pm; + PlaylistInfo *pm; playlist_vector_for_each(pm, pv) - if (strcmp(pm->name, name) == 0) + if (pm->name.compare(name) == 0) return pm; return NULL; } void -playlist_vector_add(struct list_head *pv, - const char *name, time_t mtime) +playlist_vector_add(struct list_head *pv, PlaylistInfo &&pi) { assert(holding_db_lock()); - struct playlist_metadata *pm = playlist_metadata_new(name, mtime); + PlaylistInfo *pm = new PlaylistInfo(std::move(pi)); list_add_tail(&pm->siblings, pv); } bool -playlist_vector_update_or_add(struct list_head *pv, - const char *name, time_t mtime) +playlist_vector_update_or_add(struct list_head *pv, PlaylistInfo &&pi) { assert(holding_db_lock()); - struct playlist_metadata *pm = playlist_vector_find(pv, name); + PlaylistInfo *pm = playlist_vector_find(pv, pi.name.c_str()); if (pm != NULL) { - if (mtime == pm->mtime) + if (pi.mtime == pm->mtime) return false; - pm->mtime = mtime; + pm->mtime = pi.mtime; } else - playlist_vector_add(pv, name, mtime); + playlist_vector_add(pv, std::move(pi)); return true; } @@ -83,11 +81,11 @@ playlist_vector_remove(struct list_head *pv, const char *name) { assert(holding_db_lock()); - struct playlist_metadata *pm = playlist_vector_find(pv, name); + PlaylistInfo *pm = playlist_vector_find(pv, name); if (pm == NULL) return false; list_del(&pm->siblings); - playlist_metadata_free(pm); + delete pm; return true; } diff --git a/src/PlaylistVector.hxx b/src/PlaylistVector.hxx index 30418131a..14445315c 100644 --- a/src/PlaylistVector.hxx +++ b/src/PlaylistVector.hxx @@ -37,15 +37,14 @@ playlist_vector_deinit(struct list_head *pv); /** * Caller must lock the #db_mutex. */ -struct playlist_metadata * +PlaylistInfo * playlist_vector_find(struct list_head *pv, const char *name); /** * Caller must lock the #db_mutex. */ void -playlist_vector_add(struct list_head *pv, - const char *name, time_t mtime); +playlist_vector_add(struct list_head *pv, PlaylistInfo &&pi); /** * Caller must lock the #db_mutex. @@ -53,8 +52,7 @@ playlist_vector_add(struct list_head *pv, * @return true if the vector or one of its items was modified */ bool -playlist_vector_update_or_add(struct list_head *pv, - const char *name, time_t mtime); +playlist_vector_update_or_add(struct list_head *pv, PlaylistInfo &&pi); /** * Caller must lock the #db_mutex. diff --git a/src/UpdateWalk.cxx b/src/UpdateWalk.cxx index 860342001..a34e0028d 100644 --- a/src/UpdateWalk.cxx +++ b/src/UpdateWalk.cxx @@ -159,11 +159,12 @@ purge_deleted_from_directory(struct directory *directory) g_free(path); } - struct playlist_metadata *pm, *np; + PlaylistInfo *pm, *np; directory_for_each_playlist_safe(pm, np, directory) { - if (!directory_child_is_regular(directory, pm->name)) { + if (!directory_child_is_regular(directory, pm->name.c_str())) { db_lock(); - playlist_vector_remove(&directory->playlists, pm->name); + playlist_vector_remove(&directory->playlists, + pm->name.c_str()); db_unlock(); } } @@ -214,9 +215,11 @@ update_playlist_file2(struct directory *directory, if (!playlist_suffix_supported(suffix)) return false; + PlaylistInfo pi(name, st->st_mtime); + db_lock(); - if (playlist_vector_update_or_add(&directory->playlists, name, - st->st_mtime)) + if (playlist_vector_update_or_add(&directory->playlists, + std::move(pi))) modified = true; db_unlock(); return true; diff --git a/src/db/ProxyDatabasePlugin.cxx b/src/db/ProxyDatabasePlugin.cxx index db8e56dda..01b36a6e3 100644 --- a/src/db/ProxyDatabasePlugin.cxx +++ b/src/db/ProxyDatabasePlugin.cxx @@ -314,14 +314,10 @@ Visit(const struct mpd_playlist *playlist, if (!visit_playlist) return true; - struct playlist_metadata p; - p.name = g_strdup(mpd_playlist_get_path(playlist)); - p.mtime = mpd_playlist_get_last_modified(playlist); + PlaylistInfo p(mpd_playlist_get_path(playlist), + mpd_playlist_get_last_modified(playlist)); - bool success = visit_playlist(p, detached_root, error_r); - g_free(p.name); - - return success; + return visit_playlist(p, detached_root, error_r); } class ProxyEntity { diff --git a/test/DumpDatabase.cxx b/test/DumpDatabase.cxx index f262a9808..fc42ba147 100644 --- a/test/DumpDatabase.cxx +++ b/test/DumpDatabase.cxx @@ -62,10 +62,10 @@ DumpSong(song &song, GError **) } static bool -DumpPlaylist(const playlist_metadata &playlist, +DumpPlaylist(const PlaylistInfo &playlist, const directory &directory, GError **) { - cout << "P " << directory.path << "/" << playlist.name << endl; + cout << "P " << directory.path << "/" << playlist.name.c_str() << endl; return true; } |