Ticket #11165: 1_Clean_up_obsolete_files.diff

File 1_Clean_up_obsolete_files.diff, 124.1 KB (added by myrdhn@…, 7 years ago)

Clean up obsolete files

  • Gentoo/media-plugins/mythbrowser/Manifest

    diff --git a/Gentoo/media-plugins/mythbrowser/Manifest b/Gentoo/media-plugins/mythbrowser/Manifest
    index 0927f21..c6b9b9b 100644
    a b  
    1 AUX 6346.patch 104774 RMD160 9936e423739e4fdab8175970af7e2569f6101052 SHA1 566419f4cda05cca2e997eabda1ae14fd0495257 SHA256 943782aabc36949c326b2a19ce86ee9aca833a16a536c7eb48f4a6aa314f0069
    2 DIST mythtv-0.25.1_p20120622.tar.gz 73789907 RMD160 3af7bd4d13341a57248d2e7ad0511cf4c8d031b9 SHA1 576686c5e2bb80ac4755bbc167a9b688b1bf4f56 SHA256 d31029c08333c93848174db2760943436a4946bf8c5ad2db65bfc86d52bdf04c
    3 DIST mythtv-0.26_pre20120706.tar.gz 84089487 RMD160 b3211211c73ce4ac3d6f288ccc410528622ed9e5 SHA1 42fb54c482a9750f97b36aa56a0d7a3349c87b71 SHA256 d49110989147193bc184ff43bc2e17f1fa0deef8d8144d2d9a8c51b1064a15a4
    4 EBUILD mythbrowser-0.25.1_p20120622.ebuild 630 RMD160 f70fa50219c302a2e0c2252758b72e5339b47da1 SHA1 3b39de71f133f057e8c37f54d84a2e15671ca5f8 SHA256 899281e6cf45811cf5f0cd83a263bbb8ed1b0fb5e813df3230e6dfc1541976b8
    5 EBUILD mythbrowser-0.26_pre20120706.ebuild 630 RMD160 5f53021375fdaa2a4d9057496a1867ea04a5a0a9 SHA1 8ce7532f2e3a41e95fafbf516791d2387513c876 SHA256 86556d31a1cfd49568edd3d8d74a3744c0df422666367fdef66ef8f01fd87a45
     1DIST mythtv-0.25.1_p20120622.tar.gz 73789907 SHA256 d31029c08333c93848174db2760943436a4946bf8c5ad2db65bfc86d52bdf04c SHA512 4745606093902d193c2b6cfd4b9388ded8393d27be69075d103f964a8e12166bec767cc6f30e9552ce5d428acb2c664355e23854e85245e2718d14ec22ec5773 WHIRLPOOL 201ec1845eb199027cc32cec11ff3fe7d2d88516921583fec4cc4aa55b6a70695144320d00594c0a022c0a33806a67a8ea21708903f142629647353d1dda7b77
     2DIST mythtv-0.26_pre20120706.tar.gz 84089487 SHA256 d49110989147193bc184ff43bc2e17f1fa0deef8d8144d2d9a8c51b1064a15a4 SHA512 664867549ab86263b4c9ed953e8ed4df291bc0986895491cb3d0990d1dd557af55a646c7051412ea92fb6377ab9a0b75cf0b0b93d0acc784c627a82c9a708087 WHIRLPOOL f045d44f81eee8971529f0268e00520f58133e151eca09f5421b123a5ef8c8ab0940e88fa0952da8eb6a1d4a3cb84b7dfe221ec3ea739b6cb0f8dd3ae3377928
     3EBUILD mythbrowser-0.25.1_p20120622.ebuild 630 SHA256 899281e6cf45811cf5f0cd83a263bbb8ed1b0fb5e813df3230e6dfc1541976b8 SHA512 bafd9d347a6aa5674e3fac7ea7e5763112e5cd05c79be340ccb560c8937959c928cad79a32a2d72de232e42588c802b545eb3c342e8a2ec28523b14289c6b252 WHIRLPOOL 60fe82e512aa4eb9c2663e781b1df74d2f794db4cc84871e651cbe5547d9b0f97db10823bc20b5b0898915df23c26eb40a787aa1e779a9cbc38f28f3d02523e4
     4EBUILD mythbrowser-0.26_pre20120706.ebuild 630 SHA256 86556d31a1cfd49568edd3d8d74a3744c0df422666367fdef66ef8f01fd87a45 SHA512 1c1e82ce3c7106621f942000093f39e401c1ae3c527100ad685f61d647bccc1f487591a8d1cbdfe8d2ae8eba34ea74e1adbca723bb6f33a9f5af6b7adb3f3669 WHIRLPOOL 699d3b7d9dbef2cb9d54ec8c1d277167b1c5e4a2dd9add1107a41f50bbaaa21a2f906f8291636a22005c3275a97cb480c67028ebb03358cbff47f06a5d4dfa3d
  • deleted file Gentoo/media-plugins/mythbrowser/files/6346.patch

    diff --git a/Gentoo/media-plugins/mythbrowser/files/6346.patch b/Gentoo/media-plugins/mythbrowser/files/6346.patch
    deleted file mode 100644
    index 7ded0de..0000000
    + -  
    1 Index: mythplugins/mythbrowser/mythbrowser/main.cpp
    2 ===================================================================
    3 --- mythplugins/mythbrowser/mythbrowser/main.cpp        (revision 21049)
    4 +++ mythplugins/mythbrowser/mythbrowser/main.cpp        (working copy)
    5 @@ -19,7 +19,7 @@
    6  
    7  using namespace std;
    8  
    9 -int handleMedia(const QString &url, const QString &, const QString &, const QString &, int, const QString &)
    10 +int handleMedia(const QString &url, const QString &, const QString &, const QString &, const QString &, int, int, int, const QString &)
    11  {
    12      QStringList urls = url.split(" ", QString::SkipEmptyParts);
    13      float zoom = gContext->GetSetting("WebBrowserZoomLevel", "1.4").toFloat();
    14 Index: mythplugins/mythvideo/theme/default/video-ui.xml
    15 ===================================================================
    16 --- mythplugins/mythvideo/theme/default/video-ui.xml    (revision 21049)
    17 +++ mythplugins/mythvideo/theme/default/video-ui.xml    (working copy)
    18 @@ -477,11 +477,23 @@
    19          </buttonlist>
    20  
    21          <textarea name="title" from="basetextarea">
    22 -            <area>40,20,700,100</area>
    23 +            <area>40,15,700,100</area>
    24              <multiline>yes</multiline>
    25              <font>baseextralarge</font>
    26          </textarea>
    27  
    28 +        <textarea name="subtitle" from="basetextarea">
    29 +            <area>40,45,500,100</area>
    30 +            <multiline>yes</multiline>
    31 +            <font>basemedium</font>
    32 +        </textarea>
    33 +
    34 +        <textarea name="##x##" from="basetextarea">
    35 +            <area>560,45,100,100</area>
    36 +            <multiline>yes</multiline>
    37 +            <font>basemedium</font>
    38 +        </textarea>
    39 +
    40          <imagetype name="coverimage">
    41              <area>30,90,203,311</area>
    42              <preserveaspect>yes</preserveaspect>
    43 @@ -493,13 +505,13 @@
    44          </textarea>
    45  
    46          <textarea name="dirlbl" from="basetextarea">
    47 -            <area>240,65,115,35</area>
    48 +            <area>240,68,115,35</area>
    49              <value>Directed by</value>
    50              <align>right</align>
    51          </textarea>
    52  
    53          <textarea name="director" from="basetextarea">
    54 -            <area>360,63,350,35</area>
    55 +            <area>360,66,350,35</area>
    56              <font>basemedium</font>
    57          </textarea>
    58  
    59 @@ -586,11 +598,23 @@
    60  
    61      <window name="gallery">
    62          <textarea name="title" from="basetextarea">
    63 -            <area>70,20,460,50</area>
    64 +            <area>70,15,460,50</area>
    65              <cutdown>yes</cutdown>
    66              <font>baselarge</font>
    67          </textarea>
    68  
    69 +        <textarea name="subtitle" from="basetextarea">
    70 +            <area>70,40,360,50</area>
    71 +            <cutdown>yes</cutdown>
    72 +            <font>basemedium</font>
    73 +        </textarea>
    74 +
    75 +        <textarea name="##x##" from="basetextarea">
    76 +            <area>440,40,70,50</area>
    77 +            <cutdown>yes</cutdown>
    78 +            <font>basemedium</font>
    79 +        </textarea>
    80 +
    81          <buttonlist name="videos">
    82              <area>15,0,770,585</area>
    83              <layout>grid</layout>
    84 @@ -662,7 +686,7 @@
    85          </buttonlist>
    86  
    87          <textarea name="position" from="basetextarea">
    88 -            <area>530,20,110,40</area>
    89 +            <area>530,15,110,40</area>
    90              <align>hcenter,vcenter</align>
    91              <font>basemedium</font>
    92          </textarea>
    93 @@ -728,24 +752,33 @@
    94              <font>baselarge</font>
    95          </textarea>
    96  
    97 +        <textarea name="subtitle" from="basetextarea">
    98 +            <area>50,360,425,30</area>
    99 +        </textarea>
    100 +
    101 +        <textarea name="##x##" from="basetextarea">
    102 +            <area>500,360,80,30</area>
    103 +            <align>right</align>
    104 +        </textarea>
    105 +
    106          <textarea name="director" from="basetextarea">
    107 -            <area>50,367,450,30</area>
    108 +            <area>50,390,450,30</area>
    109          </textarea>
    110  
    111          <textarea name="year" from="basetextarea">
    112 -            <area>500,367,80,30</area>
    113 +            <area>500,390,80,30</area>
    114              <align>right</align>
    115          </textarea>
    116  
    117          <textarea name="plot" from="basetextarea">
    118 -            <area>40,395,530,80</area>
    119 +            <area>40,418,530,80</area>
    120              <align>left,top</align>
    121              <multiline>yes</multiline>
    122              <cutdown>yes</cutdown>
    123          </textarea>
    124  
    125          <textarea name="cast" from="basetextarea">
    126 -            <area>60,480,505,70</area>
    127 +            <area>60,503,505,50</area>
    128              <align>left,top</align>
    129              <multiline>yes</multiline>
    130              <cutdown>no</cutdown>
    131 @@ -867,28 +900,50 @@
    132          <!-- Labels  -->
    133  
    134          <textarea name="title_text" from="basetextarea">
    135 -            <area>50,90,250,40</area>
    136 -            <value>Name:</value>
    137 +            <area>50,80,250,40</area>
    138 +            <value>Title:</value>
    139              <align>right,top</align>
    140          </textarea>
    141  
    142 +        <textarea name="subtitle_text" from="basetextarea">
    143 +            <area>50,138,250,40</area>
    144 +            <value>Subtitle:</value>
    145 +            <align>right,top</align>
    146 +        </textarea>
    147 +
    148 +        <textarea name="season_text" from="basetextarea">
    149 +            <area>50,185,250,40</area>
    150 +            <value>Season:</value>
    151 +            <align>right,top</align>
    152 +        </textarea>
    153 +
    154 +        <textarea name="episode_text" from="basetextarea">
    155 +            <area>370,185,150,40</area>
    156 +            <value>Episode:</value>
    157 +            <align>right,top</align>
    158 +        </textarea>
    159 +
    160          <textarea name="category_text" from="title_text">
    161 -            <position>50,152</position>
    162 +            <area>370,232,150,40</area>
    163 +            <align>right</align>
    164              <value>Category:</value>
    165          </textarea>
    166  
    167          <textarea name="level_text" from="title_text">
    168 -            <position>50,202</position>
    169 +            <area>20,232,200,40</area>
    170 +            <align>right</align>
    171              <value>Parental Control:</value>
    172          </textarea>
    173  
    174          <textarea name="child_text" from="title_text">
    175 -            <position>50,247</position>
    176 +            <area>20,277,200,40</area>
    177 +            <align>right</align>
    178              <value>File to Always Play Next:</value>
    179          </textarea>
    180  
    181          <textarea name="browse_text" from="title_text">
    182 -            <position>50,292</position>
    183 +            <area>500,277,200,40</area>
    184 +            <align>left</align>
    185              <value>Include while Browsing:</value>
    186          </textarea>
    187  
    188 @@ -925,23 +980,35 @@
    189          <!-- Widgets -->
    190  
    191          <textedit name="title_edit" from="basetextedit">
    192 -            <position>310,80</position>
    193 +            <position>310,70</position>
    194          </textedit>
    195  
    196 -        <buttonlist name="category_select" from="baseselector">
    197 -            <position>310,145</position>
    198 -        </buttonlist>
    199 +        <textedit name="subtitle_edit" from="basetextedit">
    200 +            <position>310,126</position>
    201 +        </textedit>
    202  
    203 +        <spinbox name="season" from="basespinbox">
    204 +            <position>310,181</position>
    205 +        </spinbox>
    206 +
    207 +        <spinbox name="episode" from="basespinbox">
    208 +            <position>530,181</position>
    209 +        </spinbox>
    210 +
    211          <buttonlist name="level_select" from="baseselector">
    212 -            <position>310,195</position>
    213 +            <position>230,225</position>
    214          </buttonlist>
    215  
    216 +        <buttonlist name="category_select" from="baseselector">
    217 +            <position>530,225</position>
    218 +        </buttonlist>
    219 +
    220          <buttonlist name="child_select" from="baseselector">
    221 -            <position>310,240</position>
    222 +            <position>230,270</position>
    223          </buttonlist>
    224  
    225          <checkbox name="browse_check" from="basecheckbox">
    226 -            <position>310,290</position>
    227 +            <position>680,275</position>
    228          </checkbox>
    229  
    230          <button name="coverart_button" from="basesearchbutton">
    231 Index: mythplugins/mythvideo/theme/default-wide/video-ui.xml
    232 ===================================================================
    233 --- mythplugins/mythvideo/theme/default-wide/video-ui.xml       (revision 21049)
    234 +++ mythplugins/mythvideo/theme/default-wide/video-ui.xml       (working copy)
    235 @@ -467,11 +467,17 @@
    236          </imagetype>
    237  
    238          <textarea name="title" from="basetextarea">
    239 -            <area>370,12,700,40</area>
    240 +            <area>370,12,400,40</area>
    241              <multiline>yes</multiline>
    242              <font>baselarge</font>
    243          </textarea>
    244  
    245 +        <textarea name="subtitle" from="basetextarea">
    246 +            <area>800,12,400,40</area>
    247 +            <multiline>yes</multiline>
    248 +            <font>baselarge</font>
    249 +        </textarea>
    250 +
    251          <textarea name="currentvideo" from="basetextarea">
    252              <area>150,486,500,35</area>
    253              <align>top,vcenter</align>
    254 @@ -487,6 +493,11 @@
    255              <font>basemedium</font>
    256          </textarea>
    257  
    258 +        <textarea name="s##e##" from="basetextarea">
    259 +            <area>1010,63,150,35</area>
    260 +            <font>basemedium</font>
    261 +        </textarea>
    262 +
    263          <textarea name="plot" from="basetextarea">
    264              <area>380,97,840,145</area>
    265              <multiline>yes</multiline>
    266 @@ -572,7 +583,7 @@
    267  
    268      <window name="gallery">
    269          <textarea name="title" from="basetextarea">
    270 -            <area>70,15,800,50</area>
    271 +            <area>70,15,420,50</area>
    272              <cutdown>yes</cutdown>
    273              <font>baselarge</font>
    274          </textarea>
    275 @@ -646,9 +657,21 @@
    276                  </state>
    277              </statetype>
    278          </buttonlist>
    279 +       
    280 +        <textarea name="subtitle" from="basetextarea">
    281 +            <area>500,15,350,40</area>
    282 +            <align>hcenter,vcenter</align>
    283 +            <font>basemedium</font>
    284 +        </textarea>
    285  
    286 +        <textarea name="s##e##" from="basetextarea">
    287 +            <area>870,15,100,40</area>
    288 +            <align>hcenter,vcenter</align>
    289 +            <font>basemedium</font>
    290 +        </textarea>       
    291 +
    292          <textarea name="position" from="basetextarea">
    293 -            <area>890,15,200,40</area>
    294 +            <area>1000,15,200,40</area>
    295              <align>hcenter,vcenter</align>
    296              <font>basemedium</font>
    297          </textarea>
    298 @@ -713,35 +736,45 @@
    299              <font>baselarge</font>
    300          </textarea>
    301  
    302 -        <textarea name="director" from="basetextarea">
    303 -            <area>50,440,720,30</area>
    304 -        </textarea>
    305 +         <textarea name="s##e##" from="basetextarea">
    306 +             <area>50,380,400,30</area>
    307 +             <font>basemedium</font>
    308 +         </textarea>
    309  
    310 -        <textarea name="year" from="basetextarea">
    311 -            <area>800,440,80,30</area>
    312 -            <align>right</align>
    313 -        </textarea>
    314 +         <textarea name="subtitle" from="basetextarea">
    315 +             <area>50,420,400,30</area>
    316 +             <font>basemedium</font>
    317 +         </textarea>
    318  
    319 -        <textarea name="plot" from="basetextarea">
    320 -            <area>40,474,850,80</area>
    321 -            <align>left,top</align>
    322 -            <multiline>yes</multiline>
    323 -            <cutdown>yes</cutdown>
    324 -        </textarea>
    325 +          <textarea name="director" from="basetextarea">
    326 +             <area>50,467,450,30</area>
    327 +          </textarea>
    328 
    329 +          <textarea name="year" from="basetextarea">
    330 +             <area>500,467,80,30</area>
    331 +              <align>right</align>
    332 +          </textarea>
    333 
    334 +          <textarea name="plot" from="basetextarea">
    335 +             <area>40,495,530,80</area>
    336 +              <align>left,top</align>
    337 +              <multiline>yes</multiline>
    338 +              <cutdown>yes</cutdown>
    339 +          </textarea>
    340 
    341 +          <textarea name="cast" from="basetextarea">
    342 +             <area>60,580,505,70</area>
    343 +              <align>left,top</align>
    344 +              <multiline>yes</multiline>
    345 +              <cutdown>no</cutdown>
    346 +          </textarea>
    347 
    348 +          <textarea name="position" from="basetextarea">
    349 +             <area>266,655,266,40</area>
    350 +              <font>basemedium</font>
    351 +              <align>hcenter,vcenter</align>
    352 +          </textarea>
    353  
    354 -        <textarea name="cast" from="basetextarea">
    355 -            <area>60,576,800,70</area>
    356 -            <align>left,top</align>
    357 -            <multiline>yes</multiline>
    358 -            <cutdown>no</cutdown>
    359 -        </textarea>
    360 -
    361 -        <textarea name="position" from="basetextarea">
    362 -            <area>425,666,425,40</area>
    363 -            <font>basemedium</font>
    364 -            <align>hcenter,vcenter</align>
    365 -        </textarea>
    366 -
    367          <imagetype name="coverimage">
    368              <area>1000,400,225,250</area>
    369              <preserveaspect>yes</preserveaspect>
    370 @@ -843,7 +876,7 @@
    371      <window name="edit_metadata">
    372  
    373          <textarea name="title" from="basetextarea">
    374 -            <area>10,50,1260,50</area>
    375 +            <area>10,30,760,50</area>
    376              <value>Edit Video Information</value>
    377              <align>hcenter,vcenter</align>
    378              <font>baselarge</font>
    379 @@ -852,134 +885,259 @@
    380          <!-- Labels  -->
    381  
    382          <textarea name="title_text" from="basetextarea">
    383 -            <area>250,110,250,40</area>
    384 -            <value>Name:</value>
    385 +            <area>50,80,250,40</area>
    386 +            <value>Title:</value>
    387              <align>right,top</align>
    388          </textarea>
    389  
    390 +        <textarea name="subtitle_text" from="basetextarea">
    391 +            <area>50,138,250,40</area>
    392 +            <value>Subtitle:</value>
    393 +            <align>right,top</align>
    394 +        </textarea>
    395 +
    396 +        <textarea name="season_text" from="basetextarea">
    397 +            <area>50,185,250,40</area>
    398 +            <value>Season:</value>
    399 +            <align>right,top</align>
    400 +        </textarea>
    401 +
    402 +        <textarea name="episode_text" from="basetextarea">
    403 +            <area>370,185,150,40</area>
    404 +            <value>Episode:</value>
    405 +            <align>right,top</align>
    406 +        </textarea>
    407 +
    408          <textarea name="category_text" from="title_text">
    409 -            <position>250,172</position>
    410 +            <area>420,232,150,40</area>
    411 +            <align>right</align>
    412              <value>Category:</value>
    413          </textarea>
    414  
    415          <textarea name="level_text" from="title_text">
    416 -            <position>250,222</position>
    417 +            <area>20,232,200,40</area>
    418 +            <align>right</align>
    419              <value>Parental Control:</value>
    420          </textarea>
    421  
    422          <textarea name="child_text" from="title_text">
    423 -            <position>250,267</position>
    424 +            <area>20,277,200,40</area>
    425 +            <align>right</align>
    426              <value>File to Always Play Next:</value>
    427          </textarea>
    428  
    429          <textarea name="browse_text" from="title_text">
    430 -            <position>250,312</position>
    431 +            <area>470,277,280,40</area>
    432 +            <align>left</align>
    433              <value>Include while Browsing:</value>
    434          </textarea>
    435  
    436          <textarea name="coverart_text_label" from="title_text">
    437 -            <position>250,348</position>
    438 +            <position>50,328</position>
    439              <value>Cover Art:</value>
    440          </textarea>
    441  
    442          <textarea name="screenshot_text_label" from="title_text">
    443 -            <position>250,377</position>
    444 +            <position>50,357</position>
    445              <value>Screenshot:</value>
    446          </textarea>
    447  
    448          <textarea name="banner_text_label" from="title_text">
    449 -            <position>250,406</position>
    450 +            <position>50,386</position>
    451              <value>Banner:</value>
    452          </textarea>
    453  
    454          <textarea name="fanart_text_label" from="title_text">
    455 -            <position>250,435</position>
    456 +            <position>50,415</position>
    457              <value>Fanart:</value>
    458          </textarea>
    459  
    460          <textarea name="trailer_text_label" from="title_text">
    461 -            <position>250,464</position>
    462 +            <position>50,447</position>
    463              <value>Trailer:</value>
    464          </textarea>
    465  
    466          <textarea name="player_text" from="title_text">
    467 -            <position>250,510</position>
    468 +            <position>50,487</position>
    469              <value>Unique Player Command:</value>
    470          </textarea>
    471  
    472          <!-- Widgets -->
    473  
    474          <textedit name="title_edit" from="basetextedit">
    475 -            <position>510,100</position>
    476 +            <position>310,70</position>
    477          </textedit>
    478  
    479 -        <buttonlist name="category_select" from="baseselector">
    480 -            <position>510,165</position>
    481 -        </buttonlist>
    482 +        <textedit name="subtitle_edit" from="basetextedit">
    483 +            <position>310,126</position>
    484 +        </textedit>
    485  
    486 +        <spinbox name="season" from="basespinbox">
    487 +            <position>310,181</position>
    488 +        </spinbox>
    489 +
    490 +        <spinbox name="episode" from="basespinbox">
    491 +            <position>530,181</position>
    492 +        </spinbox>
    493 +
    494          <buttonlist name="level_select" from="baseselector">
    495 -            <position>510,215</position>
    496 +            <position>230,225</position>
    497          </buttonlist>
    498  
    499 +        <buttonlist name="category_select" from="baseselector">
    500 +            <position>580,225</position>
    501 +        </buttonlist>
    502 +
    503          <buttonlist name="child_select" from="baseselector">
    504 -            <position>510,260</position>
    505 +            <position>230,270</position>
    506          </buttonlist>
    507  
    508          <checkbox name="browse_check" from="basecheckbox">
    509 -            <position>510,310</position>
    510 +            <position>735,275</position>
    511          </checkbox>
    512  
    513 -        <button name="coverart_button" from="basesearchbutton">
    514 -            <position>510,343</position>
    515 +        <button name="coverart_button">
    516 +            <area>310,323,32,32</area>
    517 +            <statetype name="buttonstate">
    518 +                <state name="active">
    519 +                    <imagetype name="background">
    520 +                        <filename>blankbutton_off.png</filename>
    521 +                    </imagetype>
    522 +                </state>
    523 +                <state name="selected" from="active">
    524 +                    <imagetype name="background">
    525 +                        <filename>blankbutton_on.png</filename>
    526 +                    </imagetype>
    527 +                </state>
    528 +                <state name="disabled" from="active" />
    529 +                <state name="pushed" from="active">
    530 +                    <imagetype name="background">
    531 +                        <filename>blankbutton_pushed.png</filename>
    532 +                    </imagetype>
    533 +                </state>
    534 +            </statetype>
    535          </button>
    536  
    537          <textarea name="coverart_text" from="basetextarea">
    538 -            <area>550,348,250,40</area>
    539 +            <area>350,328,250,40</area>
    540              <value>/path/to/the/thing.jpg</value>
    541          </textarea>
    542  
    543 -        <button name="screenshot_button" from="basesearchbutton">
    544 -            <position>510,372</position>
    545 +        <button name="screenshot_button">
    546 +            <area>310,352,32,32</area>
    547 +            <statetype name="buttonstate">
    548 +                <state name="active">
    549 +                    <imagetype name="background">
    550 +                        <filename>blankbutton_off.png</filename>
    551 +                    </imagetype>
    552 +                </state>
    553 +                <state name="selected" from="active">
    554 +                    <imagetype name="background">
    555 +                        <filename>blankbutton_on.png</filename>
    556 +                    </imagetype>
    557 +                </state>
    558 +                <state name="disabled" from="active" />
    559 +                <state name="pushed" from="active">
    560 +                    <imagetype name="background">
    561 +                        <filename>blankbutton_pushed.png</filename>
    562 +                    </imagetype>
    563 +                </state>
    564 +            </statetype>
    565          </button>
    566  
    567          <textarea name="screenshot_text" from="basetextarea">
    568 -            <area>550,377,250,40</area>
    569 +            <area>350,357,250,40</area>
    570              <value>/path/to/the/thing.jpg</value>
    571          </textarea>
    572  
    573 -        <button name="banner_button" from="basesearchbutton">
    574 -            <position>510,401</position>
    575 +        <button name="banner_button">
    576 +            <area>310,381,32,32</area>
    577 +            <statetype name="buttonstate">
    578 +                <state name="active">
    579 +                    <imagetype name="background">
    580 +                        <filename>blankbutton_off.png</filename>
    581 +                    </imagetype>
    582 +                </state>
    583 +                <state name="selected" from="active">
    584 +                    <imagetype name="background">
    585 +                        <filename>blankbutton_on.png</filename>
    586 +                    </imagetype>
    587 +                </state>
    588 +                <state name="disabled" from="active" />
    589 +                <state name="pushed" from="active">
    590 +                    <imagetype name="background">
    591 +                        <filename>blankbutton_pushed.png</filename>
    592 +                    </imagetype>
    593 +                </state>
    594 +            </statetype>
    595          </button>
    596  
    597          <textarea name="banner_text" from="basetextarea">
    598 -            <area>550,406,250,40</area>
    599 +            <area>350,386,250,40</area>
    600              <value>/path/to/the/thing.jpg</value>
    601          </textarea>
    602  
    603 -        <button name="fanart_button" from="basesearchbutton">
    604 -            <position>510,430</position>
    605 +        <button name="fanart_button">
    606 +            <area>310,412,32,32</area>
    607 +            <statetype name="buttonstate">
    608 +                <state name="active">
    609 +                    <imagetype name="background">
    610 +                        <filename>blankbutton_off.png</filename>
    611 +                    </imagetype>
    612 +                </state>
    613 +                <state name="selected" from="active">
    614 +                    <imagetype name="background">
    615 +                        <filename>blankbutton_on.png</filename>
    616 +                    </imagetype>
    617 +                </state>
    618 +                <state name="disabled" from="active" />
    619 +                <state name="pushed" from="active">
    620 +                    <imagetype name="background">
    621 +                        <filename>blankbutton_pushed.png</filename>
    622 +                    </imagetype>
    623 +                </state>
    624 +            </statetype>
    625          </button>
    626  
    627          <textarea name="fanart_text" from="basetextarea">
    628 -            <area>550,435,250,40</area>
    629 +            <area>350,415,250,40</area>
    630              <value>/path/to/the/thing.jpg</value>
    631          </textarea>
    632  
    633 -        <button name="trailer_button" from="basesearchbutton">
    634 -            <position>510,460</position>
    635 +        <button name="trailer_button">
    636 +            <area>310,442,32,32</area>
    637 +            <statetype name="buttonstate">
    638 +                <state name="active">
    639 +                    <imagetype name="background">
    640 +                        <filename>blankbutton_off.png</filename>
    641 +                    </imagetype>
    642 +                </state>
    643 +                <state name="selected" from="active">
    644 +                    <imagetype name="background">
    645 +                        <filename>blankbutton_on.png</filename>
    646 +                    </imagetype>
    647 +                </state>
    648 +                <state name="disabled" from="active" />
    649 +                <state name="pushed" from="active">
    650 +                    <imagetype name="background">
    651 +                        <filename>blankbutton_pushed.png</filename>
    652 +                    </imagetype>
    653 +                </state>
    654 +            </statetype>
    655          </button>
    656  
    657          <textarea name="trailer_text" from="basetextarea">
    658 -            <area>550,465,250,40</area>
    659 +            <area>350,447,250,40</area>
    660              <value>/path/to/the/thing.jpg</value>
    661          </textarea>
    662  
    663 +
    664          <textedit name="player_edit" from="basetextedit">
    665 -            <position>510,495</position>
    666 +            <position>310,477</position>
    667          </textedit>
    668  
    669          <button name="done_button" from="basebutton">
    670 -            <position>510,565</position>
    671 +            <position>310,537</position>
    672              <value>Done</value>
    673          </button>
    674  
    675 Index: mythplugins/mythvideo/mythvideo/videodlg.h
    676 ===================================================================
    677 --- mythplugins/mythvideo/mythvideo/videodlg.h  (revision 21049)
    678 +++ mythplugins/mythvideo/mythvideo/videodlg.h  (working copy)
    679 @@ -28,6 +28,7 @@
    680  
    681  enum CoverDownloadErrorState { esOK, esError, esTimeout };
    682  enum FanartDownloadErrorState { fesOK, fesError, fesTimeout };
    683 +enum BannerDownloadErrorState { besOK, besError, besTimeout };
    684  
    685  class VideoDialog : public MythScreenType
    686  {
    687 @@ -51,6 +52,12 @@
    688      bool Create();
    689      bool keyPressEvent(QKeyEvent *levent);
    690  
    691 +  private:
    692 +    void searchStart();
    693 +
    694 +  public slots:
    695 +    void searchComplete(QString string);
    696 +
    697    private slots:
    698      void UpdatePosition();
    699      void UpdateText(MythUIButtonListItem *);
    700 @@ -68,6 +75,8 @@
    701  
    702      void EditMetadata();
    703      void VideoSearch();
    704 +    void TitleSubtitleSearch();
    705 +    void ImageOnlyDownload();
    706      void ManualVideoUID();
    707      void ManualVideoTitle();
    708      void ResetMetadata();
    709 @@ -93,6 +102,7 @@
    710  
    711      // Called when the underlying data for an item changes
    712      void OnVideoSearchListSelection(QString video_uid);
    713 +    void OnVideoImgSearchListSelection(QString video_uid);
    714  
    715      void OnManualVideoUID(QString video_uid);
    716      void OnManualVideoTitle(QString title);
    717 @@ -140,6 +150,7 @@
    718      // OnVideoPosterSetDone() stop wait background
    719      void StartVideoPosterSet(Metadata *metadata);
    720      void StartVideoFanartSet(Metadata *metadata);
    721 +    void StartVideoBannerSet(Metadata *metadata);
    722  
    723      // StartVideoSearchByUID() start wait background
    724      //   OnVideoSearchByUIDDone() stop wait background
    725 @@ -150,6 +161,8 @@
    726      //   OnVideoSearchByTitleDone()
    727      void StartVideoSearchByTitle(QString video_uid, QString title,
    728              Metadata *metadata);
    729 +    void StartVideoSearchByTitleSubtitle(QString title,
    730 +            QString subtitle, Metadata *metadata);
    731  
    732    private slots:
    733      // called during StartVideoPosterSet
    734 @@ -159,17 +172,27 @@
    735      void OnFanartURL(QString uri, Metadata *metadata);
    736      void OnFanartCopyFinished(FanartDownloadErrorState error, QString errorMsg,
    737                                Metadata *metadata);
    738 +    void OnBannerURL(QString uri, Metadata *metadata);
    739 +    void OnBannerCopyFinished(BannerDownloadErrorState error, QString errorMsg,
    740 +                              Metadata *metadata);
    741  
    742      // called during StartVideoSearchByTitle
    743      void OnVideoSearchByTitleDone(bool normal_exit,
    744                                    const SearchListResults &results,
    745                                    Metadata *metadata);
    746 +    void OnVideoSearchByTitleSubtitleDone(bool normal_exit,
    747 +                                  QStringList result,
    748 +                                  Metadata *metadata);
    749 +    void OnVideoImageOnlyDone(bool normal_exit,
    750 +                                  const SearchListResults &results,
    751 +                                  Metadata *metadata);
    752  
    753  // and now the end points
    754  
    755      // StartVideoPosterSet end
    756      void OnVideoPosterSetDone(Metadata *metadata);
    757      void OnVideoFanartSetDone(Metadata *metadata);
    758 +    void OnVideoBannerSetDone(Metadata *metadata);
    759  
    760      // StartVideoSearchByUID end
    761      void OnVideoSearchByUIDDone(bool normal_exit,
    762 Index: mythplugins/mythvideo/mythvideo/metadatalistmanager.cpp
    763 ===================================================================
    764 --- mythplugins/mythvideo/mythvideo/metadatalistmanager.cpp     (revision 21049)
    765 +++ mythplugins/mythvideo/mythvideo/metadatalistmanager.cpp     (working copy)
    766 @@ -112,10 +112,11 @@
    767      MSqlQuery query(MSqlQuery::InitCon());
    768      query.setForwardOnly(true);
    769      const QString BaseMetadataQuery(
    770 -        "SELECT title, director, plot, rating, year, userrating,"
    771 -        "length, filename, showlevel, coverfile, inetref, childid,"
    772 -        "browse, playcommand, category, intid, trailer, screenshot,"
    773 -        "banner, fanart, host FROM videometadata");
    774 +        "SELECT title, director, plot, rating, year, "
    775 +        "userrating, length, filename, showlevel, "
    776 +        "coverfile, inetref, childid, browse, playcommand, category, "
    777 +        "intid, trailer, screenshot, banner, fanart, "
    778 +        "subtitle, season, episode, host FROM videometadata");
    779  
    780      query.prepare(BaseMetadataQuery);
    781  
    782 Index: mythplugins/mythvideo/mythvideo/metadata.cpp
    783 ===================================================================
    784 --- mythplugins/mythvideo/mythvideo/metadata.cpp        (revision 21049)
    785 +++ mythplugins/mythvideo/mythvideo/metadata.cpp        (working copy)
    786 @@ -89,10 +89,11 @@
    787    public:
    788      MetadataImp(const QString &filename, const QString &trailer, const QString &coverfile,
    789               const QString &screenshot, const QString &banner, const QString &fanart,
    790 -             const QString &title, int year,
    791 +             const QString &title, const QString &subtitle, int year,
    792               const QString &inetref, const QString &director,
    793               const QString &plot, float userrating,
    794               const QString &rating, int length,
    795 +             int season, int episode,
    796               int id, ParentalLevel::Level showlevel, int categoryID,
    797               int childID, bool browse,
    798               const QString &playcommand, const QString &category,
    799 @@ -100,14 +101,15 @@
    800               const country_list &countries,
    801               const cast_list &cast,
    802               const QString &host = "") :
    803 -        m_title(title),
    804 +        m_title(title), m_subtitle(subtitle),
    805          m_inetref(inetref), m_director(director), m_plot(plot),
    806          m_rating(rating), m_playcommand(playcommand), m_category(category),
    807          m_genres(genres), m_countries(countries), m_cast(cast),
    808          m_filename(filename), m_trailer(trailer), m_coverfile(coverfile),
    809          m_screenshot(screenshot), m_banner(banner), m_fanart(fanart),
    810          m_host(host), m_categoryID(categoryID), m_childID(childID),
    811 -        m_year(year), m_length(length), m_showlevel(showlevel),
    812 +        m_year(year), m_length(length), m_season(season),
    813 +        m_episode(episode), m_showlevel(showlevel),
    814          m_browse(browse), m_id(id), m_userrating(userrating)
    815      {
    816          VideoCategory::GetCategory().get(m_categoryID, m_category);
    817 @@ -128,6 +130,7 @@
    818          if (this != &rhs)
    819          {
    820              m_title = rhs.m_title;
    821 +            m_subtitle = rhs.m_subtitle;
    822              m_inetref = rhs.m_inetref;
    823              m_director = rhs.m_director;
    824              m_plot = rhs.m_plot;
    825 @@ -148,6 +151,8 @@
    826              m_childID = rhs.m_childID;
    827              m_year = rhs.m_year;
    828              m_length = rhs.m_length;
    829 +            m_season = rhs.m_season;
    830 +            m_episode = rhs.m_episode;
    831              m_showlevel = rhs.m_showlevel;
    832              m_browse = rhs.m_browse;
    833              m_id = rhs.m_id;
    834 @@ -180,6 +185,9 @@
    835          m_title = title;
    836      }
    837  
    838 +    const QString &getSubtitle() const { return m_subtitle; }
    839 +    void SetSubtitle(const QString &subtitle) { m_subtitle = subtitle; }
    840 +
    841      const QString &GetInetRef() const { return m_inetref; }
    842      void SetInetRef(const QString &inetRef) { m_inetref = inetRef; }
    843  
    844 @@ -249,6 +257,12 @@
    845      int GetLength() const { return m_length; }
    846      void SetLength(int length) { m_length = length; }
    847  
    848 +    int GetSeason() const { return m_season; }
    849 +    void SetSeason(int season) { m_season = season; }
    850 +
    851 +    int GetEpisode() const { return m_episode; }
    852 +    void SetEpisode(int episode) { m_episode = episode; }
    853 +
    854      ParentalLevel::Level GetShowLevel() const { return m_showlevel; }
    855      void SetShowLevel(ParentalLevel::Level showLevel)
    856      {
    857 @@ -289,6 +303,7 @@
    858  
    859    private:
    860      QString m_title;
    861 +    QString m_subtitle;
    862      QString m_inetref;
    863      QString m_director;
    864      QString m_plot;
    865 @@ -310,6 +325,8 @@
    866      int m_childID;
    867      int m_year;
    868      int m_length;
    869 +    int m_season;
    870 +    int m_episode;
    871      ParentalLevel::Level m_showlevel;
    872      bool m_browse;
    873      unsigned int m_id;  // videometadata.intid
    874 @@ -383,10 +400,13 @@
    875  {
    876      MetadataImp tmp(m_filename, VIDEO_TRAILER_DEFAULT, VIDEO_COVERFILE_DEFAULT,
    877                      VIDEO_SCREENSHOT_DEFAULT, VIDEO_BANNER_DEFAULT,
    878 -                    VIDEO_FANART_DEFAULT, Metadata::FilenameToTitle(m_filename),
    879 -                    VIDEO_YEAR_DEFAULT, VIDEO_INETREF_DEFAULT,
    880 -                    VIDEO_DIRECTOR_DEFAULT, VIDEO_PLOT_DEFAULT, 0.0,
    881 -                    VIDEO_RATING_DEFAULT, 0, m_id,
    882 +                    VIDEO_FANART_DEFAULT, Metadata::FilenameToMeta(m_filename, 1),
    883 +                    Metadata::FilenameToMeta(m_filename, 4), VIDEO_YEAR_DEFAULT,
    884 +                    VIDEO_INETREF_DEFAULT, VIDEO_DIRECTOR_DEFAULT,
    885 +                    VIDEO_PLOT_DEFAULT, 0.0,
    886 +                    VIDEO_RATING_DEFAULT, 0,
    887 +                    Metadata::FilenameToMeta(m_filename, 2).toInt(),
    888 +                    Metadata::FilenameToMeta(m_filename, 3).toInt(), m_id,
    889                      ParentalLevel::plLowest, 0, -1, true, "", "",
    890                      Metadata::genre_list(), Metadata::country_list(),
    891                      Metadata::cast_list(), m_host);
    892 @@ -484,7 +504,10 @@
    893      m_screenshot = query.value(17).toString();
    894      m_banner = query.value(18).toString();
    895      m_fanart = query.value(19).toString();
    896 -    m_host = query.value(20).toString();
    897 +    m_subtitle = query.value(20).toString();
    898 +    m_season = query.value(21).toInt();
    899 +    m_episode = query.value(22).toInt();
    900 +    m_host = query.value(23).toString();
    901  
    902      VideoCategory::GetCategory().get(m_categoryID, m_category);
    903  
    904 @@ -501,13 +524,19 @@
    905  void MetadataImp::saveToDatabase()
    906  {
    907      if (m_title.isEmpty())
    908 -        m_title = Metadata::FilenameToTitle(m_filename);
    909 +        m_title = Metadata::FilenameToMeta(m_filename, 1);
    910 +    if (m_subtitle.isEmpty())
    911 +        m_subtitle = Metadata::FilenameToMeta(m_filename, 4);
    912      if (m_director.isEmpty())
    913          m_director = VIDEO_DIRECTOR_UNKNOWN;
    914      if (m_plot.isEmpty())
    915          m_plot = VIDEO_PLOT_DEFAULT;
    916      if (m_rating.isEmpty())
    917          m_rating = VIDEO_RATING_DEFAULT;
    918 +    if (m_season == 0)
    919 +        m_season = Metadata::FilenameToMeta(m_filename, 2).toInt();
    920 +    if (m_episode == 0)
    921 +        m_episode = Metadata::FilenameToMeta(m_filename, 3).toInt();
    922      if (m_coverfile.isEmpty())
    923          m_coverfile = VIDEO_COVERFILE_DEFAULT;
    924      if (m_screenshot.isEmpty())
    925 @@ -533,20 +562,21 @@
    926      {
    927          m_browse = gContext->GetNumSetting("VideoNewBrowsable", 1);
    928  
    929 -        query.prepare("INSERT INTO videometadata (title,director,plot,"
    930 -                      "rating,year,userrating,length,filename,showlevel,"
    931 -                      "coverfile,inetref,browse,trailer,screenshot,banner,"
    932 -                      "fanart,host) VALUES (:TITLE, :DIRECTOR, :PLOT, :RATING, "
    933 -                      ":YEAR, :USERRATING, :LENGTH, :FILENAME, :SHOWLEVEL, "
    934 -                      ":COVERFILE, :INETREF, :BROWSE, :TRAILER, :SCREENSHOT, "
    935 -                      ":BANNER, :FANART, :HOST)");
    936 +        query.prepare("INSERT INTO videometadata (title,subtitle,director,plot,"
    937 +                      "rating,year,userrating,length,season,episode,filename,"
    938 +                      "showlevel,coverfile,inetref,browse,trailer,screenshot,banner,"
    939 +                      "fanart,host) VALUES (:TITLE, :SUBTITLE, :DIRECTOR, :PLOT, "
    940 +                      ":RATING, :YEAR, :USERRATING, :LENGTH, :SEASON, :EPISODE, "
    941 +                      ":FILENAME, :SHOWLEVEL, :COVERFILE, :INETREF, :BROWSE, "
    942 +                      ":TRAILER, :SCREENSHOT, :BANNER, :FANART, :HOST)");
    943      }
    944      else
    945      {
    946 -        query.prepare("UPDATE videometadata SET title = :TITLE, "
    947 +        query.prepare("UPDATE videometadata SET title = :TITLE, subtitle = :SUBTITLE, "
    948                        "director = :DIRECTOR, plot = :PLOT, rating= :RATING, "
    949                        "year = :YEAR, userrating = :USERRATING, "
    950 -                      "length = :LENGTH, filename = :FILENAME, trailer = :TRAILER, "
    951 +                      "length = :LENGTH, season = :SEASON, episode = :EPISODE, "
    952 +                      "filename = :FILENAME, trailer = :TRAILER, "
    953                        "showlevel = :SHOWLEVEL, coverfile = :COVERFILE, "
    954                        "screenshot = :SCREENSHOT, banner = :BANNER, fanart = :FANART, "
    955                        "inetref = :INETREF, browse = :BROWSE, host = :HOST, "
    956 @@ -560,12 +590,15 @@
    957      }
    958  
    959      query.bindValue(":TITLE", m_title);
    960 +    query.bindValue(":SUBTITLE", m_subtitle);
    961      query.bindValue(":DIRECTOR", m_director);
    962      query.bindValue(":PLOT", m_plot);
    963      query.bindValue(":RATING", m_rating);
    964      query.bindValue(":YEAR", m_year);
    965      query.bindValue(":USERRATING", m_userrating);
    966      query.bindValue(":LENGTH", m_length);
    967 +    query.bindValue(":SEASON", m_season);
    968 +    query.bindValue(":EPISODE", m_episode);
    969      query.bindValue(":FILENAME", m_filename);
    970      query.bindValue(":TRAILER", m_trailer);
    971      query.bindValue(":SHOWLEVEL", m_showlevel);
    972 @@ -793,20 +826,53 @@
    973      }
    974  }
    975  
    976 -QString Metadata::FilenameToTitle(const QString &file_name)
    977 +QString Metadata::FilenameToMeta(const QString &file_name, int position)
    978  {
    979 +    // position 1 returns title, 2 returns season,
    980 +    //          3 returns episode, 4 returns subtitle
    981 +
    982      QString title = file_name.right(file_name.length() -
    983                                      file_name.lastIndexOf('/') - 1);
    984 +
    985      title.replace(QRegExp("_"), " ");
    986      title.replace(QRegExp("%20"), " ");
    987 +    title.replace(QRegExp("-"), " ");
    988      title = title.left(title.lastIndexOf('.'));
    989      title.replace(QRegExp("\\."), " ");
    990  
    991 -    title = eatBraces(title, "[", "]");
    992 -    title = eatBraces(title, "(", ")");
    993 -    title = eatBraces(title, "{", "}");
    994 +    QRegExp group("^(.*[^s0-9])" // title
    995 +                  "(?:[s])?(\\d{1,3})(?:\\s|-)?(?:[ex])" //Season
    996 +                  "(?:\\s|-)?(\\d{1,3})" // Episode
    997 +                  "(.*)$", // subtitle
    998 +                  Qt::CaseInsensitive);
    999 +    int pos = group.indexIn(title);
    1000 +    if (pos > -1)
    1001 +    {
    1002 +        QString groupResult = group.cap(0);
    1003 +        QString title = group.cap(1);
    1004 +        QString season = group.cap(2);
    1005 +        QString episode = group.cap(3);
    1006 +        QString subtitle = group.cap(4);
    1007 +        if (position == 1 && !title.isEmpty())
    1008 +            return title.trimmed();
    1009 +        else if (position == 2)
    1010 +            return season.trimmed();
    1011 +        else if (position == 3)
    1012 +            return episode.trimmed();
    1013 +        else if (position == 4)
    1014 +            return subtitle.trimmed();
    1015 +    }
    1016 +    else if (position == 1)
    1017 +        {
    1018 +        title = eatBraces(title, "[", "]");
    1019 +        title = eatBraces(title, "(", ")");
    1020 +        title = eatBraces(title, "{", "}");
    1021 +        return title.trimmed();
    1022 +        }
    1023 +    else if (position == 2 || position == 3)
    1024 +        return QString("0");
    1025  
    1026 -    return title.trimmed();
    1027 +    return QString("");
    1028  }
    1029  
    1030  namespace
    1031 @@ -827,13 +893,14 @@
    1032      return ret;
    1033  }
    1034  
    1035 -Metadata::Metadata(const QString &filename, const QString &trailer,
    1036 -             const QString &coverfile, const QString &screenshot,
    1037 -             const QString &banner, const QString &fanart,
    1038 -             const QString &title, int year,
    1039 +Metadata::Metadata(const QString &filename, const QString &trailer,
    1040 +             const QString &coverfile, const QString &screenshot,
    1041 +             const QString &banner, const QString &fanart,
    1042 +             const QString &title, const QString &subtitle, int year,
    1043               const QString &inetref, const QString &director,
    1044               const QString &plot, float userrating,
    1045               const QString &rating, int length,
    1046 +             int season, int episode,
    1047               int id, ParentalLevel::Level showlevel, int categoryID,
    1048               int childID, bool browse,
    1049               const QString &playcommand, const QString &category,
    1050 @@ -843,10 +910,10 @@
    1051               const QString &host)
    1052  {
    1053      m_imp = new MetadataImp(filename, trailer, coverfile, screenshot, banner,
    1054 -                            fanart, title, year, inetref, director, plot,
    1055 -                            userrating, rating, length, id, showlevel,
    1056 -                            categoryID, childID, browse, playcommand, category,
    1057 -                            genres, countries, cast, host);
    1058 +                            fanart, title, subtitle, year, inetref, director, plot,
    1059 +                            userrating, rating, length, season, episode, id,
    1060 +                            showlevel, categoryID, childID, browse, playcommand,
    1061 +                            category, genres, countries, cast, host);
    1062  }
    1063  
    1064  Metadata::~Metadata()
    1065 @@ -909,6 +976,16 @@
    1066      m_imp->SetTitle(title);
    1067  }
    1068  
    1069 +const QString &Metadata::GetSubtitle() const
    1070 +{
    1071 +    return m_imp->getSubtitle();
    1072 +}
    1073 +
    1074 +void Metadata::SetSubtitle(const QString &subtitle)
    1075 +{
    1076 +    m_imp->SetSubtitle(subtitle);
    1077 +}
    1078 +
    1079  int Metadata::GetYear() const
    1080  {
    1081      return m_imp->getYear();
    1082 @@ -979,6 +1056,26 @@
    1083      m_imp->SetLength(length);
    1084  }
    1085  
    1086 +int Metadata::GetSeason() const
    1087 +{
    1088 +    return m_imp->GetSeason();
    1089 +}
    1090 +
    1091 +void Metadata::SetSeason(int season)
    1092 +{
    1093 +    m_imp->SetSeason(season);
    1094 +}
    1095 +
    1096 +int Metadata::GetEpisode() const
    1097 +{
    1098 +    return m_imp->GetEpisode();
    1099 +}
    1100 +
    1101 +void Metadata::SetEpisode(int episode)
    1102 +{
    1103 +    m_imp->SetEpisode(episode);
    1104 +}
    1105 +
    1106  unsigned int Metadata::GetID() const
    1107  {
    1108      return m_imp->GetID();
    1109 Index: mythplugins/mythvideo/mythvideo/globalsettings.cpp
    1110 ===================================================================
    1111 --- mythplugins/mythvideo/mythvideo/globalsettings.cpp  (revision 21049)
    1112 +++ mythplugins/mythvideo/mythvideo/globalsettings.cpp  (working copy)
    1113 @@ -235,6 +235,66 @@
    1114      return gc;
    1115  }
    1116  
    1117 +HostLineEdit *SearchTVListingsCommand()
    1118 +{
    1119 +    HostLineEdit *gc = new HostLineEdit("mythvideo.TVListCommandLine");
    1120 +    gc->setLabel(QObject::tr("Command to search for TV shows in MythVideo"));
    1121 +    gc->setValue(GetShareDir() + "mythvideo/scripts/ttvdb.py -M");
    1122 +    gc->setHelpText(QObject::tr("This command must be "
    1123 +                    "executable by the user running MythVideo."));
    1124 +    return gc;
    1125 +}
    1126 +
    1127 +HostLineEdit *GetTVPostersCommand()
    1128 +{
    1129 +    HostLineEdit *gc = new HostLineEdit("mythvideo.TVPosterCommandLine");
    1130 +    gc->setLabel(QObject::tr("Command to search for TV Season posters"));
    1131 +    gc->setValue(GetShareDir() + "mythvideo/scripts/ttvdb.py -mP");
    1132 +    gc->setHelpText(QObject::tr("This command must be "
    1133 +                    "executable by the user running MythVideo."));
    1134 +    return gc;
    1135 +}
    1136 +
    1137 +HostLineEdit *GetTVFanartCommand()
    1138 +{
    1139 +    HostLineEdit *gc = new HostLineEdit("mythvideo.TVFanartCommandLine");
    1140 +    gc->setLabel(QObject::tr("Command to search for TV fanart"));
    1141 +    gc->setValue(GetShareDir() + "mythvideo/scripts/ttvdb.py -tF");
    1142 +    gc->setHelpText(QObject::tr("This command must be "
    1143 +                    "executable by the user running MythVideo."));
    1144 +    return gc;
    1145 +}
    1146 +
    1147 +HostLineEdit *GetTVBannerCommand()
    1148 +{
    1149 +    HostLineEdit *gc = new HostLineEdit("mythvideo.TVBannerCommandLine");
    1150 +    gc->setLabel(QObject::tr("Command to search for TV banners"));
    1151 +    gc->setValue(GetShareDir() + "mythvideo/scripts/ttvdb.py -tB");
    1152 +    gc->setHelpText(QObject::tr("This command must be "
    1153 +                    "executable by the user running MythVideo."));
    1154 +    return gc;
    1155 +}
    1156 +
    1157 +HostLineEdit *GetTVDataCommand()
    1158 +{
    1159 +    HostLineEdit *gc = new HostLineEdit("mythvideo.TVDataCommandLine");
    1160 +    gc->setLabel(QObject::tr("Command to extract data for TV Episodes"));
    1161 +    gc->setValue(GetShareDir() + "mythvideo/scripts/ttvdb.py -D");
    1162 +    gc->setHelpText(QObject::tr("This command must be "
    1163 +                    "executable by the user running MythVideo."));
    1164 +    return gc;
    1165 +}
    1166 +
    1167 +HostLineEdit *GetTVTitleSubCommand()
    1168 +{
    1169 +    HostLineEdit *gc = new HostLineEdit("mythvideo.TVTitleSubCommandLine");
    1170 +    gc->setLabel(QObject::tr("Command to search for TV by Title/Subtitle"));
    1171 +    gc->setValue(GetShareDir() + "mythvideo/scripts/ttvdb.py -N");
    1172 +    gc->setHelpText(QObject::tr("This command must be "
    1173 +                    "executable by the user running MythVideo."));
    1174 +    return gc;
    1175 +}
    1176 +
    1177  HostLineEdit *VideoStartupDirectory()
    1178  {
    1179      HostLineEdit *gc = new HostLineEdit("VideoStartupDir");
    1180 @@ -780,6 +840,20 @@
    1181      VConfigPage page7(pages, false);
    1182      page7->addChild(trlr);
    1183  
    1184 +    // page 8
    1185 +    VerticalConfigurationGroup *tvman =
    1186 +            new VerticalConfigurationGroup(true, false);
    1187 +    tvman->setLabel(QObject::tr("Television in MythVideo"));
    1188 +    tvman->addChild(SearchTVListingsCommand());
    1189 +    tvman->addChild(GetTVPostersCommand());
    1190 +    tvman->addChild(GetTVFanartCommand());
    1191 +    tvman->addChild(GetTVBannerCommand());
    1192 +    tvman->addChild(GetTVDataCommand());
    1193 +    tvman->addChild(GetTVTitleSubCommand());
    1194 +
    1195 +    VConfigPage page8(pages, false);
    1196 +    page8->addChild(tvman);
    1197 +
    1198      int page_num = 1;
    1199      for (ConfigPage::PageList::const_iterator p = pages.begin();
    1200           p != pages.end(); ++p, ++page_num)
    1201 Index: mythplugins/mythvideo/mythvideo/videofilter.h
    1202 ===================================================================
    1203 --- mythplugins/mythvideo/mythvideo/videofilter.h       (revision 21049)
    1204 +++ mythplugins/mythvideo/mythvideo/videofilter.h       (working copy)
    1205 @@ -54,7 +54,8 @@
    1206          kOrderByUserRatingDescending = 2,
    1207          kOrderByLength = 3,
    1208          kOrderByFilename = 4,
    1209 -        kOrderByID = 5
    1210 +        kOrderByID = 5,
    1211 +        kOrderBySeasonEp = 6
    1212      };
    1213  
    1214      int GetCategory() const { return category; }
    1215 Index: mythplugins/mythvideo/mythvideo/dbcheck.cpp
    1216 ===================================================================
    1217 --- mythplugins/mythvideo/mythvideo/dbcheck.cpp (revision 21049)
    1218 +++ mythplugins/mythvideo/mythvideo/dbcheck.cpp (working copy)
    1219 @@ -38,7 +38,7 @@
    1220      const QString lastMythDVDDBVersion = "1002";
    1221      const QString lastMythVideoVersion = "1010";
    1222  
    1223 -    const QString currentDatabaseVersion = "1023";
    1224 +    const QString currentDatabaseVersion = "1024";
    1225  
    1226      const QString OldMythVideoVersionName = "VideoDBSchemaVer";
    1227      const QString OldMythDVDVersionName = "DVDDBSchemaVer";
    1228 @@ -832,6 +832,17 @@
    1229              performActualUpdate(updates, "1023", dbver, MythVideoVersionName);
    1230          }
    1231  
    1232 +        if (dbver == "1023")
    1233 +        {
    1234 +            QStringList updates;
    1235 +            updates += "ALTER TABLE videometadata ADD `subtitle` TEXT "
    1236 +                       "NOT NULL AFTER `title`;";
    1237 +            updates += "ALTER TABLE videometadata ADD `season` SMALLINT "
    1238 +                       "UNSIGNED NOT NULL DEFAULT '0' AFTER `length`;";
    1239 +            updates += "ALTER TABLE videometadata ADD `episode` SMALLINT "
    1240 +                       "UNSIGNED NOT NULL DEFAULT '0' AFTER `season`;";
    1241 +            performActualUpdate(updates, "1024", dbver, MythVideoVersionName);
    1242 +        }
    1243  
    1244      }
    1245  }
    1246 Index: mythplugins/mythvideo/mythvideo/main.cpp
    1247 ===================================================================
    1248 --- mythplugins/mythvideo/mythvideo/main.cpp    (revision 21049)
    1249 +++ mythplugins/mythvideo/mythvideo/main.cpp    (working copy)
    1250 @@ -322,6 +322,10 @@
    1251          REG_KEY("Video","INCPARENT","Increase Parental Level","],},F11");
    1252          REG_KEY("Video","DECPARENT","Decrease Parental Level","[,{,F10");
    1253  
    1254 +        REG_KEY("Video","INCSEARCH","Show Incremental Search Dialog","Ctrl+S");
    1255 +        REG_KEY("Video","DOWNLOADDATA","Download metadata for current item","W");
    1256 +        REG_KEY("Video","ITEMDETAIL","Display Item Detail Popup", "");
    1257 +
    1258          REG_KEY("Video","HOME","Go to the first video","Home");
    1259          REG_KEY("Video","END","Go to the last video","End");
    1260  
    1261 Index: mythplugins/mythvideo/mythvideo/videoutils.cpp
    1262 ===================================================================
    1263 --- mythplugins/mythvideo/mythvideo/videoutils.cpp      (revision 21049)
    1264 +++ mythplugins/mythvideo/mythvideo/videoutils.cpp      (working copy)
    1265 @@ -139,6 +139,16 @@
    1266      return QString("%1 minutes").arg(length);
    1267  }
    1268  
    1269 +QString GetDisplaySeasonEpisode(int seasEp, int digits)
    1270 +{
    1271 +    QString seasEpNum = QString::number(seasEp);
    1272 +
    1273 +    if (digits == 2 && seasEpNum.size() < 2)
    1274 +        seasEpNum.prepend("0");
    1275 +       
    1276 +    return seasEpNum;
    1277 +}
    1278 +
    1279  QString GetDisplayBrowse(bool browse)
    1280  {
    1281      return browse ? QObject::tr("Yes") : QObject::tr("No");
    1282 Index: mythplugins/mythvideo/mythvideo/editmetadata.h
    1283 ===================================================================
    1284 --- mythplugins/mythvideo/mythvideo/editmetadata.h      (revision 21049)
    1285 +++ mythplugins/mythvideo/mythvideo/editmetadata.h      (working copy)
    1286 @@ -10,6 +10,7 @@
    1287  class MythUIText;
    1288  class MythUITextEdit;
    1289  class MythUIButton;
    1290 +class MythUISpinBox;
    1291  class MythUICheckBox;
    1292  
    1293  class EditMetadataDialog : public MythScreenType
    1294 @@ -34,8 +35,11 @@
    1295    public slots:
    1296      void SaveAndExit();
    1297      void SetTitle();
    1298 +    void SetSubtitle();
    1299      void SetCategory(MythUIButtonListItem*);
    1300      void SetPlayer();
    1301 +    void SetSeason();
    1302 +    void SetEpisode();
    1303      void SetLevel(MythUIButtonListItem*);
    1304      void SetChild(MythUIButtonListItem*);
    1305      void ToggleBrowse();
    1306 @@ -60,7 +64,10 @@
    1307      //
    1308  
    1309      MythUITextEdit      *m_titleEdit;
    1310 +    MythUITextEdit      *m_subtitleEdit;
    1311      MythUITextEdit      *m_playerEdit;
    1312 +    MythUISpinBox       *m_seasonSpin;
    1313 +    MythUISpinBox       *m_episodeSpin;
    1314      MythUIButtonList      *m_categoryList;
    1315      MythUIButtonList      *m_levelList;
    1316      MythUIButtonList      *m_childList;
    1317 Index: mythplugins/mythvideo/mythvideo/videodlg.cpp
    1318 ===================================================================
    1319 --- mythplugins/mythvideo/mythvideo/videodlg.cpp        (revision 21049)
    1320 +++ mythplugins/mythvideo/mythvideo/videodlg.cpp        (working copy)
    1321 @@ -288,6 +288,113 @@
    1322          FanartDownloadErrorState m_error_state;
    1323      };
    1324  
    1325 +    class BannerDownloadProxy : public QObject
    1326 +    {
    1327 +        Q_OBJECT
    1328 +
    1329 +      signals:
    1330 +        void SigFinished(BannerDownloadErrorState reason, QString errorMsg,
    1331 +                         Metadata *item);
    1332 +      public:
    1333 +        static BannerDownloadProxy *Create(const QUrl &url, const QString &dest,
    1334 +                                          Metadata *item)
    1335 +        {
    1336 +            return new BannerDownloadProxy(url, dest, item);
    1337 +        }
    1338 +
    1339 +      public:
    1340 +        void StartCopy()
    1341 +        {
    1342 +            m_id = m_http.get(m_url.toString(), &m_data_buffer);
    1343 +
    1344 +            m_timer.start(gContext->GetNumSetting("BannerDownloadTimeout", 30)
    1345 +                          * 1000);
    1346 +        }
    1347 +
    1348 +        void Stop()
    1349 +        {
    1350 +            if (m_timer.isActive())
    1351 +                m_timer.stop();
    1352 +
    1353 +            VERBOSE(VB_GENERAL, tr("Banner download stopped."));
    1354 +            m_http.abort();
    1355 +        }
    1356 +
    1357 +      private:
    1358 +        BannerDownloadProxy(const QUrl &url, const QString &dest,
    1359 +                           Metadata *item) : m_item(item), m_dest_file(dest),
    1360 +            m_id(0), m_url(url), m_error_state(besOK)
    1361 +        {
    1362 +            connect(&m_http, SIGNAL(requestFinished(int, bool)),
    1363 +                    SLOT(OnFinished(int, bool)));
    1364 +
    1365 +            connect(&m_timer, SIGNAL(timeout()), SLOT(OnDownloadTimeout()));
    1366 +            m_timer.setSingleShot(true);
    1367 +            m_http.setHost(m_url.host());
    1368 +        }
    1369 +
    1370 +        ~BannerDownloadProxy() {}
    1371 +
    1372 +      private slots:
    1373 +        void OnDownloadTimeout()
    1374 +        {
    1375 +            VERBOSE(VB_IMPORTANT, QString("Copying of '%1' timed out")
    1376 +                    .arg(m_url.toString()));
    1377 +            m_error_state = besTimeout;
    1378 +            Stop();
    1379 +        }
    1380 +
    1381 +        void OnFinished(int id, bool error)
    1382 +        {
    1383 +            QString errorMsg;
    1384 +            if (error)
    1385 +                errorMsg = m_http.errorString();
    1386 +
    1387 +            if (id == m_id)
    1388 +            {
    1389 +                if (m_timer.isActive())
    1390 +                    m_timer.stop();
    1391 +
    1392 +                if (!error)
    1393 +                {
    1394 +                    QFile dest_file(m_dest_file);
    1395 +                    if (dest_file.exists())
    1396 +                        dest_file.remove();
    1397 +
    1398 +                    if (dest_file.open(QIODevice::WriteOnly))
    1399 +                    {
    1400 +                        const QByteArray &data = m_data_buffer.data();
    1401 +                        qint64 size = dest_file.write(data);
    1402 +                        if (size != data.size())
    1403 +                        {
    1404 +                            errorMsg = tr("Error writing data to file %1.")
    1405 +                                    .arg(m_dest_file);
    1406 +                            m_error_state = besError;
    1407 +                        }
    1408 +                    }
    1409 +                    else
    1410 +                    {
    1411 +                        errorMsg = tr("Error: file error '%1' for file %2").
    1412 +                                arg(dest_file.errorString()).arg(m_dest_file);
    1413 +                        m_error_state = besError;
    1414 +                    }
    1415 +                }
    1416 +
    1417 +                emit SigFinished(m_error_state, errorMsg, m_item);
    1418 +            }
    1419 +        }
    1420 +
    1421 +      private:
    1422 +        Metadata *m_item;
    1423 +        QHttp m_http;
    1424 +        QBuffer m_data_buffer;
    1425 +        QString m_dest_file;
    1426 +        int m_id;
    1427 +        QTimer m_timer;
    1428 +        QUrl m_url;
    1429 +        BannerDownloadErrorState m_error_state;
    1430 +    };
    1431 +
    1432      /** \class ExecuteExternalCommand
    1433       *
    1434       * \brief Base class for executing an external script or other process, must
    1435 @@ -467,16 +574,30 @@
    1436          void Run(QString title, Metadata *item)
    1437          {
    1438              m_item = item;
    1439 +            int m_season, m_episode;
    1440 +            QString cmd;
    1441 +            m_season = m_item->GetSeason();
    1442 +            m_episode = m_item->GetEpisode();
    1443  
    1444 -            QString def_cmd = QDir::cleanPath(QString("%1/%2")
    1445 +            if (m_season > 0 || m_episode > 0)
    1446 +            {
    1447 +                const QString def_cmd = QDir::cleanPath(QString("%1/%2")
    1448                      .arg(GetShareDir())
    1449 +                    .arg("mythvideo/scripts/ttvdb.py -M"));
    1450 +                cmd = gContext->GetSetting("mythvideo.TVListCommandLine",
    1451 +                                                        def_cmd);
    1452 +            }
    1453 +            else
    1454 +            {
    1455 +                QString def_cmd = QDir::cleanPath(QString("%1/%2")
    1456 +                    .arg(GetShareDir())
    1457                      .arg("mythvideo/scripts/tmdb.pl -M"));
    1458  
    1459 -            QString cmd = gContext->GetSetting("MovieListCommandLine", def_cmd);
    1460 -
    1461 -            QStringList args;
    1462 -            args += title;
    1463 -            StartRun(cmd, args, "Video Search");
    1464 +                cmd = gContext->GetSetting("MovieListCommandLine", def_cmd);
    1465 +            }
    1466 +                QStringList args;
    1467 +                args += title;
    1468 +                StartRun(cmd, args, "Video Search");
    1469          }
    1470  
    1471        private:
    1472 @@ -505,6 +626,54 @@
    1473          Metadata *m_item;
    1474      };
    1475  
    1476 +    /** \class VideoTitleSubtitleSearch
    1477 +     *
    1478 +     * \brief Executes the external command to do video title/subtitle searches.
    1479 +     *
    1480 +     */
    1481 +    class VideoTitleSubtitleSearch : public ExecuteExternalCommand
    1482 +    {
    1483 +        Q_OBJECT
    1484 +
    1485 +      signals:
    1486 +        void SigSearchResults(bool normal_exit, QStringList result,
    1487 +                Metadata *item);
    1488 +
    1489 +      public:
    1490 +        VideoTitleSubtitleSearch(QObject *oparent) :
    1491 +            ExecuteExternalCommand(oparent), m_item(0) {}
    1492 +
    1493 +        void Run(QString title, QString subtitle, Metadata *item)
    1494 +        {
    1495 +            m_item = item;
    1496 +            QString cmd;
    1497 +
    1498 +                const QString def_cmd = QDir::cleanPath(QString("%1/%2")
    1499 +                    .arg(GetShareDir())
    1500 +                    .arg("mythvideo/scripts/ttvdb.py -N"));
    1501 +                cmd = gContext->GetSetting("mythvideo.TVTitleSubCommandLine",
    1502 +                                                        def_cmd);
    1503 +                QStringList args;
    1504 +                args += title;
    1505 +                args += subtitle;
    1506 +                StartRun(cmd, args, "Video Search");
    1507 +        }
    1508 +
    1509 +      private:
    1510 +        ~VideoTitleSubtitleSearch() {}
    1511 +
    1512 +        void OnExecDone(bool normal_exit, QStringList out, QStringList err)
    1513 +        {
    1514 +            (void) err;
    1515 +
    1516 +            emit SigSearchResults(normal_exit, out, m_item);
    1517 +            deleteLater();
    1518 +        }
    1519 +
    1520 +      private:
    1521 +        Metadata *m_item;
    1522 +    };
    1523 +
    1524      /** \class VideoUIDSearch
    1525       *
    1526       * \brief Execute the command to do video searches based on their ID.
    1527 @@ -525,15 +694,32 @@
    1528          void Run(QString video_uid, Metadata *item)
    1529          {
    1530              m_item = item;
    1531 -            m_video_uid = video_uid;
    1532 +            m_video_uid = video_uid;           
    1533 +            int m_season, m_episode;
    1534 +            m_season = m_item->GetSeason();
    1535 +            m_episode = m_item->GetEpisode();
    1536  
    1537 -            const QString def_cmd = QDir::cleanPath(QString("%1/%2")
    1538 +            if (m_season > 0 || m_episode > 0)
    1539 +            {
    1540 +                const QString def_cmd = QDir::cleanPath(QString("%1/%2")
    1541                      .arg(GetShareDir())
    1542 +                    .arg("mythvideo/scripts/ttvdb.py -mD"));
    1543 +                const QString cmd = gContext->GetSetting("mythvideo.TVDataCommandLine",
    1544 +                                                        def_cmd);
    1545 +                QStringList args;
    1546 +                args << video_uid << QString::number(m_season)
    1547 +                                  << QString::number(m_episode);
    1548 +                StartRun(cmd, args, "Video Data Query");
    1549 +            }
    1550 +            else
    1551 +            {
    1552 +                const QString def_cmd = QDir::cleanPath(QString("%1/%2")
    1553 +                    .arg(GetShareDir())
    1554                      .arg("mythvideo/scripts/tmdb.pl -D"));
    1555 -            const QString cmd = gContext->GetSetting("MovieDataCommandLine",
    1556 +                const QString cmd = gContext->GetSetting("MovieDataCommandLine",
    1557                                                          def_cmd);
    1558 -
    1559 -            StartRun(cmd, QStringList(video_uid), "Video Data Query");
    1560 +                StartRun(cmd, QStringList(video_uid), "Video Data Query");
    1561 +            }
    1562          }
    1563  
    1564        private:
    1565 @@ -570,14 +756,33 @@
    1566          void Run(QString video_uid, Metadata *item)
    1567          {
    1568              m_item = item;
    1569 +            int m_season, m_episode;
    1570 +            m_season = m_item->GetSeason();
    1571 +            m_episode = m_item->GetEpisode();
    1572  
    1573 -            const QString default_cmd =
    1574 +            if (m_season > 0 || m_episode > 0)
    1575 +            {
    1576 +                const QString def_cmd = QDir::cleanPath(QString("%1/%2")
    1577 +                    .arg(GetShareDir())
    1578 +                    .arg("mythvideo/scripts/ttvdb.py -mP"));
    1579 +                const QString cmd = gContext->GetSetting("mythvideo.TVPosterCommandLine",
    1580 +                                                        def_cmd);
    1581 +                QStringList args;
    1582 +                args << video_uid << QString::number(m_season)
    1583 +                                  << QString::number(m_episode);
    1584 +                StartRun(cmd, args, "Poster Query");
    1585 +            }
    1586 +            else
    1587 +            {
    1588 +                const QString default_cmd =
    1589                      QDir::cleanPath(QString("%1/%2")
    1590                                          .arg(GetShareDir())
    1591                                          .arg("mythvideo/scripts/tmdb.pl -P"));
    1592 -            const QString cmd = gContext->GetSetting("MoviePosterCommandLine",
    1593 +                const QString cmd = gContext->GetSetting("MoviePosterCommandLine",
    1594                                                          default_cmd);
    1595 -            StartRun(cmd, QStringList(video_uid), "Poster Query");
    1596 +
    1597 +                StartRun(cmd, QStringList(video_uid), "Poster Query");
    1598 +            }
    1599          }
    1600  
    1601        private:
    1602 @@ -627,14 +832,32 @@
    1603          void Run(QString video_uid, Metadata *item)
    1604          {
    1605              m_item = item;
    1606 +            int m_season, m_episode;
    1607 +            m_season = m_item->GetSeason();
    1608 +            m_episode = m_item->GetEpisode();
    1609  
    1610 -            const QString default_cmd =
    1611 +            if (m_season > 0 || m_episode > 0)
    1612 +            {
    1613 +                const QString def_cmd = QDir::cleanPath(QString("%1/%2")
    1614 +                    .arg(GetShareDir())
    1615 +                    .arg("mythvideo/scripts/ttvdb.py -tF"));
    1616 +                const QString cmd = gContext->GetSetting("mythvideo.TVFanartCommandLine",
    1617 +                                                        def_cmd);
    1618 +                QStringList args;
    1619 +                args << video_uid << QString::number(m_season)
    1620 +                                  << QString::number(m_episode);
    1621 +                StartRun(cmd, args, "Fanart Query");
    1622 +            }
    1623 +            else
    1624 +            {
    1625 +                const QString default_cmd =
    1626                      QDir::cleanPath(QString("%1/%2")
    1627                                          .arg(GetShareDir())
    1628                                          .arg("mythvideo/scripts/tmdb.pl -B"));
    1629 -            const QString cmd = gContext->GetSetting("MovieFanartCommandLine",
    1630 +                const QString cmd = gContext->GetSetting("MovieFanartCommandLine",
    1631                                                          default_cmd);
    1632 -            StartRun(cmd, QStringList(video_uid), "Fanart Query");
    1633 +                StartRun(cmd, QStringList(video_uid), "Fanart Query");
    1634 +            }
    1635          }
    1636  
    1637        private:
    1638 @@ -665,7 +888,68 @@
    1639          Metadata *m_item;
    1640      };
    1641  
    1642 +    /** \class VideoBannerSearch
    1643 +     *
    1644 +     * \brief Execute external video banner command.
    1645 +     *
    1646 +     */
    1647 +    class VideoBannerSearch : public ExecuteExternalCommand
    1648 +    {
    1649 +        Q_OBJECT
    1650  
    1651 +      signals:
    1652 +        void SigBannerURL(QString url, Metadata *item);
    1653 +
    1654 +      public:
    1655 +        VideoBannerSearch(QObject *oparent) :
    1656 +            ExecuteExternalCommand(oparent), m_item(0) {}
    1657 +
    1658 +        void Run(QString video_uid, Metadata *item)
    1659 +        {
    1660 +            m_item = item;
    1661 +            int m_season, m_episode;
    1662 +            m_season = m_item->GetSeason();
    1663 +            m_episode = m_item->GetEpisode();
    1664 +
    1665 +            const QString def_cmd = QDir::cleanPath(QString("%1/%2")
    1666 +                    .arg(GetShareDir())
    1667 +                    .arg("mythvideo/scripts/ttvdb.py -tB"));
    1668 +            const QString cmd = gContext->GetSetting("mythvideo.TVBannerCommandLine",
    1669 +                                                        def_cmd);
    1670 +            QStringList args;
    1671 +            args << video_uid << QString::number(m_season)
    1672 +                                  << QString::number(m_episode);
    1673 +            StartRun(cmd, args, "Banner Query");
    1674 +        }
    1675 +
    1676 +      private:
    1677 +        ~VideoBannerSearch() {}
    1678 +
    1679 +        void OnExecDone(bool normal_exit, QStringList out, QStringList err)
    1680 +        {
    1681 +            (void) err;
    1682 +            QString url;
    1683 +            if (normal_exit && out.size())
    1684 +            {
    1685 +                for (QStringList::const_iterator p = out.begin();
    1686 +                        p != out.end(); ++p)
    1687 +                {
    1688 +                    if ((*p).length())
    1689 +                    {
    1690 +                        url = *p;
    1691 +                        break;
    1692 +                    }
    1693 +                }
    1694 +            }
    1695 +
    1696 +            emit SigBannerURL(url, m_item);
    1697 +            deleteLater();
    1698 +        }
    1699 +
    1700 +      private:
    1701 +        Metadata *m_item;
    1702 +    };
    1703 +
    1704      class ParentalLevelNotifyContainer : public QObject
    1705      {
    1706          Q_OBJECT
    1707 @@ -790,8 +1074,9 @@
    1708          }
    1709      };
    1710  
    1711 -    bool GetLocalVideoPoster(const QString &video_uid, const QString &filename,
    1712 -                             const QStringList &in_dirs, QString &poster)
    1713 +    bool GetLocalVideoImage(const QString &video_uid, const QString &filename,
    1714 +                             const QStringList &in_dirs, QString &image,
    1715 +                             QString title, int season)
    1716      {
    1717          QStringList search_dirs(in_dirs);
    1718  
    1719 @@ -821,6 +1106,10 @@
    1720                      ext != image_exts.end(); ++ext)
    1721              {
    1722                  QStringList sfn;
    1723 +                if (season > 0)
    1724 +                    sfn += fntm.arg(*dir).arg(QString("%1 Season %2")
    1725 +                                 .arg(title).arg(QString::number(season)))
    1726 +                                 .arg(*ext);
    1727                  sfn += fntm.arg(*dir).arg(base_name).arg(*ext);
    1728                  sfn += fntm.arg(*dir).arg(video_uid).arg(*ext);
    1729  
    1730 @@ -829,7 +1118,7 @@
    1731                  {
    1732                      if (QFile::exists(*i))
    1733                      {
    1734 -                        poster = *i;
    1735 +                        image = *i;
    1736                          return true;
    1737                      }
    1738                  }
    1739 @@ -946,7 +1235,8 @@
    1740              QString coverfile;
    1741              if ((metadata->IsHostSet()
    1742                  && !metadata->GetCoverFile().startsWith("/"))
    1743 -                && (metadata->GetCoverFile() != "No Cover"))
    1744 +                && (metadata->GetCoverFile() != "No Cover")
    1745 +                && !metadata->GetCoverFile().isEmpty())
    1746              {
    1747                  coverfile = GenRemoteFileURL("Coverart", metadata->GetHost(),
    1748                          metadata->GetCoverFile());
    1749 @@ -962,8 +1252,8 @@
    1750              tmp["coverfile"] = coverfile;
    1751  
    1752              QString screenshotfile;
    1753 -            if (metadata->IsHostSet() &&
    1754 -                    !metadata->GetScreenshot().startsWith("/"))
    1755 +            if (metadata->IsHostSet() && !metadata->GetScreenshot().startsWith("/")
    1756 +                && !metadata->GetScreenshot().isEmpty())
    1757              {
    1758                  screenshotfile = GenRemoteFileURL("Screenshots",
    1759                          metadata->GetHost(), metadata->GetScreenshot());
    1760 @@ -979,7 +1269,8 @@
    1761              tmp["screenshotfile"] = screenshotfile;
    1762  
    1763              QString bannerfile;
    1764 -            if (metadata->IsHostSet() && !metadata->GetBanner().startsWith("/"))
    1765 +            if (metadata->IsHostSet() && !metadata->GetBanner().startsWith("/")
    1766 +                && !metadata->GetBanner().isEmpty())
    1767              {
    1768                  bannerfile = GenRemoteFileURL("Banners", metadata->GetHost(),
    1769                          metadata->GetBanner());
    1770 @@ -995,7 +1286,8 @@
    1771              tmp["bannerfile"] = bannerfile;
    1772  
    1773              QString fanartfile;
    1774 -            if (metadata->IsHostSet() && !metadata->GetFanart().startsWith("/"))
    1775 +            if (metadata->IsHostSet() && !metadata->GetFanart().startsWith("/")
    1776 +                && !metadata->GetFanart().isEmpty())
    1777              {
    1778                  fanartfile = GenRemoteFileURL("Fanart", metadata->GetHost(),
    1779                          metadata->GetFanart());
    1780 @@ -1016,6 +1308,7 @@
    1781  
    1782              tmp["filename"] = metadata->GetFilename();
    1783              tmp["title"] = metadata->GetTitle();
    1784 +            tmp["subtitle"] = metadata->GetSubtitle();
    1785              tmp["director"] = metadata->GetDirector();
    1786              tmp["plot"] = metadata->GetPlot();
    1787              tmp["genres"] = GetDisplayGenres(*metadata);
    1788 @@ -1025,7 +1318,21 @@
    1789              tmp["length"] = GetDisplayLength(metadata->GetLength());
    1790              tmp["year"] = GetDisplayYear(metadata->GetYear());
    1791              tmp["userrating"] = GetDisplayUserRating(metadata->GetUserRating());
    1792 +            tmp["season"] = GetDisplaySeasonEpisode(metadata->GetSeason(), 1);
    1793 +            tmp["episode"] = GetDisplaySeasonEpisode(metadata->GetEpisode(), 1);
    1794  
    1795 +            if (metadata->GetSeason() > 0 || metadata->GetEpisode() > 0)
    1796 +            {
    1797 +                tmp["s##e##"] = QString("s%1e%2").arg(GetDisplaySeasonEpisode
    1798 +                                                     (metadata->GetSeason(), 2))
    1799 +                                .arg(GetDisplaySeasonEpisode(metadata->GetEpisode(), 2));
    1800 +                tmp["##x##"] = QString("%1x%2").arg(GetDisplaySeasonEpisode
    1801 +                                                     (metadata->GetSeason(), 1))           
    1802 +                                .arg(GetDisplaySeasonEpisode(metadata->GetEpisode(), 2));
    1803 +            }
    1804 +            else
    1805 +                tmp["s##e##"] = tmp["##x##"] = "";
    1806 +
    1807              tmp["userratingstate"] =
    1808                      QString::number((int)(metadata->GetUserRating()));
    1809              tmp["videolevel"] = ParentalLevelToState(metadata->GetShowLevel());
    1810 @@ -1075,6 +1382,7 @@
    1811          h.handleText("player");
    1812          h.handleText("filename");
    1813          h.handleText("title");
    1814 +        h.handleText("subtitle");
    1815          h.handleText("director");
    1816          h.handleText("plot");
    1817          h.handleText("genres");
    1818 @@ -1082,6 +1390,10 @@
    1819          h.handleText("cast");
    1820          h.handleText("rating");
    1821          h.handleText("length");
    1822 +        h.handleText("season");
    1823 +        h.handleText("s##e##");
    1824 +        h.handleText("##x##");
    1825 +        h.handleText("episode");
    1826          h.handleText("year");
    1827          h.handleText("userrating");
    1828  
    1829 @@ -1254,6 +1566,7 @@
    1830  
    1831          m_artDir = gContext->GetSetting("VideoArtworkDir");
    1832          m_fanDir = gContext->GetSetting("mythvideo.fanartDir");
    1833 +        m_banDir = gContext->GetSetting("mythvideo.bannerDir");
    1834      }
    1835  
    1836      ~VideoDialogPrivate()
    1837 @@ -1322,6 +1635,22 @@
    1838          }
    1839      }
    1840  
    1841 +    void AddBannerDownload(BannerDownloadProxy *download)
    1842 +    {
    1843 +        m_running_bdownloads.insert(download);
    1844 +    }
    1845 +
    1846 +    void RemoveBannerDownload(BannerDownloadProxy *download)
    1847 +    {
    1848 +        if (download)
    1849 +        {
    1850 +            banner_download_list::iterator p =
    1851 +                    m_running_bdownloads.find(download);
    1852 +            if (p != m_running_bdownloads.end())
    1853 +                m_running_bdownloads.erase(p);
    1854 +        }
    1855 +    }
    1856 +
    1857      void StopAllRunningCoverDownloads()
    1858      {
    1859          cover_download_list tmp(m_running_downloads);
    1860 @@ -1336,12 +1665,20 @@
    1861              (*p)->Stop();
    1862      }
    1863  
    1864 +    void StopAllRunningBannerDownloads()
    1865 +    {
    1866 +        banner_download_list tmp(m_running_bdownloads);
    1867 +        for (banner_download_list::iterator p = tmp.begin(); p != tmp.end(); ++p)
    1868 +            (*p)->Stop();
    1869 +    }
    1870  
    1871    public:
    1872      typedef std::set<CoverDownloadProxy *> cover_download_list;
    1873      cover_download_list m_running_downloads;
    1874      typedef std::set<FanartDownloadProxy *> fanart_download_list;
    1875      fanart_download_list m_running_fdownloads;
    1876 +    typedef std::set<BannerDownloadProxy *> banner_download_list;
    1877 +    banner_download_list m_running_bdownloads;
    1878      ParentalLevelNotifyContainer m_parentalLevel;
    1879      bool m_switchingLayout;
    1880  
    1881 @@ -1364,6 +1701,7 @@
    1882  
    1883      QString m_artDir;
    1884      QString m_fanDir;
    1885 +    QString m_banDir;
    1886      VideoScanner *m_scanner;
    1887  
    1888      QString m_lastTreeNodePath;
    1889 @@ -2021,6 +2359,15 @@
    1890              if (!m_menuPopup)
    1891                  VideoMenu();
    1892          }
    1893 +        else if (action == "DOWNLOADDATA")
    1894 +        {
    1895 +            if (!m_menuPopup && GetMetadata(GetItemCurrent()))
    1896 +                VideoSearch();
    1897 +        }
    1898 +        else if (action == "INCSEARCH")
    1899 +            searchStart();
    1900 +        else if (action == "ITEMDETAIL")
    1901 +            DoItemDetailShow();
    1902          else if (action == "ESCAPE")
    1903          {
    1904              if (m_d->m_type != DLG_TREE
    1905 @@ -2080,6 +2427,62 @@
    1906          m_popupStack->AddScreen(okPopup);
    1907  }
    1908  
    1909 +void VideoDialog::searchComplete(QString string)
    1910 +{
    1911 +    VERBOSE(VB_GENERAL | VB_EXTRA,
    1912 +            QString("Switching to: %1").arg(string));
    1913 +
    1914 +    if (m_d->m_type == DLG_TREE)
    1915 +    {
    1916 +        MythGenericTree *parent = m_videoButtonTree->GetCurrentNode()->getParent();
    1917 +        MythGenericTree *new_node = parent->getChildByName(string);
    1918 +        if (new_node)
    1919 +        {
    1920 +            m_videoButtonTree->SetCurrentNode(new_node);
    1921 +            m_videoButtonTree->SetActive(true);
    1922 +        }
    1923 +    }
    1924 +    else
    1925 +    {
    1926 +        m_videoButtonList->MoveToNamedPosition(string);
    1927 +        m_videoButtonList->SetActive(true);
    1928 +    }
    1929 +}
    1930 +
    1931 +void VideoDialog::searchStart(void)
    1932 +{
    1933 +    MythGenericTree *parent = m_d->m_currentNode->getParent();
    1934 +
    1935 +    QStringList childList;
    1936 +    QList<MythGenericTree*>::iterator it;
    1937 +    QList<MythGenericTree*> *children;
    1938 +    if (parent && m_d->m_type == DLG_TREE)
    1939 +        children = parent->getAllChildren();
    1940 +    else
    1941 +        children = m_d->m_currentNode->getAllChildren();
    1942 +
    1943 +    for (it = children->begin(); it != children->end(); ++it)
    1944 +    {
    1945 +        MythGenericTree *child = *it;
    1946 +        childList << child->getString();
    1947 +    }
    1948 +
    1949 +    MythScreenStack *popupStack =
    1950 +        GetMythMainWindow()->GetStack("popup stack");
    1951 +    MythUISearchDialog *searchDialog = new MythUISearchDialog(popupStack,
    1952 +        tr("Video Search"), childList, false, "");
    1953 +
    1954 +    if (searchDialog->Create())
    1955 +    {
    1956 +        connect(searchDialog, SIGNAL(haveResult(QString)),
    1957 +                SLOT(searchComplete(QString)));
    1958 +
    1959 +        popupStack->AddScreen(searchDialog);
    1960 +    }
    1961 +    else
    1962 +        delete searchDialog;
    1963 +}
    1964 +
    1965  bool VideoDialog::goBack()
    1966  {
    1967      bool handled = false;
    1968 @@ -2275,6 +2678,10 @@
    1969  
    1970      m_menuPopup->AddButton(tr("Edit Metadata"), SLOT(EditMetadata()));
    1971      m_menuPopup->AddButton(tr("Download Metadata"), SLOT(VideoSearch()));
    1972 +    m_menuPopup->AddButton(tr("Download Images Only"),
    1973 +                          SLOT(ImageOnlyDownload()));
    1974 +    m_menuPopup->AddButton(tr("Search TV by Title/Subtitle"),
    1975 +                          SLOT(TitleSubtitleSearch()));
    1976      m_menuPopup->AddButton(tr("Manually Enter Video #"),
    1977              SLOT(ManualVideoUID()));
    1978      m_menuPopup->AddButton(tr("Manually Enter Video Title"),
    1979 @@ -2582,6 +2989,35 @@
    1980                                  metadata);
    1981  }
    1982  
    1983 +void VideoDialog::TitleSubtitleSearch()
    1984 +{
    1985 +    Metadata *metadata = GetMetadata(GetItemCurrent());
    1986 +
    1987 +    if (metadata)
    1988 +        StartVideoSearchByTitleSubtitle(metadata->GetTitle(),
    1989 +                                metadata->GetSubtitle(), metadata);
    1990 +}
    1991 +
    1992 +void VideoDialog::ImageOnlyDownload()
    1993 +{
    1994 +    Metadata *metadata = GetMetadata(GetItemCurrent());
    1995 +    QString title = metadata->GetTitle();
    1996 +
    1997 +    if (metadata->GetInetRef() != VIDEO_INETREF_DEFAULT)
    1998 +        StartVideoPosterSet(metadata);
    1999 +    else
    2000 +    {
    2001 +        createBusyDialog(title);
    2002 +
    2003 +        VideoTitleSearch *vts = new VideoTitleSearch(this);
    2004 +        connect(vts, SIGNAL(SigSearchResults(bool, const SearchListResults &,
    2005 +                                Metadata *)),
    2006 +                SLOT(OnVideoImageOnlyDone(bool, const SearchListResults &,
    2007 +                                Metadata *)));
    2008 +        vts->Run(title, metadata);
    2009 +    }
    2010 +}
    2011 +
    2012  void VideoDialog::ToggleBrowseable()
    2013  {
    2014      Metadata *metadata = GetMetadata(GetItemCurrent());
    2015 @@ -2625,6 +3061,18 @@
    2016      }
    2017  }
    2018  
    2019 +void VideoDialog::OnVideoImgSearchListSelection(QString video_uid)
    2020 +{
    2021 +    Metadata *metadata = GetMetadata(GetItemCurrent());
    2022 +    if (metadata && !video_uid.isEmpty())
    2023 +    {
    2024 +        metadata->SetInetRef(video_uid);
    2025 +        metadata->UpdateDatabase();
    2026 +        UpdateItem(GetItemCurrent());
    2027 +        StartVideoPosterSet(metadata);
    2028 +    }
    2029 +}
    2030 +
    2031  void VideoDialog::OnParentalChange(int amount)
    2032  {
    2033      Metadata *metadata = GetMetadata(GetItemCurrent());
    2034 @@ -2758,12 +3206,29 @@
    2035          metadata->Reset();
    2036  
    2037          QString cover_file;
    2038 -        if (GetLocalVideoPoster(metadata->GetInetRef(), metadata->GetFilename(),
    2039 -                        QStringList(m_d->m_artDir), cover_file))
    2040 +        if (GetLocalVideoImage(metadata->GetInetRef(), metadata->GetFilename(),
    2041 +                        QStringList(m_d->m_artDir), cover_file,
    2042 +                        metadata->GetTitle(), metadata->GetSeason()))
    2043          {
    2044              metadata->SetCoverFile(cover_file);
    2045          }
    2046  
    2047 +        QString fanart_file;
    2048 +        if (GetLocalVideoImage(metadata->GetInetRef(), metadata->GetFilename(),
    2049 +                        QStringList(m_d->m_fanDir), fanart_file,
    2050 +                        metadata->GetTitle(), metadata->GetSeason()))
    2051 +        {
    2052 +            metadata->SetFanart(fanart_file);
    2053 +        }
    2054 +
    2055 +        QString banner_file;
    2056 +        if (GetLocalVideoImage(metadata->GetInetRef(), metadata->GetFilename(),
    2057 +                        QStringList(m_d->m_banDir), banner_file,
    2058 +                        metadata->GetTitle(), metadata->GetSeason()))
    2059 +        {
    2060 +            metadata->SetBanner(banner_file);
    2061 +        }
    2062 +
    2063          metadata->UpdateDatabase();
    2064  
    2065          UpdateItem(item);
    2066 @@ -2778,13 +3243,14 @@
    2067      //createBusyDialog(QObject::tr("Fetching poster for %1 (%2)")
    2068      //                    .arg(metadata->InetRef())
    2069      //                    .arg(metadata->Title()));
    2070 -    QStringList search_dirs;
    2071 -    search_dirs += m_d->m_artDir;
    2072 +    QStringList cover_dirs;
    2073 +    cover_dirs += m_d->m_artDir;
    2074  
    2075      QString cover_file;
    2076  
    2077 -    if (GetLocalVideoPoster(metadata->GetInetRef(), metadata->GetFilename(),
    2078 -                            search_dirs, cover_file))
    2079 +    if (GetLocalVideoImage(metadata->GetInetRef(), metadata->GetFilename(),
    2080 +                            cover_dirs, cover_file, metadata->GetTitle(),
    2081 +                            metadata->GetSeason()))
    2082      {
    2083          metadata->SetCoverFile(cover_file);
    2084          OnVideoPosterSetDone(metadata);
    2085 @@ -2799,6 +3265,19 @@
    2086          vps->Run(metadata->GetInetRef(), metadata);
    2087      }
    2088  
    2089 +    QStringList fanart_dirs;
    2090 +    fanart_dirs += m_d->m_fanDir;
    2091 +
    2092 +    QString fanart_file;
    2093 +
    2094 +    if (GetLocalVideoImage(metadata->GetInetRef(), metadata->GetFilename(),
    2095 +                            fanart_dirs, fanart_file, metadata->GetTitle(),
    2096 +                            metadata->GetSeason()))
    2097 +    {
    2098 +        metadata->SetFanart(fanart_file);
    2099 +        OnVideoFanartSetDone(metadata);
    2100 +    }
    2101 +
    2102      if (metadata->GetFanart().isEmpty())
    2103      {
    2104          // Obtain video fanart
    2105 @@ -2807,6 +3286,29 @@
    2106                  SLOT(OnFanartURL(QString, Metadata *)));
    2107          vfs->Run(metadata->GetInetRef(), metadata);
    2108      }
    2109 +
    2110 +    QStringList banner_dirs;
    2111 +    banner_dirs += m_d->m_banDir;
    2112 +       
    2113 +    QString banner_file;
    2114 +       
    2115 +    if (GetLocalVideoImage(metadata->GetInetRef(), metadata->GetFilename(),
    2116 +                            banner_dirs, banner_file, metadata->GetTitle(),
    2117 +                            metadata->GetSeason()))
    2118 +    {
    2119 +        metadata->SetBanner(banner_file);
    2120 +        OnVideoBannerSetDone(metadata);
    2121 +    }
    2122 +
    2123 +    if (metadata->GetBanner().isEmpty() &&
    2124 +       (metadata->GetSeason() > 0 || metadata->GetEpisode() > 0))
    2125 +    {
    2126 +        // Obtain video banner (only for TV)
    2127 +        VideoBannerSearch *vbs = new VideoBannerSearch(this);
    2128 +        connect(vbs, SIGNAL(SigBannerURL(QString, Metadata *)),
    2129 +                SLOT(OnBannerURL(QString, Metadata *)));
    2130 +        vbs->Run(metadata->GetInetRef(), metadata);
    2131 +    }
    2132  }
    2133  
    2134  void VideoDialog::OnPosterURL(QString uri, Metadata *metadata)
    2135 @@ -2839,8 +3341,21 @@
    2136              QUrl url(uri);
    2137  
    2138              QString ext = QFileInfo(url.path()).suffix();
    2139 -            QString dest_file = QString("%1/%2.%3").arg(fileprefix)
    2140 -                    .arg(metadata->GetInetRef()).arg(ext);
    2141 +            QString dest_file;
    2142 +
    2143 +            if (metadata->GetSeason() > 0 ||
    2144 +                metadata->GetEpisode() > 0)
    2145 +            {
    2146 +                // Name TV downloads so that they already work with the PBB
    2147 +                QString title = QString("%1 Season %2").arg(metadata->GetTitle())
    2148 +                        .arg(metadata->GetSeason());
    2149 +                dest_file = QString("%1/%2.%3").arg(fileprefix)
    2150 +                        .arg(title).arg(ext);
    2151 +            }
    2152 +            else
    2153 +                dest_file = QString("%1/%2.%3").arg(fileprefix)
    2154 +                        .arg(metadata->GetInetRef()).arg(ext);
    2155 +
    2156              VERBOSE(VB_IMPORTANT, QString("Copying '%1' -> '%2'...")
    2157                      .arg(url.toString()).arg(dest_file));
    2158  
    2159 @@ -2933,8 +3448,21 @@
    2160              QUrl url(uri);
    2161  
    2162              QString ext = QFileInfo(url.path()).suffix();
    2163 -            QString dest_file = QString("%1/%2.%3").arg(fileprefix)
    2164 -                    .arg(metadata->GetInetRef()).arg(ext);
    2165 +            QString dest_file;
    2166 +
    2167 +            if (metadata->GetSeason() > 0 ||
    2168 +                metadata->GetEpisode() > 0)
    2169 +            {
    2170 +                // Name TV downloads so that they already work with the PBB   
    2171 +                QString title = QString("%1 Season %2").arg(metadata->GetTitle())
    2172 +                        .arg(metadata->GetSeason());
    2173 +                dest_file = QString("%1/%2.%3").arg(fileprefix)
    2174 +                        .arg(title).arg(ext);
    2175 +            }
    2176 +            else
    2177 +                dest_file = QString("%1/%2.%3").arg(fileprefix)
    2178 +                        .arg(metadata->GetInetRef()).arg(ext);
    2179 +
    2180              VERBOSE(VB_IMPORTANT, QString("Copying '%1' -> '%2'...")
    2181                      .arg(url.toString()).arg(dest_file));
    2182  
    2183 @@ -2997,6 +3525,113 @@
    2184      UpdateItem(GetItemCurrent());
    2185  }
    2186  
    2187 +void VideoDialog::OnBannerURL(QString uri, Metadata *metadata)
    2188 +{
    2189 +    if (metadata)
    2190 +    {
    2191 +        if (uri.length())
    2192 +        {
    2193 +            QString fileprefix = m_d->m_banDir;
    2194 +
    2195 +            QDir dir;
    2196 +
    2197 +            // If the fanart setting hasn't been set default to
    2198 +            // using ~/.mythtv/MythVideo/Banners
    2199 +            if (fileprefix.length() == 0)
    2200 +            {
    2201 +                fileprefix = GetConfDir();
    2202 +
    2203 +                dir.setPath(fileprefix);
    2204 +                if (!dir.exists())
    2205 +                    dir.mkdir(fileprefix);
    2206 +
    2207 +                fileprefix += "/MythVideo/Banners";
    2208 +            }
    2209 +
    2210 +            dir.setPath(fileprefix);
    2211 +            if (!dir.exists())
    2212 +                dir.mkdir(fileprefix);
    2213 +
    2214 +            QUrl url(uri);
    2215 +
    2216 +            QString ext = QFileInfo(url.path()).suffix();
    2217 +            QString dest_file;
    2218 +
    2219 +            if (metadata->GetSeason() > 0 ||
    2220 +                metadata->GetEpisode() > 0)
    2221 +            {
    2222 +                // Name TV downloads so that they already work with the PBB   
    2223 +                QString title = QString("%1 Season %2").arg(metadata->GetTitle())
    2224 +                        .arg(metadata->GetSeason());
    2225 +                dest_file = QString("%1/%2.%3").arg(fileprefix)
    2226 +                        .arg(title).arg(ext);
    2227 +            }
    2228 +            else
    2229 +                dest_file = QString("%1/%2.%3").arg(fileprefix)
    2230 +                        .arg(metadata->GetInetRef()).arg(ext);
    2231 +
    2232 +            VERBOSE(VB_IMPORTANT, QString("Copying '%1' -> '%2'...")
    2233 +                    .arg(url.toString()).arg(dest_file));
    2234 +
    2235 +            BannerDownloadProxy *d =
    2236 +                    BannerDownloadProxy::Create(url, dest_file, metadata);
    2237 +            metadata->SetBanner(dest_file);
    2238 +
    2239 +            connect(d, SIGNAL(SigFinished(BannerDownloadErrorState,
    2240 +                                          QString, Metadata *)),
    2241 +                    SLOT(OnBannerCopyFinished(BannerDownloadErrorState,
    2242 +                                              QString, Metadata *)));
    2243 +
    2244 +            d->StartCopy();
    2245 +            m_d->AddBannerDownload(d);
    2246 +        }
    2247 +        else
    2248 +        {
    2249 +            metadata->SetBanner("");
    2250 +            OnVideoBannerSetDone(metadata);
    2251 +        }
    2252 +    }
    2253 +    else
    2254 +        OnVideoBannerSetDone(metadata);
    2255 +}
    2256 +
    2257 +void VideoDialog::OnBannerCopyFinished(BannerDownloadErrorState error,
    2258 +                                       QString errorMsg, Metadata *item)
    2259 +{
    2260 +    QObject *src = sender();
    2261 +    if (src)
    2262 +        m_d->RemoveBannerDownload(dynamic_cast<BannerDownloadProxy *>
    2263 +                                       (src));
    2264 +
    2265 +    if (error != besOK && item)
    2266 +        item->SetBanner("");
    2267 +
    2268 +    VERBOSE(VB_IMPORTANT, tr("Banner download finished: %1 %2")
    2269 +            .arg(errorMsg).arg(error));
    2270 +
    2271 +    if (error == besTimeout)
    2272 +    {
    2273 +        createOkDialog(tr("Banner exists for this item but could not be "
    2274 +                            "retrieved within the timeout period.\n"));
    2275 +    }
    2276 +
    2277 +    OnVideoBannerSetDone(item);
    2278 +}
    2279 +
    2280 +// This is the final call as part of a StartVideoBannerSet
    2281 +void VideoDialog::OnVideoBannerSetDone(Metadata *metadata)
    2282 +{
    2283 +    // The metadata has a banner set
    2284 +    if (m_busyPopup)
    2285 +    {
    2286 +        m_busyPopup->Close();
    2287 +        m_busyPopup = NULL;
    2288 +    }
    2289 +
    2290 +    metadata->UpdateDatabase();
    2291 +    UpdateItem(GetItemCurrent());
    2292 +}
    2293 +
    2294  void VideoDialog::StartVideoSearchByUID(QString video_uid, Metadata *metadata)
    2295  {
    2296      // Starting the busy dialog here triggers a bizarre segfault
    2297 @@ -3027,15 +3662,29 @@
    2298          {
    2299              data[(*p).section(':', 0, 0)] = (*p).section(':', 1);
    2300          }
    2301 -        // set known values
    2302 +        // Set known values, but always set Title.
    2303 +        // Allows for partial fill.  Reset Metadata for full fill.
    2304 +
    2305          metadata->SetTitle(data["Title"]);
    2306 -        metadata->SetYear(data["Year"].toInt());
    2307 -        metadata->SetDirector(data["Director"]);
    2308 -        metadata->SetPlot(data["Plot"]);
    2309 -        metadata->SetUserRating(data["UserRating"].toFloat());
    2310 -        metadata->SetRating(data["MovieRating"]);
    2311 -        metadata->SetLength(data["Runtime"].toInt());
    2312 +        metadata->SetSubtitle(data["Subtitle"]);       
    2313  
    2314 +        if (metadata->GetYear() == 1895)
    2315 +            metadata->SetYear(data["Year"].toInt());
    2316 +        if (metadata->GetDirector() == VIDEO_DIRECTOR_UNKNOWN)
    2317 +            metadata->SetDirector(data["Director"]);
    2318 +        if (metadata->GetPlot() == VIDEO_PLOT_DEFAULT)
    2319 +            metadata->SetPlot(data["Plot"]);
    2320 +        if (metadata->GetUserRating() == 0)
    2321 +            metadata->SetUserRating(data["UserRating"].toFloat());
    2322 +        if (metadata->GetRating() == VIDEO_RATING_DEFAULT)
    2323 +            metadata->SetRating(data["MovieRating"]);
    2324 +        if (metadata->GetLength() == 0)
    2325 +            metadata->SetLength(data["Runtime"].toInt());
    2326 +        if (metadata->GetSeason() == 0)
    2327 +            metadata->SetSeason(data["Season"].toInt());
    2328 +        if (metadata->GetEpisode() == 0)
    2329 +            metadata->SetEpisode(data["Episode"].toInt());
    2330 +
    2331          m_d->AutomaticParentalAdjustment(metadata);
    2332  
    2333          // Cast
    2334 @@ -3167,6 +3816,114 @@
    2335      }
    2336  }
    2337  
    2338 +void VideoDialog::OnVideoImageOnlyDone(bool normal_exit,
    2339 +        const SearchListResults &results, Metadata *metadata)
    2340 +{
    2341 +    if (m_busyPopup)
    2342 +    {
    2343 +        m_busyPopup->Close();
    2344 +        m_busyPopup = NULL;
    2345 +    }
    2346 +
    2347 +    (void) normal_exit;
    2348 +    VERBOSE(VB_IMPORTANT,
    2349 +            QString("GetVideoList returned %1 possible matches")
    2350 +            .arg(results.size()));
    2351 +
    2352 +    if (results.size() == 1)
    2353 +    {
    2354 +        // Only one search result, fetch data.
    2355 +        if (results.begin().value().isEmpty())
    2356 +            return;
    2357 +        else
    2358 +        {
    2359 +            metadata->SetInetRef(results.begin().key());
    2360 +            metadata->UpdateDatabase();
    2361 +            UpdateItem(GetItemCurrent());
    2362 +            StartVideoPosterSet(metadata);
    2363 +        }
    2364 +    }
    2365 +    else if (results.size() < 1)
    2366 +    {
    2367 +        createOkDialog(tr("No matches were found."));
    2368 +    }
    2369 +    else
    2370 +    {
    2371 +        SearchResultsDialog *resultsdialog =
    2372 +                new SearchResultsDialog(m_popupStack, results);
    2373 +
    2374 +        if (resultsdialog->Create())
    2375 +            m_popupStack->AddScreen(resultsdialog);
    2376 +
    2377 +        connect(resultsdialog, SIGNAL(haveResult(QString)),
    2378 +                SLOT(OnVideoImgSearchListSelection(QString)),
    2379 +                Qt::QueuedConnection);
    2380 +    }
    2381 +}
    2382 +
    2383 +void VideoDialog::StartVideoSearchByTitleSubtitle(QString title,
    2384 +                                            QString subtitle, Metadata *metadata)
    2385 +{
    2386 +        createBusyDialog(title);
    2387 +
    2388 +        VideoTitleSubtitleSearch *vtss = new VideoTitleSubtitleSearch(this);
    2389 +
    2390 +        connect(vtss, SIGNAL(SigSearchResults(bool, QStringList,
    2391 +                                Metadata *)),
    2392 +                SLOT(OnVideoSearchByTitleSubtitleDone(bool, QStringList,
    2393 +                                Metadata *)));
    2394 +        vtss->Run(title, subtitle, metadata);
    2395 +}
    2396 +
    2397 +void VideoDialog::OnVideoSearchByTitleSubtitleDone(bool normal_exit,
    2398 +        QStringList result, Metadata *metadata)
    2399 +{
    2400 +    if (m_busyPopup)
    2401 +    {
    2402 +        m_busyPopup->Close();
    2403 +        m_busyPopup = NULL;
    2404 +    }
    2405 +
    2406 +    (void) normal_exit;
    2407 +    QString SeasEp;
    2408 +
    2409 +    if (!result.isEmpty())
    2410 +        SeasEp = result.takeAt(0);
    2411 +
    2412 +    if (!SeasEp.isEmpty())
    2413 +    {
    2414 +
    2415 +        // Stuff to parse Season and Episode here
    2416 +        QString season, episode = NULL;
    2417 +
    2418 +        QRegExp group("(?:[s])?(\\d{1,3})(?:\\s|-)?(?:[ex])" //Season
    2419 +                      "(?:\\s|-)?(\\d{1,3})", // Episode
    2420 +                      Qt::CaseInsensitive);
    2421 +
    2422 +        int pos = group.indexIn(SeasEp);
    2423 +        if (pos > -1)
    2424 +        {
    2425 +        QString groupResult = group.cap(0);
    2426 +        season = group.cap(1);
    2427 +        episode = group.cap(2);
    2428 +        }
    2429 +
    2430 +        VERBOSE(VB_IMPORTANT,
    2431 +            QString("Season and Episode found!  It was: %1")
    2432 +            .arg(SeasEp));
    2433 +
    2434 +        if (!season.isNull() && !episode.isNull())
    2435 +        {
    2436 +            metadata->SetSeason(season.toInt());
    2437 +            metadata->SetEpisode(episode.toInt());
    2438 +            StartVideoSearchByTitle(VIDEO_INETREF_DEFAULT,
    2439 +                                metadata->GetTitle(), metadata);
    2440 +        }
    2441 +    }
    2442 +    else
    2443 +        createOkDialog(tr("No matches were found."));
    2444 +}
    2445 +
    2446  void VideoDialog::doVideoScan()
    2447  {
    2448      if (!m_d->m_scanner)
    2449 Index: mythplugins/mythvideo/mythvideo/videolist.cpp
    2450 ===================================================================
    2451 --- mythplugins/mythvideo/mythvideo/videolist.cpp       (revision 21049)
    2452 +++ mythplugins/mythvideo/mythvideo/videolist.cpp       (working copy)
    2453 @@ -826,7 +826,27 @@
    2454      for (meta_dir_node::const_entry_iterator entry = src->entries_begin();
    2455           entry != src->entries_end(); ++entry)
    2456      {
    2457 -        AddFileNode(dst, (*entry)->getData()->GetTitle(), (*entry)->getData());
    2458 +        if (((*entry)->getData()->GetSeason() > 0) ||
    2459 +                 ((*entry)->getData()->GetEpisode() > 0))
    2460 +        {
    2461 +            QString seas = QString::number((*entry)->getData()->GetSeason());
    2462 +            QString ep = QString::number((*entry)->getData()->GetEpisode());
    2463 +            QString tit = (*entry)->getData()->GetTitle();
    2464 +            QString sub = (*entry)->getData()->GetSubtitle();
    2465 +            if (ep.size() < 2)
    2466 +                ep.prepend("0");
    2467 +            QString TitSeasEpSub = QString("%1 %2x%3 - %4").arg(tit).arg(seas)
    2468 +                                                           .arg(ep).arg(sub);
    2469 +            AddFileNode(dst, TitSeasEpSub, (*entry)->getData());
    2470 +        }
    2471 +        else if ((*entry)->getData()->GetSubtitle().isEmpty())
    2472 +            AddFileNode(dst, (*entry)->getData()->GetTitle(), (*entry)->getData());
    2473 +        else
    2474 +        {
    2475 +            QString TitleSub = QString("%1 - %2").arg((*entry)->getData()->GetTitle())
    2476 +                                                 .arg((*entry)->getData()->GetSubtitle());
    2477 +            AddFileNode(dst, TitleSub, (*entry)->getData());
    2478 +        }
    2479      }
    2480  }
    2481  
    2482 @@ -1267,7 +1287,7 @@
    2483              QString title = qfi.completeBaseName();
    2484              if (m_infer_title)
    2485              {
    2486 -                QString tmptitle(Metadata::FilenameToTitle(file_string));
    2487 +                QString tmptitle(Metadata::FilenameToMeta(file_string, 1));
    2488                  if (tmptitle.length())
    2489                      title = tmptitle;
    2490              }
    2491 Index: mythplugins/mythvideo/mythvideo/videoscan.cpp
    2492 ===================================================================
    2493 --- mythplugins/mythvideo/mythvideo/videoscan.cpp       (revision 21049)
    2494 +++ mythplugins/mythvideo/mythvideo/videoscan.cpp       (working copy)
    2495 @@ -267,11 +267,14 @@
    2496                                   VIDEO_SCREENSHOT_DEFAULT,
    2497                                   VIDEO_BANNER_DEFAULT,
    2498                                   VIDEO_FANART_DEFAULT,
    2499 -                                 Metadata::FilenameToTitle(p->first),
    2500 +                                 Metadata::FilenameToMeta(p->first, 1),
    2501 +                                 Metadata::FilenameToMeta(p->first, 4),
    2502                                   VIDEO_YEAR_DEFAULT,
    2503                                   VIDEO_INETREF_DEFAULT, VIDEO_DIRECTOR_DEFAULT,
    2504 -                                 VIDEO_PLOT_DEFAULT, 0.0, VIDEO_RATING_DEFAULT,
    2505 -                                 0, 0, ParentalLevel::plLowest);
    2506 +                                 VIDEO_PLOT_DEFAULT, 0.0, VIDEO_RATING_DEFAULT, 0,
    2507 +                                 Metadata::FilenameToMeta(p->first, 2).toInt(),
    2508 +                                 Metadata::FilenameToMeta(p->first, 3).toInt(),
    2509 +                                 0, ParentalLevel::plLowest);
    2510  
    2511                  VERBOSE(VB_GENERAL, QString("Adding : %1 : %2")
    2512                          .arg(newFile.GetHost()).arg(newFile.GetFilename()));
    2513 Index: mythplugins/mythvideo/mythvideo/videofilter.cpp
    2514 ===================================================================
    2515 --- mythplugins/mythvideo/mythvideo/videofilter.cpp     (revision 21049)
    2516 +++ mythplugins/mythvideo/mythvideo/videofilter.cpp     (working copy)
    2517 @@ -353,6 +353,38 @@
    2518              ret = lhs_key < rhs_key;
    2519              break;
    2520          }
    2521 +        case kOrderBySeasonEp:
    2522 +        {
    2523 +            if ((lhs.GetSeason() == rhs.GetSeason())
    2524 +                && (lhs.GetEpisode() == rhs.GetEpisode())
    2525 +                && (lhs.GetSeason() == 0)
    2526 +                && (rhs.GetSeason() == 0)
    2527 +                && (lhs.GetEpisode() == 0)
    2528 +                && (rhs.GetEpisode() == 0))
    2529 +            {
    2530 +                Metadata::SortKey lhs_key;
    2531 +                Metadata::SortKey rhs_key;
    2532 +                if (lhs.HasSortKey() && rhs.HasSortKey())
    2533 +                {
    2534 +                    lhs_key = lhs.GetSortKey();
    2535 +                    rhs_key = rhs.GetSortKey();
    2536 +                }
    2537 +                else
    2538 +                {
    2539 +                    lhs_key = Metadata::GenerateDefaultSortKey(lhs,
    2540 +                                                               sort_ignores_case);
    2541 +                    rhs_key = Metadata::GenerateDefaultSortKey(rhs,
    2542 +                                                               sort_ignores_case);
    2543 +                }
    2544 +                ret = lhs_key < rhs_key;
    2545 +            }
    2546 +            else if (lhs.GetSeason() == rhs.GetSeason()
    2547 +                     && lhs.GetTitle() == rhs.GetTitle())
    2548 +                ret = lhs.GetEpisode() < rhs.GetEpisode();
    2549 +            else
    2550 +                ret = lhs.GetSeason() < rhs.GetSeason();
    2551 +            break;
    2552 +        }
    2553          case kOrderByYearDescending:
    2554          {
    2555              ret = lhs.GetYear() > rhs.GetYear();
    2556 @@ -649,6 +681,8 @@
    2557      // Order by
    2558      new MythUIButtonListItem(m_orderbyList, QObject::tr("Title"),
    2559                             VideoFilterSettings::kOrderByTitle);
    2560 +    new MythUIButtonListItem(m_orderbyList, QObject::tr("Season/Episode"),
    2561 +                           VideoFilterSettings::kOrderBySeasonEp);
    2562      new MythUIButtonListItem(m_orderbyList, QObject::tr("Year"),
    2563                             VideoFilterSettings::kOrderByYearDescending);
    2564      new MythUIButtonListItem(m_orderbyList, QObject::tr("User Rating"),
    2565 Index: mythplugins/mythvideo/mythvideo/metadata.h
    2566 ===================================================================
    2567 --- mythplugins/mythvideo/mythvideo/metadata.h  (revision 21049)
    2568 +++ mythplugins/mythvideo/mythvideo/metadata.h  (working copy)
    2569 @@ -13,6 +13,8 @@
    2570  
    2571  enum { VIDEO_YEAR_DEFAULT = 1895 };
    2572  
    2573 +const QString VIDEO_SUBTITLE_DEFAULT = "";
    2574 +
    2575  struct SortData;
    2576  
    2577  class Metadata
    2578 @@ -44,7 +46,7 @@
    2579  
    2580    public:
    2581      static SortKey GenerateDefaultSortKey(const Metadata &m, bool ignore_case);
    2582 -    static QString FilenameToTitle(const QString &file_name);
    2583 +    static QString FilenameToMeta(const QString &file_name, int position);
    2584      static QString TrimTitle(const QString &title, bool ignore_case);
    2585  
    2586    public:
    2587 @@ -55,6 +57,7 @@
    2588               const QString &banner = QString(),
    2589               const QString &fanart = QString(),
    2590               const QString &title = QString(),
    2591 +             const QString &subtitle = QString(),
    2592               int year = VIDEO_YEAR_DEFAULT,
    2593               const QString &inetref = QString(),
    2594               const QString &director = QString(),
    2595 @@ -62,6 +65,8 @@
    2596               float userrating = 0.0,
    2597               const QString &rating = QString(),
    2598               int length = 0,
    2599 +             int season = 0,
    2600 +             int episode = 0,
    2601               int id = 0,
    2602               ParentalLevel::Level showlevel = ParentalLevel::plLowest,
    2603               int categoryID = 0,
    2604 @@ -89,6 +94,9 @@
    2605      const QString &GetTitle() const;
    2606      void SetTitle(const QString& title);
    2607  
    2608 +    const QString &GetSubtitle() const;
    2609 +    void SetSubtitle(const QString &subtitle);
    2610 +
    2611      int GetYear() const;
    2612      void SetYear(int year);
    2613  
    2614 @@ -110,6 +118,12 @@
    2615      int GetLength() const;
    2616      void SetLength(int length);
    2617  
    2618 +    int GetSeason() const;
    2619 +    void SetSeason(int season);
    2620 +
    2621 +    int GetEpisode() const;
    2622 +    void SetEpisode(int episode);
    2623 +
    2624      unsigned int GetID() const;
    2625      void SetID(int id);
    2626  
    2627 Index: mythplugins/mythvideo/mythvideo/editmetadata.cpp
    2628 ===================================================================
    2629 --- mythplugins/mythvideo/mythvideo/editmetadata.cpp    (revision 21049)
    2630 +++ mythplugins/mythvideo/mythvideo/editmetadata.cpp    (working copy)
    2631 @@ -12,6 +12,7 @@
    2632  #include <mythtv/libmythui/mythuitextedit.h>
    2633  #include <mythtv/libmythui/mythuibutton.h>
    2634  #include <mythtv/libmythui/mythuicheckbox.h>
    2635 +#include <mythtv/libmythui/mythuispinbox.h>
    2636  
    2637  #include "globals.h"
    2638  #include "dbaccess.h"
    2639 @@ -22,9 +23,10 @@
    2640  EditMetadataDialog::EditMetadataDialog(MythScreenStack *lparent,
    2641          QString lname, Metadata *source_metadata,
    2642          const MetadataListManager &cache) : MythScreenType(lparent, lname),
    2643 -    m_origMetadata(source_metadata), m_titleEdit(0), m_playerEdit(0),
    2644 -    m_categoryList(0), m_levelList(0), m_childList(0), m_browseCheck(0),
    2645 -    m_coverartButton(0), m_coverartText(0),
    2646 +    m_origMetadata(source_metadata), m_titleEdit(0), m_subtitleEdit(0),
    2647 +    m_playerEdit(0), m_seasonSpin(0), m_episodeSpin(0),
    2648 +    m_categoryList(0), m_levelList(0), m_childList(0),
    2649 +    m_browseCheck(0), m_coverartButton(0), m_coverartText(0),
    2650      m_screenshotButton(0), m_screenshotText(0),
    2651      m_bannerButton(0), m_bannerText(0),
    2652      m_fanartButton(0), m_fanartText(0),
    2653 @@ -47,8 +49,12 @@
    2654  
    2655      bool err = false;
    2656      UIUtilE::Assign(this, m_titleEdit, "title_edit", &err);
    2657 +    UIUtilE::Assign(this, m_subtitleEdit, "subtitle_edit", &err);
    2658      UIUtilE::Assign(this, m_playerEdit, "player_edit", &err);
    2659  
    2660 +    UIUtilE::Assign(this, m_seasonSpin, "season", &err);
    2661 +    UIUtilE::Assign(this, m_episodeSpin, "episode", &err);
    2662 +
    2663      UIUtilE::Assign(this, m_coverartText, "coverart_text", &err);
    2664      UIUtilE::Assign(this, m_screenshotText, "screenshot_text", &err);
    2665      UIUtilE::Assign(this, m_bannerText, "banner_text", &err);
    2666 @@ -79,8 +85,12 @@
    2667          VERBOSE(VB_IMPORTANT, "Failed to build a focuslist.");
    2668  
    2669      connect(m_titleEdit, SIGNAL(valueChanged()), SLOT(SetTitle()));
    2670 +    connect(m_subtitleEdit, SIGNAL(valueChanged()), SLOT(SetSubtitle()));
    2671      connect(m_playerEdit, SIGNAL(valueChanged()), SLOT(SetPlayer()));
    2672  
    2673 +    connect(m_seasonSpin, SIGNAL(LosingFocus()), SLOT(SetSeason()));
    2674 +    connect(m_episodeSpin, SIGNAL(LosingFocus()), SLOT(SetEpisode()));
    2675 +
    2676      connect(m_doneButton, SIGNAL(Clicked()), SLOT(SaveAndExit()));
    2677      connect(m_coverartButton, SIGNAL(Clicked()), SLOT(FindCoverArt()));
    2678      connect(m_bannerButton, SIGNAL(Clicked()), SLOT(FindBanner()));
    2679 @@ -154,7 +164,13 @@
    2680  void EditMetadataDialog::fillWidgets()
    2681  {
    2682      m_titleEdit->SetText(m_workingMetadata->GetTitle());
    2683 +    m_subtitleEdit->SetText(m_workingMetadata->GetSubtitle());
    2684  
    2685 +    m_seasonSpin->SetRange(0,100,1);
    2686 +    m_seasonSpin->SetValue(m_workingMetadata->GetSeason());
    2687 +    m_episodeSpin->SetRange(0,999,1);
    2688 +    m_episodeSpin->SetValue(m_workingMetadata->GetEpisode());
    2689 +
    2690      MythUIButtonListItem *button =
    2691          new MythUIButtonListItem(m_categoryList, VIDEO_CATEGORY_UNKNOWN);
    2692      const VideoCategory::entry_list &vcl =
    2693 @@ -312,11 +328,26 @@
    2694      m_workingMetadata->SetTitle(m_titleEdit->GetText());
    2695  }
    2696  
    2697 +void EditMetadataDialog::SetSubtitle()
    2698 +{
    2699 +    m_workingMetadata->SetSubtitle(m_subtitleEdit->GetText());
    2700 +}
    2701 +
    2702  void EditMetadataDialog::SetCategory(MythUIButtonListItem *item)
    2703  {
    2704      m_workingMetadata->SetCategoryID(item->GetData().toInt());
    2705  }
    2706  
    2707 +void EditMetadataDialog::SetSeason()
    2708 +{
    2709 +    m_workingMetadata->SetSeason(m_seasonSpin->GetIntValue());
    2710 +}
    2711 +
    2712 +void EditMetadataDialog::SetEpisode()
    2713 +{
    2714 +    m_workingMetadata->SetEpisode(m_episodeSpin->GetIntValue());
    2715 +}
    2716 +
    2717  void EditMetadataDialog::SetPlayer()
    2718  {
    2719      m_workingMetadata->SetPlayCommand(m_playerEdit->GetText());
    2720 Index: mythplugins/mythvideo/mythvideo/playercommand.cpp
    2721 ===================================================================
    2722 --- mythplugins/mythvideo/mythvideo/playercommand.cpp   (revision 21049)
    2723 +++ mythplugins/mythvideo/mythvideo/playercommand.cpp   (working copy)
    2724 @@ -75,26 +75,31 @@
    2725  {
    2726    private:
    2727      VideoPlayHandleMedia(const QString &handler, const QString &mrl,
    2728 -            const QString &plot, const QString &title,
    2729 -            const QString &director, int length, const QString &year) :
    2730 +            const QString &plot, const QString &title, const QString &subtitle,
    2731 +            const QString &director, int season, int episode,
    2732 +            int length, const QString &year) :
    2733          m_handler(handler), m_mrl(mrl), m_plot(plot), m_title(title),
    2734 -        m_director(director), m_length(length), m_year(year)
    2735 +        m_subtitle(subtitle), m_director(director), m_season(season),
    2736 +        m_episode(episode), m_length(length), m_year(year)
    2737      {
    2738      }
    2739  
    2740    public:
    2741      static VideoPlayHandleMedia *Create(const QString &handler,
    2742              const QString &mrl, const QString &plot, const QString &title,
    2743 -            const QString &director, int length, const QString &year)
    2744 +            const QString &subtitle, const QString &director,
    2745 +            int season, int episode,
    2746 +            int length, const QString &year)
    2747      {
    2748 -        return new VideoPlayHandleMedia(handler, mrl, plot, title,
    2749 -                director, length, year);
    2750 +        return new VideoPlayHandleMedia(handler, mrl, plot, title, subtitle,
    2751 +                director, season, episode, length, year);
    2752      }
    2753  
    2754      bool Play() const
    2755      {
    2756          return gContext->GetMainWindow()->HandleMedia(m_handler, m_mrl,
    2757 -                m_plot, m_title, m_director, m_length, m_year);
    2758 +                m_plot, m_title, m_subtitle, m_director, m_season,
    2759 +                m_episode, m_length, m_year);
    2760      }
    2761  
    2762      QString GetCommandDisplayName() const
    2763 @@ -112,7 +117,10 @@
    2764      QString m_mrl;
    2765      QString m_plot;
    2766      QString m_title;
    2767 +    QString m_subtitle;
    2768      QString m_director;
    2769 +    int m_season;
    2770 +    int m_episode;
    2771      int m_length;
    2772      QString m_year;
    2773  };
    2774 @@ -200,8 +208,9 @@
    2775              if (play_command.length())
    2776              {
    2777                  AddPlayer(play_command, filename, item->GetPlot(),
    2778 -                        item->GetTitle(), item->GetDirector(),
    2779 -                        item->GetLength(),
    2780 +                        item->GetTitle(), item->GetSubtitle(),
    2781 +                        item->GetDirector(), item->GetSeason(),
    2782 +                        item->GetEpisode(), item->GetLength(),
    2783                          QString::number(item->GetYear()));
    2784              }
    2785              else
    2786 @@ -237,8 +246,11 @@
    2787              play_command = "Internal";
    2788  
    2789          QString plot;
    2790 -        QString title = Metadata::FilenameToTitle(filename);
    2791 +        QString title = Metadata::FilenameToMeta(filename, 1);
    2792 +        QString subtitle = Metadata::FilenameToMeta(filename, 4);
    2793          QString director;
    2794 +        int season = 0;
    2795 +        int episode = 0;
    2796          int length = 0;
    2797          QString year = QString::number(VIDEO_YEAR_DEFAULT);
    2798  
    2799 @@ -246,12 +258,16 @@
    2800          {
    2801              plot = extraData->GetPlot();
    2802              title = extraData->GetTitle();
    2803 +            subtitle = extraData->GetSubtitle();
    2804              director = extraData->GetDirector();
    2805 +            season = extraData->GetSeason();
    2806 +            episode = extraData->GetEpisode();
    2807              length = extraData->GetLength();
    2808              year = QString::number(extraData->GetYear());
    2809          }
    2810  
    2811 -        AddPlayer(play_command, filename, plot, title, director, length, year);
    2812 +        AddPlayer(play_command, filename, plot, title, subtitle, director,
    2813 +                                season, episode, length, year);
    2814      }
    2815  
    2816      void ClearPlayerList()
    2817 @@ -282,11 +298,13 @@
    2818  
    2819    private:
    2820      void AddPlayer(const QString &player, const QString &filename,
    2821 -            const QString &plot, const QString &title, const QString &director,
    2822 -            int length, const QString &year)
    2823 +            const QString &plot, const QString &title, const QString &subtitle,
    2824 +            const QString &director, int season, int episode, int length,
    2825 +            const QString &year)
    2826      {
    2827          m_player_procs.push_back(VideoPlayHandleMedia::Create(player, filename,
    2828 -                        plot, title, director, length, year));
    2829 +                        plot, title, subtitle, director, season, episode,
    2830 +                        length, year));
    2831          m_player_procs.push_back(VideoPlayMythSystem::Create(player, filename));
    2832      }
    2833  
    2834 Index: mythplugins/mythvideo/mythvideo/videoutils.h
    2835 ===================================================================
    2836 --- mythplugins/mythvideo/mythvideo/videoutils.h        (revision 21049)
    2837 +++ mythplugins/mythvideo/mythvideo/videoutils.h        (working copy)
    2838 @@ -33,6 +33,7 @@
    2839  
    2840  QString GetDisplayUserRating(float userrating);
    2841  QString GetDisplayLength(int length);
    2842 +QString GetDisplaySeasonEpisode(int seasEp, int digits);
    2843  QString GetDisplayBrowse(bool browse);
    2844  QString GetDisplayYear(int year);
    2845  QString GetDisplayRating(const QString &rating);
  • Gentoo/media-tv/mythtv/Manifest

    diff --git a/Gentoo/media-tv/mythtv/Manifest b/Gentoo/media-tv/mythtv/Manifest
    index a17d020..325075d 100644
    a b  
    1 AUX bash_profile 63 RMD160 71ed6a00c824f8d2704b65371e54adb85ca6d861 SHA1 cd4bc03298d30fadb759d1a2463e930441c5a5e7 SHA256 9a753f699d07b5f481374d13ea3f2b2439a22f3a9a49b6280cc8d9eebf0b2ca9
    2 AUX ffmpeg-sync.patch 457 RMD160 911dc0264e77e3ef62dea14a874c427b6aae4015 SHA1 9fb1f64029fed6c45463a2612376a2126e362c76 SHA256 ee3c283d1619e7609f58485e9858c0b2a77b8d14f2f47deba45c874aec09231b
    3 AUX fixLdconfSandbox.25.patch 361 RMD160 e78ac75d289b75462167e50e91d0c262c312a43e SHA1 6f73b4661a5877148d82e7fc9b994c92f8bb8700 SHA256 e778d4aa3dfe5d4c5e8cdc8438c5c45deb9d89816eb28c117ecc80ce67215d54
    4 AUX fixLdconfSandbox.patch 386 RMD160 83f311a9b28516310a8bc906c415be29d8c7818b SHA1 5dbc422510c2c7184567e8e2ed271c491c9ea325 SHA256 466668c48f3b21d64de464cf33971bcb1f12237da705a5a77dfa4fad1f687a93
    5 AUX jobQueueIgnoreDeletedRecgroup.patch 584 RMD160 e63f531f84a77bb9035f89b6d539dfdcd5c253f7 SHA1 63aee351837ca82948c34730344aa88861008c8c SHA256 0ee1831a980ec5a5ce94e80b679b3088abbe60fc1ec0f12f258ba815ebcae123
    6 AUX logcleanup.py 6648 RMD160 cad409268d82392893883070f01e032ef911bde4 SHA1 c194b83094cd78e0a4b8dfd289ebbe78420c3f0b SHA256 de482798dfa5ba44526cdca489d322c8f80fb0f204e9c62d48cfe92ef3624096
    7 AUX mythbackend-0.18.2.conf 1430 RMD160 f966c40618592cae62a2e4345bb4cd5847ec0de6 SHA1 2a3cb59593c4fd1ba431b4ebe70b91782a418a02 SHA256 0b6d0514d410bdcbeaebded48488926fc2941edaeee518794d9884693a4eb9db
    8 AUX mythbackend-0.18.2.rc 1128 RMD160 0297452b3d9fe09479c737d136a73171a35eb643 SHA1 df4fe1ca7750c3ed27c9f5bbeb28dcebb36f9b1d SHA256 be994a8b6690e830820e82316f4ccce5b7f84ce68213de75e3740818227f6f3c
    9 AUX mythbackend-0.25.conf 2038 RMD160 0ea6f2436798374b31c4ee81a525146e407ee19c SHA1 dc187e336abe817e8586111c9c0671352feb2082 SHA256 f330a12db8e7eab7530f12d3800865c60bf7126168352b7456e2c795600e47b5
    10 AUX mythbackend-0.25.rc 1162 RMD160 5a76560a82db4a51e17445d9faa2a10808677a53 SHA1 9d3de456843c84bd9f0ea01e72a9522e96947e08 SHA256 56ebc6c037ab54cae0b046d2ac5febea73384f73c793369ec05df5d37c035643
    11 AUX mythtv-8585-use_proper_ISO_SQL_format_in_database_logging.patch 952 RMD160 a84a7b4e7c1dd3770d44ca6699cc698ac5032756 SHA1 211d926561911ef53a6ffa05cf2df9199ef0ecc4 SHA256 8e51b92d935b49fdbe2dc7639531f6d99827316b1e267ee473fef07783d8124f
    12 AUX mythtv.25.logrotate.d 668 RMD160 b2dec69da3916b7b4453c99395e9381dd407467c SHA1 10e13fa42ccf4212d5cccee9c548e08ebcf96554 SHA256 6436d755a97cc0ae17d96bc4784c43872222aed9f54005c3a15e5c366e8c4770
    13 AUX mythtv.logrotate.d 434 RMD160 c76842df30c1e9cc772f57dd3a3532c017d4176d SHA1 f5e772659b2616a55ca7326f65d8917352029b51 SHA256 a9032f190b28c3778340799be668779638ee09cf85e8febc669443f3aaf3578c
    14 AUX optimizeMFDBClearingBySource-3.patch 4923 RMD160 cbe24e20927990aa91ffb86520c3a12d9b43bdc9 SHA1 3307121f00cabbc8b83e27de8effd1bc22a90600 SHA256 293842d3dce81e63deecae54dc89874c6a29f051e1574d1ee90f2a24c5be195d
    15 AUX runlogcleanup 101 RMD160 2e2c4b5a92d188c9b335d7a9c8e1415236ee4533 SHA1 d7c8d8aa3eec7868ac7c028fe90705a22eb80730 SHA256 ef28522d4c7621850819186371a6a7fc128218d999123fe99780c79e3ce97ceb
    16 AUX runmythfe 186 RMD160 e4b5bfeaecbf541e6cc45b6a9c0e5c048e3fccd0 SHA1 f5ec9dfd4781b28c0af8745c282ce242141590d8 SHA256 bebc665f37b21193be2f259cb8daf6863dfd4336e4e1424a7a989d6b679964fe
    17 AUX xinitrc 240 RMD160 9c0c1030aa65c8fd3f20501f45757515a9208a61 SHA1 11795aa8be5bd668d91acdd61aa80d5cc8af5cac SHA256 770990183ce8df60bf3bcbc3a334558155aedd0a80357556261fb938b4254e94
    18 AUX xinitrc.25 243 RMD160 44fd2d562b73cfd7318fbb749600714d7eb68ada SHA1 814f8c7ced499f82480d7ed13ef2cf0a35090670 SHA256 2395822f0ae49e75668e5c1dc5497e9e728c4bd46fc7ded5fb51c2400c61a09a
    19 DIST mythtv-0.25.1_p20120622.tar.gz 73789907 RMD160 3af7bd4d13341a57248d2e7ad0511cf4c8d031b9 SHA1 576686c5e2bb80ac4755bbc167a9b688b1bf4f56 SHA256 d31029c08333c93848174db2760943436a4946bf8c5ad2db65bfc86d52bdf04c
    20 DIST mythtv-0.26_pre20120706.tar.gz 84089487 RMD160 b3211211c73ce4ac3d6f288ccc410528622ed9e5 SHA1 42fb54c482a9750f97b36aa56a0d7a3349c87b71 SHA256 d49110989147193bc184ff43bc2e17f1fa0deef8d8144d2d9a8c51b1064a15a4
    21 EBUILD mythtv-0.25.1_p20120622.ebuild 8273 RMD160 0a3ec5d66ed6bfab4b3d0e3cde52ce07bb92d52c SHA1 71a3cb5cfdc103ce17e3ebffd1700b6ddb5f42bb SHA256 0a4d38917e40185bfc5cf76ec66f2c5f671656d6191c83d9583617e78b7de6ce
    22 EBUILD mythtv-0.26_pre20120706.ebuild 8273 RMD160 32cd54d3a3d83483e705d3c0808eab7889264968 SHA1 9d479aa33381aec906fdbecae0b56560cc697284 SHA256 5f70e37b2ca35673ad4d559993aa31af10371e7de264677a0144767a583c1dfb
     1AUX bash_profile 63 SHA256 9a753f699d07b5f481374d13ea3f2b2439a22f3a9a49b6280cc8d9eebf0b2ca9 SHA512 1338a6871ba04100b3c74f91140be834ee659cb7fcf3aa1bdd251631e47690fae88b8eb80984ff5e35b2a4cf9b3fb1b0be8205fe220c82b19e9d935cc790d5b6 WHIRLPOOL 10220cf7662f150863b47529a90c831407ce93d272d64960cfa727992d0b4dfe2e13de2c62d7a4b27f924526307822fa488d9551f6e8f62a47f63a89dfaee9fe
     2AUX fixLdconfSandbox.25.patch 361 SHA256 e778d4aa3dfe5d4c5e8cdc8438c5c45deb9d89816eb28c117ecc80ce67215d54 SHA512 da0deb6a9291c35109e2535c437c4e8140c34fa1e178baa111ffe7a9352123fc714a44ce2f08086240cdfa0e2231deb99d290d9bea25c826f7d729a4eeb0f979 WHIRLPOOL 76105c0ecac6b9d62075e30f19b2f2c0375c49d2a1f731588ab8cdc96ead71b69d7109dfe37287b296343ac7a819981da614047175f4cd89cdcf6222f9ec40a0
     3AUX jobQueueIgnoreDeletedRecgroup.patch 584 SHA256 0ee1831a980ec5a5ce94e80b679b3088abbe60fc1ec0f12f258ba815ebcae123 SHA512 64102ad4dae8485d4bac5cedfecc8b8cc7958281ad8137b85726815302cf6475b28607a64dc14506436eed70257b8a6cc91f6a8de99395cf8f43b46ba144645a WHIRLPOOL 75da9d3c7e1bfc5082ace972d2cd3b5dcefcdce0de8adf03deaed77b0b559e431f544b4564e2ab30f3f28c16cbfc3de733aacf34933b859b9047e7d909f37f62
     4AUX logcleanup.py 6648 SHA256 de482798dfa5ba44526cdca489d322c8f80fb0f204e9c62d48cfe92ef3624096 SHA512 ea6c25e09ae17504052a44016e1636ce850671f0de9ee179157c2d7677aeddf5c2b4c1a5ddd2bdc6b9a7db4867f22c8073ec85ef02a8c0483115990ff8bc5c51 WHIRLPOOL 82883ce76ce6f33366fc9e2f8a2fe11f39c70367e33d1f7cce13f1f1d71a1b785584433a71a2152d5b9fd1f0f384197296b404de3dabbf9bcff8bf37ac939344
     5AUX mythbackend-0.25.conf 2038 SHA256 f330a12db8e7eab7530f12d3800865c60bf7126168352b7456e2c795600e47b5 SHA512 05f186b5c096ffcef225540da251be2d5895876b3e82e5c12c1c1296e6f3dc7cba24932de922f7a22a3cfd990798830571b6bf1fa339bbf6a522aa6ee61ca199 WHIRLPOOL e3bfeb1ee9fdb3ba14e0f9b2bd18002a7d23bdb5df1bae56592cb07ab3b197e3e46746138ba163531da04f163bad5e05fec934ba8d778e7679d3a5daa08be428
     6AUX mythbackend-0.25.rc 1162 SHA256 56ebc6c037ab54cae0b046d2ac5febea73384f73c793369ec05df5d37c035643 SHA512 7760dc8bcdab5e9375c79e8deda6628578c78a099957954074b54976b30fc4f753ffbb2225b73a0fd165a46bdcb8a09368bbb34665c37088320b09615748fe10 WHIRLPOOL cf1ea3e6138ffabb0c5c01b91799c8431b8399242dbbba549c46d27dad9f0cdca971782ac49599a4e63850ccc557ac70e7a77e56d4e198b1e9f8c53e1b6a24b9
     7AUX mythtv-8585-use_proper_ISO_SQL_format_in_database_logging.patch 952 SHA256 8e51b92d935b49fdbe2dc7639531f6d99827316b1e267ee473fef07783d8124f SHA512 85689c386e16ca1871f351d6563dbdd9f7b652d7d20d62740488bb749bb35f31495d551d4796054279e07e773f3c42724d470a2c7660b7e73dddebc196ffa90f WHIRLPOOL eb4e01701958732aee99708a60bd3319ec8733773e2f0fb031e8a064e98965214246a76c9425fb97ecbd54ea1374c638ddbd93c21cfd801478c26ad6bd098cb1
     8AUX mythtv.25.logrotate.d 668 SHA256 6436d755a97cc0ae17d96bc4784c43872222aed9f54005c3a15e5c366e8c4770 SHA512 9eda239d7a47be380f4a96a5f60e22fc094b196b2d663dbccd199dd90d044f94e6ae230c3af10f19c60c939729aa3afdd68f6fae4935cd0952d69b9ad0007942 WHIRLPOOL 117339eb89f55faadef2dcaa4e749c25226e46f032c5a572367dc130f8cf9685af7579dce9e9c78bf9358437e276b766f55d301ba8e698854ed4999f3e1e412a
     9AUX optimizeMFDBClearingBySource-3.patch 4923 SHA256 293842d3dce81e63deecae54dc89874c6a29f051e1574d1ee90f2a24c5be195d SHA512 881a421d678dff137b997b2fd2ce95a0bdc53e484e6fdcc8e81b77e90f429db922216642333c9ada0c26deeac66638e6808ca3274d3f6dfbb2436f0b948d54f8 WHIRLPOOL d02c75a2353bf322d1cf509d4cfdd4baf06fc5fa7ab299beb04287d7e436bae6c7f283dbe2e7dc0f3360f91237b51b73e5039f4b8387b5e80a549e8e5583ee6c
     10AUX runlogcleanup 101 SHA256 ef28522d4c7621850819186371a6a7fc128218d999123fe99780c79e3ce97ceb SHA512 4dad31119020254bff7cf7e1c84e35eaf412b9c436df1c63ba49e6d0a940412eee14a422f5dacf0aa459a548d1a220af86596c232dff61cd03c812f1417d957a WHIRLPOOL 5b58ea27876604cc37bef63d86f8897d3d1502ced4ee65b9ba8bd5f55087a70cf0593525d33fcb67e9ab9e832115d0202ba8ff0d303d535306a00fd077a88a0f
     11AUX runmythfe 186 SHA256 bebc665f37b21193be2f259cb8daf6863dfd4336e4e1424a7a989d6b679964fe SHA512 978cdc40bd98338ac05c29a688d843cc2ffde240fd6020a698d6d3547eea4ea110b3e9ea9074f3f1c75cf97ccb417ee6f26040aead9914f7e6bb79877fdc16b8 WHIRLPOOL 9c9209b0a06fec461b71b3d8c44e5897670dcd094f83f12afb2b3c4965428f8a2f2a6deeb282c46621e9e516fdeb447b5c73ba1dcd9ff4347bd7868d945c6758
     12AUX xinitrc.25 243 SHA256 2395822f0ae49e75668e5c1dc5497e9e728c4bd46fc7ded5fb51c2400c61a09a SHA512 41cca84268c459ea1d5e3da06298e52a85f467a72345207cc8627b273ff4a88a7c29f5405861d9b20cc70b2fa8644e3515f685481ed14dabbeb874c9291d3775 WHIRLPOOL 2900e42f196befc96981e5d29f4140275870eba6cc482866d47a276613e7ef2d8bfe57a7278a3087f7665d19938812a43c61c969afe99bed1b7990dc7416ed4f
     13DIST mythtv-0.25.1_p20120622.tar.gz 73789907 SHA256 d31029c08333c93848174db2760943436a4946bf8c5ad2db65bfc86d52bdf04c SHA512 4745606093902d193c2b6cfd4b9388ded8393d27be69075d103f964a8e12166bec767cc6f30e9552ce5d428acb2c664355e23854e85245e2718d14ec22ec5773 WHIRLPOOL 201ec1845eb199027cc32cec11ff3fe7d2d88516921583fec4cc4aa55b6a70695144320d00594c0a022c0a33806a67a8ea21708903f142629647353d1dda7b77
     14DIST mythtv-0.26_pre20120706.tar.gz 84089487 SHA256 d49110989147193bc184ff43bc2e17f1fa0deef8d8144d2d9a8c51b1064a15a4 SHA512 664867549ab86263b4c9ed953e8ed4df291bc0986895491cb3d0990d1dd557af55a646c7051412ea92fb6377ab9a0b75cf0b0b93d0acc784c627a82c9a708087 WHIRLPOOL f045d44f81eee8971529f0268e00520f58133e151eca09f5421b123a5ef8c8ab0940e88fa0952da8eb6a1d4a3cb84b7dfe221ec3ea739b6cb0f8dd3ae3377928
     15EBUILD mythtv-0.25.1_p20120622.ebuild 8273 SHA256 0a4d38917e40185bfc5cf76ec66f2c5f671656d6191c83d9583617e78b7de6ce SHA512 ee027709d97c335f5b5f44427fb80dc0f6c278eb48a692b45a0dcf3046004575dfdcd8cce909bcbbea57b8d9bb9e00b2410668db425f3a4c942bb9e036e05391 WHIRLPOOL ff046c2f2a5747608213fdef7b2ae11a040c5000b02065fab57d16ec7f9d8a632df84ef908af85b04d697c6a2640ef65c2bed60c0452be6bd9cd038ef4501b17
     16EBUILD mythtv-0.26_pre20120706.ebuild 8273 SHA256 5f70e37b2ca35673ad4d559993aa31af10371e7de264677a0144767a583c1dfb SHA512 b91b6c71fd1e75233706f33c208fc5585d655c38c8a351fb21cfe1e88d89ba645153af0cce6afe6d9757ab3bcf5a75faa8a1a172116762485b965266f32dda14 WHIRLPOOL 08487c7871b2fe3f72c8338697c74879245f8ffb53a4763daa0f844dffa59c075660db474a0e64ef1b23ebffe9ce9ecbaedb0cdf756e530cdb75914601f2aa3d
  • deleted file Gentoo/media-tv/mythtv/files/ffmpeg-sync.patch

    diff --git a/Gentoo/media-tv/mythtv/files/ffmpeg-sync.patch b/Gentoo/media-tv/mythtv/files/ffmpeg-sync.patch
    deleted file mode 100644
    index ca7b3a2..0000000
    + -  
    1 Index: configure
    2 ===================================================================
    3 --- configure   (revision 25841)
    4 +++ configure   (working copy)
    5 @@ -4745,7 +4745,7 @@
    6  cat >> external/FFmpeg/config.mak <<EOF
    7  LIBDIR=\$(INSTALL_ROOT)$libdir
    8  SHLIBDIR=\$(INSTALL_ROOT)$shlibdir
    9 -INCDIR=\$(INSTALL_ROOT)$incdir
    10 +INCDIR=$incdir
    11 -BINDIR=\$(INSTALL_ROOT)$bindir
    12 +BINDIR=$bindir
    13 -DATADIR=\$(INSTALL_ROOT)$datadir
    14 +DATADIR=$datadir
    15  MANDIR=\$(INSTALL_ROOT)$mandir
    16 
  • deleted file Gentoo/media-tv/mythtv/files/fixLdconfSandbox.patch

    diff --git a/Gentoo/media-tv/mythtv/files/fixLdconfSandbox.patch b/Gentoo/media-tv/mythtv/files/fixLdconfSandbox.patch
    deleted file mode 100644
    index 075b220..0000000
    + -  
    1 Index: programs/mythfrontend/mythfrontend.pro
    2 ===================================================================
    3 --- programs/mythfrontend/mythfrontend.pro      (revision 26148)
    4 +++ programs/mythfrontend/mythfrontend.pro      (working copy)
    5 @@ -86,3 +86,5 @@
    6  using_jack:DEFINES += USING_JACK
    7  using_oss: DEFINES += USING_OSS
    8  macx:      DEFINES += USING_COREAUDIO
    9 +
    10 +setting.extra -= -ldconfig
  • deleted file Gentoo/media-tv/mythtv/files/mythbackend-0.18.2.conf

    diff --git a/Gentoo/media-tv/mythtv/files/mythbackend-0.18.2.conf b/Gentoo/media-tv/mythtv/files/mythbackend-0.18.2.conf
    deleted file mode 100644
    index f7ad68a..0000000
    + -  
    1 # Copyright 1999-2004 Gentoo Foundation
    2 # Distributed under the terms of the GNU General Public License v2
    3 # $Header: /var/cvsroot/gentoo-x86/media-tv/mythtv/files/mythbackend-0.18.2.conf,v 1.2 2007/03/19 04:24:12 cardoe Exp $
    4 
    5 #Accepts any combination (separated by comma) of:
    6 #
    7 #  all           - ALL available debug output
    8 #  important     - Errors or other very important messages
    9 #  general       - General info
    10 #  record        - Recording related messages
    11 #  playback      - Playback related messages
    12 #  channel       - Channel related messages
    13 #  osd           - On-Screen Display related messages
    14 #  file          - File and AutoExpire related messages
    15 #  schedule      - Scheduling related messages
    16 #  network       - Network protocol related messages
    17 #  commflag      - Commercial Flagging related messages
    18 #  audio         - Audio related messages
    19 #  libav         - Enables libav debugging
    20 #  jobqueue      - JobQueue related messages
    21 #  siparser      - Siparser related messages
    22 #  eit           - EIT related messages
    23 #  vbi           - VBI related messages
    24 #  database      - Display all SQL commands executed
    25 #  dsmcc         - DSMCC carousel related messages
    26 #  mheg          - MHEG debugging messages
    27 #  upnp          - upnp debugging messages
    28 #  socket        - socket debugging messages
    29 #  timestamp     - Conditional data driven messages
    30 #  none          - NO debug output
    31 #MYTH_VERBOSE="important,general"
  • deleted file Gentoo/media-tv/mythtv/files/mythbackend-0.18.2.rc

    diff --git a/Gentoo/media-tv/mythtv/files/mythbackend-0.18.2.rc b/Gentoo/media-tv/mythtv/files/mythbackend-0.18.2.rc
    deleted file mode 100644
    index afa74d7..0000000
    + -  
    1 #!/sbin/runscript
    2 # Copyright 1999-2004 Gentoo Foundation
    3 # Distributed under the terms of the GNU General Public License v2
    4 # $Header: /var/cvsroot/gentoo-x86/media-tv/mythtv/files/mythbackend-0.18.2.rc,v 1.8 2007/06/12 15:49:37 cardoe Exp $
    5 
    6 depend() {
    7         # future note for me, backend doesn't have to run on
    8         # same machine as MySQL so should be use
    9         need net
    10         use mysql lircd LCDd
    11 }
    12 
    13 start() {
    14         [ -z "${MYTH_VERBOSE}" ] && MYTH_VERBOSE="important,general"
    15 
    16         export QTDIR=/usr/qt/3
    17         export HOME=/etc/mythtv
    18                
    19         #fixes for bug #101308
    20         unset DISPLAY
    21         unset SESSION_MANAGER
    22 
    23         # Work around any strange permissions that may be on these files.
    24         chown -R mythtv /var/log/mythtv/
    25         chown -R mythtv /etc/mythtv/
    26         rm -rf /etc/mythtv/.qt
    27 
    28         ebegin "Starting MythTV Backend"
    29         start-stop-daemon --start --quiet --chuid mythtv \
    30                 --exec /usr/bin/mythbackend \
    31                 --make-pidfile --pidfile /var/run/mythbackend.pid \
    32                 --background -- --verbose ${MYTH_VERBOSE} \
    33                 --logfile /var/log/mythtv/mythbackend.log
    34         eend $?
    35 }
    36 
    37 stop () {
    38         ebegin "Stopping MythTV Backend"
    39         start-stop-daemon --stop --quiet --pidfile=/var/run/mythbackend.pid
    40         eend $?
    41 }
  • deleted file Gentoo/media-tv/mythtv/files/mythtv.logrotate.d

    diff --git a/Gentoo/media-tv/mythtv/files/mythtv.logrotate.d b/Gentoo/media-tv/mythtv/files/mythtv.logrotate.d
    deleted file mode 100644
    index 5a93f42..0000000
    + -  
    1 # Copyright 1999-2006 Gentoo Foundation
    2 # Distributed under the terms of the GNU General Public License v2
    3 # $Header: /var/cvsroot/gentoo-x86/media-tv/mythtv/files/mythtv.logrotate.d,v 1.2 2007/03/19 04:24:12 cardoe Exp $
    4 
    5 /var/log/mythtv/mythbackend.log /var/log/mythtv/mythfrontend.log {
    6 rotate 5
    7 weekly
    8 create 660 mythtv video
    9 notifempty
    10 sharedscripts
    11 missingok
    12 postrotate
    13 /bin/kill -HUP `cat /var/run/mythbackend.pid`
    14 endscript
    15 }
  • deleted file Gentoo/media-tv/mythtv/files/xinitrc

    diff --git a/Gentoo/media-tv/mythtv/files/xinitrc b/Gentoo/media-tv/mythtv/files/xinitrc
    deleted file mode 100644
    index 78eb4b2..0000000
    + -  
    1 # .xinitrc
    2 [ -x /usr/bin/nvidia-settings ] && /usr/bin/nvidia-settings -l
    3 /usr/bin/xset s noblank
    4 /usr/bin/xset s off
    5 /usr/bin/xset -dpms
    6 /usr/bin/evilwm &
    7 exec /usr/bin/mythfrontend -l /var/log/mythtv/mythfrontend.log -v important,general