Commit 21b64989 authored by totalreset's avatar totalreset
Browse files

Added website's files

parent b93bc1b2
This source diff could not be displayed because it is too large. You can view the blob instead.
/*!
* Copyright 2021 Ethan Halsall
* https://github.com/eshaz/icecast-metadata-js
*
* This file is part of icecast-metadata-stats.
*
* icecast-metadata-stats free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* icecast-metadata-stats 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>
*/
var IcecastMetadataStats;(()=>{var t={344:t=>{const s=()=>{};t.exports=class{constructor({icyBr:t,onMetadataUpdate:e=s,onMetadataEnqueue:i=s}){this.t=t,this.i=e,this.h=i,this.l=!0,this.u=[]}get metadataQueue(){return this.u.map((({m:t,...s})=>s))}addMetadata({metadata:t,stats:s},e,i=0){this.g(t,e,i+this.getTimeByBytes(s.currentStreamPosition))}getTimeByBytes(t){return this.t?t/(125*this.t):0}purgeMetadataQueue(){this.u.forEach((t=>clearTimeout(t.m))),this.u=[]}g(t,s,e){const i={metadata:t,timestampOffset:s,timestamp:e};this.u.push(i),this.h(t,s,e),this.l?(this.p(),this.l=!1):i.m=setTimeout((()=>{this.p()}),1e3*(s-e))}p(){const{metadata:t,timestampOffset:s,timestamp:e}=this.u.shift();this.i(t,s,e)}}},780:(t,s,e)=>{const i=e(660),a=e(690),r=e(491),n=e(555);t.exports=class{constructor({metadataTypes:t=["icy"],...s}={}){const e=t.includes("icy"),h=t.includes("ogg");this.S=e&&h?new n(s):h?new r(s):e?new a(s):new i(s)}static parseIcyMetadata(t){return a.parseIcyMetadata(t)}get icyMetaInt(){return this.S.icyMetaInt}*iterator(t){yield*this.S.iterator(t)}readAll(t){this.S.readAll(t)}async*asyncIterator(t){return yield*this.S.asyncIterator(t)}async asyncReadAll(t){return this.S.asyncReadAll(t)}}},555:(t,s,e)=>{const i=e(690),a=e(491);t.exports=class{constructor(t){const{onStream:s,...e}=t;this.I=new a(t),this.M=new i(e)}get icyMetaInt(){return this.M.icyMetaInt}*iterator(t){for(const s of this.M.iterator(t))s.stream?yield*this.I.iterator(s.stream):yield s}readAll(t){for(const s of this.M.iterator(t))s.stream&&this.I.readAll(s.stream)}async*asyncIterator(t){for await(const s of this.M.asyncIterator(t))if(s.stream)for await(const t of this.I.asyncIterator(s.stream))yield t;else yield s}async asyncReadAll(t){for await(const s of this.M.iterator(t))s.stream&&await this.I.asyncReadAll(s.stream)}}},690:(t,s,e)=>{const i=e(660);class a extends i{constructor({icyMetaInt:t,icyDetectionTimeout:s=2e3,...e}){super(e),this._=t,this.A=s,this.v=this.T(),this.v.next()}*T(){if(yield*this.B())for(;;)this.R=this._,yield*this.C(),yield*this.$(),this.R&&(yield*this.D());this.R=1/0,yield*this.C()}static parseIcyMetadata(t){const s=/(?<key>[^\0]+?)='(?<val>[^\0]*?)(;$|';|'$|$)/,e={};for(const i of t.match(new RegExp(s,"g"))||[]){const t=i.match(s);t&&(e[t.groups.key]=t.groups.val)}return e}get icyMetaInt(){return this._}*B(){if(this._>0)return!0;if(!this.A)return!1;this.O("Passed in Icy-MetaInt is invalid. Attempting to detect ICY Metadata.","See https://github.com/eshaz/icecast-metadata-js for information on how to properly request ICY Metadata.");const t=[null,83,116,114,101,97,109,84,105,116,108,101,61],s=Date.now();let e=0;for(;s+this.A>Date.now();){this.L=i.P(this.L,yield*this.N());t:for(;e<this.L.length-t.length;){for(let s=1;s<t.length;s++)if(this.L[s+e]!==t[s]){e++;continue t}return this.O(`Found ICY Metadata! Setting Icy-MetaInt to ${e}.`),this._=e,!0}}return this.O("ICY Metadata not detected, but continuing anyway. Audio errors will occur if there is ICY metadata.",`Searched ${this.L.length} bytes for ${(Date.now()-s)/1e3} seconds.`,"Try increasing the `icyDetectionTimeout` value if ICY metadata is present in the stream."),this.G("icy"),!1}*C(){for(this.j.currentStreamBytesRemaining=this.R;this.R;)yield*this.U(yield*super.Y())}*$(){this.R=1;do{this.R=16*(yield*this.Y())[0]}while(1===this.R);this.j.addMetadataLengthBytes(1)}*D(){this.j.currentMetadataBytesRemaining=this.R;const t=yield*this.Y(this.R);this.j.addMetadataBytes(t.length),yield*this.k(a.parseIcyMetadata(this.V.decode(t)))}}t.exports=a},660:(t,s,e)=>{const i=e(103).TextDecoder||TextDecoder,a=e(8),r=()=>{};class n{constructor(t){this.R=0,this.q=0,this.L=new Uint8Array(0),this.j=new a,this.V=new i("utf-8"),this.F=t.onStream||r,this.H=t.onMetadata||r,this.G=t.onMetadataFailed||r,this.J=t.onError||r,this.W=t.enableLogging||!1,this.K=Promise.resolve(),this.X=Promise.resolve(),this.v=this.Z(),this.v.next()}*Z(){for(this.R=1/0;;)yield*this.U(yield*this.Y())}static P(t,s){const e=new Uint8Array(t.length+s.length);return e.set(t),e.set(s,t.length),e}*iterator(t){for(let s=this.v.next(t);s.value;s=this.v.next())yield s.value}readAll(t){for(let s=this.v.next(t);s.value;s=this.v.next());}async*asyncIterator(t){for(let s=this.v.next(t);s.value;s=this.v.next())await this.K,await this.X,yield s.value}async asyncReadAll(t){for(let s=this.v.next(t);s.value;s=this.v.next())await this.K,await this.X}O(...t){this.W&&console.warn("icecast-metadata-js",t.reduce(((t,s)=>t+"\n "+s),"")),this.J(...t)}*U(t){this.j.addStreamBytes(t.length);const s={stream:t,stats:this.j.stats};this.K=this.F(s),yield s}*k(t){const s={metadata:t,stats:this.j.stats};this.X=this.H(s),yield s}*Y(t=0){for(this.q===this.L.length&&(this.L=yield*this.N(),this.q=0);this.L.length-this.q<t;)this.L=n.P(this.L,yield*this.N());const s=this.L.subarray(this.q,(t||this.R)+this.q);return this.j.addBytes(s.length),this.R=s.length<this.R?this.R-s.length:0,this.q+=s.length,s}*N(){let t;do{t=yield}while(!t||0===t.length);return this.j.addCurrentBytesRemaining(t.length),t}}t.exports=n},491:(t,s,e)=>{const i=e(660);t.exports=class extends i{constructor(t){super(t),this.v=this.tt(),this.v.next()}*tt(){if(yield*this.st()){const t=yield*this.et();if(t)for(;yield*this.st();)yield*this.D(t),yield*this.C()}this.R=1/0,yield*this.C()}it(t,s=0){return new DataView(Uint8Array.from([...t.subarray(s,s+4)]).buffer).getUint32(0,!0)}at(t,s){return String.fromCharCode(...s).match(t)}*st(){let t=[];for(;t.length<=65307;){const s=yield*super.Y(5);if(79===s[0]&&103===s[1]&&103===s[2]&&83===s[3]&&!(248&s[5])){this.q-=5,this.R+=5,this.j.rt-=5,this.j.nt+=5;break}t.push(s[0]),this.q-=4,this.j.rt-=4,this.j.nt+=4}if(t.length&&(yield*this.U(Uint8Array.from(t))),t.length>65307)return this.O("This stream is not an OGG stream. No OGG metadata will be returned.","See https://github.com/eshaz/icecast-metadata-js for information on OGG metadata."),this.G("ogg"),!1;const s=yield*this.Y(27),e=yield*this.Y(s[26]);return this.R=e.reduce(((t,s)=>t+s),0),!0}*et(){const t=yield*this.Y(8);return yield*this.C(),this.at(/\x7fFLAC/,t.subarray(0,5))?{regex:/^[\x84|\x04]/,length:4}:this.at(/OpusHead/,t.subarray(0,8))?{regex:/OpusTags/,length:8}:this.at(/\x01vorbis/,t.subarray(0,7))?{regex:/\x03vorbis/,length:7}:void 0}*D({regex:t,length:s}){this.at(t,yield*this.Y(s))&&(yield*this.k(yield*this.ht()))}*C(){for(;this.R;)yield*this.Y()}*Y(t){const s=yield*super.Y(t);return yield*this.U(s),s}*N(){const t=yield*super.N();return this.j.currentStreamBytesRemaining=t.length,t}*ht(){const t=this.it(yield*this.Y(4));this.j.addMetadataBytes(4);const s=this.V.decode(yield*this.Y(t));this.j.addMetadataBytes(t);const e=this.it(yield*this.Y(4));this.j.addMetadataBytes(4);const i=[];for(let t=0;t<e;t++){const t=yield*this.Y(4);this.j.addMetadataBytes(4),i.push(yield*this.Y(this.it(t))),this.j.addMetadataBytes(i[i.length-1].length)}return this.j.currentMetadataBytesRemaining=0,i.reduce(((t,s)=>{const e=s.indexOf(61),i=String.fromCharCode(...s.subarray(0,e)).toUpperCase(),a=this.V.decode(s.subarray(e+1));return t[i]=t[i]?`${t[i]}; ${a}`:a,t}),{VENDOR_STRING:s})}}},8:t=>{t.exports=class{constructor(){this.rt=0,this.ot=0,this.ct=0,this.lt=0,this.nt=0,this.dt=0,this.yt=0}get stats(){return{totalBytesRead:this.rt,streamBytesRead:this.ot,metadataLengthBytesRead:this.ct,metadataBytesRead:this.lt,currentBytesRemaining:this.nt,currentStreamBytesRemaining:this.dt,currentMetadataBytesRemaining:this.yt}}set currentStreamBytesRemaining(t){this.dt+=t}set currentMetadataBytesRemaining(t){this.yt=t}addBytes(t){this.rt+=t,this.nt-=t}addStreamBytes(t){this.ot+=t,this.dt-=t}addMetadataLengthBytes(t){this.ct+=t}addMetadataBytes(t){this.lt+=t,this.yt-=t}addCurrentBytesRemaining(t){this.nt+=t}}},103:()=>{}},s={};function e(i){var a=s[i];if(void 0!==a)return a.exports;var r=s[i]={exports:{}};return t[i](r,r.exports,e),r.exports}e.n=t=>{var s=t&&t.ut?()=>t.default:()=>t;return e.d(s,{a:s}),s},e.d=(t,s)=>{for(var i in s)e.o(s,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:s[i]})},e.o=(t,s)=>Object.prototype.hasOwnProperty.call(t,s);var i={};(()=>{"use strict";e.d(i,{default:()=>N});e(344);var t=e(780),s=e.n(t);const a=()=>{};class r{constructor(t,{icyMetaInt:e,onStream:i=a,...n}){let h;this.gt=new ReadableStream({async start(a){h=new(s())({...n,icyMetaInt:parseInt(t.headers.get("Icy-MetaInt"))||e,onStream:async t=>(a.enqueue(t.stream),i(t))});for await(const s of r.asyncIterator(t.body))await h.asyncReadAll(s);a.close()}}),this.ft=h}get icyMetaInt(){return this.ft.icyMetaInt}get readableStream(){return this.gt}async startReading(){try{for await(const t of r.asyncIterator(this.gt));}catch(t){if("AbortError"!==t.name)throw t}}static asyncIterator(t){const s=t.getReader();return{[Symbol.asyncIterator]:()=>({next:()=>s.read()})}}}const n=()=>{},h="stopped",o="fetching",c=new WeakMap,l=Symbol(),d=Symbol(),y=Symbol(),u=Symbol(),m=Symbol(),g=Symbol(),p=Symbol(),f=Symbol(),b=Symbol(),S=Symbol(),w=Symbol(),I=Symbol(),M=Symbol(),x=Symbol(),_=Symbol(),A=Symbol(),v=Symbol(),T=Symbol(),B=Symbol(),R=Symbol(),C=Symbol(),$=Symbol(),D=Symbol(),E=Symbol(),O=Symbol(),L=Symbol(),P=Symbol();class N{constructor(t,s={}){const e=t.split("/").slice(0,-1).join("/");c.set(this,{[v]:t,[m]:s.icestatsEndpoint||`${e}/status-json.xsl`,[f]:s.statsEndpoint||`${e}/stats`,[w]:s.nextsongsEndpoint||`${e}/nextsongs`,[x]:s.sevenhtmlEndpoint||`${e}/7.html`,[R]:s.sources||[],[C]:1e3*(s.interval||30),[$]:s.onStats||n,[D]:s.onStatsFetch||n,[T]:s.icyMetaInt,[B]:s.icyDetectionTimeout,[l]:new AbortController,[y]:new AbortController,[g]:new AbortController,[b]:new AbortController,[I]:new AbortController,[_]:new AbortController,[E]:h})}static xml2Json(t){const s=t=>{if(!t.children.length)return Number.isNaN(Number(t.innerHTML))?t.innerHTML:Number(t.innerHTML);const e={};for(const i of t.children)i.nodeName in e?Array.isArray(e[i.nodeName])?e[i.nodeName].push(s(i)):e[i.nodeName]=[e[i.nodeName],s(i)]:e[i.nodeName]=s(i);return e};return s((t=>(new DOMParser).parseFromString(t,"application/xml"))(t))}get state(){return c.get(this)[E]}get icestatsEndpoint(){return c.get(this)[m]}get statsEndpoint(){return c.get(this)[f]}get nextsongsEndpoint(){return c.get(this)[w]}get sevenhtmlEndpoint(){return c.get(this)[x]}start(){c.get(this)[E]===h&&(c.get(this)[E]="running",this.fetch().then(c.get(this)[$]),c.get(this)[O]=setInterval((()=>{this.fetch().then(c.get(this)[$])}),c.get(this)[C]))}stop(){c.get(this)[E]!==h&&(c.get(this)[E]=h,clearInterval(c.get(this)[O]),c.get(this)[l].abort(),c.get(this)[y].abort(),c.get(this)[g].abort(),c.get(this)[b].abort(),c.get(this)[_].abort())}async fetch(){if(c.get(this)[E]!==o){const t=c.get(this)[E];c.get(this)[E]=o,c.get(this)[D](c.get(this)[R]);const s=[];c.get(this)[R].includes("icestats")&&s.push(this.getIcestats()),c.get(this)[R].includes("sevenhtml")&&s.push(this.getSevenhtml()),c.get(this)[R].includes("stats")&&s.push(this.getStats()),c.get(this)[R].includes("nextsongs")&&s.push(this.getNextsongs()),c.get(this)[R].includes("icy")&&s.push(this.getIcyMetadata()),c.get(this)[R].includes("ogg")&&s.push(this.getOggMetadata());const e=await Promise.all(s).then((t=>t.reduce(((t,s)=>({...t,...s})),{})));return c.get(this)[E]=c.get(this)[E]!==o?c.get(this)[E]:t,e}}async getIcestats(){return this[L]({status:p,endpoint:m,controller:g,mapper:t=>t.json()}).then((t=>({icestats:t&&t.icestats})))}async getSevenhtml(){return this[L]({status:A,endpoint:x,controller:_,mapper:async t=>(await t.text()).match(/(.*?)<\/body>/gi).map((t=>{const s=t.match(/(<body>|,)(?<stats>.*)<\/body>/i).groups.stats.split(",");return 7===s.length?{StreamTitle:s[6],currentListeners:parseInt(s[4]),peakListeners:parseInt(s[2]),maxListeners:parseInt(s[3]),bitrate:parseInt(s[5]),status:parseInt(s[1]),serverListeners:parseInt(s[0])}:{StreamTitle:s[4],currentListeners:parseInt(s[2]),peakListeners:parseInt(s[0]),maxListeners:parseInt(s[1]),bitrate:parseInt(s[3])}}))}).then((t=>({sevenhtml:t})))}async getStats(){return this[L]({status:S,endpoint:f,controller:b,mapper:async t=>N.xml2Json(await t.text()).SHOUTCASTSERVER.STREAMSTATS}).then((t=>({stats:t})))}async getNextsongs(){return this[L]({status:M,endpoint:w,controller:I,mapper:async t=>N.xml2Json(await t.text()).SHOUTCASTSERVER.NEXTSONGS}).then((t=>({nextsongs:t})))}async getIcyMetadata(){return this[P]({status:d,endpoint:v,controller:l,metadataType:"icy",headers:{"Icy-MetaData":1}})}async getOggMetadata(){return this[P]({status:u,endpoint:v,controller:y,metadataType:"ogg"})}async[P]({status:t,endpoint:s,controller:e,headers:i,metadataType:a}){return this[L]({status:t,endpoint:s,controller:e,headers:i,mapper:async t=>new Promise((s=>{new r(t,{onMetadata:({metadata:t})=>{c.get(this)[e].abort(),s(t)},onMetadataFailed:()=>{c.get(this)[e].abort(),s()},metadataTypes:a,icyMetaInt:c.get(this)[T],icyDetectionTimeout:c.get(this)[B]}).startReading()}))}).then((t=>({[a]:t})))}async[L]({status:t,endpoint:s,controller:e,mapper:i,headers:a={}}){if(!c.get(this)[t])return c.get(this)[t]=!0,fetch(c.get(this)[s],{method:"GET",headers:a,signal:c.get(this)[e].signal}).then((t=>{if(!t.ok)throw new Error(`HTTP Error ${t.status}`);return t})).then(i).catch((t=>{"AbortError"!==t.name&&console.warn(`Failed to fetch ${c.get(this)[s]}`,t)})).finally((()=>{c.get(this)[t]=!1,c.get(this)[e]=new AbortController}))}}})(),IcecastMetadataStats=i.default})();
//# sourceMappingURL=icecast-metadata-stats-0.0.2.min.js.map
\ No newline at end of file
BODY {
font-family: monospace;
font-size: 1.5em;
color: #ffffff;
background-color: #000000;
background-image: url("images/bg1.jpg");
background-repeat: no-repeat;
background-size: cover;
background-blend-mode: lighten;
}
img {
opacity: 0.1;
}
a {
color: white;
}
a:hover {
color: white;
}
a:visited {
color: white;
}
h1 {
font-size:3em;
margin: 20px 20px 20px 20px;
}
h2 {
font-size: 1.5em;
margin: 10px 10px 10px 10px;
}
.menu {
list-style-type: none;
margin: 0px;
padding: 0px;
}
.mitem {
float: right;
background-color: #333;
}
.mitem a {
display: block;
color: #fff;
text-align: center;
padding: 14px 16px;
text-decoration: none;
font-size: 1em;
}
.mitem a:visited {
color: #ccc;
}
.mitem a:hover {
color: #e00;
}
.list {
list-style-type: none;
border: 1px solid black;
background-color: #333;
width: 65%;
margin: 0px;
padding: 0px;
}
.litem {
background-color: #333;
color: #e00;
margin: 2px 2px 2px 2px;
padding: 0px 0px 0px 0px;
}
.litem:hover {
background-color: #eee;
color: #333;
}
.litem a {
display: block;
color: #e00;
padding: 14px 16px;
text-decoration: none;
}
.litem a:hover {
color: #333;
}
#logo {
float: right;
width: 30%;
}
@media (orientation:portrait) {
h1 {
font-size: 1.5em;
}
h2 {
font-size: 1em;
}
.mitem {
float: none;
background-color: #333;
}
.mitem a {
text-align: left;
}
.list {
width: 100%;
}
#logo {
float: top;
width: 50%;
}
}
<html>
<head>
<title>Phreakuency Radio</title>
<meta name="description" content="Free Internet Underground Radio.">
<meta property="og:title" content="Phreakuency Radio." />
<meta property="og:url" content="https:
<html>
<head>
<title>Phreakuency Radio</title>
<meta name="description" content="Free Internet Underground Radio.">
<meta property="og:title" content="Phreakuency Radio." />
<meta property="og:url" content="https://phreakuency.tk" />
<meta property="og:description" content="Free Internet Underground Radio." />
<meta property="og:image" content="https://phreakuency.tk/images/Antenna-LOGO-SUPERLOWQUALITY.jpg" />
<meta property="og:type" content="article" />
<link rel="shortcut icon" type="image/jpg" href="images/Antenna-LOGO-SUPERLOWQUALITY.jpg"/>
<link rel="stylesheet" type="text/css" href="screen.css" media="screen" />
</head>
<body>
<ul class="menu">
<li class='mitem'><a href="https://resetup.org/">Resetup</a></li>
<li class='mitem'><a href="https://teket.phreakuency.net/">TekeT</a></li>
<li class='mitem'><a href="http://thearchive.phreakuency.net">The Archive</a></li>
<li class='mitem'><a href="about/about.html">About</a></li>
</ul>
<h1> Phreakuency Radio</h1>
<h2> Free Tekno Underground Frequencies </h2>
<marquee> Updated v1.1! "Now playing" is being fixed, now you can see the name of your favorite Tekno song playing on Phreakuency! phreakuency.net --- Share it with your friends! --- Tekno 24/7 non stop!!! Support the tekno --- Send us your songs to phreakuency@systemli.org --- free underground music. </marquee>
<hr>
<p> Welcome to Phreakuency Radio! Tekno frequency broadcasting by free phreaks.</p>
<p> Radio 24/7 online</p>
<p>
<p> Audio player:
</p>
<p>
<audio controls>
<source src="https://icecast.phreakuency.net/phreakuency.mp3" type="audio/mp3">
</audio>
<script src="icecast-metadata-stats-0.0.2.min.js"></script>
<script>
const onStats = (stats) => {
document.getElementById("stats").innerHTML = stats.ogg.ARTIST + "- " + stats.ogg.TITLE;
};
const stats =
new IcecastMetadataStats(
"https://icecast.phreakuency.net/phreakuency.ogg", // stream endpoint
{ onStats, sources: ["ogg"] } // options (stats callback, stats sources)
);
stats.start();
</script>
<p> Now Playing: <span id="stats"></span> </p>
<pre>
.- _ _ -.
/ / \ \
( ( (` (-o-) `) ) )
\ \_ ` -+- ` _/ /
`- -+-
phreakuency 2021-`
-+-
__ _ ___ _|_
</p>
<p>
LIVE show player:
</p>
<script src="hls.js"></script>
<video id="video" controls autoplay></video>
<script>
var video = document.getElementById('video');
if(Hls.isSupported()) {
var hls = new Hls();
hls.loadSource('https://hls.phreakuency.net/phreak.m3u8');
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED,function() {
video.play();
});
}
else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = 'https://hls.phreakuency.net/phreak.m3u8';
video.addEventListener('loadedmetadata',function() {
video.play();
});
}
</script>
</div>
<p>Links for your favorite audio player:</p>
<a href="https://icecast.phreakuency.net/phreakuency.ogg">Audio ogg</a> <br>
<a href="https://icecast.phreakuency.net/phreakuency.mp3">Audio mp3</a> <br>
</ul>
<!--
<pre style="color: #ffffff;">
.==============.
__________||_/########\_||__________
|(O)____ : [phreakuency.net]: ____(O)|
| /::::\: _________ +|+ :/::::\ |
| \;;;;/: | | | |+| :\;;;;/ |
|________:_teket+==ooo______:________|
</pre>
-->
</body>
</html>
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment