Ticket #7994: clear_bookmark_at_end_11.patch

File clear_bookmark_at_end_11.patch, 5.8 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 1705794..5e62ff0 100644
    a b bool MythPlayer::IsReallyNearEnd(void) const 
    33133313
    33143314/** \brief Returns true iff near end of recording.
    33153315 */
    3316 bool MythPlayer::IsNearEnd(void)
     3316bool MythPlayer::IsNearEnd(bool allowVideo)
    33173317{
    33183318    uint64_t framesRead, framesLeft = 0;
    33193319
    bool MythPlayer::IsNearEnd(void) 
    33213321        return false;
    33223322
    33233323    player_ctx->LockPlayingInfo(__FILE__, __LINE__);
    3324     if (!player_ctx->playingInfo || player_ctx->playingInfo->IsVideo() ||
     3324    if (!player_ctx->playingInfo || (player_ctx->playingInfo->IsVideo() && !allowVideo) ||
    33253325        !decoder)
    33263326    {
    33273327        player_ctx->UnlockPlayingInfo(__FILE__, __LINE__);
    bool MythPlayer::IsNearEnd(void) 
    33373337    framesRead = decoder->GetFramesRead();
    33383338
    33393339    if (!player_ctx->IsPIP() &&
    3340         player_ctx->GetState() == kState_WatchingPreRecorded)
     3340        (player_ctx->GetState() == kState_WatchingPreRecorded ||
     3341         player_ctx->GetState() == kState_WatchingVideo ||
     3342         player_ctx->GetState() == kState_WatchingBD ||
     3343         player_ctx->GetState() == kState_WatchingDVD))
    33413344    {
    33423345        if (framesRead >= deleteMap.GetLastFrame(totalFrames))
    33433346            return true;
  • mythtv/libs/libmythtv/mythplayer.h

    diff --git a/mythtv/libs/libmythtv/mythplayer.h b/mythtv/libs/libmythtv/mythplayer.h
    index 3229f4a..ee22f6f 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(void);
     197    bool    IsNearEnd(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 1fb0b38..e9ee8a6 100644
    a b void TV::PrepToSwitchToRecordedProgram(PlayerContext *ctx, 
    30833083    SetExitPlayer(true, true);
    30843084}
    30853085
    3086 void TV::PrepareToExitPlayer(PlayerContext *ctx, int line, bool bookmark) const
     3086void TV::PrepareToExitPlayer(PlayerContext *ctx, int line, BookmarkAction bookmark) const
    30873087{
    3088     bool bookmark_it = bookmark && IsBookmarkAllowed(ctx);
     3088    bool bm_basic = (bookmark == kBookmarkAlways ||
     3089                     (bookmark == kBookmarkAuto && db_playback_exit_prompt == 2));
     3090    bool bookmark_it = bm_basic && IsBookmarkAllowed(ctx);
    30893091    ctx->LockDeletePlayer(__FILE__, line);
    30903092    if (ctx->player)
    30913093    {
    3092         if (bookmark_it && !(ctx->player->IsNearEnd()))
    3093             ctx->player->SetBookmark();
     3094        if (bookmark_it)
     3095        {
     3096            if (ctx->player->IsNearEnd(true))
     3097                ctx->player->ClearBookmark();
     3098            else
     3099                ctx->player->SetBookmark();
     3100        }
    30943101        if (db_auto_set_watched)
    30953102            ctx->player->SetWatched();
    30963103    }
    void TV::HandleEndOfPlaybackTimerEvent(void) 
    31583165        if (mctx == ctx)
    31593166        {
    31603167            endOfRecording = true;
    3161             PrepareToExitPlayer(mctx, __LINE__, false);
     3168            PrepareToExitPlayer(mctx, __LINE__);
    31623169            SetExitPlayer(true, true);
    31633170        }
    31643171    }
    bool TV::ActiveHandleAction(PlayerContext *ctx, 
    42744281                ShowOSDStopWatchingRecording(ctx);
    42754282                return handled;
    42764283            }
    4277             PrepareToExitPlayer(ctx, __LINE__, db_playback_exit_prompt == 2);
     4284            PrepareToExitPlayer(ctx, __LINE__);
    42784285            requestDelete = false;
    42794286            do_exit = true;
    42804287        }
    void TV::customEvent(QEvent *e) 
    85488555        for (uint i = 0; mctx && (i < player.size()); i++)
    85498556        {
    85508557            PlayerContext *ctx = GetPlayer(mctx, i);
    8551             PrepareToExitPlayer(ctx, __LINE__, db_playback_exit_prompt == 1 ||
    8552                                                db_playback_exit_prompt == 2);
     8558            PrepareToExitPlayer(ctx, __LINE__);
    85538559        }
    85548560
    85558561        SetExitPlayer(true, true);
    bool TV::HandleOSDVideoExit(PlayerContext *ctx, QString action) 
    1173511741    }
    1173611742    else if (action == "SAVEPOSITIONANDEXIT" && bookmark_ok)
    1173711743    {
    11738         PrepareToExitPlayer(ctx, __LINE__);
     11744        PrepareToExitPlayer(ctx, __LINE__, kBookmarkAlways);
    1173911745        SetExitPlayer(true, true);
    1174011746    }
    1174111747    else if (action == "KEEPWATCHING" && !near_end)
    bool TV::HandleOSDVideoExit(PlayerContext *ctx, QString action) 
    1174411750    }
    1174511751    else/* (action == "JUSTEXIT")*/
    1174611752    {
    11747         PrepareToExitPlayer(ctx, __LINE__, false);
     11753        PrepareToExitPlayer(ctx, __LINE__, kBookmarkNever);
    1174811754        SetExitPlayer(true, true);
    1174911755    }
    1175011756
  • 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