#!/usr/bin/env bash ### ### arching-kaos-tools ### Tools to interact and build an Arching Kaos Infochain ### Copyright (C) 2021 - 2025 kaotisk ### ### This program is free software: you can redistribute it and/or modify ### it under the terms of the GNU General Public License as published by ### the Free Software Foundation, either version 3 of the License, or ### (at your option) any later version. ### ### This program is distributed in the hope that it will be useful, ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### GNU General Public License for more details. ### ### You should have received a copy of the GNU General Public License ### along with this program. If not, see . ### source $AK_LIBDIR/_ak_log 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) text_dash_underscore_space_mask=$(printf '^[a-zA-Z0-9][a-zA-Z0-9[:space:]\_]\{1,128\}$' | xxd -p -c 64) echo ' { "datetime": "'$datetime_mask'", "artist": "'$text_dash_underscore_space_mask'", "title": "'$text_dash_underscore_space_mask'", "ipfs": "'$ipfs_mask'", "detach": "'$ipfs_mask'" }' | jq } _ak_modules_mixtapes_add(){ if [ ! -z $3 ]; then echo $1 PWD="$(pwd)" MIXTAPE_ARTIST="$1" MIXTAPE_TITLE="$2" MIXTAPE_FILE="$PWD/$3" _ak_modules_mixtapes_main $1 cat $PWD/data | jq -M _ak_zblock_pack mixtape/add $PWD/data fi } _ak_modules_mixtapes_main(){ echo $MIXTAPE_FILE "by" $MIXTAPE_ARTIST "named as" $MIXTAPE_TITLE MIXTAPE_IPFS_HASH=$(_ak_ipfs_add $MIXTAPE_FILE) MIXTAPE_SIGN_FILE=$MIXTAPE_FILE".asc" _ak_gpg_sign_detached $MIXTAPE_SIGN_FILE $MIXTAPE_FILE MIXTAPE_SIGNATURE=$(_ak_ipfs_add $MIXTAPE_SIGN_FILE) cat > data < aktempzblock else _ak_zchain_crawl -l 1 $1 | jq > aktempzblock fi curzblock="`cat aktempzblock | jq -r '.[].zblock'`" curaction="`cat aktempzblock | jq -r '.[].action'`" curmodule="`cat aktempzblock | jq -r '.[].module'`" curdata="`cat aktempzblock | jq -r '.[].data'`" curipfs="$(cat aktempzblock | jq -r ".[].$curdata" | jq -r ".ipfs")" curprevious="`cat aktempzblock | jq -r '.[].previous'`" if [ "$curmodule" == "mixtape" ] && [ "$curaction" == "add" ] then artist="$(cat aktempzblock | jq -r ".[].$curdata" | jq -r ".artist")" title="$(cat aktempzblock | jq -r ".[].$curdata" | jq -r ".title")" echo "Found zblock: $curzblock" echo "$title by $artist" _ak_ipfs_get $curipfs mpv $curipfs else seek $curprevious fi rm -rf $tempdir exit 0 }