Ticket #1315: bookmark_cutlist_move.diff
File bookmark_cutlist_move.diff, 11.9 KB (added by , 18 years ago) |
---|
-
libs/libmythtv/dbcheck.cpp
10 10 #include "mythdbcon.h" 11 11 12 12 /// This is the DB schema version expected by the running MythTV instance. 13 const QString currentDatabaseVersion = "112 4";13 const QString currentDatabaseVersion = "1125"; 14 14 15 15 static bool UpdateDBVersionNumber(const QString &newnumber); 16 16 static bool performActualUpdate(const QString updates[], QString version, … … 2016 2016 return false; 2017 2017 } 2018 2018 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 2019 2076 // Drop xvmc_buffer_settings table in 0.20 2020 2077 // Drop dvb_dmx_buf_size and dvb_pkt_buf_size columns of channel in 0.20 2021 2078 -
libs/libmythtv/programinfo.cpp
1651 1651 */ 1652 1652 void ProgramInfo::SetBookmark(long long pos) const 1653 1653 { 1654 MSqlQuery query(MSqlQuery::InitCon()); 1654 ClearMarkupMap(MARK_BOOKMARK); 1655 frm_dir_map_t bookmarkmap; 1656 bookmarkmap[pos] = MARK_BOOKMARK; 1657 SetMarkupMap(bookmarkmap); 1655 1658 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) 1659 1660 { 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 1674 1665 query.prepare("UPDATE recorded" 1675 " SET bookmark = :BOOKMARK "1666 " SET bookmark = :BOOKMARKFLAG" 1676 1667 " WHERE chanid = :CHANID" 1677 1668 " AND starttime = :STARTTIME ;"); 1669 1670 if (pos == 0) 1671 query.bindValue(":BOOKMARKFLAG", "0"); 1672 else 1673 query.bindValue(":BOOKMARKFLAG", "1"); 1674 1678 1675 query.bindValue(":CHANID", chanid); 1679 1676 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()) 1692 1678 MythContext::DBError("Save position update", 1693 1679 query); 1680 } 1694 1681 } 1695 1682 1696 1683 /** \fn ProgramInfo::GetBookmark(void) const … … 1704 1691 */ 1705 1692 long long ProgramInfo::GetBookmark(void) const 1706 1693 { 1707 MSqlQuery query(MSqlQuery::InitCon());1694 QMap<long long, int>::Iterator i; 1708 1695 long long pos = 0; 1709 1696 1710 1697 if (ignoreBookmark) 1711 1698 return pos; 1699 1700 frm_dir_map_t bookmarkmap; 1701 GetMarkupMap(bookmarkmap, MARK_BOOKMARK); 1712 1702 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(); 1736 1708 1737 1709 return pos; 1738 1710 } … … 2007 1979 2008 1980 void ProgramInfo::GetCutList(frm_dir_map_t &delMap) const 2009 1981 { 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); 2049 1984 } 2050 1985 2051 1986 void ProgramInfo::SetCutList(frm_dir_map_t &delMap) const 2052 1987 { 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); 2056 1991 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) 2063 1993 { 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); 2077 2012 } 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);2092 2013 } 2093 2014 2094 2015 void ProgramInfo::SetCommBreakList(frm_dir_map_t &frames) const … … 3485 3406 query.next(); 3486 3407 3487 3408 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; 3490 3411 if ((query.value(3).toInt()) || 3491 3412 (query.value(0).toInt() == COMM_FLAG_PROCESSING)) 3492 3413 flags |= FL_EDITING; 3493 flags |= query.value(4).toString().length() > 1? FL_BOOKMARK : 0;3414 flags |= (query.value(4).toInt() == 1) ? FL_BOOKMARK : 0; 3494 3415 flags |= (query.value(5).toInt() == 1) ? FL_STEREO : 0; 3495 3416 flags |= (query.value(6).toInt() == 1) ? FL_CC : 0; 3496 3417 flags |= (query.value(7).toInt() == 1) ? FL_HDTV : 0; -
programs/mythbackend/mainserver.cpp
1046 1046 // Taken out of programinfo.cpp just to reduce the number of queries 1047 1047 int flags = 0; 1048 1048 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; 1052 1052 flags |= (query.value(32).toInt() == 1) ? FL_STEREO : 0; 1053 1053 flags |= (query.value(34).toInt() == 1) ? FL_CC : 0; 1054 1054 flags |= (query.value(33).toInt() == 1) ? FL_HDTV : 0;