Skip to content

Instantly share code, notes, and snippets.

@luisadha
Last active October 19, 2025 14:10
Show Gist options
  • Save luisadha/e35645aaea49df944506d447fe9702ec to your computer and use it in GitHub Desktop.
Save luisadha/e35645aaea49df944506d447fe9702ec to your computer and use it in GitHub Desktop.
#!/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