Ticket #1315: bookmark_cutlist_move.diff

File bookmark_cutlist_move.diff, 11.9 KB (added by stuart@…, 14 years ago)
  • libs/libmythtv/dbcheck.cpp

     
    1010#include "mythdbcon.h"
    1111
    1212/// This is the DB schema version expected by the running MythTV instance.
    13 const QString currentDatabaseVersion = "1124";
     13const QString currentDatabaseVersion = "1125";
    1414
    1515static bool UpdateDBVersionNumber(const QString &newnumber);
    1616static bool performActualUpdate(const QString updates[], QString version,
     
    20162016            return false;
    20172017    }
    20182018
     2019    if (dbver == "1124")
     2020    {
     2021
     2022        MSqlQuery query(MSqlQuery::InitCon());
     2023        query.prepare("SELECT chanid, startime, cutlist FROM recorded"
     2024        " WHERE LENGTH(cutlist) > 1;");
     2025        if (query.exec() && query.isActive() && query.size() > 0)
     2026        {
     2027            MSqlQuery insert(MSqlQuery::InitCon());
     2028            while (query.next())
     2029            {
     2030                QString cutlist = query.value(2).toString();
     2031
     2032                QStringList strlist = QStringList::split("\n", cutlist);
     2033                QStringList::Iterator i;
     2034                for (i = strlist.begin(); i != strlist.end(); ++i)
     2035                {
     2036                    long long start = 0, end = 0;
     2037                    if (sscanf((*i).ascii(), "%lld - %lld", &start, &end) == 2)
     2038                    {
     2039                        insert.prepare(QString(
     2040                        "INSERT INTO recordedmarkup (chanid, starttime,"
     2041                        "type, mark) VALUES (%1, %2, '1', %3);")
     2042                        .arg(query.value(0).toInt())
     2043                        .arg(query.value(1).toInt())
     2044                        .arg(start));
     2045                        insert.exec();
     2046
     2047                        insert.prepare(QString(
     2048                        "INSERT INTO recordedmarkup (chanid, starttime,"
     2049                        "type, mark) VALUES (%1, %2, '0', %3);")
     2050                        .arg(query.value(0).toInt())
     2051                        .arg(query.value(1).toInt())
     2052                        .arg(end));
     2053                        insert.exec();
     2054                    }
     2055                }
     2056            }
     2057        }
     2058
     2059        const QString updates[] = {
     2060"INSERT INTO recordedmarkup (chanid, starttime, type, mark) SELECT"
     2061" chanid, starttime, '2', bookmark FROM recorded;",
     2062"INSERT INTO filemarkup (filename, type, mark) SELECT filename,"
     2063" '2', bookmark FROM videobookmarks;",
     2064"ALTER TABLE recorded CHANGE cutlist"
     2065" `cutlist` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0'",
     2066"ALTER TABLE recorded CHANGE bookmark"
     2067" `bookmark` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0'",
     2068"ALTER TABLE recordedmarkup ADD COLUMN label"
     2069" VARCHAR(25) DEFAULT NULL",
     2070""
     2071};
     2072        if (!performActualUpdate(updates, "1125", dbver))
     2073            return false;
     2074    }
     2075
    20192076// Drop xvmc_buffer_settings table in 0.20
    20202077// Drop dvb_dmx_buf_size and dvb_pkt_buf_size columns of channel in 0.20
    20212078
  • libs/libmythtv/programinfo.cpp

     
    16511651 */
    16521652void ProgramInfo::SetBookmark(long long pos) const
    16531653{
    1654     MSqlQuery query(MSqlQuery::InitCon());
     1654    ClearMarkupMap(MARK_BOOKMARK);
     1655    frm_dir_map_t bookmarkmap;
     1656    bookmarkmap[pos] = MARK_BOOKMARK;
     1657    SetMarkupMap(bookmarkmap);
    16551658
    1656     // When using mythtv to play files not recorded by myth the title is empty
    1657     // so bookmark is saved to videobookmarks rather than recorded
    1658     if (isVideo)
     1659    if (!isVideo)
    16591660    {
    1660         //delete any existing bookmark for this file
    1661         query.prepare("DELETE from videobookmarks"                     
    1662                       " WHERE filename = :FILENAME ;");                   
    1663         query.bindValue(":FILENAME", pathname);       
    1664         if (!query.exec() || !query.isActive())
    1665         MythContext::DBError("Save position update",
    1666                              query);
    1667         //insert new bookmark
    1668         query.prepare("INSERT into videobookmarks (filename, bookmark)"
    1669                       "VALUES (:FILENAME , :BOOKMARK);");
    1670         query.bindValue(":FILENAME", pathname);                                   
    1671     }
    1672     else
    1673     {
     1661        MSqlQuery query(MSqlQuery::InitCon());
     1662   
     1663        // For the time being, note whether a bookmark
     1664        // exists in the recorded table
    16741665        query.prepare("UPDATE recorded"
    1675                     " SET bookmark = :BOOKMARK"
     1666                    " SET bookmark = :BOOKMARKFLAG"
    16761667                    " WHERE chanid = :CHANID"
    16771668                    " AND starttime = :STARTTIME ;");
     1669
     1670        if (pos == 0)
     1671            query.bindValue(":BOOKMARKFLAG", "0");
     1672        else
     1673            query.bindValue(":BOOKMARKFLAG", "1");
     1674
    16781675        query.bindValue(":CHANID", chanid);
    16791676        query.bindValue(":STARTTIME", recstartts);
    1680     }
    1681        
    1682     if (pos > 0)
    1683     {
    1684         char posstr[128];
    1685         sprintf(posstr, "%lld", pos);
    1686         query.bindValue(":BOOKMARK", posstr);
    1687     }
    1688     else
    1689         query.bindValue(":BOOKMARK", QString::null);
    1690    
    1691     if (!query.exec() || !query.isActive())
     1677        if (!query.exec() || !query.isActive())
    16921678        MythContext::DBError("Save position update",
    16931679                             query);
     1680    }
    16941681}
    16951682
    16961683/** \fn ProgramInfo::GetBookmark(void) const
     
    17041691 */
    17051692long long ProgramInfo::GetBookmark(void) const
    17061693{
    1707     MSqlQuery query(MSqlQuery::InitCon());
     1694    QMap<long long, int>::Iterator i;
    17081695    long long pos = 0;
    1709 
     1696   
    17101697    if (ignoreBookmark)
    17111698        return pos;
     1699
     1700    frm_dir_map_t bookmarkmap;
     1701    GetMarkupMap(bookmarkmap, MARK_BOOKMARK);
    17121702   
    1713     // When using mythtv to play files not recorded by myth the title is empty
    1714     // so bookmark comes from videobookmarks rather than recorded
    1715     if (isVideo)
    1716     {
    1717         query.prepare("SELECT bookmark FROM videobookmarks"
    1718                       " WHERE filename = :FILENAME;");                 
    1719         query.bindValue(":FILENAME", pathname);       
    1720     }
    1721     else
    1722     {
    1723         query.prepare("SELECT bookmark FROM recorded"
    1724                     " WHERE chanid = :CHANID"
    1725                     " AND starttime = :STARTTIME ;");
    1726         query.bindValue(":CHANID", chanid);
    1727         query.bindValue(":STARTTIME", recstartts);
    1728     }
    1729     if (query.exec() && query.isActive() && query.size() > 0)
    1730     {
    1731         query.next();
    1732         QString result = query.value(0).toString();
    1733         if (!result.isEmpty())
    1734             sscanf(result.ascii(), "%lld", &pos);
    1735     }
     1703    if (bookmarkmap.isEmpty())
     1704        return pos;
     1705
     1706    i = bookmarkmap.begin();
     1707    pos = i.key();
    17361708   
    17371709    return pos;
    17381710}
     
    20071979
    20081980void ProgramInfo::GetCutList(frm_dir_map_t &delMap) const
    20091981{
    2010 //    GetMarkupMap(delMap, db, MARK_CUT_START);
    2011 //    GetMarkupMap(delMap, db, MARK_CUT_END, true);
    2012 
    2013     delMap.clear();
    2014     MSqlQuery query(MSqlQuery::InitCon());
    2015 
    2016     query.prepare("SELECT cutlist FROM recorded"
    2017                   " WHERE chanid = :CHANID"
    2018                   " AND starttime = :STARTTIME ;");
    2019     query.bindValue(":CHANID", chanid);
    2020     query.bindValue(":STARTTIME", recstartts);
    2021 
    2022     if (query.exec() && query.isActive() && query.size() > 0)
    2023     {
    2024         query.next();
    2025 
    2026         QString cutlist = query.value(0).toString();
    2027 
    2028         if (cutlist.length() > 1)
    2029         {
    2030             QStringList strlist = QStringList::split("\n", cutlist);
    2031             QStringList::Iterator i;
    2032 
    2033             for (i = strlist.begin(); i != strlist.end(); ++i)
    2034             {
    2035                 long long start = 0, end = 0;
    2036                 if (sscanf((*i).ascii(), "%lld - %lld", &start, &end) != 2)
    2037                 {
    2038                     VERBOSE(VB_IMPORTANT,
    2039                             QString("Malformed cutlist list: %1").arg(*i));
    2040                 }
    2041                 else
    2042                 {
    2043                     delMap[start] = 1;
    2044                     delMap[end] = 0;
    2045                 }
    2046             }
    2047         }
    2048     }
     1982   GetMarkupMap(delMap, MARK_CUT_START);
     1983   GetMarkupMap(delMap, MARK_CUT_END, true);
    20491984}
    20501985
    20511986void ProgramInfo::SetCutList(frm_dir_map_t &delMap) const
    20521987{
    2053 //    ClearMarkupMap(db, MARK_CUT_START);
    2054 //    ClearMarkupMap(db, MARK_CUT_END);
    2055 //    SetMarkupMap(delMap, db);
     1988   ClearMarkupMap(MARK_CUT_START);
     1989   ClearMarkupMap(MARK_CUT_END);
     1990   SetMarkupMap(delMap);
    20561991
    2057     QString cutdata;
    2058     char tempc[256];
    2059 
    2060     QMap<long long, int>::Iterator i;
    2061 
    2062     for (i = delMap.begin(); i != delMap.end(); ++i)
     1992    if (!isVideo)
    20631993    {
    2064         long long frame = i.key();
    2065         int direction = i.data();
    2066 
    2067         if (direction == 1)
    2068         {
    2069             sprintf(tempc, "%lld - ", frame);
    2070             cutdata += tempc;
    2071         }
    2072         else if (direction == 0)
    2073         {
    2074             sprintf(tempc, "%lld\n", frame);
    2075             cutdata += tempc;
    2076         }
     1994        MSqlQuery query(MSqlQuery::InitCon());
     1995   
     1996        // Flag the existence of a cutlist
     1997        query.prepare("UPDATE recorded"
     1998                    " SET cutlist = :CUTLIST"
     1999                    " WHERE chanid = :CHANID"
     2000                    " AND starttime = :STARTTIME ;");
     2001   
     2002        if (delMap.isEmpty())
     2003            query.bindValue(":CUTLIST", "0");
     2004        else
     2005            query.bindValue(":CUTLIST", "1");
     2006   
     2007        query.bindValue(":CHANID", chanid);
     2008        query.bindValue(":STARTTIME", recstartts);
     2009        if (!query.exec() || !query.isActive())
     2010        MythContext::DBError("Save position update",
     2011                                query);
    20772012    }
    2078 
    2079     MSqlQuery query(MSqlQuery::InitCon());
    2080 
    2081     query.prepare("UPDATE recorded"
    2082                   " SET cutlist = :CUTLIST"
    2083                   " WHERE chanid = :CHANID"
    2084                   " AND starttime = :STARTTIME ;");
    2085     query.bindValue(":CUTLIST", cutdata);
    2086     query.bindValue(":CHANID", chanid);
    2087     query.bindValue(":STARTTIME", recstartts);
    2088 
    2089     if (!query.exec() || !query.isActive())
    2090         MythContext::DBError("cutlist update",
    2091                              query);
    20922013}
    20932014
    20942015void ProgramInfo::SetCommBreakList(frm_dir_map_t &frames) const
     
    34853406        query.next();
    34863407
    34873408        flags |= (query.value(0).toInt() == COMM_FLAG_DONE) ? FL_COMMFLAG : 0;
    3488         flags |= query.value(1).toString().length() > 1 ? FL_CUTLIST : 0;
    3489         flags |= query.value(2).toInt() ? FL_AUTOEXP : 0;
     3409        flags |= (query.value(1).toInt() == 1) ? FL_CUTLIST : 0;
     3410        flags |= (query.value(2).toInt() == 1) ? FL_AUTOEXP : 0;
    34903411        if ((query.value(3).toInt()) ||
    34913412            (query.value(0).toInt() == COMM_FLAG_PROCESSING))
    34923413            flags |= FL_EDITING;
    3493         flags |= query.value(4).toString().length() > 1 ? FL_BOOKMARK : 0;
     3414        flags |= (query.value(4).toInt() == 1) ? FL_BOOKMARK : 0;
    34943415        flags |= (query.value(5).toInt() == 1) ? FL_STEREO : 0;
    34953416        flags |= (query.value(6).toInt() == 1) ? FL_CC : 0;
    34963417        flags |= (query.value(7).toInt() == 1) ? FL_HDTV : 0;
  • programs/mythbackend/mainserver.cpp

     
    10461046            // Taken out of programinfo.cpp just to reduce the number of queries
    10471047            int flags = 0;
    10481048            flags |= (query.value(10).toInt() == 1) ? FL_COMMFLAG : 0;
    1049             flags |= query.value(11).toString().length() > 1 ? FL_CUTLIST : 0;
    1050             flags |= query.value(12).toInt() ? FL_AUTOEXP : 0;
    1051             flags |= query.value(14).toString().length() > 1 ? FL_BOOKMARK : 0;
     1049            flags |= (query.value(11).toInt() == 1) ? FL_CUTLIST : 0;
     1050            flags |= (query.value(12).toInt() == 1) ? FL_AUTOEXP : 0;
     1051            flags |= (query.value(14).toInt() == 1) ? FL_BOOKMARK : 0;
    10521052            flags |= (query.value(32).toInt() == 1) ? FL_STEREO : 0;
    10531053            flags |= (query.value(34).toInt() == 1) ? FL_CC : 0;
    10541054            flags |= (query.value(33).toInt() == 1) ? FL_HDTV : 0;