Fixed unnecessary bug.

This commit is contained in:
2024-03-03 17:28:10 +02:00
parent e8218f1f75
commit 09b3c8c9eb
2 changed files with 142 additions and 33 deletions

View File

@@ -1,50 +1,44 @@
# tv.sh
A small script to offer a selection menu of channels in ustvgo.tv using rofi (or dmenu if you change the code) and start playing in mpv.
A small script to offer a selection menu of channels in thetvapp.to using tofi (or dmenu etc if you change the code) and start playing in mpv.
Intended for those who like the selection but don't necessarily want to add the m3u file to a program like vlc.
You should first go get [ustvgo_to_m3u](https://github.com/benmoose39/ustvgo_to_m3u) which actually does everything for this to be useful and then change the path to the ustvgo.m3u file in the script
It clones the repo [thetvappstream](https://github.com/habitual69/thetvappstream) which actually does everything for this to be useful. Meaning this is the program that actually provides the channels and the script is just a menu to select them.
## Installation
```sh
git clone https://git.konsthol.eu/konsthol/UsTvGo_Menu
cd UsTvGo_Menu
git clone https://git.konsthol.eu/konsthol/TheTvApp_Menu
cd TheTvApp_Menu
sudo cp tv.sh /usr/bin/
(Or cp tv.sh anywhere in your $PATH)
```
## Usage
Simply run `tv.sh` or even better assign it to run with a keybinding
Also as benmoose39 says in his repo the playlist url changes every 4 hours so if you don't hate setting up cron jobs you should do the following
```sh
crontab -e (to open the cronjobs file)
0 */4 * * * ~/PATH_UP_TO/ustvgo_to_m3u/autorun.sh
```
If you want it to renew before 4 hours have passed or after, you can change the cron parameters according to [crontab.guru](https://crontab.guru/)
Simply run `tv.sh stream` or `tv.sh schedule` or even better assign those two functions to run with a keybinding.
## Dependencies
* grep
* awk
* git
* curl
* sed
* rofi (or dmenu)
* tofi (or dmenu if you change the code)
* mpv
* tail
* grep
* npm
* node
* pup
* jq
* notify-send (Optional)
## Credits go to
* [benmoose39](https://github.com/benmoose39)
* [habitual69](https://github.com/habitual69)
As this script uses his [ustvgo_to_m3u](https://github.com/benmoose39/ustvgo_to_m3u) script
As this script uses his [thetvappstream](https://github.com/habitual69/thetvappstream) script.
* [USTVGO](https://ustvgo.tv/)
As they provide the channel streams
* [THETVAPP](https://thetvapp.to/)
As they provide the channel streams.

135
tv.sh
View File

@@ -1,15 +1,130 @@
#!/bin/sh
#!/usr/bin/env bash
PLAYLIST_FILE="/home/konsthol/Gits/ustvgo_to_m3u/ustvgo.m3u"
function streamChannel {
channel="$(grep tvg-id "$PLAYLIST_FILE" | awk '{print $2}' | sed 's/[^"]*"\([^"]*\)".*/\1/' | rofi -dmenu -i -l 20 -p 'Channels')"
if [[ -n $channel ]]
then
notify-send -t 2000 "Playing "$channel
mpv "$(grep "$channel" "$PLAYLIST_FILE" | tail -n 1)"
else
notify-send "Nothing was chosen"
if [[ ! -d "$HOME/Gits/thetvappstream/" ]]; then
mkdir -p "$HOME/Gits"
notify-send -t 2000 "Cloning necessary repositories"
git clone https://github.com/habitual69/thetvappstream "$HOME/Gits/thetvappstream"
cd "$HOME/Gits/thetvappstream/" || exit
notify-send -t 2000 "Copying .env_example to .env"
cp .env_example .env
notify-send -t 2000 "Installing necessary dependencies"
npm -g install
fi
cd "$HOME/Gits/thetvappstream/" || exit
PIDAPP="$(pgrep -f "node app.js")"
PIDMPV="$(pgrep mpv)"
IP=$(hostname -i)
[[ -n "$PIDAPP" ]] && kill -9 "$PIDAPP"
notify-send -t 2000 "Getting channels list"
setsid -f node app.js
sleep 5
channel="$(curl -s "http://$IP:5000/channels.m3u" | grep "channel/" | xargs -L1 basename | tofi --include "$HOME"/.config/tofi/tofiColors --num-results 10 --prompt-text Channels: )"
# channel="$(grep tvg-id "$PLAYLIST_FILE" | awk '{print $2}' | sed 's/[^"]*"\([^"]*\)".*/\1/' | rofi -dmenu -i -l 20 -p 'Channels')"
if [[ -n "$channel" ]]; then
[[ -n "$PIDMPV" ]] && kill -9 "$PIDMPV"
notify-send -t 2000 "Playing $channel"
setsid -f mpv --vo=gpu --gpu-api=opengl --opengl-es=yes --term-osd-bar "http://$IP:5000/channel/$channel"
sleep 5
kill -9 "$(pgrep -f "node app.js")"
else
notify-send -t 2000 "Nothing was chosen"
kill -9 "$(pgrep -f "node app.js")"
fi
[[ -n "$PIDAPP" ]] && kill -9 "$PIDAPP"
cd ~ || exit
exit 0
}
function getSchedule {
BASEURL="https://thetvapp.to/tv"
RESULTS="$(curl -s "$BASEURL")"
CHANNELS="$(printf "%s" "$RESULTS" | pup 'ol json{}' | jq -r '.[].children.[].text' | sed 's/amp;//g')"
CHANNEL="$(printf "%s" "$CHANNELS" | cat -n | tofi --include "$HOME"/.config/tofi/tofiColors --num-results 10 --prompt-text Channels: | sed 's/^ *//g' | awk '{print $1}')"
CHANNELURL="$(printf "%s" "$RESULTS" | pup 'ol json{}' | jq -r '.[].children.[].href' | sed "${CHANNEL}q;d")"
CHANNELID="$(curl -s "https://thetvapp.to$CHANNELURL" | grep jsonUrl | cut -d'+' -f3 | head -n1 | sed 's/^ *//g' | cut -d'"' -f2)"
CHANNELJSONURL="https://thetvapp.to/json/$CHANNELID.json"
GETSCHEDULE=$(cat <<EOF
#!/usr/bin/env node
const axios = require('axios');
let jsonUrl = "$CHANNELJSONURL"
axios.get(jsonUrl)
.then(function(response) {
let mydata = response.data;
let index = 0;
for (let i = 0; i < mydata.length; i++) {
let now = new Date();
let startTime = new Date(mydata[i]["startTime"] * 1000);
let endTime = new Date(mydata[i]["endTime"] * 1000);
if (startTime >= now && now <= endTime) {
index = i - 1;
break;
}
}
for (let i = index; i < mydata.length; i++) {
let title = mydata[i]["title"];
if (mydata[i]["episodeTitle"] != null) {
title = title + " - " + mydata[i]["episodeTitle"];
}
let airTime = new Date(mydata[i]["startTime"] * 1000);
console.log(
airTime.toLocaleString('en-US', {
hour: 'numeric',
minute: 'numeric',
hour12: true
}) +
": " + title
);
}
})
.catch(function(error) {
console.log(error);
});
EOF
)
printf "%s" "$GETSCHEDULE" > /tmp/getSchedule.js
chmod +x /tmp/getSchedule.js
export NODE_PATH="$HOME/.local/share/npm/lib/node_modules"
node /tmp/getSchedule.js
rm /tmp/getSchedule.js
exit 0
}
[[ -z "$1" ]] && printf "Usage: tv.sh [stream|schedule]\n" && exit 1
[[ "$1" != "stream" && "$1" != "schedule" ]] && printf "Usage: tv.sh [stream|schedule]\n" && exit 1
[[ -z "$(command -v tofi)" ]] && printf "tofi is not installed\n" && exit 1
[[ -z "$(command -v pup)" ]] && printf "pup is not installed\n" && exit 1
[[ -z "$(command -v jq)" ]] && printf "jq is not installed\n" && exit 1
[[ -z "$(command -v notify-send)" ]] && printf "notify-send is not installed\n" && exit 1
[[ -z "$(command -v mpv)" ]] && printf "mpv is not installed\n" && exit 1
[[ -z "$(command -v node)" ]] && printf "node is not installed\n" && exit 1
[[ -z "$(command -v npm)" ]] && printf "npm is not installed\n" && exit 1
[[ -z "$(command -v curl)" ]] && printf "curl is not installed\n" && exit 1
[[ -z "$(command -v git)" ]] && printf "git is not installed\n" && exit 1
[[ -z "$(command -v sed)" ]] && printf "sed is not installed\n" && exit 1
[[ -z "$(command -v awk)" ]] && printf "awk is not installed\n" && exit 1
[[ -z "$(command -v cat)" ]] && printf "cat is not installed\n" && exit 1
[[ -z "$(command -v printf)" ]] && printf "printf is not installed\n" && exit 1
[[ -z "$(command -v xargs)" ]] && printf "xargs is not installed\n" && exit 1
[[ -z "$(command -v basename)" ]] && printf "basename is not installed\n" && exit 1
[[ -z "$(command -v pgrep)" ]] && printf "pgrep is not installed\n" && exit 1
[[ -z "$(command -v setsid)" ]] && printf "setsid is not installed\n" && exit 1
[[ -z "$(command -v sleep)" ]] && printf "sleep is not installed\n" && exit 1
[[ "$1" == "stream" ]] && streamChannel
[[ "$1" == "schedule" ]] && getSchedule