Ticket #7994: clear_bookmark_at_end_15.patch

File clear_bookmark_at_end_15.patch, 6.6 KB (added by Jim Stichnoth, 12 years ago)

Updated to latest master.

  • mythtv/libs/libmythtv/mythplayer.cpp

    diff --git a/mythtv/libs/libmythtv/mythplayer.cpp b/mythtv/libs/libmythtv/mythplayer.cpp
    index 5e93d4f..f4f0d27 100644
    a b bool MythPlayer::IsReallyNearEnd(void) const 
    35143514
    35153515/** \brief Returns true iff near end of recording.
    35163516 */
    3517 bool MythPlayer::IsNearEnd(void)
     3517bool MythPlayer::IsNearEnd(bool allowVideo)
    35183518{
    35193519    uint64_t framesRead, framesLeft = 0;
    35203520
    bool MythPlayer::IsNearEnd(void) 
    35223522        return false;
    35233523
    35243524    player_ctx->LockPlayingInfo(__FILE__, __LINE__);
    3525     if (!player_ctx->playingInfo || player_ctx->playingInfo->IsVideo() ||
     3525    if (!player_ctx->playingInfo || (player_ctx->playingInfo->IsVideo() && !allowVideo) ||
    35263526        !decoder)
    35273527    {
    35283528        player_ctx->UnlockPlayingInfo(__FILE__, __LINE__);
    bool MythPlayer::IsNearEnd(void) 
    35383538    framesRead = decoder->GetFramesRead();
    35393539
    35403540    if (!player_ctx->IsPIP() &&
    3541         player_ctx->GetState() == kState_WatchingPreRecorded)
    3542     {
    3543         if (framesRead >= deleteMap.GetLastFrame(totalFrames))
    3544             return true;
    3545         framesLeft = (totalFrames > framesRead) ? totalFrames - framesRead : 0;
     3541        (player_ctx->GetState() == kState_WatchingPreRecorded ||
     3542         player_ctx->GetState() == kState_WatchingVideo ||
     3543         player_ctx->GetState() == kState_WatchingBD ||
     3544         player_ctx->GetState() == kState_WatchingDVD))
     3545    {
     3546        uint64_t realTotalFrames = deleteMap.GetLastFrame(totalFrames);
     3547        framesLeft = (realTotalFrames > framesRead) ?
     3548            realTotalFrames - framesRead : 0;
    35463549        return (framesLeft < (uint64_t)margin);
    35473550    }
    35483551
  • mythtv/libs/libmythtv/mythplayer.h

    diff --git a/mythtv/libs/libmythtv/mythplayer.h b/mythtv/libs/libmythtv/mythplayer.h
    index 28290d9..8358b47 100644
    a b class MTV_PUBLIC MythPlayer 
    205205    bool    IsPlaying(uint wait_ms = 0, bool wait_for = true) const;
    206206    bool    AtNormalSpeed(void) const         { return next_normal_speed; }
    207207    bool    IsReallyNearEnd(void) const;
    208     bool    IsNearEnd(void);
     208    bool    IsNearEnd(bool allowVideo = false);
    209209    bool    HasAudioOut(void) const           { return audio.HasAudioOut(); }
    210210    bool    IsPIPActive(void) const           { return pip_active; }
    211211    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 036c276..bd330bd 100644
    a b void TV::PrepToSwitchToRecordedProgram(PlayerContext *ctx, 
    31853185    SetExitPlayer(true, true);
    31863186}
    31873187
    3188 void TV::PrepareToExitPlayer(PlayerContext *ctx, int line, bool bookmark)
     3188void TV::PrepareToExitPlayer(PlayerContext *ctx, int line, BookmarkAction bookmark)
    31893189{
    3190     bool bookmark_it = bookmark && IsBookmarkAllowed(ctx);
     3190    bool bm_basic = (bookmark == kBookmarkAlways ||
     3191                     (bookmark == kBookmarkAuto && db_playback_exit_prompt == 2));
     3192    bool bookmark_it = bm_basic && IsBookmarkAllowed(ctx);
    31913193    ctx->LockDeletePlayer(__FILE__, line);
    31923194    if (ctx->player)
    31933195    {
    3194         if (bookmark_it && (!(ctx->player->IsNearEnd()) ||
    3195                             StateIsRecording(GetState(ctx))))
    3196             SetBookmark(ctx);
     3196        if (bookmark_it)
     3197            SetBookmark(ctx,
     3198                        (ctx->player->IsNearEnd(true) || getEndOfRecording())
     3199                        && !StateIsRecording(GetState(ctx)));
    31973200        if (db_auto_set_watched)
    31983201            ctx->player->SetWatched();
    31993202    }
    void TV::HandleEndOfPlaybackTimerEvent(void) 
    32613264        if (mctx == ctx)
    32623265        {
    32633266            endOfRecording = true;
    3264             PrepareToExitPlayer(mctx, __LINE__, false);
     3267            PrepareToExitPlayer(mctx, __LINE__);
    32653268            SetExitPlayer(true, true);
    32663269        }
    32673270    }
    bool TV::ActiveHandleAction(PlayerContext *ctx, 
    42134216    }
    42144217    else if (has_action(ACTION_STOP, actions))
    42154218    {
    4216         PrepareToExitPlayer(ctx, __LINE__, false);
     4219        PrepareToExitPlayer(ctx, __LINE__);
    42174220        SetExitPlayer(true, true);
    42184221    }
    42194222    else if (has_action(ACTION_EXITSHOWNOPROMPTS, actions))
    bool TV::ActiveHandleAction(PlayerContext *ctx, 
    42694272                ShowOSDStopWatchingRecording(ctx);
    42704273                return handled;
    42714274            }
    4272             PrepareToExitPlayer(ctx, __LINE__, db_playback_exit_prompt == 2);
     4275            PrepareToExitPlayer(ctx, __LINE__);
    42734276            requestDelete = false;
    42744277            do_exit = true;
    42754278        }
    void TV::customEvent(QEvent *e) 
    88038806        for (uint i = 0; mctx && (i < player.size()); i++)
    88048807        {
    88058808            PlayerContext *ctx = GetPlayer(mctx, i);
    8806             PrepareToExitPlayer(ctx, __LINE__, db_playback_exit_prompt == 1 ||
    8807                                                db_playback_exit_prompt == 2);
     8809            PrepareToExitPlayer(ctx, __LINE__);
    88088810        }
    88098811
    88108812        SetExitPlayer(true, true);
    void TV::OSDDialogEvent(int result, QString text, QString action) 
    99549956        DoTogglePause(actx, true);
    99559957    else if (action == ACTION_STOP)
    99569958    {
    9957         PrepareToExitPlayer(actx, __LINE__, false);
     9959        PrepareToExitPlayer(actx, __LINE__);
    99589960        SetExitPlayer(true, true);
    99599961    }
    99609962    else if (action == ACTION_JUMPFFWD)
    bool TV::HandleOSDVideoExit(PlayerContext *ctx, QString action) 
    1220312205    }
    1220412206    else if (action == "SAVEPOSITIONANDEXIT" && bookmark_ok)
    1220512207    {
    12206         PrepareToExitPlayer(ctx, __LINE__);
     12208        PrepareToExitPlayer(ctx, __LINE__, kBookmarkAlways);
    1220712209        SetExitPlayer(true, true);
    1220812210    }
    1220912211    else if (action == "KEEPWATCHING" && !near_end)
  • mythtv/libs/libmythtv/tv_play.h

    diff --git a/mythtv/libs/libmythtv/tv_play.h b/mythtv/libs/libmythtv/tv_play.h
    index adce496..de46302 100644
    a b class MTV_PUBLIC TV : public QObject 
    309309    void setUnderNetworkControl(bool setting) { underNetworkControl = setting; }
    310310    void PrepToSwitchToRecordedProgram(PlayerContext*,
    311311                                       const ProgramInfo &);
     312    enum BookmarkAction {
     313        kBookmarkAlways,
     314        kBookmarkNever,
     315        kBookmarkAuto // set iff db_playback_exit_prompt==2
     316    };
    312317    void PrepareToExitPlayer(PlayerContext*, int line,
    313                              bool bookmark = true);
     318                             BookmarkAction bookmark = kBookmarkAuto);
    314319    void SetExitPlayer(bool set_it, bool wants_to);
    315320
    316321    bool RequestNextRecorder(PlayerContext *, bool);