Ticket #5910: 5910_PrepareToExitPlayer.diff

File 5910_PrepareToExitPlayer.diff, 7.7 KB (added by Shane Shrybman, 11 years ago)
  • mythtv/libs/libmythtv/tv_play.cpp

    void TV::HandleOSDAskAllowResponse(PlayerContext *ctx, int dialog_result) 
    14791479                break;
    14801480            case 2:
    14811481                // return to main menu
     1482                PrepareToExitPlayer(ctx, __LINE__);
    14821483                SetExitPlayer(true, true);
    14831484                break;
    14841485            case 3:
    void TV::HandleOSDAskAllowResponse(PlayerContext *ctx, int dialog_result) 
    14961497            default:
    14971498            case 1:
    14981499                // return to main menu
     1500                PrepareToExitPlayer(ctx, __LINE__);
    14991501                SetExitPlayer(true, true);
    15001502                break;
    15011503            case 2:
    void TV::SetErrored(PlayerContext *ctx) 
    28932895    errorRecoveryTimerId = StartTimer(1, __LINE__);
    28942896}
    28952897
     2898void TV::PrepareToExitPlayer(PlayerContext *ctx, int line, bool bookmark) const
     2899{
     2900    bool bookmark_it = bookmark && IsBookmarkAllowed(ctx);
     2901    ctx->LockDeleteNVP(__FILE__, line);
     2902    if (ctx->nvp)
     2903    {
     2904        if (bookmark_it)
     2905            ctx->nvp->SetBookmark();
     2906        if (db_auto_set_watched)
     2907            ctx->nvp->SetWatched();
     2908    }
     2909    ctx->UnlockDeleteNVP(__FILE__, line);
     2910}
     2911
    28962912void TV::SetExitPlayer(bool set_it, bool wants_to) const
    28972913{
    28982914    QMutexLocker locker(&timerIdLock);
    void TV::HandleEndOfPlaybackTimerEvent(void) 
    29542970        if (mctx == ctx)
    29552971        {
    29562972            endOfRecording = true;
    2957             mctx->LockDeleteNVP(__FILE__, __LINE__);
    2958             if (db_auto_set_watched && mctx->nvp)
    2959                 mctx->nvp->SetWatched();
    2960             mctx->UnlockDeleteNVP(__FILE__, __LINE__);
     2973            PrepareToExitPlayer(mctx, __LINE__, false);
    29612974            SetExitPlayer(true, true);
    29622975        }
    29632976    }
    void TV::HandleVideoExitDialogTimerEvent(void) 
    30513064    ReturnOSDLock(mctx, osd);
    30523065    DoTogglePause(mctx, true);
    30533066    ClearOSD(mctx);
     3067    PrepareToExitPlayer(mctx, __LINE__);
    30543068    ReturnPlayerLock(mctx);
    30553069
    30563070    requestDelete = false;
    bool TV::OSDDialogHandleAction(PlayerContext *actx, const QStringList &actions) 
    36673681    else if (has_action("ESCAPE", actions) && isnearend)
    36683682    {
    36693683        requestDelete = false;
     3684        PrepareToExitPlayer(actx, __LINE__, false);
    36703685        SetExitPlayer(true, true);
    36713686    }
    36723687    else if (has_action("SELECT", actions)  ||
    bool TV::OSDDialogHandleAction(PlayerContext *actx, const QStringList &actions) 
    37313746                    DoTogglePause(actx, true);
    37323747                    break;
    37333748                case 1:
    3734                     actx->LockDeleteNVP(__FILE__, __LINE__);
    3735                     if (actx->nvp)
    3736                         actx->nvp->SetBookmark();
    3737                     actx->UnlockDeleteNVP(__FILE__, __LINE__);
     3749                    PrepareToExitPlayer(actx, __LINE__);
    37383750                    SetExitPlayer(true, true);
    37393751                    break;
    37403752                case 3:
    bool TV::OSDDialogHandleAction(PlayerContext *actx, const QStringList &actions) 
    37433755                        actx, tr("Delete this recording?"));
    37443756                    return handled;
    37453757                default:
     3758                    PrepareToExitPlayer(actx, __LINE__, false);
    37463759                    SetExitPlayer(true, true);
    37473760                    break;
    37483761            }
    bool TV::OSDDialogHandleAction(PlayerContext *actx, const QStringList &actions) 
    37613774                    SetExitPlayer(true, true);
    37623775                    break;
    37633776                case 3:
     3777                    PrepareToExitPlayer(actx, __LINE__);
    37643778                    SetExitPlayer(true, true);
    37653779                    break;
    37663780                default:
    37673781                    if (isnearend)
     3782                    {
     3783                        PrepareToExitPlayer(actx, __LINE__, false);
    37683784                        SetExitPlayer(true, true);
     3785                    }
    37693786                    else
    37703787                        DoTogglePause(actx, true);
    37713788                    break;
    bool TV::ActiveHandleAction(PlayerContext *ctx, 
    41874204    }
    41884205    else if (has_action("EXITSHOWNOPROMPTS", actions))
    41894206    {
    4190         ctx->LockDeleteNVP(__FILE__, __LINE__);
    4191         if (ctx->nvp)
    4192             ctx->nvp->SetBookmark();
    4193         ctx->UnlockDeleteNVP(__FILE__, __LINE__);
    41944207        requestDelete = false;
     4208        PrepareToExitPlayer(ctx, __LINE__);
    41954209        SetExitPlayer(true, true);
    41964210    }
    41974211    else if (has_action("ESCAPE", actions))
    bool TV::ActiveHandleAction(PlayerContext *ctx, 
    42394253                PromptStopWatchingRecording(ctx);
    42404254                return handled;
    42414255            }
    4242             else if (ctx->HasNVP() &&
    4243                      (db_playback_exit_prompt == 2))
    4244             {
    4245                 ctx->LockDeleteNVP(__FILE__, __LINE__);
    4246                 if (ctx->nvp)
    4247                     ctx->nvp->SetBookmark();
    4248                 ctx->UnlockDeleteNVP(__FILE__, __LINE__);
    4249             }
    4250             if (ctx->HasNVP() && db_auto_set_watched)
    4251             {
    4252                 ctx->LockDeleteNVP(__FILE__, __LINE__);
    4253                 if (ctx->nvp)
    4254                     ctx->nvp->SetWatched();
    4255                 ctx->UnlockDeleteNVP(__FILE__, __LINE__);
    4256             }
     4256            PrepareToExitPlayer(ctx, __LINE__, db_playback_exit_prompt == 2);
    42574257            requestDelete = false;
    42584258            do_exit = true;
    42594259        }
    void TV::customEvent(QEvent *e) 
    86058605        for (uint i = 0; mctx && (i < player.size()); i++)
    86068606        {
    86078607            PlayerContext *ctx = GetPlayer(mctx, i);
    8608             ctx->LockDeleteNVP(__FILE__, __LINE__);
    8609             if (ctx->nvp)
    8610             {
    8611                 if (db_playback_exit_prompt == 1 ||
    8612                     db_playback_exit_prompt == 2)
    8613                 {
    8614                     ctx->nvp->SetBookmark();
    8615                 }
    8616                 if (db_auto_set_watched)
    8617                     ctx->nvp->SetWatched();
    8618             }
    8619             ctx->UnlockDeleteNVP(__FILE__, __LINE__);
     8608            PrepareToExitPlayer(ctx, __LINE__, db_playback_exit_prompt == 1 ||
     8609                                               db_playback_exit_prompt == 2);
    86208610        }
    86218611
    86228612        SetExitPlayer(true, true);
    bool TV::HandleJumpToProgramAction( 
    1072910719        {
    1073010720            if (mctx == ctx)
    1073110721            {
    10732                 ctx->LockDeleteNVP(__FILE__, __LINE__);
    10733                 ctx->nvp->SetBookmark();
    10734                 ctx->UnlockDeleteNVP(__FILE__, __LINE__);
     10722                PrepareToExitPlayer(ctx, __LINE__);
    1073510723                jumpToProgram = true;
    1073610724                SetExitPlayer(true, true);
    1073710725            }
    bool TV::HandleJumpToProgramAction( 
    1079210780                        .arg(p->title).arg(p->subtitle));
    1079310781
    1079410782                SetLastProgram(p);
    10795                 ctx->LockDeleteNVP(__FILE__, __LINE__);
    10796                 ctx->nvp->SetBookmark();
    10797                 ctx->UnlockDeleteNVP(__FILE__, __LINE__);
     10783                PrepareToExitPlayer(ctx, __LINE__);
    1079810784                jumpToProgram = true;
    1079910785                SetExitPlayer(true, true);
    1080010786            }
  • mythtv/libs/libmythtv/tv_play.h

    class MPUBLIC TV : public QThread 
    338338    void ForceNextStateNone(PlayerContext*);
    339339    void ScheduleStateChange(PlayerContext*);
    340340    void SetErrored(PlayerContext*);
     341    void PrepareToExitPlayer(PlayerContext*, int line,
     342                             bool bookmark = true) const;
    341343    void SetExitPlayer(bool set_it, bool wants_to) const;
    342344    void SetUpdateOSDPosition(bool set_it);
    343345