Ticket #7994: clear_bookmark_at_end_10.patch

File clear_bookmark_at_end_10.patch, 6.0 KB (added by Jim Stichnoth <stichnot@…>, 13 years ago)
  • mythtv/libs/libmythtv/mythplayer.cpp

    diff --git a/mythtv/libs/libmythtv/mythplayer.cpp b/mythtv/libs/libmythtv/mythplayer.cpp
    index 198e1fa..ac1c141 100644
    a b bool MythPlayer::IsReallyNearEnd(void) const 
    33173317 *  \param margin minimum number of frames we want before being near end,
    33183318 *                defaults to 2 seconds of video.
    33193319 */
    3320 bool MythPlayer::IsNearEnd(int64_t margin)
     3320bool MythPlayer::IsNearEnd(int64_t margin, bool allowVideo)
    33213321{
    33223322    uint64_t framesRead, framesLeft = 0;
    33233323
    bool MythPlayer::IsNearEnd(int64_t margin) 
    33253325        return false;
    33263326
    33273327    player_ctx->LockPlayingInfo(__FILE__, __LINE__);
    3328     if (!player_ctx->playingInfo || player_ctx->playingInfo->IsVideo() ||
     3328    if (!player_ctx->playingInfo || (player_ctx->playingInfo->IsVideo() && !allowVideo) ||
    33293329        !decoder)
    33303330    {
    33313331        player_ctx->UnlockPlayingInfo(__FILE__, __LINE__);
    bool MythPlayer::IsNearEnd(int64_t margin) 
    33413341    framesRead = decoder->GetFramesRead();
    33423342
    33433343    if (!player_ctx->IsPIP() &&
    3344         player_ctx->GetState() == kState_WatchingPreRecorded)
     3344        (player_ctx->GetState() == kState_WatchingPreRecorded ||
     3345         player_ctx->GetState() == kState_WatchingVideo ||
     3346         player_ctx->GetState() == kState_WatchingBD ||
     3347         player_ctx->GetState() == kState_WatchingDVD))
    33453348    {
    33463349        if (framesRead >= deleteMap.GetLastFrame(totalFrames))
    33473350            return true;
  • mythtv/libs/libmythtv/mythplayer.h

    diff --git a/mythtv/libs/libmythtv/mythplayer.h b/mythtv/libs/libmythtv/mythplayer.h
    index b776296..e67abf8 100644
    a b class MPUBLIC MythPlayer 
    194194    bool    IsPlaying(uint wait_ms = 0, bool wait_for = true) const;
    195195    bool    AtNormalSpeed(void) const         { return next_normal_speed; }
    196196    bool    IsReallyNearEnd(void) const;
    197     bool    IsNearEnd(int64_t framesRemaining = -1);
     197    bool    IsNearEnd(int64_t framesRemaining = -1, bool allowVideo = false);
    198198    bool    HasAudioOut(void) const           { return audio.HasAudioOut(); }
    199199    bool    IsPIPActive(void) const           { return pip_active; }
    200200    bool    IsPIPVisible(void) const          { return pip_visible; }
  • mythtv/libs/libmythtv/tv_play.cpp

    diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp
    index d7a381c..2d13bc6 100644
    a b void TV::PrepToSwitchToRecordedProgram(PlayerContext *ctx, 
    30853085    SetExitPlayer(true, true);
    30863086}
    30873087
    3088 void TV::PrepareToExitPlayer(PlayerContext *ctx, int line, bool bookmark) const
     3088void TV::PrepareToExitPlayer(PlayerContext *ctx, int line, BookmarkAction bookmark) const
    30893089{
    3090     bool bookmark_it = bookmark && IsBookmarkAllowed(ctx);
     3090    bool bm_basic = (bookmark == kBookmarkAlways ||
     3091                     (bookmark == kBookmarkAuto && db_playback_exit_prompt == 2));
     3092    bool bookmark_it = bm_basic && IsBookmarkAllowed(ctx);
    30913093    ctx->LockDeletePlayer(__FILE__, line);
    30923094    if (ctx->player)
    30933095    {
    3094         if (bookmark_it && !(ctx->player->IsNearEnd()))
    3095             ctx->player->SetBookmark();
     3096        if (bookmark_it)
     3097        {
     3098            if (ctx->player->IsNearEnd(-1, true))
     3099                ctx->player->ClearBookmark();
     3100            else
     3101                ctx->player->SetBookmark();
     3102        }
    30963103        if (db_auto_set_watched)
    30973104            ctx->player->SetWatched();
    30983105    }
    void TV::HandleEndOfPlaybackTimerEvent(void) 
    31603167        if (mctx == ctx)
    31613168        {
    31623169            endOfRecording = true;
    3163             PrepareToExitPlayer(mctx, __LINE__, false);
     3170            PrepareToExitPlayer(mctx, __LINE__);
    31643171            SetExitPlayer(true, true);
    31653172        }
    31663173    }
    bool TV::ActiveHandleAction(PlayerContext *ctx, 
    42834290                ShowOSDStopWatchingRecording(ctx);
    42844291                return handled;
    42854292            }
    4286             PrepareToExitPlayer(ctx, __LINE__, db_playback_exit_prompt == 2);
     4293            PrepareToExitPlayer(ctx, __LINE__);
    42874294            requestDelete = false;
    42884295            do_exit = true;
    42894296        }
    void TV::customEvent(QEvent *e) 
    85608567        for (uint i = 0; mctx && (i < player.size()); i++)
    85618568        {
    85628569            PlayerContext *ctx = GetPlayer(mctx, i);
    8563             PrepareToExitPlayer(ctx, __LINE__, db_playback_exit_prompt == 1 ||
    8564                                                db_playback_exit_prompt == 2);
     8570            PrepareToExitPlayer(ctx, __LINE__);
    85658571        }
    85668572
    85678573        SetExitPlayer(true, true);
    bool TV::HandleOSDVideoExit(PlayerContext *ctx, QString action) 
    1174711753    }
    1174811754    else if (action == "SAVEPOSITIONANDEXIT" && bookmark_ok)
    1174911755    {
    11750         PrepareToExitPlayer(ctx, __LINE__);
     11756        PrepareToExitPlayer(ctx, __LINE__, kBookmarkAlways);
    1175111757        SetExitPlayer(true, true);
    1175211758    }
    1175311759    else if (action == "KEEPWATCHING" && !near_end)
    bool TV::HandleOSDVideoExit(PlayerContext *ctx, QString action) 
    1175611762    }
    1175711763    else/* (action == "JUSTEXIT")*/
    1175811764    {
    11759         PrepareToExitPlayer(ctx, __LINE__, false);
     11765        PrepareToExitPlayer(ctx, __LINE__, kBookmarkNever);
    1176011766        SetExitPlayer(true, true);
    1176111767    }
    1176211768
  • mythtv/libs/libmythtv/tv_play.h

    diff --git a/mythtv/libs/libmythtv/tv_play.h b/mythtv/libs/libmythtv/tv_play.h
    index 9207280..8830d06 100644
    a b class MPUBLIC TV : public QObject 
    331331    void SetErrored(PlayerContext*);
    332332    void PrepToSwitchToRecordedProgram(PlayerContext*,
    333333                                       const ProgramInfo &);
     334    enum BookmarkAction {
     335        kBookmarkAlways,
     336        kBookmarkNever,
     337        kBookmarkAuto // set iff db_playback_exit_prompt==2
     338    };
    334339    void PrepareToExitPlayer(PlayerContext*, int line,
    335                              bool bookmark = true) const;
     340                             BookmarkAction bookmark = kBookmarkAuto) const;
    336341    void SetExitPlayer(bool set_it, bool wants_to) const;
    337342    void SetUpdateOSDPosition(bool set_it);
    338343