aria2-WIOW/js/function.connection.js

135 lines
4.9 KiB
JavaScript

/*Project aria2-WIOW
*
* Copyright (c) 2014 - 2023, multiSnow <https://git.disroot.org/multiSnow>
*
*Permission to use, copy, modify, and/or distribute this software for
*any purpose with or without fee is hereby granted, provided that the
*above copyright notice and this permission notice appear in all
*copies.
*
*THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
*WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
*WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
*AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
*DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
*PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
*TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
*PERFORMANCE OF THIS SOFTWARE.
*/
function connect(){
let nsidetags=document.getElementById('sidetags');
let nwsaddr=document.getElementById('ws_address');
let nwshost=document.getElementById('wshost');
let nwsport=document.getElementById('wsport');
let nrpctoken=document.getElementById('rpctoken');
let nsideinfodyn=document.getElementById('sideinfo_dynamic');
let nmain=document.getElementById('main');
let wss_scheme=document.getElementById('wss_scheme').checked===true?'wss://':'ws://';
let url=[wss_scheme,nwshost.value,':',nwsport.value,'/jsonrpc'].join('');
let autorefresh=undefined;
ws=new WebSocket(url);
ws.onerror=function(message){
alert('Failed to open '+ws.url)
return 0;
};
ws.onclose=function(message){
clearInterval(autorefresh);
let idl=['mainactive','mainstopped','mainwaiting'];
for(let n of idl){
document.getElementById(n).innerHTML='';
};
nwshost.value=popattr(nwsaddr,'data-wshost');
nwsport.value=popattr(nwsaddr,'data-wsport');
nrpctoken.value=popattr(nwsaddr,'data-rpctoken');
nwshost.disabled=false;
nwsport.disabled=false;
nrpctoken.disabled=false;
document.getElementById(popattr(nsidetags,'data-crtshow')).style.display='none';
document.getElementById(popattr(nsidetags,'data-tagshow')).classList.remove('side_clicked');
nsidetags.style.display='none';
nmain.style.display='none';
document.getElementById('sideinfo_static').innerHTML='Disconnected!';
nsideinfodyn.style.display='none';
document.getElementById('shutdown_button').style.display='none';
document.getElementById('disconnect').style.display='none';
nwsaddr.style.display='block';
document.getElementById('connect').style.display='block';
document.title='aria2 WIOW';
if(message.code!==1005){
alert(message.code+' '+message.reason+' '+message.wasClean);
};
return 0;
};
ws.onmessage=function(message){
let idfunc_dict={'mainactive':showactive,'mainstopped':showstopped,'mainwaiting':showwaiting};
let showtagname=getattr(nsidetags,'data-crtshow');
let msg_data=JSON.parse(message.data);
if('id' in msg_data){
if(!('error' in msg_data)){
try{
func[msg_data.id](msg_data);
}catch(e){
console.log(msg_data.id,e);
};
};
}else{
if(msg_data.method in func){
func[msg_data.method](msg_data);
if(showtagname in idfunc_dict){
idfunc_dict[showtagname]();
};
};
};
return 0;
};
ws.onopen=function(message){
nwshost.disabled=true;
nwsport.disabled=true;
nrpctoken.disabled=true;
setattr(nwsaddr,'data-wshost',nwshost.value);
setattr(nwsaddr,'data-wsport',nwsport.value);
setattr(nwsaddr,'data-rpctoken',nrpctoken.value);
location.hash='',
nsideinfodyn.style.display='inline';
nsidetags.style.display='block';
document.getElementById('shutdown_button').style.display='block';
nmain.style.display='block';
getversion();topage('start');default_option();
document.getElementById('disconnect').style.display='block';
nwsaddr.style.display='none';
document.getElementById('connect').style.display='none';
autorefresh=start_autorefresh()
return 0;
};
return 0;
};
function disconnect(){
ws.close();
return 0;
};
function wsreq(id,method,params){
if(ws.readyState!==1){
alert('Connection lost or not yet open!');
return 1;
};
let json={jsonrpc:'2.0',
id:id,
method:method,
params:(typeof params===typeof undefined)?[]:params};
let rpctoken=getattr(document.getElementById('ws_address'),'data-rpctoken');
if(rpctoken){
json.params.unshift('token:'+rpctoken);
};
ws.send(JSON.stringify(json));
return 0;
};