Ticket #5338: mythvideo_watched.patch

File mythvideo_watched.patch, 41.6 KB (added by ille, 13 years ago)
  • mythvideo/theme/default/video-ui.xml

     
    159159            <font>moviedata</font>
    160160         </textarea>
    161161
     162
     163         <textarea name="watchlbl" draworder="4" align="right">
     164            <area>500,165,170,35</area>
     165            <font>labels</font>
     166            <value>Watched:</value>
     167         </textarea>
     168
     169         <textarea name="watchable" draworder="4">
     170            <area>680,165,100,35</area>
     171            <font>moviedata</font>
     172         </textarea>
     173
    162174         <textarea name="lenlbl" draworder="4">
    163175            <area>20,135,150,35</area>
    164176            <font>labels</font>
     
    11491161            <value>Include while Browsing:</value>
    11501162         </textarea>
    11511163
    1152          <textarea name="coverart_text_label" draworder="0" align="right">
     1164         <textarea name="watched_text" draworder="0" align="right">
    11531165            <area>50,400,250,40</area>
    11541166            <font>display</font>
     1167            <value>Mark as Watched:</value>
     1168         </textarea>
     1169
     1170
     1171         <textarea name="coverart_text_label" draworder="0" align="right">
     1172            <area>50,450,250,40</area>
     1173            <font>display</font>
    11551174            <value>Cover Art:</value>
    11561175         </textarea>
    11571176
    11581177         <textarea name="player_text" draworder="0" align="right">
    1159             <area>50,445,250,40</area>
     1178            <area>50,495,250,40</area>
    11601179            <font>display</font>
    11611180            <value>Unique Player Command:</value>
    11621181         </textarea>
     
    12081227            <image function="unchecked_high" filename="unchecked_high.png"></image>
    12091228         </checkbox>
    12101229
     1230         <checkbox name="watched_check" draworder="0">
     1231            <position>310,395</position>
     1232            <image function="checked" filename="checked.png"></image>
     1233            <image function="unchecked" filename="unchecked.png"></image>
     1234            <image function="checked_high" filename="checked_high.png"></image>
     1235            <image function="unchecked_high" filename="unchecked_high.png"></image>
     1236         </checkbox>     
     1237
    12111238         <pushbutton name="coverart_button" draworder="0">
    1212             <position>310,395</position>
     1239            <position>310,445</position>
    12131240            <image function="on" filename="blankbutton_on.png"></image>
    12141241            <image function="off" filename="blankbutton_off.png"></image>
    12151242            <image function="pushed" filename="blankbutton_pushed.png"></image>
    12161243         </pushbutton>
    12171244
    12181245         <textarea name="coverart_text" draworder="0" align="left">
    1219             <area>350,400,250,40</area>
     1246            <area>350,445,250,40</area>
    12201247            <font>display</font>
    12211248            <value>/path/to/the/thing.jpg</value>
    12221249         </textarea>
    12231250
    12241251         <remoteedit name="player" draworder="0">
    1225             <area>310,445,300,40</area>
     1252            <area>310,495,300,40</area>
    12261253            <font>display</font>
    12271254         </remoteedit>
    12281255
    12291256         <textbutton name="done_button" draworder="0">
    1230             <position>310,505</position>
     1257            <position>310,535</position>
    12311258            <font>display</font>
    12321259            <image function="on" filename="mv_large_text_button_on.png"></image>
    12331260            <image function="off" filename="mv_large_text_button_off.png"></image>
     
    13721399            <value>Browse :</value>
    13731400         </textarea>
    13741401
    1375          <textarea name="inetref_text" draworder="0" align="right">
     1402         <textarea name="watched_text" draworder="0" align="right">
    13761403            <area>50,344,320,34</area>
    13771404            <font>display</font>
     1405            <value>Watched :</value>
     1406         </textarea>
     1407
     1408         <textarea name="inetref_text" draworder="0" align="right">
     1409            <area>50,378,320,34</area>
     1410            <font>display</font>
    13781411            <value>InetRef :</value>
    13791412         </textarea>
    13801413
    13811414         <textarea name="coverfile_text" draworder="0" align="right">
    1382             <area>50,378,320,34</area>
     1415            <area>50,416,320,34</area>
    13831416            <font>display</font>
    13841417            <value>Cover File :</value>
    13851418         </textarea>
    13861419
    13871420         <textarea name="orderby_text" draworder="0" align="right">
    1388             <area>50,416,320,34</area>
     1421            <area>50,450,320,34</area>
    13891422            <font>display</font>
    13901423            <value>Sort by :</value>
    13911424         </textarea>
     
    14561489            <image function="pushed" filename="leftright_pushed.png"></image>
    14571490         </selector>
    14581491
    1459          <selector name="inetref_select" draworder="0">
     1492         <selector name="watched_select" draworder="0">
    14601493            <area>380,342,300,34</area>
    14611494            <font>display</font>
    14621495            <image function="on" filename="leftright_on.png"></image>
     
    14641497            <image function="pushed" filename="leftright_pushed.png"></image>
    14651498         </selector>
    14661499
    1467          <selector name="coverfile_select" draworder="0">
     1500         <selector name="inetref_select" draworder="0">
    14681501            <area>380,376,300,34</area>
    14691502            <font>display</font>
    14701503            <image function="on" filename="leftright_on.png"></image>
     
    14721505            <image function="pushed" filename="leftright_pushed.png"></image>
    14731506         </selector>
    14741507
    1475          <selector name="orderby_select" draworder="0">
     1508         <selector name="coverfile_select" draworder="0">
    14761509            <area>380,414,300,34</area>
    14771510            <font>display</font>
    14781511            <image function="on" filename="leftright_on.png"></image>
     
    14801513            <image function="pushed" filename="leftright_pushed.png"></image>
    14811514         </selector>
    14821515
     1516         <selector name="orderby_select" draworder="0">
     1517            <area>380,448,300,34</area>
     1518            <font>display</font>
     1519            <image function="on" filename="leftright_on.png"></image>
     1520            <image function="off" filename="leftright_off.png"></image>
     1521            <image function="pushed" filename="leftright_pushed.png"></image>
     1522         </selector>
     1523
    14831524         <textbutton name="done_button" draworder="0">
    1484             <position>250,448</position>
     1525            <position>050,482</position>
    14851526            <font>display</font>
    14861527            <image function="on" filename="mv_large_text_button_on.png"></image>
    14871528            <image function="off" filename="mv_large_text_button_off.png"></image>
     
    14891530         </textbutton>
    14901531
    14911532         <textbutton name="save_button" draworder="0">
    1492             <position>250,505</position>
     1533            <position>400,482</position>
    14931534            <font>display</font>
    14941535            <image function="on" filename="mv_large_text_button_on.png"></image>
    14951536            <image function="off" filename="mv_large_text_button_off.png"></image>
  • mythvideo/theme/default-wide/video-ui.xml

     
    161161            <font>moviedata</font>
    162162         </textarea>
    163163
     164
     165         <textarea name="watchlbl" draworder="4" align="right">
     166            <area>822,165,240,35</area>
     167            <font>labels</font>
     168            <value>Watched:</value>
     169         </textarea>
     170
     171         <textarea name="watchable" draworder="4">
     172            <area>1077,165,75,35</area>
     173            <font>moviedata</font>
     174         </textarea>
     175
    164176         <textarea name="lenlbl" draworder="4" align="right">
    165177            <area>0,135,155,35</area>
    166178            <font>labels</font>
     
    11581170            <value>Include while Browsing:</value>
    11591171         </textarea>
    11601172
    1161          <textarea name="coverart_text_label" draworder="0" align="right">
     1173         <textarea name="watched_text" draworder="0" align="right">
    11621174            <area>0,400,400,40</area>
    11631175            <font>display</font>
     1176            <value>Mark as Watched:</value>
     1177         </textarea>
     1178
     1179
     1180         <textarea name="coverart_text_label" draworder="0" align="right">
     1181            <area>0,450,400,40</area>
     1182            <font>display</font>
    11641183            <value>Cover Art:</value>
    11651184         </textarea>
    11661185
    11671186         <textarea name="player_text" draworder="0" align="right">
    1168             <area>0,445,400,40</area>
     1187            <area>0,550,400,40</area>
    11691188            <font>display</font>
    11701189            <value>Unique Player Command:</value>
    11711190         </textarea>
     
    12171236            <image function="unchecked_high" filename="unchecked_high.png"></image>
    12181237         </checkbox>     
    12191238
     1239         <checkbox name="watched_check" draworder="0">
     1240            <position>410,395</position>
     1241            <image function="checked" filename="checked.png"></image>
     1242            <image function="unchecked" filename="unchecked.png"></image>
     1243            <image function="checked_high" filename="checked_high.png"></image>
     1244            <image function="unchecked_high" filename="unchecked_high.png"></image>
     1245         </checkbox>     
     1246
    12201247         <pushbutton name="coverart_button" draworder="0">
    1221             <position>410,395</position>
     1248            <position>410,450</position>
    12221249            <image function="on" filename="blankbutton_on.png"></image>
    12231250            <image function="off" filename="blankbutton_off.png"></image>
    12241251            <image function="pushed" filename="blankbutton_pushed.png"></image>
    12251252         </pushbutton>
    12261253
    12271254         <textarea name="coverart_text" draworder="0" align="left">
    1228             <area>452,400,572,40</area>
     1255            <area>452,500,572,40</area>
    12291256            <font>display</font>
    12301257            <value>/path/to/the/thing.jpg</value>
    12311258         </textarea>
    12321259
    12331260         <remoteedit name="player" draworder="0">
    1234             <area>410,445,614,40</area>
     1261            <area>410,550,614,40</area>
    12351262            <font>display</font>
    12361263         </remoteedit>
    12371264
    12381265         <textbutton name="done_button" draworder="0">
    1239             <position>410,598</position>
     1266            <position>410,590</position>
    12401267            <font>display</font>
    12411268            <image function="on" filename="mv_large_text_button_on.png"></image>
    12421269            <image function="off" filename="mv_large_text_button_off.png"></image>
     
    13811408            <value>Browse :</value>
    13821409         </textarea>
    13831410
    1384          <textarea name="inetref_text" draworder="0" align="right">
     1411         <textarea name="watched_text" draworder="0" align="right">
    13851412            <area>0,420,572,40</area>
    13861413            <font>display</font>
     1414            <value>Watched :</value>
     1415         </textarea>
     1416
     1417         <textarea name="inetref_text" draworder="0" align="right">
     1418            <area>0,460,572,40</area>
     1419            <font>display</font>
    13871420            <value>InetRef :</value>
    13881421         </textarea>
    13891422
    13901423         <textarea name="coverfile_text" draworder="0" align="right">
    1391             <area>0,460,572,40</area>
     1424            <area>0,500,572,40</area>
    13921425            <font>display</font>
    13931426            <value>Cover File :</value>
    13941427         </textarea>
    13951428
    13961429         <textarea name="orderby_text" draworder="0" align="right">
    1397             <area>0,500,572,40</area>
     1430            <area>0,540,572,40</area>
    13981431            <font>display</font>
    13991432            <value>Sort by :</value>
    14001433         </textarea>
     
    14651498            <image function="pushed" filename="leftright_pushed.png"></image>
    14661499         </selector>
    14671500
    1468          <selector name="inetref_select" draworder="0">
     1501         <selector name="watched_select" draworder="0">
    14691502            <area>580,420,300,40</area>
    14701503            <font>display</font>
    14711504            <image function="on" filename="leftright_on.png"></image>
     
    14731506            <image function="pushed" filename="leftright_pushed.png"></image>
    14741507         </selector>
    14751508
    1476          <selector name="coverfile_select" draworder="0">
     1509         <selector name="inetref_select" draworder="0">
    14771510            <area>580,460,300,40</area>
    14781511            <font>display</font>
    14791512            <image function="on" filename="leftright_on.png"></image>
     
    14811514            <image function="pushed" filename="leftright_pushed.png"></image>
    14821515         </selector>
    14831516
    1484          <selector name="orderby_select" draworder="0">
     1517         <selector name="coverfile_select" draworder="0">
    14851518            <area>580,500,300,40</area>
    14861519            <font>display</font>
    14871520            <image function="on" filename="leftright_on.png"></image>
     
    14891522            <image function="pushed" filename="leftright_pushed.png"></image>
    14901523         </selector>
    14911524
     1525         <selector name="orderby_select" draworder="0">
     1526            <area>580,540,300,40</area>
     1527            <font>display</font>
     1528            <image function="on" filename="leftright_on.png"></image>
     1529            <image function="off" filename="leftright_off.png"></image>
     1530            <image function="pushed" filename="leftright_pushed.png"></image>
     1531         </selector>
     1532
    14921533         <textbutton name="done_button" draworder="0">
    1493             <position>426,540</position>
     1534            <position>226,600</position>
    14941535            <font>display</font>
    14951536            <image function="on" filename="mv_large_text_button_on.png"></image>
    14961537            <image function="off" filename="mv_large_text_button_off.png"></image>
     
    14981539         </textbutton>
    14991540
    15001541         <textbutton name="save_button" draworder="0">
    1501             <position>426,604</position>
     1542            <position>636,600</position>
    15021543            <font>display</font>
    15031544            <image function="on" filename="mv_large_text_button_on.png"></image>
    15041545            <image function="off" filename="mv_large_text_button_off.png"></image>
  • mythvideo/mythvideo/videodlg.h

     
    4242    void slotViewPlot();
    4343    void slotViewCast();
    4444    void slotDoFilter();
     45    void slotToggleWatched();
    4546    void exitWin();
    4647    virtual void slotParentalLevelChanged();
    4748    virtual void slotWatchVideo();
  • mythvideo/mythvideo/metadatalistmanager.cpp

     
    116116    const QString BaseMetadataQuery(
    117117        "SELECT title, director, plot, rating, year, userrating,"
    118118        "length, filename, showlevel, coverfile, inetref, childid,"
    119         "browse, playcommand, category, intid FROM videometadata");
     119        "browse, playcommand, category, intid, watched FROM videometadata");
    120120
    121121    query.prepare(BaseMetadataQuery);
    122122
  • mythvideo/mythvideo/metadata.cpp

     
    22#include <qdir.h>
    33#include <qfileinfo.h>
    44#include <qregexp.h>
     5#include <stdio.h>
    56
    67#include <cmath>
    78
     
    9596             const QString &plot, float userrating,
    9697             const QString &rating, int length,
    9798             int id, ParentalLevel::Level showlevel, int categoryID,
    98              int childID, bool browse,
     99             int childID, bool browse, bool watched,
    99100             const QString &playcommand, const QString &category,
    100101             const genre_list &genres,
    101102             const country_list &countries,
     
    106107        m_genres(genres), m_countries(countries), m_cast(cast),
    107108        m_filename(filename), m_coverfile(coverfile),
    108109        m_categoryID(categoryID), m_childID(childID), m_year(year),
    109         m_length(length), m_showlevel(showlevel), m_browse(browse), m_id(id),
     110        m_length(length), m_showlevel(showlevel), m_browse(browse), m_watched(watched) , m_id(id),
    110111        m_userrating(userrating)
    111112    {
    112113        VideoCategory::getCategory().get(m_categoryID, m_category);
     
    146147        m_length = rhs.m_length;
    147148        m_showlevel = rhs.m_showlevel;
    148149        m_browse = rhs.m_browse;
     150        m_watched = rhs.m_watched;
    149151        m_id = rhs.m_id;
    150152        m_userrating = rhs.m_userrating;
    151153
     
    256258    bool getBrowse() const { return m_browse; }
    257259    void setBrowse(bool browse) { m_browse = browse; }
    258260
     261    bool getWatched() const { return m_watched; }
     262    void setWatched(bool watched) { m_watched = watched; }
     263
     264
     265
     266
    259267    unsigned int getID() const { return m_id; }
    260268    void setID(int id) { m_id = id; }
    261269
     
    303311    int m_length;
    304312    ParentalLevel::Level m_showlevel;
    305313    bool m_browse;
     314    bool m_watched;
    306315    unsigned int m_id;  // videometadata.intid
    307316    float m_userrating;
    308317
     
    404413                    Metadata::FilenameToTitle(m_filename), VIDEO_YEAR_DEFAULT,
    405414                    VIDEO_INETREF_DEFAULT, VIDEO_DIRECTOR_DEFAULT,
    406415                    VIDEO_PLOT_DEFAULT, 0.0, VIDEO_RATING_DEFAULT, 0, m_id,
    407                     ParentalLevel::plLowest, 0, -1, true, "", "",
     416                    ParentalLevel::plLowest, 0, -1, true, false, "", "",
    408417                    Metadata::genre_list(), Metadata::country_list(), Metadata::cast_list());
    409418    tmp.m_prefix = m_prefix;
    410419    tmp.m_flat_index = m_flat_index;
     
    492501    m_playcommand = query.value(13).toString();
    493502    m_categoryID = query.value(14).toInt();
    494503    m_id = query.value(15).toInt();
    495 
     504    m_watched = query.value(16).toBool();
    496505    VideoCategory::getCategory().get(m_categoryID, m_category);
    497506
    498507    // Genres
     
    531540    if (inserting)
    532541    {
    533542        m_browse = gContext->GetNumSetting("VideoNewBrowsable", 1);
     543        // watched is default not set
     544        m_watched = 0;
    534545
    535546        query.prepare("INSERT INTO videometadata (title,director,plot,"
    536547                      "rating,year,userrating,length,filename,showlevel,"
    537                       "coverfile,inetref,browse) VALUES (:TITLE, :DIRECTOR, "
     548                      "coverfile,inetref,browse,watched) VALUES (:TITLE, :DIRECTOR, "
    538549                      ":PLOT, :RATING, :YEAR, :USERRATING, :LENGTH, "
    539                       ":FILENAME, :SHOWLEVEL, :COVERFILE, :INETREF, :BROWSE)");
     550                      ":FILENAME, :SHOWLEVEL, :COVERFILE, :INETREF, :BROWSE, :WATCHED)");
    540551
    541552    }
    542553    else
     
    546557                      "year = :YEAR, userrating = :USERRATING, "
    547558                      "length = :LENGTH, filename = :FILENAME, "
    548559                      "showlevel = :SHOWLEVEL, coverfile = :COVERFILE, "
    549                       "inetref = :INETREF, browse = :BROWSE, "
     560                      "inetref = :INETREF, browse = :BROWSE, watched = :WATCHED, "
    550561                      "playcommand = :PLAYCOMMAND, childid = :CHILDID, "
    551562                      "category = :CATEGORY WHERE intid = :INTID");
    552563
     
    568579    query.bindValue(":COVERFILE", m_coverfile.utf8());
    569580    query.bindValue(":INETREF", m_inetref.utf8());
    570581    query.bindValue(":BROWSE", m_browse);
     582    query.bindValue(":WATCHED", m_watched);
    571583
    572584    if (!query.exec() || !query.isActive())
    573585    {
     
    905917             const QString &plot, float userrating,
    906918             const QString &rating, int length,
    907919             int id, ParentalLevel::Level showlevel, int categoryID,
    908              int childID, bool browse,
     920             int childID, bool browse,bool watched,
    909921             const QString &playcommand, const QString &category,
    910922             const genre_list &genres,
    911923             const country_list &countries,
    912924             const cast_list &cast)
    913925{
     926
    914927    m_imp = new MetadataImp(filename, coverfile, title, year, inetref, director,
    915928                            plot, userrating, rating, length, id, showlevel,
    916                             categoryID, childID, browse, playcommand, category,
     929                            categoryID, childID, browse, watched, playcommand, category,
    917930                            genres, countries, cast);
    918931}
    919932
     
    10881101    m_imp->setBrowse(browse);
    10891102}
    10901103
     1104bool Metadata::Watched() const
     1105{
     1106    return m_imp->getWatched();
     1107}
     1108
     1109void Metadata::setWatched(bool watched)
     1110{
     1111    m_imp->setWatched(watched);
     1112}
     1113
    10911114const QString &Metadata::PlayCommand() const
    10921115{
    10931116    return m_imp->getPlayCommand();
  • mythvideo/mythvideo/videofilter.h

     
    3535        kFilterInetRefChanged = (1 << 8),
    3636        kFilterCoverFileChanged = (1 << 9),
    3737        kFilterParentalLevelChanged = (1 << 10),
    38         kFilterCastChanged = (1 << 11)
     38        kFilterCastChanged = (1 << 11),
     39        kFilterWatchedChanged = (1 << 12)
    3940    };
    4041
    4142  public:
     
    125126        orderby = lorderby;
    126127    }
    127128
     129    int getWatched() const {return watched; }
     130    void setWatched(int lwatched)
     131    {
     132        m_changed_state |= kFilterWatchedChanged;
     133        watched = lwatched;
     134    }
     135
     136
    128137    ParentalLevel::Level getParentalLevel() const { return m_parental_level; }
    129138    void setParentalLevel(ParentalLevel::Level parental_level)
    130139    {
     
    162171    int runtime;
    163172    int userrating;
    164173    int browse;
     174    int watched;
    165175    int m_inetref;
    166176    int m_coverfile;
    167177    ordering orderby;
     
    236246    void setInetRef(int new_inetref);
    237247    void setCoverFile(int new_coverfile);
    238248    void setOrderby(int new_orderby);
     249    void setWatched(int new_watched);
    239250
    240251 private:
    241252    void update_numvideo();
     
    244255    //  GUI Stuff
    245256    //
    246257    UISelectorType      *browse_select;
     258    UISelectorType      *watched_select;
    247259    UISelectorType      *orderby_select;
    248260    UISelectorType      *year_select;
    249261    UISelectorType  *userrating_select;
     
    256268    UITextButtonType    *done_button;
    257269    UITextType          *numvideos_text;
    258270
     271
    259272    UISelectorType  *m_intetref_select;
    260273    UISelectorType  *m_coverfile_select;
    261274
  • mythvideo/mythvideo/dbcheck.cpp

     
    1313    const QString lastMythDVDDBVersion = "1002";
    1414    const QString lastMythVideoVersion = "1010";
    1515
    16     const QString currentDatabaseVersion = "1016";
     16    const QString currentDatabaseVersion = "1017";
    1717
     18
    1819    const QString OldMythVideoVersionName = "VideoDBSchemaVer";
    1920    const QString OldMythDVDVersionName = "DVDDBSchemaVer";
    2021
     
    646647            "ALTER TABLE videometadata MODIFY inetref VARCHAR(255) NOT NULL;";
    647648            performActualUpdate(updates, "1016", dbver, MythVideoVersionName);
    648649        }
     650
     651        if (dbver == "1016")
     652        {
     653            QStringList updates;
     654            updates +=
     655            "ALTER TABLE videometadata ADD watched BOOL NOT NULL DEFAULT 0;";
     656            performActualUpdate(updates, "1017", dbver, MythVideoVersionName);
     657        }
     658
     659
    649660    }
    650661}
    651662
  • mythvideo/mythvideo/videotree.cpp

     
    3636    UITextType *m_coverfile;
    3737    UITextType *m_child_id;
    3838    UITextType *m_browseable;
     39    UITextType *m_watchable;
    3940    UITextType *m_category;
    4041    UITextType *m_level;
    4142
     
    4849        video_file(NULL), video_plot(NULL), video_cast(NULL), video_player(NULL),
    4950        pl_value(NULL), video_poster(NULL), m_director(NULL), m_rating(NULL),
    5051        m_inetref(NULL), m_year(NULL), m_userrating(NULL), m_length(NULL),
    51         m_coverfile(NULL), m_child_id(NULL), m_browseable(NULL),
     52        m_coverfile(NULL), m_child_id(NULL), m_browseable(NULL) ,  m_watchable(NULL),
    5253        m_category(NULL), m_level(NULL)
    5354    {
    5455        m_use_arrow_accel = gContext->GetNumSetting("UseArrowAccels", 1);
     
    99100        assign(vt, m_coverfile, "coverfile", false);
    100101        assign(vt, m_child_id, "child_id", false);
    101102        assign(vt, m_browseable, "browseable", false);
     103        assign(vt, m_watchable, "watchable", false);
    102104        assign(vt, m_category, "category", false);
    103105        assign(vt, m_level, "level", false);
    104106    }
     
    124126        checkedSetText(m_coverfile, "");
    125127        checkedSetText(m_child_id, "");
    126128        checkedSetText(m_browseable, "");
     129        checkedSetText(m_watchable, "");
    127130        checkedSetText(m_category, "");
    128131        checkedSetText(m_level, "");
    129132    }
     
    168171        checkedSetText(m_coverfile, item->CoverFile());
    169172        checkedSetText(m_child_id, QString::number(item->ChildID()));
    170173        checkedSetText(m_browseable, getDisplayBrowse(item->Browse()));
     174        checkedSetText(m_watchable, getDisplayWatched(item->Watched()));
    171175        checkedSetText(m_category, item->Category());
    172176        checkedSetText(m_level, QString::number(item->ShowLevel()));
    173177    }
     
    460464                                           SLOT(slotWatchVideo()));
    461465            popup->addButton(tr("View Full Plot"), this, SLOT(slotViewPlot()));
    462466            popup->addButton(tr("View Cast"), this, SLOT(slotViewCast()));
     467            popup->addButton(tr("Toggle Watched"), this, SLOT(ToggleWatched()));
    463468        }
    464469        else
    465470        {
     
    469474                             SLOT(slotVideoBrowser()));
    470475            popup->addButton(tr("Switch to Gallery View"), this,
    471476                             SLOT(slotVideoGallery()));
     477            popup->addButton(tr("Toggle Watched"), this, SLOT(ToggleWatched()));
     478
     479
    472480        }
    473481
    474482        popup->addButton(tr("Cancel"), this, SLOT(slotDoCancel()));
     
    555563    }
    556564}
    557565
     566void VideoTree::ToggleWatched()
     567{
     568    cancelPopup();
     569
     570    if (curitem)
     571    {
     572      curitem->setWatched(!curitem->Watched());
     573      curitem->updateDatabase();
     574
     575      buildVideoList();
     576     
     577    }
     578    else
     579    {
     580        VERBOSE(VB_IMPORTANT, QString("no item to toggle watched"));
     581    }
     582}
     583
     584
    558585void VideoTree::slotWatchVideo()
    559586{
    560587    cancelPopup();
  • mythvideo/mythvideo/videoutils.cpp

     
    108108    return browse ? QObject::tr("Yes") : QObject::tr("No");
    109109}
    110110
     111QString getDisplayWatched(bool watched)
     112{
     113    return watched ? QObject::tr("Yes") : QObject::tr("No");
     114}
     115
     116
     117
    111118bool isDefaultCoverFile(const QString &coverfile)
    112119{
    113120    return coverfile == VIDEO_COVERFILE_DEFAULT ||
  • mythvideo/mythvideo/videogallery.h

     
    3131    void exitWin();
    3232    void slotChangeView();
    3333    void handleVideoSelect();
     34    void handleToggleWatched();
    3435
    3536  protected:
    3637    ~VideoGallery() {} // use deleteLater instead for thread safety
  • mythvideo/mythvideo/editmetadata.h

     
    5050    void toggleChild(bool yes_or_no);
    5151    void setChild(int new_child);
    5252    void toggleBrowse(bool yes_or_no);
     53    void toggleWatched(bool yes_or_no);
    5354    void findCoverArt();
    5455
    5556  private:
     
    6869    UICheckBoxType      *child_check;
    6970    UISelectorType      *child_select;
    7071    UICheckBoxType      *browse_check;
     72    UICheckBoxType      *watched_check;
    7173    UIPushButtonType    *coverart_button;
    7274    UITextType          *coverart_text;
    7375    UITextButtonType    *done_button;
  • mythvideo/mythvideo/videodlg.cpp

     
    124124    if (!(m_type & DLG_TREE))
    125125        buttons.push_back(popup->addButton(tr("Switch to List View"), this,
    126126                                 SLOT(slotVideoTree())));
     127   
     128    if(!(m_type))
     129       buttons.push_back(popup->addButton(tr("Toggle Watched"), this,
     130                                 SLOT(slotToggleWatched())));
    127131
    128132    return buttons.size() ? buttons[0] : NULL;
    129133}
     
    267271    fetchVideos();
    268272}
    269273
     274
     275
     276void VideoDialog::slotToggleWatched()
     277{
     278    cancelPopup();
     279
     280    curitem->setWatched(!curitem->Watched());
     281
     282    curitem->updateDatabase();
     283
     284    fetchVideos();
     285
     286   
     287
     288}
     289
     290
    270291void VideoDialog::exitWin()
    271292{
    272293    emit accept();
  • mythvideo/mythvideo/videomanager.cpp

     
    12251225                               QString::number(item->ChildID()));
    12261226                checkedSetText(m_container, "browseable",
    12271227                               getDisplayBrowse(item->Browse()));
     1228                checkedSetText(m_container, "watchable",
     1229                               getDisplayWatched(item->Watched()));
    12281230                checkedSetText(m_container, "category", item->Category());
    12291231                checkedSetText(m_container, "level",
    12301232                               QString::number(item->ShowLevel()));
     
    12631265        void SigItemEdit();
    12641266        void SigItemDelete();
    12651267        void SigItemToggleBrowseable();
     1268        void SigItemToggleWatched();
    12661269        void SigItemChangeParental(int);
    12671270        void SigDoFilter();
    12681271        void SigDoMenu();
     
    13241327                emit SigItemDelete();
    13251328            else if (action == "BROWSE")
    13261329                emit SigItemToggleBrowseable();
     1330            else if (action == "WATCHED")
     1331                emit SigItemToggleWatched();
    13271332            else if (action == "INCPARENT")
    13281333                emit SigItemChangeParental(1);
    13291334            else if (action == "DECPARENT")
     
    19311936                    SLOT(DoRemoveVideo()));
    19321937            connect(m_list_handler, SIGNAL(SigItemToggleBrowseable()),
    19331938                    SLOT(DoToggleBrowseable()));
     1939            connect(m_list_handler, SIGNAL(SigItemToggleWatched()),
     1940                    SLOT(DoToggleWatched()));
    19341941            connect(m_list_handler, SIGNAL(SigItemChangeParental(int)),
    19351942                    SLOT(OnParentalChange(int)));
    19361943            connect(m_list_handler, SIGNAL(SigDoFilter()),
     
    22052212                                   SLOT(DoResetMetadata()));
    22062213                m_popup->addButton(tr("Toggle Browseable"), this,
    22072214                                   SLOT(DoToggleBrowseable()));
     2215                m_popup->addButton(tr("Toggle Watched"), this,
     2216                                   SLOT(DoToggleWatched()));
    22082217                m_popup->addButton(tr("Remove Video"), this,
    22092218                                   SLOT(DoRemoveVideo()));
    22102219            }
     
    22382247            }
    22392248        }
    22402249
     2250        void DoToggleWatched()
     2251        {
     2252            CancelPopup();
     2253
     2254            Metadata *item = m_list_handler->GetCurrentItem();
     2255            if (item)
     2256            {
     2257                item->setWatched(!item->Watched());
     2258                item->updateDatabase();
     2259
     2260                RefreshVideoList(false);
     2261                OnSelectedItemChange();
     2262            }
     2263        }
     2264
    22412265        void OnParentalChange(int amount);
    22422266
    22432267        // called when the list selection changed
  • mythvideo/mythvideo/videobrowser.cpp

     
    132132                                           SLOT(slotWatchVideo()));
    133133            popup->addButton(tr("View Full Plot"), this, SLOT(slotViewPlot()));
    134134            popup->addButton(tr("View Cast"), this, SLOT(slotViewCast()));
     135            popup->addButton(tr("Toggle Watched"), this, SLOT(slotToggleWatched()));
     136
    135137        }
    136138        else
    137139        {
     
    330332                           QString::number(curitem->ChildID()));
    331333            checkedSetText(container, "browseable",
    332334                           getDisplayBrowse(curitem->Browse()));
     335            checkedSetText(container, "watchable",
     336                           getDisplayWatched(curitem->Watched()));
    333337            checkedSetText(container, "category", curitem->Category());
    334338            checkedSetText(container, "level",
    335339                           QString::number(curitem->ShowLevel()));
  • mythvideo/mythvideo/videofilter.cpp

     
    5555    kBrowseFilterAll = -1
    5656};
    5757
     58
     59enum WatchedFilter {
     60    kWatchedFilterAll = -1
     61};
     62
     63
    5864enum InetRefFilter {
    5965    kInetRefFilterAll = -1,
    6066    kInetRefFilterUnknown = 0
     
    7379    category(kCategoryFilterAll), genre(kGenreFilterAll),
    7480    country(kCountryFilterAll), cast(kCastFilterAll),
    7581    year(kYearFilterAll), runtime(kRuntimeFilterAll),
    76     userrating(kUserRatingFilterAll), browse(kBrowseFilterAll),
     82    userrating(kUserRatingFilterAll), browse(kBrowseFilterAll), watched(kWatchedFilterAll),
    7783    m_inetref(kInetRefFilterAll), m_coverfile(kCoverFileFilterAll),
    7884    orderby(kOrderByTitle), m_parental_level(ParentalLevel::plNone),
    7985    m_changed_state(0)
     
    103109                                        kUserRatingFilterAll);
    104110        browse = gContext->GetNumSetting(QString("%1Browse").arg(prefix),
    105111                                         kBrowseFilterAll);
     112        watched = gContext->GetNumSetting(QString("%1Watched").arg(prefix),
     113                                         kWatchedFilterAll);
    106114        m_inetref = gContext->GetNumSetting(QString("%1InetRef").arg(prefix),
    107115                kInetRefFilterAll);
    108116        m_coverfile = gContext->GetNumSetting(QString("%1CoverFile")
     
    172180        browse = rhs.browse;
    173181    }
    174182
     183    if (watched != rhs.watched)
     184    {
     185        m_changed_state |= kFilterWatchedChanged;
     186        watched = rhs.watched;
     187    }
     188
    175189    if (m_inetref != rhs.m_inetref)
    176190    {
    177191        m_changed_state |= kFilterInetRefChanged;
     
    209223    gContext->SaveSetting(QString("%1Runtime").arg(prefix), runtime);
    210224    gContext->SaveSetting(QString("%1Userrating").arg(prefix), userrating);
    211225    gContext->SaveSetting(QString("%1Browse").arg(prefix), browse);
     226    gContext->SaveSetting(QString("%1Watched").arg(prefix), watched);
    212227    gContext->SaveSetting(QString("%1InetRef").arg(prefix), m_inetref);
    213228    gContext->SaveSetting(QString("%1CoverFile").arg(prefix), m_coverfile);
    214229    gContext->SaveSetting(QString("%1Orderby").arg(prefix), orderby);
     
    311326        matches = mdata.Browse() == browse;
    312327    }
    313328
     329    if (matches && watched != kWatchedFilterAll)
     330    {
     331        matches = mdata.Watched() == watched;
     332    }
     333
    314334    if (matches && m_inetref != kInetRefFilterAll)
    315335    {
    316336        matches = mdata.InetRef() == VIDEO_INETREF_DEFAULT;
     
    406426                                 const VideoList &video_list,
    407427                                 const char *name_) :
    408428    MythThemedDialog(parent_, window_name, theme_filename, name_),
    409     browse_select(0), orderby_select(0), year_select(0), userrating_select(0),
     429    browse_select(0),watched_select(0), orderby_select(0), year_select(0), userrating_select(0),
    410430    category_select(0), country_select(0), genre_select(0), cast_select(0),
    411431    runtime_select(0), save_button(0), done_button(0), numvideos_text(0),
    412432    m_intetref_select(0), m_coverfile_select(0), m_fsp(fsp),
     
    600620        browse_select->setToItem(m_settings.getBrowse());
    601621    }
    602622
     623    if (watched_select)
     624    {
     625        watched_select->addItem(kWatchedFilterAll, QObject::tr("All"));
     626        watched_select->addItem(1, QObject::tr("Yes"));
     627        watched_select->addItem(0, QObject::tr("No"));
     628        watched_select->setToItem(m_settings.getWatched());
     629    }
     630
     631
     632
    603633    if (m_intetref_select)
    604634    {
    605635        m_intetref_select->addItem(kInetRefFilterAll, QObject::tr("All"));
     
    675705            widget_testset(currentSelector, focused, runtime_select);
    676706            widget_testset(currentSelector, focused, userrating_select);
    677707            widget_testset(currentSelector, focused, browse_select);
     708            widget_testset(currentSelector, focused, watched_select);
    678709            widget_testset(currentSelector, focused, m_intetref_select);
    679710            widget_testset(currentSelector, focused, m_coverfile_select);
    680711            widget_testset(currentSelector, focused, orderby_select);
     
    777808        update_numvideo();
    778809}
    779810
     811void VideoFilterDialog::setWatched(int new_watched)
     812{
     813        m_settings.setWatched(new_watched);
     814        update_numvideo();
     815}
     816
    780817void VideoFilterDialog::setInetRef(int new_inetref)
    781818{
    782819    m_settings.setInetRef(new_inetref);
     
    838875        connect(browse_select, SIGNAL(pushed(int)),
    839876                this, SLOT(setBrowse(int)));
    840877
     878    watched_select = getUISelectorType("watched_select");
     879    if (watched_select)
     880        connect(watched_select, SIGNAL(pushed(int)),
     881                this, SLOT(setWatched(int)));
     882
    841883    m_intetref_select = getUISelectorType("inetref_select");
    842884    if (m_intetref_select)
    843885        connect(m_intetref_select, SIGNAL(pushed(int)),
  • mythvideo/mythvideo/videoselected.cpp

     
    280280                          QString::number(m_item->ChildID()));
    281281           checkedSetText(container, "browseable",
    282282                          getDisplayBrowse(m_item->Browse()));
     283           checkedSetText(container, "watchable",
     284                          getDisplayWatched(m_item->Watched()));
    283285           checkedSetText(container, "category", m_item->Category());
    284286           checkedSetText(container, "level",
    285287                          QString::number(m_item->ShowLevel()));
  • mythvideo/mythvideo/metadata.h

     
    6262             ParentalLevel::Level showlevel = ParentalLevel::plLowest,
    6363             int categoryID = 0,
    6464             int childID = -1, bool browse = true,
     65             bool watched = false,
    6566             const QString &playcommand = "", const QString &category = "",
    6667             const genre_list &genres = genre_list(),
    6768             const country_list &countries = country_list(),
     
    116117    bool Browse() const;
    117118    void setBrowse(bool browse);
    118119
     120    bool Watched() const;
     121    void setWatched(bool watched);
     122
    119123    const QString &PlayCommand() const;
    120124    void setPlayCommand(const QString &playCommand);
    121125
  • mythvideo/mythvideo/editmetadata.cpp

     
    4848    child_check = NULL;
    4949    child_select = NULL;
    5050    browse_check = NULL;
     51    watched_check = NULL;
    5152    coverart_button = NULL;
    5253    coverart_text = NULL;
    5354    done_button = NULL;
     
    195196
    196197    if (browse_check) browse_check->setState(working_metadata->Browse());
    197198    checkedSetText(coverart_text, working_metadata->CoverFile());
     199    if (watched_check) watched_check->setState(working_metadata->Watched());
     200    checkedSetText(coverart_text, working_metadata->CoverFile());
    198201    if (player_editor) player_editor->setText(working_metadata->PlayCommand());
    199202}
    200203
     
    391394    working_metadata->setBrowse(yes_or_no);
    392395}
    393396
     397void EditMetadataDialog::toggleWatched(bool yes_or_no)
     398{
     399    working_metadata->setWatched(yes_or_no);
     400}
     401
     402
    394403void EditMetadataDialog::findCoverArt()
    395404{
    396405    QString new_coverart_file;
     
    478487                this, SLOT(toggleBrowse(bool)));
    479488    }
    480489
     490    watched_check = getUICheckBoxType("watched_check");
     491    if (watched_check)
     492    {
     493        connect(watched_check, SIGNAL(pushed(bool)),
     494                this, SLOT(toggleWatched(bool)));
     495    }
     496
    481497    coverart_button = getUIPushButtonType("coverart_button");
    482498    if (coverart_button)
    483499    {
  • mythvideo/mythvideo/videogallery.cpp

     
    503503            popup->addButton(tr("View Cast"), this, SLOT(slotViewCast()));
    504504            popup->addButton(tr("View Details"), this,
    505505                             SLOT(handleVideoSelect()));
     506            popup->addButton(tr("Toggle Watched"), this,
     507                             SLOT(slotToggleWatched()));
    506508
     509
    507510        }
    508511        else
    509512        {
     
    836839    delete selected;
    837840}
    838841
     842
     843
     844
     845
     846
    839847bool VideoGallery::handleSelect()
    840848{
    841849    bool handled = true;
  • mythvideo/mythvideo/videotree.h

     
    3333    void slotViewCast();
    3434    void slotDoFilter();
    3535    void slotWatchVideo();
     36    void ToggleWatched();
    3637
    3738    void handleTreeListSelection(int node_int);
    3839    void handleTreeListEntry(int node_int);
     
    4546    void cancelPopup();
    4647    void doMenu(bool info);
    4748
     49
     50
    4851  private:
    4952    MythPopupBox *popup;
    5053    bool expectingPopup;
  • mythvideo/mythvideo/videoutils.h

     
    2222QString getDisplayUserRating(float userrating);
    2323QString getDisplayLength(int length);
    2424QString getDisplayBrowse(bool browse);
     25QString getDisplayWatched(bool watched);
    2526
    2627bool isDefaultCoverFile(const QString &coverfile);
    2728