226 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var BgVars = {
 | 
						||
  arIsActive: true,
 | 
						||
  hasVideos: false,
 | 
						||
  currentSite: ""
 | 
						||
}
 | 
						||
 | 
						||
function extractHostname(url){
 | 
						||
  // extract hostname  
 | 
						||
  if (url.indexOf("://") > -1) {    //find & remove protocol (http, ftp, etc.) and get hostname
 | 
						||
    hostname = url.split('/')[2];
 | 
						||
  }
 | 
						||
  else {
 | 
						||
    hostname = url.split('/')[0];
 | 
						||
  }
 | 
						||
  
 | 
						||
  hostname = hostname.split(':')[0];   //find & remove port number
 | 
						||
  hostname = hostname.split('?')[0];   //find & remove "?"
 | 
						||
  
 | 
						||
  return hostname;
 | 
						||
}
 | 
						||
 | 
						||
async function main(){
 | 
						||
  if(Debug.debug)
 | 
						||
    console.log("[uw-bg::main] setting up background script");
 | 
						||
  
 | 
						||
  await Settings.init();
 | 
						||
  await Keybinds.init();
 | 
						||
  Keybinds.keybinds = await Keybinds.fetch();
 | 
						||
  
 | 
						||
  
 | 
						||
  // Poslušalci za dogodke       |      event listeners here
 | 
						||
  // {===]///[-------------------------------------]\\\[===}
 | 
						||
  
 | 
						||
  browser.runtime.onMessage.addListener(_uwbg_rcvmsg);
 | 
						||
  browser.tabs.onActivated.addListener(_uwbg_onTabSwitched);
 | 
						||
  
 | 
						||
  if(Debug.debug)
 | 
						||
    console.log("[uw-bg::main] listeners registered");
 | 
						||
  
 | 
						||
  // add currentSite
 | 
						||
  var tabs = await Comms.getActiveTab();
 | 
						||
  BgVars.currentSite = extractHostname(tabs[0].url);
 | 
						||
  
 | 
						||
  // 
 | 
						||
  setInterval(_uwbg_check4videos, 5000);
 | 
						||
}
 | 
						||
 | 
						||
async function _uwbg_onTabSwitched(activeInfo){
 | 
						||
  BgVars.hasVideos = false;
 | 
						||
  if(Debug.debug)
 | 
						||
    console.log("[uw-bg::onTabSwitched] TAB CHANGED, GETTING INFO FROM MAIN TAB");
 | 
						||
  
 | 
						||
  
 | 
						||
  var tabId = activeInfo.tabId;   // just for readability
 | 
						||
  
 | 
						||
  var tab = await browser.tabs.get(tabId);
 | 
						||
  
 | 
						||
  BgVars.currentSite = extractHostname(tab.url);
 | 
						||
  
 | 
						||
  // this can fail. This might also not return a promise? Check that.
 | 
						||
  var videoFrameList = await Comms.sendToEach({"cmd":"has-videos"}, tabId);
 | 
						||
  
 | 
						||
  if(Debug.debug)
 | 
						||
    console.log("[uw-bg::onTabSwitched] got list of frames and whether they have videos", videoFrameList);
 | 
						||
  
 | 
						||
  // Pogledamo, če kateri od okvirjev vsebuje video. Da omogočimo pojavno okno je zadosti že
 | 
						||
  // en okvir z videom.
 | 
						||
  //                <===[///]----------------------------[\\\]===>
 | 
						||
  // Check if any frame has a video in it. To enable the popup there only needs to be at least one,
 | 
						||
  // but the popup controls all frames.
 | 
						||
  var hasVideos = false;
 | 
						||
  for(frame of videoFrameList){
 | 
						||
    hasVideos |= frame.response.hasVideos;
 | 
						||
  }
 | 
						||
  
 | 
						||
  BgVars.hasVideos = hasVideos;
 | 
						||
  
 | 
						||
  Settings.reload();
 | 
						||
  // todo: change extension icon depending on whether there's a video on the page or not
 | 
						||
}
 | 
						||
 | 
						||
async function _uwbg_check4videos(){
 | 
						||
  if(BgVars.hasVideos)
 | 
						||
    return;
 | 
						||
  
 | 
						||
  var videoFrameList = Comms.sendToEach({"cmd":"has-videos"});
 | 
						||
  
 | 
						||
  if(Debug.debug)
 | 
						||
    console.log("[uw-bg::check4videos] got updated list of frames and whether they have videos", videoFrameList);
 | 
						||
  
 | 
						||
  var hasVideos = false;
 | 
						||
  for(frame of videoFrameList){
 | 
						||
    hasVideos |= frame.response.hasVideos;
 | 
						||
  }
 | 
						||
  
 | 
						||
  BgVars.hasVideos = hasVideos;
 | 
						||
}
 | 
						||
 | 
						||
async function _uwbg_registerVideo(tabId){
 | 
						||
  var tabs = await Comms.getActiveTab();
 | 
						||
  
 | 
						||
  // če ukaz pride iz zavihka, na katerem se trenunto ne nahajamo, potem se za zahtevo ne brigamo
 | 
						||
  // if command originated from a tab that's _not_ currently active, we ignore the request
 | 
						||
  if(tabId != tabs[0].id){
 | 
						||
    if(Debug.debug){
 | 
						||
      console.log("[uw-bg::_uwbg_registerVideo] request didn't come from currently active tab, ignoring");
 | 
						||
    }
 | 
						||
    return;
 | 
						||
  }
 | 
						||
  if(Debug.debug){
 | 
						||
    console.log("%c[uw-bg::_uwbg_registerVideo] request came from currently active tab!", "color: #afd, background: #000");
 | 
						||
  }
 | 
						||
  BgVars.hasVideos = true;
 | 
						||
  
 | 
						||
  // todo: change extension icon depending on whether there's a video on the page or not
 | 
						||
}
 | 
						||
 | 
						||
function _uwbg_rcvmsg(message, sender, sendResponse){
 | 
						||
  if(Debug.debug){
 | 
						||
    console.log("[uw-bg::_uwbg_rcvmsg] received message", message, "from sender", sender);
 | 
						||
  }
 | 
						||
  
 | 
						||
  message.sender = "uwbg";
 | 
						||
  message.receiver = "uw";
 | 
						||
  
 | 
						||
  if(message.cmd == "has-videos"){
 | 
						||
    if(Debug.debug){
 | 
						||
      console.log("[uw-bg::_uwbg_rcvmsg] does this tab or any of its subframes have videos?", BgVars.hasVideos );
 | 
						||
    }
 | 
						||
    
 | 
						||
    var res = {response: {hasVideos: BgVars.hasVideos}};
 | 
						||
    if(BrowserDetect.firefox){
 | 
						||
      return Promise.resolve(res);
 | 
						||
    }
 | 
						||
    sendResponse(res);
 | 
						||
    return true;
 | 
						||
  }
 | 
						||
  
 | 
						||
  if(message.cmd == "get-config"){
 | 
						||
    var config = {};
 | 
						||
    config.videoAlignment = Settings.miscFullscreenSettings.videoFloat;
 | 
						||
    config.arConf = {};
 | 
						||
    config.arConf.enabled_global = Settings.arDetect.enabled == "blacklist";
 | 
						||
    
 | 
						||
    config.site = {};
 | 
						||
    config.site.status = SitesConf.getSiteStatus(BgVars.currentSite);
 | 
						||
    config.site.arStatus = SitesConf.getArStatus(BgVars.currentSite);
 | 
						||
    
 | 
						||
    config.mode = Settings.extensionMode;
 | 
						||
    config.arMode = Settings.arDetect.mode;
 | 
						||
    config.arTimerPlaying = Settings.arDetect.timer_playing;
 | 
						||
    
 | 
						||
    if(Debug.debug)
 | 
						||
      console.log("[uw-bg::_uwbg_rcvmsg] Keybinds.getKeybinds() returned this:", Keybinds.getKeybinds()); 
 | 
						||
    
 | 
						||
    config.keyboardShortcuts = Keybinds.getKeybinds();
 | 
						||
    
 | 
						||
    
 | 
						||
    // predvidevajmo, da je enako. Če je drugače, bomo popravili ko dobimo odgovor
 | 
						||
    // assume current is same as global & change that when you get response from content script
 | 
						||
    config.arConf.enabled_current = Settings.arDetect.enabled == "blacklist";
 | 
						||
  
 | 
						||
    var res = {response: config}
 | 
						||
    if(BrowserDetect.firefox){
 | 
						||
      return Promise.resolve(res);
 | 
						||
    }
 | 
						||
    sendMessage(res);
 | 
						||
    return true;
 | 
						||
  }
 | 
						||
  
 | 
						||
  if(message.cmd == "register-video"){
 | 
						||
    // dobili smo sporočilce, ki pravi: "hej jaz imam video, naredi cahen" — ampak preden naredimo cahen,
 | 
						||
    // se je potrebno prepričati, da je sporočilce prišlo iz pravilnega zavihka. Trenutno odprt zavihek
 | 
						||
    // lahko dobimo to. ID zavihka, iz katerega je prišlo sporočilo, se skriva v sender.tab.id
 | 
						||
    //                            ~<><\\\][=================][///><>~
 | 
						||
    // we got a message that says: "hey I have a video, make a mark or something" — but before we do the
 | 
						||
    // mark, we should check if the message has truly arrived from currently active tab. We can get the 
 | 
						||
    // id of currently active tab here. ID of the sender tab is ‘hidden’ in sender.tab.id.
 | 
						||
    
 | 
						||
    _uwbg_registerVideo(sender.tab.id);
 | 
						||
  }
 | 
						||
  
 | 
						||
  else if(message.cmd == "uw-enabled-for-site"){
 | 
						||
    
 | 
						||
    var mode = SitesConf.getSiteStatus(BgVars.currentSite);
 | 
						||
    
 | 
						||
    if(BrowserDetect.usebrowser == "firefox")
 | 
						||
      return Promise.resolve({response: mode});
 | 
						||
    
 | 
						||
    try{
 | 
						||
      sendResponse({response: mode});
 | 
						||
    }
 | 
						||
    catch(chromeIsShitError){};
 | 
						||
    
 | 
						||
    return true;
 | 
						||
  }
 | 
						||
  else if(message.cmd == "enable-for-site"){
 | 
						||
    SitesConf.updateSite(BgVars.currentSite, {status: message.option, statusEmbedded: message.option});
 | 
						||
  }
 | 
						||
  else if(message.cmd == "enable-autoar"){
 | 
						||
    Settings.arDetect.mode = "blacklist";
 | 
						||
    Settings.save();
 | 
						||
    Comms.sendToAll({cmd: "reload-settings", sender: "uwbg"})
 | 
						||
  }
 | 
						||
  else if(message.cmd == "disable-autoar"){
 | 
						||
    Settings.arDetect.mode = "disabled";
 | 
						||
    Settings.save();
 | 
						||
    Comms.sendToAll({cmd: "reload-settings", sender: "uwbg"});
 | 
						||
  }
 | 
						||
  else if(message.cmd = "autoar-set-timer-playing"){
 | 
						||
    var timeout = message.timeout;
 | 
						||
    
 | 
						||
    if(timeout < 1)
 | 
						||
      timeout = 1;
 | 
						||
    if(timeout > 999)
 | 
						||
      timeout = 999;
 | 
						||
    
 | 
						||
    Settings.arDetect.timer_playing = timeout;
 | 
						||
    Comms.sendToAll({cmd: "reload-settings", sender: "uwbg"});
 | 
						||
  }
 | 
						||
  
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
main();
 |