| 1 | --- libs/libmythtv/datadirect.cpp.before-runtime 2008-01-09 16:45:26.000000000 -0500 |
|---|
| 2 | +++ libs/libmythtv/datadirect.cpp 2009-06-26 15:41:52.966867566 -0400 |
|---|
| 3 | @@ -221,11 +221,11 @@ |
|---|
| 4 | |
|---|
| 5 | query.prepare("INSERT INTO dd_program (programid, title, subtitle, " |
|---|
| 6 | "description, showtype, category_type, mpaarating, " |
|---|
| 7 | - "starrating, stars, runtime, year, seriesid, colorcode, " |
|---|
| 8 | + "starrating, stars, runtime, sd_runtime, year, seriesid, colorcode, " |
|---|
| 9 | "syndicatedepisodenumber, originalairdate) " |
|---|
| 10 | "VALUES(:PROGRAMID,:TITLE,:SUBTITLE,:DESCRIPTION," |
|---|
| 11 | ":SHOWTYPE,:CATTYPE,:MPAARATING,:STARRATING,:STARS," |
|---|
| 12 | - ":RUNTIME,:YEAR,:SERIESID,:COLORCODE,:SYNDNUM," |
|---|
| 13 | + ":RUNTIME,:SD_RUNTIME,:YEAR,:SERIESID,:COLORCODE,:SYNDNUM," |
|---|
| 14 | ":ORIGINALAIRDATE);"); |
|---|
| 15 | query.bindValue(":PROGRAMID", curr_program.programid); |
|---|
| 16 | query.bindValue(":TITLE", curr_program.title.utf8()); |
|---|
| 17 | @@ -237,6 +237,7 @@ |
|---|
| 18 | query.bindValue(":STARRATING", curr_program.starRating); |
|---|
| 19 | query.bindValue(":STARS", staravg); |
|---|
| 20 | query.bindValue(":RUNTIME", curr_program.duration); |
|---|
| 21 | + query.bindValue(":SD_RUNTIME", curr_program.sd_runtime); |
|---|
| 22 | query.bindValue(":YEAR", curr_program.year); |
|---|
| 23 | query.bindValue(":SERIESID", curr_program.seriesid); |
|---|
| 24 | query.bindValue(":COLORCODE", curr_program.colorcode); |
|---|
| 25 | @@ -295,6 +296,7 @@ |
|---|
| 26 | |
|---|
| 27 | bool DDStructureParser::characters(const QString& pchars) |
|---|
| 28 | { |
|---|
| 29 | + int h, m; |
|---|
| 30 | // cerr << "Characters : " << pchars << "\n"; |
|---|
| 31 | if (pchars.stripWhiteSpace().isEmpty()) |
|---|
| 32 | return true; |
|---|
| 33 | @@ -352,9 +354,11 @@ |
|---|
| 34 | else if (currtagname == "runTime") |
|---|
| 35 | { |
|---|
| 36 | QString runtimestr = pchars; |
|---|
| 37 | - QTime runtime = QTime(runtimestr.mid(2,2).toInt(), |
|---|
| 38 | - runtimestr.mid(5,2).toInt(), 0, 0); |
|---|
| 39 | + |
|---|
| 40 | + QTime runtime = QTime(h = runtimestr.mid(2,2).toInt(), |
|---|
| 41 | + m = runtimestr.mid(5,2).toInt(), 0, 0); |
|---|
| 42 | curr_program.duration = runtime; |
|---|
| 43 | + curr_program.sd_runtime = h * 60 + m; |
|---|
| 44 | } |
|---|
| 45 | else if (currtagname == "originalAirDate") |
|---|
| 46 | { |
|---|
| 47 | @@ -412,13 +416,13 @@ |
|---|
| 48 | "closecaptioned, partnumber, parttotal, seriesid, " |
|---|
| 49 | "originalairdate, showtype, category_type, colorcode, " |
|---|
| 50 | "syndicatedepisodenumber, tvrating, mpaarating, " |
|---|
| 51 | - "programid) " |
|---|
| 52 | + "programid, sd_runtime) " |
|---|
| 53 | "SELECT chanid, scheduletime, endtime, title, " |
|---|
| 54 | "subtitle, description, year, stars, repeat, stereo, " |
|---|
| 55 | "subtitled, hdtv, closecaptioned, partnumber, " |
|---|
| 56 | "parttotal, seriesid, originalairdate, showtype, " |
|---|
| 57 | "category_type, colorcode, syndicatedepisodenumber, " |
|---|
| 58 | - "tvrating, mpaarating, dd_program.programid " |
|---|
| 59 | + "tvrating, mpaarating, dd_program.programid, sd_runtime " |
|---|
| 60 | "FROM channel, dd_schedule, dd_program WHERE " |
|---|
| 61 | " ( (dd_schedule.programid = dd_program.programid) AND " |
|---|
| 62 | " (channel.xmltvid = dd_schedule.stationid) AND " |
|---|
| 63 | @@ -625,6 +629,7 @@ |
|---|
| 64 | table = "( programid char(20) NOT NULL, seriesid char(12), " |
|---|
| 65 | "title varchar(120), subtitle varchar(150), description text, " |
|---|
| 66 | "mpaarating char(5), starrating char(5), runtime time, " |
|---|
| 67 | + "sd_runtime smallint unsigned, " |
|---|
| 68 | "year char(4), showtype char(30), category_type char(64), " |
|---|
| 69 | "colorcode char(20), originalairdate date, " |
|---|
| 70 | "syndicatedepisodenumber char(20), stars float unsigned, " |
|---|
| 71 | @@ -634,6 +639,7 @@ |
|---|
| 72 | table = "( chanid int unsigned NOT NULL, starttime datetime NOT NULL, " |
|---|
| 73 | "endtime datetime, title varchar(128), subtitle varchar(128), " |
|---|
| 74 | "description text, category varchar(64), " |
|---|
| 75 | + "sd_runtime smallint unsigned, " |
|---|
| 76 | "category_type varchar(64), airdate year, stars float unsigned, " |
|---|
| 77 | "previouslyshown tinyint, repeat bool, stereo bool, " |
|---|
| 78 | "subtitled bool, hdtv bool, closecaptioned bool, partnumber int, " |
|---|
| 79 | --- libs/libmythtv/datadirect.h.before-runtime 2005-05-04 15:40:07.000000000 -0400 |
|---|
| 80 | +++ libs/libmythtv/datadirect.h 2009-06-13 00:19:19.558883882 -0400 |
|---|
| 81 | @@ -88,6 +88,7 @@ |
|---|
| 82 | stationid = ""; |
|---|
| 83 | time = QDateTime(); |
|---|
| 84 | duration = QTime(); |
|---|
| 85 | + sd_runtime = 0; |
|---|
| 86 | repeat = false; |
|---|
| 87 | stereo = false; |
|---|
| 88 | subtitled = false; |
|---|
| 89 | @@ -102,6 +103,7 @@ |
|---|
| 90 | QString stationid; // 12 |
|---|
| 91 | QDateTime time; |
|---|
| 92 | QTime duration; |
|---|
| 93 | + int sd_runtime; |
|---|
| 94 | bool repeat; |
|---|
| 95 | bool stereo; |
|---|
| 96 | bool subtitled; |
|---|
| 97 | @@ -127,6 +129,7 @@ |
|---|
| 98 | mpaaRating = ""; |
|---|
| 99 | starRating = ""; |
|---|
| 100 | duration = QTime(); |
|---|
| 101 | + sd_runtime = 0; |
|---|
| 102 | year = ""; |
|---|
| 103 | showtype = ""; |
|---|
| 104 | colorcode = ""; |
|---|
| 105 | @@ -142,6 +145,7 @@ |
|---|
| 106 | QString mpaaRating; // 5 |
|---|
| 107 | QString starRating; // 5 |
|---|
| 108 | QTime duration; |
|---|
| 109 | + int sd_runtime; |
|---|
| 110 | QString year; // 4 |
|---|
| 111 | QString showtype; // 30 |
|---|
| 112 | QString colorcode; // 20 |
|---|
| 113 | --- programs/mythfilldatabase/filldata.cpp.before-runtime 2005-05-05 03:10:39.000000000 -0400 |
|---|
| 114 | +++ programs/mythfilldatabase/filldata.cpp 2009-06-12 13:12:14.820790191 -0400 |
|---|
| 115 | @@ -125,6 +125,7 @@ |
|---|
| 116 | colorcode = other.colorcode; |
|---|
| 117 | syndicatedepisodenumber = other.syndicatedepisodenumber; |
|---|
| 118 | programid = other.programid; |
|---|
| 119 | + sd_runtime = other.sd_runtime; |
|---|
| 120 | |
|---|
| 121 | clumpidx = other.clumpidx; |
|---|
| 122 | clumpmax = other.clumpmax; |
|---|
| 123 | @@ -160,6 +161,7 @@ |
|---|
| 124 | QString colorcode; |
|---|
| 125 | QString syndicatedepisodenumber; |
|---|
| 126 | QString programid; |
|---|
| 127 | + QString sd_runtime; |
|---|
| 128 | |
|---|
| 129 | QString clumpidx; |
|---|
| 130 | QString clumpmax; |
|---|
| 131 | @@ -885,13 +887,13 @@ |
|---|
| 132 | "airdate, stars, previouslyshown, stereo, subtitled, " |
|---|
| 133 | "hdtv, closecaptioned, partnumber, parttotal, seriesid, " |
|---|
| 134 | "originalairdate, colorcode, syndicatedepisodenumber, " |
|---|
| 135 | - "programid) " |
|---|
| 136 | + "sd_runtime, programid) " |
|---|
| 137 | "SELECT chanid, starttime, endtime, " |
|---|
| 138 | "title, subtitle, description, " |
|---|
| 139 | "showtype, dd_genre.class, category_type, " |
|---|
| 140 | "airdate, stars, previouslyshown, stereo, subtitled, " |
|---|
| 141 | "hdtv, closecaptioned, partnumber, parttotal, seriesid, " |
|---|
| 142 | - "originalairdate, colorcode, syndicatedepisodenumber, " |
|---|
| 143 | + "originalairdate, colorcode, syndicatedepisodenumber, sd_runtime, " |
|---|
| 144 | "dd_v_program.programid FROM dd_v_program " |
|---|
| 145 | "LEFT JOIN dd_genre ON (" |
|---|
| 146 | "dd_v_program.programid = dd_genre.programid AND " |
|---|
| 147 | @@ -2251,6 +2253,7 @@ |
|---|
| 148 | "showtype=:SHOWTYPE AND " |
|---|
| 149 | "colorcode=:COLORCODE AND " |
|---|
| 150 | "syndicatedepisodenumber=:SYNDICATEDEPISODENUMBER AND " |
|---|
| 151 | + "sd_runtime=:SD_RUNTIME AND " |
|---|
| 152 | "programid=:PROGRAMID;"); |
|---|
| 153 | query.bindValue(":CHANID", chanid); |
|---|
| 154 | query.bindValue(":START", startstr); |
|---|
| 155 | @@ -2274,6 +2277,7 @@ |
|---|
| 156 | query.bindValue(":SHOWTYPE", (*i).showtype); |
|---|
| 157 | query.bindValue(":COLORCODE", (*i).colorcode); |
|---|
| 158 | query.bindValue(":SYNDICATEDEPISODENUMBER", (*i).syndicatedepisodenumber); |
|---|
| 159 | + query.bindValue(":SD_RUNTIME", (*i).sd_runtime); |
|---|
| 160 | query.bindValue(":PROGRAMID", (*i).programid); |
|---|
| 161 | query.exec(); |
|---|
| 162 | |
|---|
| 163 | @@ -2344,13 +2348,13 @@ |
|---|
| 164 | "airdate,stars,previouslyshown,title_pronounce,stereo," |
|---|
| 165 | "subtitled,hdtv,closecaptioned,partnumber,parttotal," |
|---|
| 166 | "seriesid,originalairdate,showtype,colorcode," |
|---|
| 167 | - "syndicatedepisodenumber,programid) " |
|---|
| 168 | + "syndicatedepisodenumber,sd_runtime,programid) " |
|---|
| 169 | "VALUES(:CHANID,:STARTTIME,:ENDTIME,:TITLE," |
|---|
| 170 | ":SUBTITLE,:DESCRIPTION,:CATEGORY,:CATEGORY_TYPE,:AIRDATE,:STARS," |
|---|
| 171 | ":PREVIOUSLYSHOWN,:TITLE_PRONOUNCE,:STEREO,:SUBTITLED," |
|---|
| 172 | ":HDTV,:CLOSECAPTIONED,:PARTNUMBER,:PARTTOTAL,:SERIESID," |
|---|
| 173 | ":ORIGINALAIRDATE,:SHOWTYPE,:COLORCODE,:SYNDICATEDEPISODENUMBER," |
|---|
| 174 | - ":PROGRAMID);"); |
|---|
| 175 | + ":SD_RUNTIME,:PROGRAMID);"); |
|---|
| 176 | query.bindValue(":CHANID", chanid); |
|---|
| 177 | query.bindValue(":STARTTIME", startstr); |
|---|
| 178 | query.bindValue(":ENDTIME", endstr); |
|---|
| 179 | @@ -2374,6 +2378,7 @@ |
|---|
| 180 | query.bindValue(":SHOWTYPE", (*i).showtype); |
|---|
| 181 | query.bindValue(":COLORCODE", (*i).colorcode); |
|---|
| 182 | query.bindValue(":SYNDICATEDEPISODENUMBER", (*i).syndicatedepisodenumber); |
|---|
| 183 | + query.bindValue(":SD_RUNTIME", (*i).sd_runtime); |
|---|
| 184 | query.bindValue(":PROGRAMID", (*i).programid); |
|---|
| 185 | if (!query.exec()) |
|---|
| 186 | { |
|---|
| 187 | --- /usr/share/mythtv/mythweb/themes/Default/program_detail.php 2009-06-19 02:38:18.000000000 -0400 |
|---|
| 188 | +++ /usr/share/mythtv/mythweb/themes/Default/program_detail.php.before-runtime 2005-09-24 00:19:00.000000000 -0400 |
|---|
| 189 | @@ -55,41 +55,8 @@ |
|---|
| 190 | echo ' ('.t('Rerun').')'; |
|---|
| 191 | echo '<br />' |
|---|
| 192 | .t('$1 to $2', strftime('%r', $schedule->starttime), strftime('%r', $schedule->endtime)); |
|---|
| 193 | - if ($program) { |
|---|
| 194 | + if ($program) |
|---|
| 195 | echo ' ('.tn('$1 min', '$1 mins', intval($program->length/60)).')'; |
|---|
| 196 | - // If sd_runtime not in table, blow out visibly by barfing on later use! Can only happen if the table schema isn't in sync w/this function, which shouldn't happen. |
|---|
| 197 | - // ($result will be a boolean false if this erred, or a resource if this succeeded.) |
|---|
| 198 | - $result = mysql_query("SELECT sd_runtime FROM program WHERE chanid = '$program->chanid' AND starttime = from_unixtime($schedule->starttime)"); |
|---|
| 199 | - list($sd_runtime) = mysql_fetch_row($result); |
|---|
| 200 | - mysql_free_result($result); |
|---|
| 201 | - // We must get the ORIGINAL (unpadded!) scheduled time and compare it to sd_runtime, for two reasons: |
|---|
| 202 | - // (a) If the program overflows its timeslot, I want to know -even if- it's apparently padded enough, |
|---|
| 203 | - // because it might be that the padding -just- compensates for the putative overflow but then isn't |
|---|
| 204 | - // also doing its job of compensating for clock skew---hence an overflow eats into our clock skew |
|---|
| 205 | - // allowance and might eat it up entirely. |
|---|
| 206 | - // (b) Any preroll padding -can't- be counted as helping to compensate for an overflow, since by definition |
|---|
| 207 | - // overflows can only push the end later---having padding before it starts can't help us at all. |
|---|
| 208 | - // Once we've compared the original scheduling with sd_runtime, we can then -also- see if our postroll claims to help. |
|---|
| 209 | - $scheduled_length = ($schedule->endtime - $schedule->starttime) / 60; |
|---|
| 210 | - $overflow = ($sd_runtime - $scheduled_length); |
|---|
| 211 | - if ($overflow > 0) { |
|---|
| 212 | - // The runtime is larger than the scheduled time, so it has definitely overflowed. |
|---|
| 213 | - // If it's larger than even the postroll-padded time, panic! |
|---|
| 214 | - // Note that the colors below should be in CSS, not here. And, for the first time |
|---|
| 215 | - // since 12/10/94 and Netscape 1.0, I've -finally- found a use for the <blink> tag... |
|---|
| 216 | - $postroll = is_null($program->recendts) ? 0 : ($program->recendts - $schedule->endtime) / 60; |
|---|
| 217 | - $postrolled_overflow = $overflow - $postroll; |
|---|
| 218 | - if ($postrolled_overflow >= 0) { // >= and not just > because, even if it's exactly right, this means we've lost our postroll margin, so complain vociferously. |
|---|
| 219 | - $extra = ($postroll > 0) ? " even w/$postroll postroll" : ""; |
|---|
| 220 | - $pack = ($postroll > 0) ? "<br>" : " "; |
|---|
| 221 | - echo " $pack<blink><font color=red>($postrolled_overflow min over$extra!)</font></blink>"; |
|---|
| 222 | - } |
|---|
| 223 | - else { // Not over including the postroll, but we should still call attention to it. |
|---|
| 224 | - $mpo = -$postrolled_overflow; |
|---|
| 225 | - echo " <br><font color=red>($overflow min over, but $postroll min postroll gives $mpo min safety)</font>"; |
|---|
| 226 | - } |
|---|
| 227 | - } |
|---|
| 228 | - } |
|---|
| 229 | if ($_GET['recordid']) |
|---|
| 230 | echo "</span>"; |
|---|
| 231 | echo "<br />\n"; |
|---|