summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b>2005-02-24 07:53:11 +0000
committerwr61 <wr61@e10066b5-e1e2-0310-b819-94efdf66514b>2005-02-24 07:53:11 +0000
commit8a51780b2992357ca083eaebd28269acc359d047 (patch)
treef93d8aac60b8360bcc7dba53b5c2d09c9f802eb6
parent6803edea96fdf8be567bb1b860f1e744a1292b68 (diff)
downloadvdr-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.c34
-rw-r--r--mg_order.c2
-rw-r--r--mg_order.h2
3 files changed, 25 insertions, 13 deletions
diff --git a/mg_db.c b/mg_db.c
index d196b6c..e0227ec 100644
--- a/mg_db.c
+++ b/mg_db.c
@@ -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)
diff --git a/mg_order.c b/mg_order.c
index ced9df6..484aaf3 100644
--- a/mg_order.c
+++ b/mg_order.c
@@ -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 ());
diff --git a/mg_order.h b/mg_order.h
index 8b2fe38..aad9af3 100644
--- a/mg_order.h
+++ b/mg_order.h
@@ -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);