diff options
author | wr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b> | 2005-02-24 07:53:11 +0000 |
---|---|---|
committer | wr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b> | 2005-02-24 07:53:11 +0000 |
commit | 8a51780b2992357ca083eaebd28269acc359d047 (patch) | |
tree | f93d8aac60b8360bcc7dba53b5c2d09c9f802eb6 | |
parent | 6803edea96fdf8be567bb1b860f1e744a1292b68 (diff) | |
download | vdr-plugin-muggle-8a51780b2992357ca083eaebd28269acc359d047.tar.gz vdr-plugin-muggle-8a51780b2992357ca083eaebd28269acc359d047.tar.bz2 |
make playlist additions work for multi users
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/branches/0.1.3-wr@510 e10066b5-e1e2-0310-b819-94efdf66514b
-rw-r--r-- | mg_db.c | 34 | ||||
-rw-r--r-- | mg_order.c | 2 | ||||
-rw-r--r-- | mg_order.h | 2 |
3 files changed, 25 insertions, 13 deletions
@@ -330,20 +330,32 @@ mgSelection::AddToCollection (const string Name) CreateCollection(Name); string listid = sql_string (get_col0 ("SELECT id FROM playlist WHERE title=" + sql_string (Name))); - string tmp = - get_col0 ("SELECT MAX(tracknumber) FROM playlistitem WHERE playlist=" + - listid); - int high; - if (tmp == "NULL") - high = 0; - else - high = atol (tmp.c_str ()); unsigned int tracksize = getNumTracks (); + + // this code is rather complicated but works in a multi user + // environment: + + // insert a unique trackid: + string trackid = ltos(mysql_thread_id(m_db)+1000000); + exec_sql("INSERT INTO playlistitem SELECT "+listid+"," + "MAX(tracknumber)+"+ltos(tracksize)+","+trackid+ + " FROM playlistitem WHERE playlist="+listid); + + // find tracknumber of the trackid we just inserted: + string sql = string("SELECT tracknumber FROM playlistitem WHERE " + "playlist=")+listid+" AND trackid="+trackid; + long first = atol(get_col0(sql).c_str()) - tracksize + 1; + + // replace the place holder trackid by the correct value: + exec_sql("UPDATE playlistitem SET trackid="+ltos(m_tracks[tracksize-1].getId())+ + " WHERE playlist="+listid+" AND trackid="+trackid); + + // insert all other tracks: const char *sql_prefix = "INSERT INTO playlistitem VALUES "; - string sql = ""; - for (unsigned int i = 0; i < tracksize; i++) + sql = ""; + for (unsigned int i = 0; i < tracksize-1; i++) { - string item = "(" + listid + "," + ltos (high + 1 + i) + "," + + string item = "(" + listid + "," + ltos (first + i) + "," + ltos (m_tracks[i].getId ()) + ")"; comma(sql, item); if ((i%100)==99) @@ -100,7 +100,7 @@ get_col0(MYSQL *db, string query) return result; } -int +long exec_count(MYSQL *db, string query) { return atol (get_col0 (db, query).c_str ()); @@ -132,7 +132,7 @@ sql_string (MYSQL *db, const string s); MYSQL_RES * exec_sql (MYSQL *db,string query); string get_col0 (MYSQL *db,string query); -int exec_count (MYSQL *db,string query); +long exec_count (MYSQL *db,string query); //! \brief converts long to string string itos (int i); |