diff options
author | kaotisk <kaotisk@arching-kaos.org> | 2025-03-14 01:12:51 +0200 |
---|---|---|
committer | kaotisk <kaotisk@arching-kaos.org> | 2025-03-14 01:12:51 +0200 |
commit | 51818bcf9718a782a380251f2b63676e616f497a (patch) | |
tree | 115f5fec45f5661a6bf4439e8399bfe9f8f23309 /modules | |
parent | 95434f4629cdcbdd322993ebb80425e2dfad976c (diff) | |
download | arching-kaos-tools-51818bcf9718a782a380251f2b63676e616f497a.tar.gz arching-kaos-tools-51818bcf9718a782a380251f2b63676e616f497a.tar.bz2 arching-kaos-tools-51818bcf9718a782a380251f2b63676e616f497a.zip |
kinda what the decentralized radio does on the browser, but we try on the terminal here
Diffstat (limited to 'modules')
-rwxr-xr-x | modules/mixtapes/lib.sh | 134 | ||||
-rwxr-xr-x | modules/mixtapes/main.sh | 1 |
2 files changed, 135 insertions, 0 deletions
diff --git a/modules/mixtapes/lib.sh b/modules/mixtapes/lib.sh index daac6ca..a0912dd 100755 --- a/modules/mixtapes/lib.sh +++ b/modules/mixtapes/lib.sh @@ -23,6 +23,140 @@ source $AK_LIBDIR/_ak_ipfs source $AK_LIBDIR/_ak_gpg source $AK_LIBDIR/_ak_zblock +# Should return current playlist, current mixtape and seek time on the mixtape +_ak_modules_mixtapes_find_now(){ + current_timestamp="$(date -u +%s)" + mixtapes_ord=$AK_WORKDIR/mixtapes_ord + if [ ! -d $mixtapes_ord ] + then + mkdir -p $mixtapes_ord + fi + mixtapes_playlists=$AK_WORKDIR/mixtapes_playlists + if [ ! -d $mixtapes_playlists ] + then + mkdir -p $mixtapes_playlists + fi + # cat $AK_WORKDIR/mixtapes_index | while read TS ZB BL DB IF DUR + # do + # echo "$TS $ZB $DUR" + # done + counter=1 + total_number_of_mixtapes="$(cat $AK_WORKDIR/mixtapes_index | wc -l)" + _ak_log_info "Mixtapes found: $total_number_of_mixtapes" + if [ $total_number_of_mixtapes -gt 1 ] + then + while [ $counter -le $total_number_of_mixtapes ] + do + # _ak_log_debug "Loop counter: $counter" + cat $AK_WORKDIR/mixtapes_index | head -n $counter | tail -n 1 | \ + while read TS ZB BL DB IF DUR + do + echo "$TS $ZB $BL $DB $IF $DUR" > $mixtapes_ord/$counter + done + counter=$(($counter + 1)) + done + elif [ $total_number_of_mixtapes -eq 1 ] + then + _ak_log_debug "Only 1 mixtape" + cat $AK_WORKDIR/mixtapes_index | while read TS ZB BL DB IF DUR + do + echo "$IF" > $mixtapes_playlists/1 + seek=$(( ($(date -u +%s) - $TS) % $DUR )) + index=$counter + echo "$counter $index $seek" + exit 0 + done + fi + # watch -n 1 ' + # TS=$(cat mixtapes_index | cut -d\ -f 1,6 | head -n 1 | cut -d\ -f 1) + # DUR=$(cat mixtapes_index | cut -d\ -f 1,6 | head -n 1 | cut -d\ -f 2) + # echo $(( ($(date -u +%s) - $TS) / $DUR )) # Times played + # echo $(( ($(date -u +%s) - $TS) % $DUR )) # Seek time + # ' + + mixtapes_counter=1 + playlists_counter=1 + while [ $mixtapes_counter -le $total_number_of_mixtapes ] + do + _ak_log_debug "Counter: $mixtapes_counter" + # current_timestamp="$(date -u +%s)" + current_timestamp="$(cat $mixtapes_ord/$mixtapes_counter | cut -d ' ' -f 1)" + current_duration="$(cat $mixtapes_ord/$mixtapes_counter | cut -d ' ' -f 6)" + # diff_ts="$(( $current_timestamp - $timestamp ))" + # TPIU="$(( $diff_ts / $duration ))" + # _ak_log_debug "Times played if unique: $TPIU" + + if [ $mixtapes_counter -eq 1 ] && [ $total_number_of_mixtapes -eq 1 ] + then + cat $mixtapes_ord/$mixtapes_counter > $mixtapes_playlists/$playlists_counter + # Return playlist number, mixtape number and seek time + time_difference=$(( $(date -u +%s) - $current_timestamp)) + seek_time=$(( $time_difference % $current_duration )) + echo $playlists_counter $mixtapes_counter $seek_time + # For this particular instance we would loop for ever in the + # background and exit the script + mpv --start=$seek_time --loop=inf \ + $(cat $mixtapes_playlists/$playlists_counter | \ + head -n $mixtapes_counter | \ + tail -n 1 | \ + cut -d ' ' -f 5) & + exit + break + fi + if [ $mixtapes_counter -eq 1 ] + then + cat $mixtapes_ord/$mixtapes_counter > $mixtapes_playlists/$playlists_counter + elif [ $mixtapes_counter -ge 2 ] + then + previous_mixtapes_counter=$(($mixtapes_counter-1)) + previous_timestamp=$(cat $mixtapes_ord/$previous_mixtapes_counter | cut -d ' ' -f 1) + previous_duration=$(cat $mixtapes_ord/$previous_mixtapes_counter | cut -d ' ' -f 6) + _ak_log_debug "czts: $current_timestamp, pzts: $previous_timestamp" + previous_diff_ts=$(($current_timestamp - $previous_timestamp)) + times_played_since_previous=$(( $previous_diff_ts / $previous_duration )) + if [ $times_played_since_previous -gt 0 ] + then + # This means that by the time the current_zblock was added the + # previous one hadn't finished playing. We suppose that we would + # allow it to play in full, so we add "1" + times_would_be_played=$(($times_played_since_previous + 1)) + # Playing X times would give us a new duration + total_duration=$(($times_would_be_played * $previous_duration)) + # And we now figure out when the previous mix would stop playing + next_stop=$(($previous_timestamp + $total_duration)) + _ak_log_debug "Next stop: $next_stop" + _ak_log_debug "Total duration: $total_duration" + _ak_log_debug "Times would be played: $times_would_be_played" + next_playlist=$(($playlists_counter + 1)) + _ak_log_debug "Next playlist: $next_playlist" + if [ ! -f $mixtapes_playlists/$next_playlist ] + then + cat $mixtapes_playlists/$playlists_counter > $mixtapes_playlists/$next_playlist + fi + cat $mixtapes_ord/$mixtapes_counter >> $mixtapes_playlists/$next_playlist + playlists_counter=$next_playlist + _ak_log_debug "Now playlist counter is: $playlists_counter" + else + # But which playlist? When do we increase? + cat $mixtapes_ord/$mixtapes_counter >> $mixtapes_playlists/$playlists_counter + _ak_log_debug "Possibly append current one to the previous playlist!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + fi + seek_time_since_previous=$(( $previous_diff_ts % $previous_duration )) + _ak_log_debug "Time passed since previous upload:" + _ak_log_debug "$current_timestamp - $previous_timestamp = $previous_diff_ts" + _ak_log_debug "Times played since previous:" + _ak_log_debug "$previous_diff_ts / $previous_duration = $times_played_since_previous" + _ak_log_debug "Seek time since previous:" + _ak_log_debug "$previous_diff_ts % $previous_duration = $seek_time_since_previous" + + elif [ $mixtapes_counter -eq $total_number_of_mixtapes ] + then + echo $(( ($(date -u +%s) - $current_timestamp) % $current_duration )) # Seek time + fi + mixtapes_counter=$(($mixtapes_counter + 1)) + done +} + _ak_modules_mixtapes_specs(){ datetime_mask=$(printf '^[0-9]\{8\}_[0-9]\{6\}$' | xxd -p) ipfs_mask=$(printf '^Qm[a-zA-Z0-9]\{44\}$' | xxd -p) diff --git a/modules/mixtapes/main.sh b/modules/mixtapes/main.sh index ce9b35a..3448209 100755 --- a/modules/mixtapes/main.sh +++ b/modules/mixtapes/main.sh @@ -44,6 +44,7 @@ if [ ! -z $1 ]; then -r | --read) _ak_modules_mixtapes_read $2; exit;; -s | --specs) _ak_modules_mixtapes_specs $2; exit;; -x | --html) _ak_modules_mixtapes_html $2; exit;; + -f | --find-now) _ak_modules_mixtapes_find_now; exit;; * ) _ak_usage;; esac else _ak_usage |