Last active
          October 19, 2025 14:10 
        
      - 
      
 - 
        
Save luisadha/e35645aaea49df944506d447fe9702ec to your computer and use it in GitHub Desktop.  
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | #!/data/data/com.termux/files/usr/bin/bash | |
| # termux-url-opener | |
| TAG_REDDIT="r" | |
| SUBREDDIT_OR_TOPICS="Youtube_" | |
| SAFE_TITLE=$(echo "$TITLE" | sed 's#[\/:*?"<>|]#-#g') | |
| INFO_TRACK="Sekarang dimainkan" | |
| URL_FORWARDING="$1" | |
| LOG="$HOME/.termux-url-opener.log" | |
| # kasih header timestamp | |
| { | |
| echo | |
| echo "==== $(date --iso-8601=seconds) ====" | |
| echo "ARGS: $*" | |
| } >>"$LOG" | |
| # redirect semua output ke log | |
| exec >>"$LOG" 2>&1 | |
| # aktifkan debug detail: -x (trace command) + -v (print input script setelah expansi) | |
| set -xv | |
| # ------------------------ | |
| # my code | |
| # ------------------------ | |
| #if [ ! -f $HOME/.shortcuts/Mainkan ]; then | |
| #| sed "s|\$URL_FORWARDING|$URL_FORWARDING|g" | |
| #else | |
| # : | |
| #fi | |
| # ... ... | |
| echo "$URL_FORWARDING" > ~/.m82link.cache | |
| SOCKET="$PREFIX/tmp/mpvsocket" | |
| PIDFILE="$PREFIX/tmp/mpv-player.pid" | |
| # kill proses lama kalau ada | |
| if [ -f "$PIDFILE" ]; then | |
| OLD_PID=$(cat "$PIDFILE") | |
| if [ -n "$OLD_PID" ] && kill -0 "$OLD_PID" 2>/dev/null; then | |
| kill -9 "$OLD_PID" || true | |
| fi | |
| rm -f "$PIDFILE" | |
| fi | |
| # hapus socket lama kalau ada | |
| rm -f "$SOCKET" | |
| # jalankan mpv | |
| (mpv --input-ipc-server="$SOCKET" "$@" > /dev/null 2>&1) & | |
| MPV_PID=$! | |
| echo $MPV_PID > "$PIDFILE" | |
| # tunggu sampai socket siap | |
| for i in {1..20}; do | |
| [ -S "$SOCKET" ] && break | |
| sleep 0.1 | |
| done | |
| sec_to_hms() { | |
| local T=$1 | |
| [ "$T" = "null" ] && echo "??:??" && return | |
| printf "%02d:%02d:%02d" $((T/3600)) $((T%3600/60)) $((T%60)) | |
| } | |
| # fungsi ambil judul | |
| get_title() { | |
| echo '{ "command": ["get_property", "media-title"] }' \ | |
| | socat - "$SOCKET" 2>/dev/null | jq -r .data | |
| } | |
| export -f get_title | |
| get_time() { | |
| POS=$(echo '{ "command": ["get_property", "time-pos"] }' \ | |
| | socat - "$SOCKET" 2>/dev/null | jq -r .data) | |
| DUR=$(echo '{ "command": ["get_property", "duration"] }' \ | |
| | socat - "$SOCKET" 2>/dev/null | jq -r .data) | |
| # konversi ke format jam:menit:detik | |
| sec_to_hms() { | |
| local T=$1 | |
| [ "$T" = "null" ] && echo "??:??" && return | |
| printf "%02d:%02d:%02d" $((T/3600)) $((T%3600/60)) $((T%60)) | |
| } | |
| POSFMT=$(sec_to_hms "${POS%.*}") | |
| DURFMT=$(sec_to_hms "${DUR%.*}") | |
| echo "$POSFMT / $DURFMT" | |
| } | |
| get_duration() { | |
| DUR=$(echo '{ "command": ["get_property", "duration"] }' \ | |
| | socat - "$SOCKET" 2>/dev/null | jq -r .data) | |
| echo "${DUR%.*}" | |
| } | |
| export -f get_duration | |
| DURATION="" | |
| for i in {1..150}; do # max 5 detik (50×0.1s) | |
| DURATION=$(get_duration) | |
| if [ -n "$DURATION" ] && [ "$DURATION" != "null" ] && [ "$DURATION" -gt 0 ]; then | |
| break | |
| fi | |
| sleep 0.1 | |
| done | |
| if [ -z "$DURATION" ] || [ "$DURATION" = "null" ] || [ "$DURATION" -eq 0 ]; then | |
| echo "Durasi tidak diketahui → pakai mode live (clock jalan terus)" | |
| fi | |
| #echo "Durasi total: $DURATION detik" | |
| shortcut_dir="$HOME/.shortcuts/${TAG_REDDIT}/" | |
| shortcut_file="$shortcut_dir/${SUBREDDIT_OR_TOPICS}${SAFE_TITLE} 2>/dev/null" | |
| last_shortcut="$(ls -t "$shortcut_dir"/"${TAG_REDDIT}"/"${SUBREDDIT_OR_TOPICS}"* 2>/dev/null | head -n1)" | |
| save_last_listen() | |
| { | |
| cat <<EOF > "$HOME/.shortcuts/${TAG_REDDIT}/${SUBREDDIT_OR_TOPICS}$(cat ~/.m82title.cache)" | |
| mkdir -p "${HOME}/.shortcuts/${TAG_REDDIT}/"; if [ "$last_shortcut" != "$shortcut_dir" ]; then [ -n "$last_shortcut" ] && rm -f "$last_shortcut"; fi; mpv "$(cat ~/.m82link.cache)"; | |
| EOF | |
| } | |
| parallel -lb get_title {} | |
| # loop monitor judul | |
| ( | |
| LAST_TITLE="" | |
| while kill -0 "$MPV_PID" 2>/dev/null; do | |
| TITLE="$(get_title)" > $HOME/.m82.json | |
| if [ -n "$TITLE" ] && [ "$TITLE" != "null" ] && [ "$TITLE" != "$LAST_TITLE" ]; then | |
| echo "$TITLE" > ~/.m82title.cache | |
| TIME="$(get_time)" | |
| YOUTUBE=$(termux-dialog confirm -i "${INFO_TRACK}.. [$TIME] $TITLE" -t "Apakah kamu ingin kembali?" | jq -r .text) | |
| if [ "$YOUTUBE" = "yes" ]; then | |
| cat ~/.m82link.cache | xargs -r termux-open-url >/dev/null 2>&1; | |
| elif [ "$YOUTUBE" = "no" ]; then | |
| DURATION="$(get_duration)" | |
| termux-dialog sheet -t "Mendapatkan info.." -v "[$DURATION] $TITLE" | |
| echo "$TITLE" > ~/.m82title.cache | |
| continue | |
| fi | |
| DURATION="$(get_duration)" | |
| LAST_TITLE="$TITLE" | |
| fi | |
| sleep 1 | |
| done) & save_last_listen && read reply | |
| # & ascii-live-termux #cacafire #cmatrix #tty-clock | |
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment