* watch: move to the new templating engine

merge-requests/6/head
Dominique Liberda 2022-11-29 06:47:24 -05:00
parent dda217195d
commit d4c901f323
5 changed files with 107 additions and 58 deletions

7
webroot/player.shs → templates/components/player.t Executable file → Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,8 +1,7 @@
url_="$(echo "$url" | xxd -ps | sed -E 's/.{2}/%&/g' | tr -d '\n')"
echo '<script>
<script>
(function() {
var fmt_url_map = "34%7C'"$url_"'"
var fmt_url_map = "34%7C{{url}}"
var fmt_stream_map = fmt_url_map;
document.write("<embed height=\"38" + "5\" width=\"64" + "0\" type=\"application\/x-shockwave-flash\" src=\"\/\/f.sakamoto.pl\/watch-vfl168525.swf\" id=\"movie_player\" flashvars=\"rv.7.length_seconds=53&rv.2.thumbnailUrl=http%3A%2F%2Fi4.ytimg.com%2Fvi%2Fgkeiv_eNlxs%2Fdefault.jpg&rv.0.url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D4jbkRGPxvaM&rv.0.view_count=109338857&enablecsi=1&rv.2.title=Who+Is+The+Oldest+YouTuber%3F&rv.6.author=judsonlaipply&rv.3.view_count=204757&is_doubleclick_tracked=0&rv.4.thumbnailUrl=http%3A%2F%2Fi2.ytimg.com%2Fvi%2FY7dpJ0oseIA%2Fdefault.jpg&fmt_url_map=" + fmt_url_map + "&csi_page_type=watch&keywords=jawed%2Ckarim%2Celephant%2Czoo%2Cyoutube%2Cfirst%2Cvideo%2Cyakov%2Clapitsky&cr=US&cc3_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fsubtitles3_module-vfl169211.swf&rv.6.thumbnailUrl=http%3A%2F%2Fi1.ytimg.com%2Fvi%2FdMH0bHeiRNg%2Fdefault.jpg&rv.3.rating=3.2731629393&fmt_list=34%2F0%2F9%2F0%2F115%2C5%2F0%2F7%2F0%2F0&rv.7.id=feGZ4l5fk4Q&iv_storage_server=http%3A%2F%2Fwww.google.com%2Freviews%2Fy%2F&rv.7.url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DfeGZ4l5fk4Q&creator=jawed&rv.0.rating=2.5226886736&rv.4.rating=2.88055644388&rv.3.title=Oldest+Youtube+Video&rv.5.id=_OBlgSz8sSM&rv.2.view_count=101702&rv.0.featured=1&rv.0.id=4jbkRGPxvaM&cc_font=Arial+Unicode+MS%2C+arial%2C+verdana%2C+_sans&sdetail=p%3Awww.bookofjoe.com%2F2009%2F09%2F08%2Fi&rv.5.url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D_OBlgSz8sSM&rv.6.length_seconds=360&sourceid=r&timestamp=1275761040&rv.0.author=SHOWTIME&cc_asr=1&rv.2.author=creamofcardstv&rv.6.url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdMH0bHeiRNg&fmt_map=34%2F0%2F9%2F0%2F115%2C5%2F0%2F7%2F0%2F0&hl=en_US&rv.0.thumbnailUrl=http%3A%2F%2Fi1.ytimg.com%2Fvi%2F4jbkRGPxvaM%2Fdefault.jpg&rv.5.length_seconds=56&rv.0.length_seconds=200&referrer=http%3A%2F%2Fwww.bookofjoe.com%2F2009%2F09%2F08%2Findex.html&rv.3.thumbnailUrl=http%3A%2F%2Fi1.ytimg.com%2Fvi%2Fl2lnMbnBzuM%2Fdefault.jpg&rv.7.author=jawed&tts_watch_url=%2Fwatch_ajax%3Faction_get_caption_track_all%26v%3DjNQXAC9IVRw&rv.1.length_seconds=307&rv.3.id=l2lnMbnBzuM&rv.2.id=gkeiv_eNlxs&rv.2.length_seconds=163&t=vjVQa1PpcFNO0Qg-PCO7YpsFsZwwrE-J1ymhKZWUDAY%3D&rv.6.id=dMH0bHeiRNg&vq=auto&rv.6.view_count=144980590&rv.3.author=Melcland&rv.4.id=Y7dpJ0oseIA&ttsurl=http%3A%2F%2Fvideo.google.com%2Ftimedtext%3Fsparams%3Dcaps%252Cexpire%252Cv%26expire%3D1275786000%26caps%3Dasr%26key%3Dyttt1%26signature%3D8A6B1478FE76B2A937FB34E1F13D1AEE9DE0EA8B.2EC9BD41592AE7D79F5B7C9FB898BA8AD9619B1A&fexp=907011&rv.4.author=YouTube&rv.7.thumbnailUrl=http%3A%2F%2Fi3.ytimg.com%2Fvi%2FfeGZ4l5fk4Q%2Fdefault.jpg&allow_embed=1&fmt_stream_map=" + fmt_stream_map + "&rv.2.rating=3.49242424242&rv.7.title=Extremely+short+runway+747+takeoff&cc_load_policy=1&rv.1.url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DuImk2RgCq_U&rv.1.id=uImk2RgCq_U&rv.6.title=Evolution+of+Dance+-+By+Judson+Laipply&rv.4.length_seconds=125&rv.7.view_count=4005023&rv.5.view_count=197773468&length_seconds=18&enablejsapi=1&video_id=jNQXAC9IVRw&plid=AASITEOh6RC4XUBh&iv_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fiv_module-vfl168524.swf&rv.5.rating=4.61405687817&rv.4.url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DY7dpJ0oseIA&rv.1.author=1nterwebs&rv.1.rating=4.70571010249&rv.4.title=YouTube&rv.5.thumbnailUrl=http%3A%2F%2Fi4.ytimg.com%2Fvi%2F_OBlgSz8sSM%2Fdefault.jpg&watermark=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Flogo-vfl106645.swf%2Chttp%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fhdlogo-vfl100714.swf&rv.0.title=Lezberado%3A+Revenge+Fantasies&iv3_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fiv3_module-vfl169211.swf&rv.7.rating=4.5715796897&rv.3.url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dl2lnMbnBzuM&rv.2.url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dgkeiv_eNlxs&ttslisturl=%2Fajax_timedtext%3FvideoId%3DjNQXAC9IVRw%26type%3Dlist&cc_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fsubtitle_module-vfl167653.swf&ttstrackurl=%2Fajax_timedtext%3FvideoId%3DjNQXAC9IVRw%26type%3Dtrack%26lang%3Den%26name%3D&rv.4.view_count=296911&iv_load_policy=0&rv.1.view_count=172499&rv.5.title=Charlie+bit+my+finger+-+again+%21&rv.6.rating=4.66225384259&sk=2mqJTltP8SpOATYtW_nZrjNZASKI-NT4C&rv.1.title=The+20+oldest+Videos+on+Youtube&rv.1.thumbnailUrl=http%3A%2F%2Fi2.ytimg.com%2Fvi%2FuImk2RgCq_U%2Fdefault.jpg&rv.3.length_seconds=11&rv.5.author=HDCYT\" allowscriptaccess=\"always\" allowfullscreen=\"true\" bgcolor=\"#000000\" \/>");
})();
</script>'
</script>

View File

@ -1,5 +1,4 @@
<div><br>
{{.player}}
<h2>{{.title}}</h2>
<div>
<div>
@ -7,17 +6,43 @@
</div>
<div>
<b>{{.view_count}}</b> views<br>
{{.like_dislike_count}}<br>
{{.fav}}
{{.sub}}
<b>{{.like_count}}</b> likes<br>
{{start ?fav}}<a href='fav.shs?v={{.id}}' target='_blank'>Add to favourites</a><br>{{end ?fav}}
{{start ?unfav}}<a href='unfav.shs?v={{.id}}' target='_blank'>Remove from favourites</a><br>{{end ?unfav}}
{{start ?sub}}<a href='subscribe.shs?id={{.channel_id}}' target='_blank'>Subscribe to {{.uploader}}!</a><br>{{end ?sub}}
{{start ?unsub}}<a href='unsubscribe.shs?id={{.channel_id}}' target='_blank'>Unsubscribe from {{.uploader}}!</a><br>{{end ?unsub}}
{{start ?login}}<b><a href='/login.shs?r={{.r}}'>Log in</a> to add this video to your favourites and/or subscribe to this channel!</b><br>{{end ?login}}
<br><br>
</div>
</div>
<span><i>Description</i>:<br>{{.description}}</span>
<pre><i>Description</i>:<br>{{.description}}</pre>
</div>
<h1>Recommended</h1>
<div style='display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));'>
{{.recommended}}
{{start _recommended}}
<div><a href='/watch?v={{.id}}'><img src='https://i.ytimg.com/vi/{{.id}}/mqdefault.jpg'>{{.title}}</a></div>
{{end _recommended}}
</div><h1>Comments</h1>
{{.comments_list}}
{{.playlist}}
<div class='comments'></div>
<script src='/js/watch.js'></script>
<script type='text/javascript'>
if ('{{.next}}' != '') {
window.addEventListener('DOMContentLoaded', (event) => {
var video = document.querySelector('video');
video.addEventListener('ended', function() {
window.location = 'watch?v={{.next}}&playlist={{.playlist_id}}';
});
});
}
</script>
<h1>Playlist</h1>
{{start _playlist}}
<a href='watch?v={{.id}}&playlist={{.playlist_id}}'><img src='//i.ytimg.com/vi/{{.id}}/mqdefault.jpg'><br>{{.title}}</a><br>
{{end _playlist}}

View File

@ -9,7 +9,7 @@ if [[ ${cfg[template]} == 'default' ]]; then
fi
if [[ "${get_data[list]}" ]]; then
data=$(haruhi-dl --cookies ${cfg[_cookies]} -j --flat-playlist "https://www.youtube.com/playlist?list=${get_data[list]}")
data=$(yt-dlp --cookies ${cfg[_cookies]} -j --flat-playlist "https://www.youtube.com/playlist?list=${get_data[list]}")
else
strings[playlist]="Please specify id"
fi

View File

@ -1,4 +1,10 @@
#!/bin/bash
#TODO: move this somewhere more apropriate
#jq_to_array(jq_expression)
function _jq_to_array() {
declare -ga "_tmp=($(jq -r "$1" | sed 's/[][`~!@#$%^&*():;<>.,?\|{}=+-]/\\&/g;'"s@\\\'@\\'@g" ))"
}
function format_numbers() {
rev | sed "s#[[:digit:]]\{3\}#&,#g" | rev | sed -E 's/^,//'
@ -10,13 +16,13 @@ fi
declare -A strings
if [[ ! "$(which haruhi-dl)" ]]; then
strings[error]='Could not load video'
source templates/head.sh
source "${cfg[namespace]}/templates/header.shs"
render strings "${cfg[namespace]}/templates/themes/${cfg[template]}/watch_error.t"
return
fi
#if [[ ! "$(which haruhi-dl)" ]]; then
# strings[error]='Could not load video'
# source templates/head.sh
# source "${cfg[namespace]}/templates/header.shs"
# render strings "${cfg[namespace]}/templates/themes/${cfg[template]}/watch_error.t"
# return
#fi
if [[ "${get_data[v]}" ]]; then
if [[ "${get_data[v]}" == '18l' || "${get_data[v]}" == '5eFdt6Y_34E' ]]; then
@ -117,50 +123,46 @@ if [[ "${get_data[v]}" ]]; then
url=${urls[0]}
fi
fi
strings[player]=$(source "${cfg[namespace]}/webroot/player_flash.shs")
declare -A player
player[url]=$(xxd -p <<< "$url" | sed -E 's/.{2}/%&/g' | tr -d '\n')
player_render="$(render player "${cfg[namespace]}/templates/components/player_flash.t")"
else
strings[player]=$(source "${cfg[namespace]}/webroot/player.shs")
declare -A player
player[@formats]="$formats"
player[@subs]="$subs"
player_render="$(render player "${cfg[namespace]}/templates/components/player.t")"
fi
strings[upload_date]=$(date -d "$(echo $video | jq -r '.upload_date' | sed -E 's/..../&-/;s/....-../&-/')" "+%d %B %Y")
strings[view_count]=$(echo $video | jq -r '.view_count' | format_numbers)
like_count=$(echo $video | jq -r '.like_count' | format_numbers)
dislike_count=$(echo $video | jq -r '.dislike_count' | format_numbers)
if [[ ${cfg[template]} == 'default' ]]; then
if [[ $like_count == 'null' && $dislike_count == 'null' ]]; then
strings[like_dislike_count]="Likes are turned off"
else
strings[like_dislike_count]="<b>$like_count</b> likes, <b>$dislike_count</b> dislikes."
fi
strings[view_count]=$(jq -r '.view_count' <<< "$video" | format_numbers)
like_count=$(jq -r '.like_count' <<< "$video" | format_numbers)
if [[ $like_count == 'null' ]]; then
strings[like_count]="Likes are turned off"
else
strings[like_count]="$like_count"
fi
strings[sub]=''
strings[id]="${get_data[v]}"
#<video id='player' src='$url' controls></video>
if [[ ${cookies[sh_session]} ]]; then
if [[ $(grep $(session_get_username "${cookies[sh_session]}") storage/faves | grep "${get_data[v]}") == '' ]]; then
if [[ ${cfg[template]} == 'default' ]]; then
strings[fav]="<a href='fav.shs?v=$(sed -s 's/<//g;' <<< "${get_data[v]}")' target='_blank'>Add to favourites</a><br>"
fi
strings[?fav]=true
else
if [[ ${cfg[template]} == 'default' ]]; then
strings[fav]="<a href='unfav.shs?v=$(sed -s 's/<//g;' <<< "${get_data[v]}")' target='_blank'>Remove from favourites</a><br>"
fi
strings[?unfav]=true
fi
if [[ $(grep $(session_get_username "${cookies[sh_session]}") storage/subscribed | grep "${strings[channel_id]}") == '' ]]; then
if [[ ${cfg[template]} == 'default' ]]; then
strings[sub]="<a href='subscribe.shs?id=${strings[channel_id]}' target='_blank'>Subscribe to ${strings[uploader]}!</a><br>"
fi
strings[?sub]=true
else
if [[ ${cfg[template]} == 'default' ]]; then
strings[sub]="<a href='unsubscribe.shs?id=${strings[channel_id]}' target='_blank'>Unsubscribe from ${strings[uploader]}</a><br>"
fi
strings[?unsub]=true
fi
else
if [[ ${cfg[template]} == 'default' ]]; then
strings[fav]="<b><a href='/login.shs?r=$(sed -s 's/?/___/' <<< "${r[url]}")'>Log in</a> to add this video to your favourites and/or subscribe to this channel!</b><br>"
fi
strings[?login]=true
strings[login_r]=$(sed -s 's/?/___/' <<< "${r[url]}")
fi
strings[description]=$(jq -r '.description' <<< "$video" | sed -E 's/$/<br>/g')
strings[description]=$(jq -r '.description' <<< "$video")
# youtube-dl modifies the filename when writing with --write-pages
# params restricted=True, is_id=False to https://github.com/ytdl-org/youtube-dl/blob/70d0d4f9beba0e5b6d95ee50ad62ae7ab5be9be1/youtube_dl/utils.py#L2079
@ -173,14 +175,30 @@ if [[ "${get_data[v]}" ]]; then
vid="$(cat "temp/${written_id}_https_-_"*"watch"*".dump")"
vid_json="$(tr -d '\n' <<< "$vid" | grep -Poh "ytInitialData.*?</script>" | sed 's/ytInitialData = //;s/<\/script>//')"
strings[recommended]=$(jq -r '.contents.twoColumnWatchNextResults.secondaryResults.secondaryResults.results[] | .compactAutoplayRenderer.contents[0].compactVideoRenderer, .compactVideoRenderer | if .videoId != null then "<div><a href='"'"'/watch?v="+.videoId+"'"'"'><img src='"'"'https://i.ytimg.com/vi/"+.videoId+"/mqdefault.jpg'"'"'>"+.title.simpleText+"</a></div>" else empty end' <<< "$vid_json")
strings[recommended]=$()
strings[comments_list]="<div class='comments'></div><script src='/js/watch.js'></script>"
_jq_to_array '.contents.twoColumnWatchNextResults.secondaryResults.secondaryResults.results[] | .compactAutoplayRenderer.contents[0].compactVideoRenderer, .compactVideoRenderer |
if .videoId != null then
[.videoId,
.title.simpleText]
else
empty
end | @sh' <<< "$vid_json"
nested_declare rec
declare -A rec_
for (( x=0; x<${#_tmp[@]}; x=x+2 )); do
rec_[id]="${_tmp[$x]}"
rec_[title]="${_tmp[$((x+1))]}"
nested_add rec rec_
done
strings[_recommended]="rec"
strings[playlist]=""
if [[ "${get_data[playlist]}" ]]; then
playlist=$(haruhi-dl --ie-key YoutubePlaylist --cookies ${cfg[_cookies]} -j --flat-playlist "https://www.youtube.com/playlist?list=${get_data[playlist]}")
playlist=$(yt-dlp --cookies ${cfg[_cookies]} -j --flat-playlist "https://www.youtube.com/playlist?list=${get_data[playlist]}")
IFS=$'\n'
video_title=($(jq -r '.title' <<< $playlist))
@ -194,12 +212,19 @@ if [[ "${get_data[v]}" ]]; then
done
[[ "$next" == '' ]] && next='dQw4w9WgXcQ'
strings[playlist]+="<script type='text/javascript'>window.addEventListener('DOMContentLoaded', (event) => { var video = document.querySelector('video'); video.addEventListener('ended', function() { window.location = 'watch?v=$next&playlist=$(html_encode ${get_data[playlist]})';});});</script><h1>Playlist</h1>"
strings[playlist_id]="$(html_encode "${get_data[playlist]}")"
strings[next]="$next"
nested_declare list
declare -A list_
for (( i=0; i<${#video_id[@]}; i++ )); do
strings[playlist]+="<a href='watch?v=${video_id[$i]}&playlist=$(html_encode ${get_data[playlist]})'><img src='//i.ytimg.com/vi/${video_id[$i]}/mqdefault.jpg'><br>${video_title[$i]}</a><br>"
list_[id]="${video_id[$i]}"
list_[title]="${video_title[$i]}"
list_[playlist_id]="$(html_encode "${get_data[playlist]}")"
nested_add list list_
done
strings[_playlist]="list"
fi
if [[ ! "${strings[recommended]}" ]]; then
@ -211,7 +236,8 @@ if [[ "${get_data[v]}" ]]; then
fi
source "${cfg[namespace]}/templates/header.shs"
render_unsafe strings "${cfg[namespace]}/templates/themes/${cfg[template]}/watch.t"
echo "$player_render"
render strings "${cfg[namespace]}/templates/themes/${cfg[template]}/watch.t"
else
source templates/head.sh
echo "pls add ?v param i'm still WiP"