~dr|z3d
                        
                        
                            @RN
                        
                        
                            @RN_
                        
                        
                            @StormyCloud
                        
                        
                            @T3s|4
                        
                        
                            @T3s|4_
                        
                        
                            @not_bob_afk
                        
                        
                            @orignal
                        
                        
                            @postman
                        
                        
                            @zzz
                        
                        
                            %Liorar
                        
                        
                            %acetone
                        
                        
                            +FreefallHeavens
                        
                        
                            +Onn4l7h
                        
                        
                            +Over
                        
                        
                            +Sh0ck
                        
                        
                            +bak83_
                        
                        
                            +bpb
                        
                        
                            +leopold_
                        
                        
                            +r00tobo_BNC
                        
                        
                            +uop23ip
                        
                        
                            +xHarr
                        
                        
                            Arch
                        
                        
                            BubbRubb
                        
                        
                            Danny
                        
                        
                            DeltaOreo
                        
                        
                            H20
                        
                        
                            Irc2PGuest16752
                        
                        
                            Irc2PGuest33667
                        
                        
                            Irc2PGuest97218
                        
                        
                            Maylay
                        
                        
                            Meow
                        
                        
                            ac9f_
                        
                        
                            anontor
                        
                        
                            b4dab00m
                        
                        
                            duck
                        
                        
                            gellegery
                        
                        
                            halloy13412
                        
                        
                            john231
                        
                        
                            makoto
                        
                        
                            nZDoYBkF_
                        
                        
                            nilbog-
                        
                        
                            ntty`
                        
                        
                            poriori_
                        
                        
                            profetik1
                        
                        
                            r00tobo[2]
                        
                        
                            shiver_
                        
                        
                            simprelay
                        
                        
                            solidx66
                        
                        
                            thetia
                        
                        
                            u5657
                        
                        
                            vivid_reader56
                        
                        
                            zer0bitz
                        
                    
                    
                        orignal
                    
                    
                        zzz, yes clock skew problem was fixed in 2.50.2
                    
                
                
                    
                        orignal
                    
                    
                        0.9.58 is hard to crash
                    
                
                
                    
                        orignal
                    
                    
                        it contains that fix about endless recursion inside garlic
                    
                
                
                    
                        orignal
                    
                    
                        it was actually deadlock but anyway
                    
                
                
                
                    
                        orignal
                    
                    
                        here we go
                    
                
                
                    
                        orignal
                    
                    
                        this commit is after 0.9.58
                    
                
                
                    
                        orignal
                    
                    
                        all you need it is to send ratchets message to router rather than to destination
                    
                
                
                    
                        zzz
                    
                    
                        good to know about the old clock skew bug. We definitely saw a lot of it last year
                    
                
                
                    
                        zzz
                    
                    
                        I don't think I'll be sending death ratchets to china though...
                    
                
                
                    
                        zzz
                    
                    
                        about 1700 unique routers seen so far
                    
                
                
                    
                        zzz
                    
                    
                              1 X
                    
                
                
                    
                        zzz
                    
                    
                              2 Xf
                    
                
                
                    
                        zzz
                    
                    
                            168 XfR
                    
                
                
                    
                        zzz
                    
                    
                              1 XfRD
                    
                
                
                    
                        zzz
                    
                    
                             19 XfRE
                    
                
                
                    
                        zzz
                    
                    
                            458 XR
                    
                
                
                    
                        zzz
                    
                    
                             37 XRE
                    
                
                
                    
                        zzz
                    
                    
                            991 XU
                    
                
                
                    
                        zzz
                    
                    
                             16 XUE
                    
                
                
                    
                        orignal
                    
                    
                        before 0.9.58 it's even easier
                    
                
                
                    
                        orignal
                    
                    
                        send a garlic message to router with garlic clove inside
                    
                
                
                    
                        orignal
                    
                    
                        and it fall into deadlock mutex
                    
                
                
                    
                        orignal
                    
                    
                        in 0.9.58 you need to send it with right timing
                    
                
                
                    
                        orignal
                    
                    
                        i2pd XfRD? it means latest release
                    
                
                
                    
                        orignal
                    
                    
                        we didn't publish D beofre
                    
                
                
                    
                        zzz
                    
                    
                        only 1, probably not part of botnet
                    
                
                
                    
                        orignal
                    
                    
                        then what is unique?
                    
                
                
                    
                        zzz
                    
                    
                        unique router hash
                    
                
                
                    
                        zzz
                    
                    
                        can't explain the one XfRD though, this is 0.9.58 only
                    
                
                
                    
                        orignal
                    
                    
                        and you believe it's i2pd
                    
                
                
                    
                        orignal
                    
                    
                        you mean unique in China?
                    
                
                
                    
                        zzz
                    
                    
                        in general the botnet is i2pd. The one XfRD, maybe not
                    
                
                
                    
                        orignal
                    
                    
                        how do you diferentite botnet? older version?
                    
                
                
                    
                        zzz
                    
                    
                        X && China && 0.9.58
                    
                
                
                    
                        zzz
                    
                    
                        a week ago: almost zero. Now: 1700
                    
                
                
                    
                        orignal
                    
                    
                        but how you know that XU is China?
                    
                
                
                    
                        orignal
                    
                    
                        since you don't see IP
                    
                
                
                    
                        zzz
                    
                    
                        actual connected IP
                    
                
                
                    
                        zzz
                    
                    
                        maybe some sort of GFW test to improve their classification
                    
                
                
                    
                        dr|z3d
                    
                    
                        GFW test? on the chinese routers or?
                    
                
                
                    
                        zzz
                    
                    
                        right, perhaps GFW ops deployed their own fleet, to test/improve classification/blocking
                    
                
                
                    
                        dr|z3d
                    
                    
                        the simplest way would be a head request to anything blocked by the gfw.
                    
                
                
                    
                        dr|z3d
                    
                    
                        (and wait for the reset packet)
                    
                
                
                    
                        zzz
                    
                    
                        attempting to hack up a js audio play-all button for snark
                    
                
                
                    
                        dr|z3d
                    
                    
                        don't we create a playlist from all the files already, or we just take one if it's there?
                    
                
                
                    
                        zzz
                    
                    
                        yes for an external player
                    
                
                
                    
                        zzz
                    
                    
                        but annoyingly I have a console pw so everything fails 401
                    
                
                
                    
                        zzz
                    
                    
                        so let's try an in-browser solution
                    
                
                
                    
                        dr|z3d
                    
                    
                        <script>
                    
                
                
                    
                        dr|z3d
                    
                    
                            fetch('playlist.m3u')
                    
                
                
                    
                        dr|z3d
                    
                    
                            .then(response => response.text())
                    
                
                
                    
                        dr|z3d
                    
                    
                            .then(data => {
                    
                
                
                    
                        dr|z3d
                    
                    
                                const audioUrls = data.split('\n').filter(line => line.trim().length > 0 && !line.startsWith('#'));
                    
                
                
                    
                        dr|z3d
                    
                    
                                let currentAudioIndex = 0;
                    
                
                
                    
                        dr|z3d
                    
                    
                                const audioPlayer = document.getElementById('audio-player');
                     
                
                
                    
                        dr|z3d
                    
                    
                                function playNextAudio() {
                    
                
                
                    
                        dr|z3d
                    
                    
                                    if (currentAudioIndex < audioUrls.length) {
                    
                
                
                    
                        dr|z3d
                    
                    
                                        audioPlayer.src = audioUrls[currentAudioIndex];
                    
                
                
                    
                        dr|z3d
                    
                    
                                        audioPlayer.play();
                    
                
                
                    
                        dr|z3d
                    
                    
                                        currentAudioIndex++;
                    
                
                
                    
                        dr|z3d
                    
                    
                                    } else {
                    
                
                
                    
                        dr|z3d
                    
                    
                                        alert('Playlist finished!');
                    
                
                
                    
                        dr|z3d
                    
                    
                                    }
                    
                
                
                    
                        dr|z3d
                    
                    
                                }
                    
                
                
                    
                        dr|z3d
                    
                    
                                audioPlayer.addEventListener('ended', playNextAudio);
                     
                
                
                    
                        dr|z3d
                    
                    
                                playNextAudio();
                    
                
                
                    
                        dr|z3d
                    
                    
                            })
                    
                
                
                    
                        dr|z3d
                    
                    
                            .catch(error => {
                    
                
                
                    
                        dr|z3d
                    
                    
                                console.error('Error fetching playlist:', error);
                    
                
                
                    
                        dr|z3d
                    
                    
                            });
                    
                
                
                    
                        dr|z3d
                    
                    
                        </script>
                    
                
                
                    
                        zzz
                    
                    
                        ewww
                    
                
                
                    
                        dr|z3d
                    
                    
                        it's a rough and ready demo, the point being you can take a playlist and have the browser play it.
                    
                
                
                    
                        dr|z3d
                    
                    
                        with something like that, you'd just add a button to the table header when the playlist is available and use it to trigger that script. problem sorted.
                    
                
                
                    
                        zzz
                    
                    
                        I'm aiming for something a little less fugly
                    
                
                
                    
                        dr|z3d
                    
                    
                        who cares if it's fugly. it only matters that it works and is robust.
                    
                
                
                    
                        zzz
                    
                    
                        thought you were the original anti-fugly
                    
                
                
                    
                        dr|z3d
                    
                    
                        well, I don't see that as particularly fugly. it can doubtless be improved, but it's not as bad as you're making out.
                    
                
                
                    
                        dr|z3d
                    
                    
                        and there are two distinct classes of fugly. fugly that the user sees, and fugly that the user doesn't. I'm allergic to user-facing fugly :)
                    
                
                
                    
                        zzz
                    
                    
                        I'm adding handlers to the <audio> events
                    
                
                
                    
                        dr|z3d
                    
                    
                        whatever works, as long as it works :)
                    
                
                
                    
                        zzz
                    
                    
                        on the details page
                    
                
                
                    
                        dr|z3d
                    
                    
                        sure, only real place for them :)
                    
                
                
                    
                        dr|z3d
                    
                    
                        personally I'd leverage the playlist, but it's your call.
                    
                
                
                    
                        zzz
                    
                    
                        the m3u includes subdirs
                    
                
                
                    
                        zzz
                    
                    
                        with your way there's no player visible, right?
                    
                
                
                    
                        dr|z3d
                    
                    
                        That could probably be provisioned.
                    
                
                
                    
                        zzz
                    
                    
                        thats why it's ui-fugly. there's no ui at all
                    
                
                
                    
                        dr|z3d
                    
                    
                        oh
                    
                
                
                    
                        dr|z3d
                    
                    
                        I thought you were referring to the code itself.
                    
                
                
                    
                        dr|z3d
                    
                    
                        so you want an inline audio player, or just an indication of what track's playing?
                    
                
                
                    
                        zzz
                    
                    
                        I want to control all the players that are already there
                    
                
                
                    
                        dr|z3d
                    
                    
                        ok, so each player in turn indicates when it's playing etc?
                    
                
                
                    
                        zzz
                    
                    
                        yup
                    
                
                
                    
                        dr|z3d
                    
                    
                        wouldn't hurt to additionally indicate in the table header the name of the currently playing track.
                    
                
                
                    
                        dr|z3d
                    
                    
                        and what about sub-dirs? how are you going to manage those?
                    
                
                
                    
                        dr|z3d
                    
                    
                        that's where you fall down, unless you're going to have the script jumping into snark's sub-dirs, and that truly is eww++
                    
                
                
                    
                        zzz
                    
                    
                        this would be for current dir only. your way would work better for subdirs
                    
                
                
                    
                        dr|z3d
                    
                    
                        something like this as a compromise:
                    
                
                
                    
                        dr|z3d
                    
                    
                        <div id="current-track">Now Playing: </div>
                     
                
                
                    
                        dr|z3d
                    
                    
                        <button id="playBtn">Play</button>
                     
                
                
                    
                        dr|z3d
                    
                    
                        <button id="pauseBtn">Pause</button>
                     
                
                
                    
                        dr|z3d
                    
                    
                        <button id="nextBtn">Next Track</button>
                    
                
                
                    
                        dr|z3d
                    
                    
                        <script>
                    
                
                
                    
                        dr|z3d
                    
                    
                            fetch('playlist.m3u')
                    
                
                
                    
                        dr|z3d
                    
                    
                            .then(response => response.text())
                    
                
                
                    
                        dr|z3d
                    
                    
                            .then(data => {
                    
                
                
                    
                        dr|z3d
                    
                    
                                const audioUrls = data.split('\n').filter(line => line.trim().length > 0 && !line.startsWith('#'));
                    
                
                
                    
                        dr|z3d
                    
                    
                                let currentAudioIndex = 0;
                    
                
                
                    
                        dr|z3d
                    
                    
                                const audioPlayer = document.getElementById('audio-player');
                     
                
                
                    
                        dr|z3d
                    
                    
                                const currentTrack = document.getElementById('current-track');
                     
                
                
                    
                        dr|z3d
                    
                    
                                const playBtn = document.getElementById('playBtn');
                     
                
                
                    
                        dr|z3d
                    
                    
                                const pauseBtn = document.getElementById('pauseBtn');
                     
                
                
                    
                        dr|z3d
                    
                    
                                const nextBtn = document.getElementById('nextBtn');
                     
                
                
                    
                        dr|z3d
                    
                    
                                function playNextAudio() {
                    
                
                
                    
                        dr|z3d
                    
                    
                                    if (currentAudioIndex < audioUrls.length) {
                    
                
                
                    
                        dr|z3d
                    
                    
                                        audioPlayer.src = audioUrls[currentAudioIndex];
                    
                
                
                    
                        dr|z3d
                    
                    
                                        audioPlayer.play();
                    
                
                
                    
                        dr|z3d
                    
                    
                                        currentTrack.innerText = `Now Playing: ${audioUrls[currentAudioIndex]}`;
                     
                
                
                    
                        dr|z3d
                    
                    
                                        currentAudioIndex++;
                    
                
                
                    
                        dr|z3d
                    
                    
                                    } else {
                    
                
                
                    
                        dr|z3d
                    
                    
                                        alert('Playlist finished!');
                    
                
                
                    
                        dr|z3d
                    
                    
                                    }
                    
                
                
                    
                        dr|z3d
                    
                    
                                }
                    
                
                
                    
                        dr|z3d
                    
                    
                                audioPlayer.addEventListener('ended', playNextAudio);
                     
                
                
                    
                        dr|z3d
                    
                    
                                playNextAudio();
                    
                
                
                    
                        dr|z3d
                    
                    
                                playBtn.addEventListener('click', () => {
                     
                
                
                    
                        dr|z3d
                    
                    
                                    audioPlayer.play();
                    
                
                
                    
                        dr|z3d
                    
                    
                                });
                    
                
                
                    
                        dr|z3d
                    
                    
                                pauseBtn.addEventListener('click', () => {
                     
                
                
                    
                        dr|z3d
                    
                    
                                    audioPlayer.pause();
                    
                
                
                    
                        dr|z3d
                    
                    
                                });
                    
                
                
                    
                        dr|z3d
                    
                    
                                nextBtn.addEventListener('click', () => {
                     
                
                
                    
                        dr|z3d
                    
                    
                                    playNextAudio();
                    
                
                
                    
                        dr|z3d
                    
                    
                                });
                    
                
                
                    
                        dr|z3d
                    
                    
                            })
                    
                
                
                    
                        dr|z3d
                    
                    
                            .catch(error => {
                    
                
                
                    
                        dr|z3d
                    
                    
                                console.error('Error fetching playlist:', error);
                    
                
                
                    
                        dr|z3d
                    
                    
                            });
                    
                
                
                    
                        dr|z3d
                    
                    
                        </script>
                    
                
                
                    
                        zzz
                    
                    
                        wtf is chatgpt writing your code now
                    
                
                
                    
                        zzz
                    
                    
                        the hybrid approach is messy
                    
                
                
                    
                        dr|z3d
                    
                    
                        any approach is less than perfect. assuming the playlist is generated for all tracks, no just the tracks in the current dir, it may be a better approach. if each folder has its own playlist, then it doesn't much matter.
                    
                
                
                    
                        dr|z3d
                    
                    
                        personally I'd prefer to see an in-browser playlist player contained in a div, with a single place to display the currently playing track, but each to their own.
                    
                
                
                    
                        zzz
                    
                    
                        go for it, looks like chatgpt already wrote it for you ))
                    
                
                
                    
                        dr|z3d
                    
                    
                        not on my list of priorities. happy with the playlist -> external player function :)
                    
                
                
                    
                        dr|z3d
                    
                    
                        here's a thought though.. if accessing the tunes via the console is causing 401's when you have a password set, why not set the playlist to reference the files on the filesystem  instead? should bypass any password issues.
                    
                
                
                    
                        dr|z3d
                    
                    
                        check for console password, if set, swapout hrefs for file:// refs?
                    
                
                
                    
                        zzz
                    
                    
                        different box
                    
                
                
                    
                        dr|z3d
                    
                    
                        smb refs?
                    
                
                
                    
                        dr|z3d
                    
                    
                        or maybe they *need* to be played in the browser. ok.
                    
                
                
                    
                        dr|z3d
                    
                    
                        you could always generate the playlist with the password encoded into the urls.
                    
                
                
                    
                        zzz
                    
                    
                        thought of that but that whole thing is deprecated and who knows which players would support it
                    
                
                
                    
                        zzz
                    
                    
                        i have my events hung off the DOM, now just a debugging exercise
                    
                
                
                    
                        dr|z3d
                    
                    
                        event delegation.. as close a parent to the target as you can get ensuring that the parent isn't subject to ajax refresh or whatever.
                    
                
                
                    
                        dr|z3d
                    
                    
                        if you're attaching multiple event handlers to an element, it can help to attach them to different elements to aid debugging.
                    
                
                
                    
                        dr|z3d
                    
                    
                        but you know all that.
                    
                
                
                    
                        zzz
                    
                    
                        there's no ajax on details page
                    
                
                
                    
                        dr|z3d
                    
                    
                        not in canon, anyways.
                    
                
                
                    
                        dr|z3d
                    
                    
                        we never did get around to adding priority download preference for sub-dirs in snark, or a download percentage indicator. dunno if that's worth thinking about?
                    
                
                
                    
                        zzz
                    
                    
                        imho any work on subdirs is a near-waste, they aren't common
                    
                
                
                    
                        dr|z3d
                    
                    
                        they're common enough for things like collections, complete works, that sort of thing.
                    
                
                
                    
                        zzz
                    
                    
                        sure, but below my threshold to put more work into
                    
                
                
                    
                        dr|z3d
                    
                    
                        ok
                    
                
                
                    
                        zzz
                    
                    
                        52 typos later, got it working more or less
                    
                
                
                    
                        zzz
                    
                    
                        52 typos later, got it working more or less
                    
                
                
                    
                        dr|z3d
                    
                    
                        52!!!
                    
                
                
                    
                        zzz
                    
                    
                        and *poof* the china botnet shut down about 6 hours ago
                    
                
                
                    
                        snex
                    
                    
                        i was hoping we could get some new podcast listeners :(