Save a position only from a player that has played since its last save
A tab left paused further into an episode saved its older place as it reloaded, over where the listener had got to since, and the episode dropped out of Currently Listening. A jump back is now saved at once. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1507,7 +1507,7 @@ function play(e,enc=e.enclosures.find(isPlayable)){
|
||||
// The same file carries on where it was; another of the item's files starts from its top.
|
||||
const resuming = player.guid===e.guid && player.enc===enc.id;
|
||||
if(!resuming){
|
||||
player.guid=e.guid; player.feed=e.feed_id; player.entry=e; player.enc=enc.id;
|
||||
player.guid=e.guid; player.feed=e.feed_id; player.entry=e; player.enc=enc.id; player.moved=false;
|
||||
document.body.classList.toggle('has-video', kindOf(enc)==='video');
|
||||
audio.src=`/media/${enc.id}`;
|
||||
audio.currentTime=0;
|
||||
@@ -1539,14 +1539,21 @@ audio.addEventListener('timeupdate',()=>{
|
||||
$('#pcur').textContent=clock(audio.currentTime);
|
||||
$('#pdur').textContent=clock(d);
|
||||
if(d) $('#seek').value=String(Math.round(audio.currentTime/d*1000));
|
||||
// Persist roughly every 10s so a reload resumes where you were.
|
||||
if(player.guid && audio.currentTime-player.saveAt>10){ savePos(); }
|
||||
// Only playing counts as moving: the seek to where you left off happens paused, and saving
|
||||
// that would write back whatever the list said, however old.
|
||||
if(!audio.paused) player.moved=true;
|
||||
// Persist roughly every 10s so a reload resumes where you were. Either way: a jump back used
|
||||
// to wait for the next pause to be saved.
|
||||
if(player.guid && Math.abs(audio.currentTime-player.saveAt)>10){ savePos(); }
|
||||
if(d && audio.currentTime/d >= 0.9) markPlayed();
|
||||
});
|
||||
function savePos(){
|
||||
// Before the file has loaded, currentTime is 0 rather than where you are: saving it then --
|
||||
// a failed load, or a pause before the seek to where you left off -- wiped the position.
|
||||
if(!player.guid||!audio.readyState) return;
|
||||
// Nor from a player nobody has played since it last saved: one left paused in another tab
|
||||
// saved its older place as that tab reloaded, over where you had got to since.
|
||||
if(!player.guid||!audio.readyState||!player.moved) return;
|
||||
player.moved=false;
|
||||
player.saveAt=audio.currentTime;
|
||||
if(player.entry) player.entry.position=Math.floor(audio.currentTime);
|
||||
// The measured length stands in for one the feed left out: without it Currently Listening
|
||||
|
||||
Reference in New Issue
Block a user