Index: programinfo.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/programinfo.cpp,v
retrieving revision 1.201
diff -u -r1.201 programinfo.cpp
--- programinfo.cpp	23 Mar 2005 07:18:51 -0000	1.201
+++ programinfo.cpp	29 Mar 2005 02:47:22 -0000
@@ -1098,13 +1098,32 @@
 {
     MSqlQuery query(MSqlQuery::InitCon());
 
-    query.prepare("UPDATE recorded"
-                  " SET bookmark = :BOOKMARK"
-                  " WHERE chanid = :CHANID"
-                  " AND starttime = :STARTTIME ;");
-    query.bindValue(":CHANID", chanid);
-    query.bindValue(":STARTTIME", recstartts.toString("yyyyMMddhhmm00"));
-    
+    // When using mythtv to play files not recorded by myth the title is empty
+    // so bookmark is saved to videobookmarks rather than recorded
+    if (title.isEmpty()) 
+    {
+        //delete any existing bookmark for this file
+        query.prepare("DELETE from videobookmarks"                      
+                      " WHERE filename = :FILENAME ;");                   
+        query.bindValue(":FILENAME", pathname);        
+        if (!query.exec() || !query.isActive())
+        MythContext::DBError("Save position update",
+                             query);
+        //insert new bookmark
+        query.prepare("INSERT into videobookmarks (filename, bookmark)"
+                      "VALUES (:FILENAME , :BOOKMARK);");
+        query.bindValue(":FILENAME", pathname);                                    
+    }
+    else
+    {
+        query.prepare("UPDATE recorded"
+                    " SET bookmark = :BOOKMARK"
+                    " WHERE chanid = :CHANID"
+                    " AND starttime = :STARTTIME ;");
+        query.bindValue(":CHANID", chanid);
+        query.bindValue(":STARTTIME", recstartts.toString("yyyyMMddhhmm00"));
+    }
+        
     if (pos > 0)
     {
         char posstr[128];
@@ -1126,13 +1145,23 @@
 
     if (ignoreBookmark)
         return pos;
- 
-    query.prepare("SELECT bookmark FROM recorded"
-                  " WHERE chanid = :CHANID"
-                  " AND starttime = :STARTTIME ;");
-    query.bindValue(":CHANID", chanid);
-    query.bindValue(":STARTTIME", recstartts.toString("yyyyMMddhhmm00"));
-
+    
+    // When using mythtv to play files not recorded by myth the title is empty
+    // so bookmark comes from videobookmarks rather than recorded
+    if (title.isEmpty()) 
+    {
+        query.prepare("SELECT bookmark FROM videobookmarks"
+                      " WHERE filename = :FILENAME;");                  
+        query.bindValue(":FILENAME", pathname);        
+    } 
+    else 
+    {
+        query.prepare("SELECT bookmark FROM recorded"
+                    " WHERE chanid = :CHANID"
+                    " AND starttime = :STARTTIME ;");
+        query.bindValue(":CHANID", chanid);
+        query.bindValue(":STARTTIME", recstartts.toString("yyyyMMddhhmm00"));
+    }
     if (query.exec() && query.isActive() && query.size() > 0)
     {
         query.next();
Index: dbcheck.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/dbcheck.cpp,v
retrieving revision 1.93
diff -u -r1.93 dbcheck.cpp
--- dbcheck.cpp	23 Mar 2005 06:39:07 -0000	1.93
+++ dbcheck.cpp	29 Mar 2005 02:47:29 -0000
@@ -1560,6 +1560,18 @@
             return false;
     }
 
+    if (dbver == "1076")
+    {
+        const QString updates[] = {
+"CREATE TABLE IF NOT EXISTS videobookmarks ("
+"  filename varchar(255) NOT NULL,"
+"  bookmark varchar(128) default NULL,"
+"  PRIMARY KEY (filename)"
+");"
+};
+        if (!performActualUpdate(updates, "1077", dbver))
+            return false;
+    }
     return true;
 }
 
@@ -2003,6 +2015,11 @@
 "  PRIMARY KEY  (sourceid),"
 "  UNIQUE KEY name (name)"
 ");",
+"CREATE TABLE IF NOT EXISTS videobookmarks ("
+"  filename varchar(255) NOT NULL,"
+"  bookmark varchar(128) default NULL,"
+"  PRIMARY KEY (filename)"
+");",
 "INSERT INTO profilegroups SET name = 'Software Encoders (v4l based)', cardtype = 'V4L', is_default = 1;",
 "INSERT INTO profilegroups SET name = 'MPEG-2 Encoders (PVR-250, PVR-350)', cardtype = 'MPEG', is_default = 1;",
 "INSERT INTO profilegroups SET name = 'Hardware MJPEG Encoders (Matrox G200-TV, Miro DC10, etc)', cardtype = 'MJPEG', is_default = 1;",
