Greasy Fork is available in English.
erreurs (gestion et logs), pavé numérique pour zapper, volume sonore (live et départ), plein écran, reconnexion automatique, interface de configuration
- // ==UserScript==// @version 0.63// @name erreurs sfr tv// @namespace https://tv.sfr.fr/// @description erreurs (gestion et logs), pavé numérique pour zapper, volume sonore (live et départ), plein écran, reconnexion automatique, interface de configuration// @author ced// @include https://tv.sfr.fr/*// @include https://tv.sfr.fr/direct-tv/*// @include https://tv.sfr.fr/content/*// @include https://tv.sfr.fr/guide// @include https://www.sfr.fr/cas/login*// @exclude https://tv.sfr.fr/settings// @grant none// @license MIT// @run-at document-start// ==/UserScript==////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////console.log("----- Hello !"); // La console te saluevar FirstTimeScriptIsLoaded = true; // Variable servant à déterminer si le script est lancé pour la prmière foisvar zindex1 = 100001;var zindex2 = 100002;var zindex3 = 100003;var ttsUserPref = 0; // Autoriser la synthése vocalevar debugMode = 0; // Définir sur 1 pour pouvoir garder la console ouverte !var nbLoggedErrors = 50; // Définir le nombre d'erreurs conservéesvar logTabAdded = false; // Tableau affiché ou pasvar configDivAdded = false; // Config affiché ou pasvar prompted = false; // Etat des invites pour entrer les informations de connexionvar sessionExpired = false; // Session expirée ?//var KnownErrors = false; // Pour plus tardvar mainLoopStartTime = 0; // Variable pour la date de départ du script// Attention à la mise en pause !!!!!!!!!!!var mainLoopDelay = 3000; // Délai entre deux contrôles d'erreurvar nbloopBeforeReload = 3; // Nombre de fois avant de recharger en cas d'interruption de la réception des donnéesvar nbloopBeforeBegin = 5; // Nombre de fois avant d'autoriser le rechargement// Les deux précédents nombres multipliés par le délai (plus haut) définisse une duréevar video = " "; // Variablevar lastTimeVideoEventProgressEvent = 0; // Variable (date à laquelle le lecteur reçoit des données)var videoPlaying = ""; // Variable relative aux événements (play=2, pause=1, ended=0)var inputKeys = ""; // Frappe de touches (pavé numérique)var inputKeysDelay = 2000; // Délai pour taper le numéro de la chaine en msvar oldUrl = ""; // Urlvar channelTabAdded = false; // Tableau affiché ou pasvar nbColumnChannelTab = 10; // Le nombre de colonnes dans le tableauvar imgChannelWidth = 75; // Largeur des imagesvar channelTabAddedConfig = false; // Tableau affiché ou pasvar nbColumnChannelTabConfig = 15; // Le nombre de colonnes dans le tableauvar imgChannelWidthConfig = 50; // Largeur des imagesvar volumeStart = 1; // Le volume de départ (0->1)var volumeStep = 10; // Le volume est augmenté ou diminué de cette valeurvar volumeDelay = 5000; // Délai avant que l'indicateur volume s"effacevar channelsInfos3 = [];var dataStep = 5;var channelsInfos2 = [];// !!!! Nom des chaines contenant '// Variable informant du nombre de champs par chaine// Variable tableau des chaines// Ajout de données relatives aux chaines// Pour personaliser , modifier le dernier chiffre ( 1 pour la// 1 pour la prendre en compte// 0 pour ignorer// L'interface permet de le faire visuellement//// Nom de la chaine, Canal, Image, url , affiché ou paschannelsInfos2.push('TF1','1','logos/tv_services/TF1_color.png','tf1','1');channelsInfos2.push('France 2','2','logos/tv_services/France_2_color.png','france-2','1');channelsInfos2.push('France 3','3','logos/tv_services/France_3_color.png','france-3','1');channelsInfos2.push('France 5','5','logos/tv_services/France_5_color.png','france-5','1');channelsInfos2.push('M6','6','img/apps/chaines/logos/M6100x100fondgris.png','m6','1');channelsInfos2.push('Arte','7','logos/tv_services/Arte_color.png','arte','1');channelsInfos2.push('C8','8','logos/tv_services/C8_color.png','c8','1');channelsInfos2.push('W9','9','logos/tv_services/W9_color.png','w9','1');channelsInfos2.push('TMC','10','logos/tv_services/TMC_color.png','tmc','1');channelsInfos2.push('TFX','11','logos/tv_services/TFX_color.png','tfx','1');channelsInfos2.push('NRJ12','12','logos/tv_services/NRJ12_color.png','nrj12','1');channelsInfos2.push('LCP','13','logos/tv_services/LCP_color.png','lcp','1');channelsInfos2.push('France 4','14','logos/tv_services/France_4_color.png','france-4','1');channelsInfos2.push('BFM TV','15','logos/tv_services/BFM_TV_color.png','bfm-tv','1');channelsInfos2.push('CNews','16','logos/tv_services/CNews_color.png','cnews','1');channelsInfos2.push('CStar','17','logos/tv_services/CStar_color.png','cstar','1');channelsInfos2.push('Gulli','18','img/apps/chaines/logos/Gulli100x100Couleur.png','gulli','1');channelsInfos2.push('TF1 Séries-Films','20','logos/tv_services/TF1_Series_Films_color.png','tf1-series-films','1');channelsInfos2.push('La chaine l’Équipe','21','logos/tv_services/L_Equipe_color.png','la-chaine-lequipe','1');channelsInfos2.push('6ter','22','logos/tv_services/6ter_color.png','6ter','1');channelsInfos2.push('RMC STORY','23','logos/tv_services/RMC_STORY_color.png','rmc-story','1');channelsInfos2.push('RMC Découverte','24','logos/tv_services/RMC_Decouverte_color.png','rmc-decouverte','1');channelsInfos2.push('Chérie 25','25','logos/tv_services/Cherie_25_color.png','cherie-25','1');channelsInfos2.push('LCI','26','logos/tv_services/LCI_color.png','lci','1');channelsInfos2.push('franceinfo:','27','logos/tv_services/franceinfo:_color.png','franceinfo','1');channelsInfos2.push('i24 news','28','logos/tv_services/i24_news_color.png','i24-news','1');channelsInfos2.push('BFM Business','31','logos/tv_services/BFM_Business_color.png','bfm-business','1');channelsInfos2.push('TECH & CO','32','img/apps/chaines/logos/SFR100x100COLORTECHCO.png','tech-co','1');channelsInfos2.push('RMC Sport 1','33','logos/tv_services/RMC_Sport_1_color.png','rmc-sport-1','0');channelsInfos2.push('BFM PARIS ILE-DE-FRANCE','39','img/apps/chaines/logos/BFMPARISIDF100x100COULEURAVECCONTOUR.png','bfm-paris-ile-de-france','1');channelsInfos2.push('Discovery Channel','40','logos/tv_services/Discovery_Channel_color.png','discovery-channel','0');channelsInfos2.push('TLC','41','img/apps/chaines/logos/TLC100x100couleur.png','tlc','0');channelsInfos2.push('RMC Talk Info','42','img/apps/chaines/logos/RMCTalkInfo100x100couleur.png','rmc-talk-info','1');channelsInfos2.push('Discovery Investigation','43','img/apps/chaines/logos/ID100x100.png','discovery-investigation','0');channelsInfos2.push('SFR ACTU','44','img/apps/chaines/logos/SFRActu100100Couleur003.png','sfr-actu','1');channelsInfos2.push('BFM Grands Reportages','45','img/apps/chaines/logos/BFMGrandsReportages100x100couleur.png','bfm-grands-reportages','1');channelsInfos2.push('France 24','47','logos/tv_services/France_24_color.png','france-24','1');channelsInfos2.push('Euronews','48','img/apps/chaines/logos/EURONEWS100x100.png','euronews','0');channelsInfos2.push('RMC Alerte Secours','49','img/apps/chaines/logos/RMCALERTESECOURS100x100couleur.png','rmc-alerte-secours','1');channelsInfos2.push('13ème rue','50','logos/tv_services/13eme_rue_color.png','13eme-rue','1');channelsInfos2.push('Syfy','51','logos/tv_services/Syfy_color.png','syfy','1');channelsInfos2.push('E! Entertainment','52','logos/tv_services/E_color.png','e-entertainment','1');channelsInfos2.push('WARNER TV','55','img/apps/chaines/logos/WarnerFond100x100.png','warner-tv','1');channelsInfos2.push('MTV','56','img/apps/chaines/logos/MTVLOGOCOULEUR100x100.png','mtv','0');channelsInfos2.push('MCM','57','logos/tv_services/MCM_color.png','mcm','0');channelsInfos2.push('AB1','58','img/apps/chaines/logos/AB1100x100Noir.png','ab1','1');channelsInfos2.push('SERIE CLUB','59','logos/tv_services/SERIE_CLUB_color.png','serie-club','0');channelsInfos2.push('Game One','60','img/apps/chaines/logos/GAMEONE100x100.png','game-one','1');channelsInfos2.push('Game One +1','61','img/apps/chaines/logos/GAMEONE1100x100.png','game-one-1','1');channelsInfos2.push('Warner TV Next','62','img/apps/chaines/logos/WB-Next_100x100.png','warner-tv-next','0');channelsInfos2.push('J-One','63','logos/tv_services/J_One_color.png','j-one','1');channelsInfos2.push('BET','64','img/apps/chaines/logos/BETLOGONOIR100x100.png','bet','1');channelsInfos2.push('Comedy Central','65','logos/tv_services/Comedy_Central_color.png','comedy-central','1');channelsInfos2.push('Paris Première','70','logos/tv_services/Paris_Premiere_color.png','paris-premiere','1');channelsInfos2.push('Téva','71','logos/tv_services/Teva_color.png','teva','1');channelsInfos2.push('RTL9','72','img/apps/chaines/logos/RTL9100x100.png','rtl9','1');channelsInfos2.push('TV Breizh','73','img/apps/chaines/logos/TVBreizh100x100.png','tv-breizh','0');channelsInfos2.push('TV5 Monde','74','logos/tv_services/TV5_Monde_color.png','tv5-monde','1');channelsInfos2.push('CANAL+ BOX OFFICE','83','img/apps/chaines/logos/BOX_OFFICE_100x100couleur.png','canal-box-office','0');channelsInfos2.push('Public Sénat','104','logos/tv_services/publicsenat-100x100.png','public-senat','0');channelsInfos2.push('RMC Sport Access','106','img/apps/chaines/logos/RMCSportAccess100x100couleur.png','rmc-sport-access','0');channelsInfos2.push('RMC Talk Sport','107','img/apps/chaines/logos/RMCTalkSport100x100couleur.png','rmc-talk-sport','1');channelsInfos2.push('RMC Mecanic','108','img/apps/chaines/logos/RMCMECANIC100x100couleur.png','rmc-mecanic','1');channelsInfos2.push('RMC Sport Live 2','112','img/apps/chaines/logos/RMCSportLive2100x100COULEUR.png','rmc-sport-live-2','0');channelsInfos2.push('beIN SPORTS 1','115','logos/tv_services/beIN_SPORTS_1_color.png','bein-sports-1','0');channelsInfos2.push('beIN SPORTS 2','116','logos/tv_services/beIN_SPORTS_2_color.png','bein-sports-2','0');channelsInfos2.push('beIN SPORTS 3','117','logos/tv_services/beIN_SPORTS_3_color.png','bein-sports-3','0');channelsInfos2.push('DAZN 1','118','img/apps/chaines/logos/DAZN100x100color.png','dazn-1','0');channelsInfos2.push('Equidia','119','logos/tv_services/Equidia_color.png','equidia','0');channelsInfos2.push('MGG TV','121','img/apps/chaines/logos/MGGTVvertical100x100.png','mgg-tv','0');channelsInfos2.push('Automoto la chaine','125','logos/tv_services/Automoto_color.png','automoto-la-chaine','0');channelsInfos2.push('Journal du Golf TV','128','img/apps/chaines/logos/JournalduGolf100x100.png','journal-du-golf-tv','1');channelsInfos2.push('Sport en France','129','logos/tv_services/Sport_en_France_color.png','sport-en-france','1');channelsInfos2.push('OLPLAY','130','img/apps/chaines/logos/olplay100x100color.png','olplay','0');channelsInfos2.push('OCS','146','img/apps/chaines/logos/OCS100x100.png','ocs','0');channelsInfos2.push('CINE+ frisson','147','img/apps/chaines/logos/CineFrisson100x100.png','cine-frisson','0');channelsInfos2.push('CINE+ émotion','148','img/apps/chaines/logos/CineEmotion100x100.png','cine-emotion','0');channelsInfos2.push('CINE+ family','149','img/apps/chaines/logos/CineFamily100x100.png','cine-family','0');channelsInfos2.push('CINE+ festival','150','img/apps/chaines/logos/CineFestival100x100.png','cine-festival','0');channelsInfos2.push('CINE+ classic','151','img/apps/chaines/logos/CineClassic100x100.png','cine-classic','0');channelsInfos2.push('Paramount Network','160','logos/tv_services/Paramount_Channel_color.png','paramount-network','1');channelsInfos2.push('paramount Network Decale','161','logos/tv_services/Paramount_Channel_Decale_color.png','paramount-network-decale','0');channelsInfos2.push('TCM Cinéma','162','img/apps/chaines/logos/TCM100x100.png','tcm-cinema','0');channelsInfos2.push('Action','163','logos/tv_services/Action_color.png','action','0');channelsInfos2.push('INSOMNIA','164','img/apps/chaines/logos/INSOMNIA100x100.png','insomnia','0');channelsInfos2.push('RMC WOW','167','img/apps/chaines/logos/RMCWOW100x100couleur.png','rmc-wow','1');channelsInfos2.push('RMC Mystère','168','img/apps/chaines/logos/RMCMystere100x100couleur.png','rmc-mystere','1');channelsInfos2.push('J irai dormir chez vous','169','img/apps/chaines/logos/RMCJDCV100x100couleur.png','jirai-dormir-chez-vous','1');channelsInfos2.push('Ushuaia TV','173','logos/tv_services/Ushuaia_TV_color.png','ushuaia-tv','0');channelsInfos2.push('TREK','174','logos/tv_services/TREK_color.png','trek','0');channelsInfos2.push('Crime District','175','img/apps/chaines/logos/NEUFCRIMEDISCTRICT100x100.png','crime-district','0');channelsInfos2.push('Marmiton TV','176','img/apps/chaines/logos/MarmitonTV100x100.png','marmiton-tv','1');channelsInfos2.push('Histoire','177','logos/tv_services/Histoire_color.png','histoire','0');channelsInfos2.push('Toute l Histoire','178','logos/tv_services/Toute_l_Histoire_color.png','toute-lhistoire','0');channelsInfos2.push('KTO','179','img/apps/chaines/logos/KTO100x100.png','kto','0');channelsInfos2.push('Animaux','180','logos/tv_services/Animaux_color.png','animaux','0');channelsInfos2.push('Chasse et Pêche','181','logos/tv_services/Chasse_et_Peche_color.png','chasse-et-peche','0');channelsInfos2.push('Science et Vie TV','182','logos/tv_services/Science_et_Vie_TV_color.png','science-et-vie-tv','0');channelsInfos2.push('Luxe TV','183','logos/tv_services/Luxe_TV_color.png','luxe-tv','0');channelsInfos2.push('Fashion TV','184','logos/tv_services/Fashion_TV_color.png','fashion-tv','0');channelsInfos2.push('Mens Up TV','185','logos/tv_services/Mens_Up_TV_color.png','mens-up-tv','0');channelsInfos2.push('Astrocenter TV','186','logos/tv_services/Astrocenter_TV_color.png','astrocenter-tv','0');channelsInfos2.push('My Zen TV','187','logos/tv_services/myzentv-100x100.png','my-zen-tv','0');channelsInfos2.push('MUSEUM TV','191','img/apps/chaines/logos/MUSEUMTV100x100.png','museum-tv','0');channelsInfos2.push('Top Santé TV','197','img/apps/chaines/logos/TopSante100x100.png','top-sante-tv','1');channelsInfos2.push('Maison & Travaux TV','198','img/apps/chaines/logos/MaisonTravaux100x100.png','maison-travaux-tv','1');channelsInfos2.push('Auto Plus TV','199','img/apps/chaines/logos/AutoPlus100x100.png','auto-plus-tv','1');channelsInfos2.push('Nickelodeon Junior','200','img/apps/chaines/logos/NickJr100x100.png','nickelodeon-junior','0');channelsInfos2.push('Boomerang','201','logos/tv_services/Boomerang_color.png','boomerang','0');channelsInfos2.push('Boomerang +1','202','logos/tv_services/Boomerang_1_color.png','boomerang-1','0');channelsInfos2.push('TIJI','203','img/apps/chaines/logos/TIJI100x100.png','tiji','0');channelsInfos2.push('DREAMWORKS','204','img/apps/chaines/logos/DREAMWORKS100x100.png','dreamworks','1');channelsInfos2.push('Nickelodeon','205','img/apps/chaines/logos/Nickelodeon100x100Couleur.png','nickelodeon','0');channelsInfos2.push('Nickelodeon+1','206','logos/tv_services/Nickelodeon_1_color.png','nickelodeon1','0');channelsInfos2.push('CANAL J','210','img/apps/chaines/logos/CANAL100x100.png','canal-j','0');channelsInfos2.push('Cartoon Network','211','logos/tv_services/Cartoon_Network_color.png','cartoon-network','0');channelsInfos2.push('Nickelodeon Teen','212','img/apps/chaines/logos/NickelodeonTeen100x100.png','nickelodeon-teen','0');channelsInfos2.push('Cartoonito','213','img/apps/chaines/logos/CARTOONITO100x100Couleur.png','cartoonito','1');channelsInfos2.push('Mangas','231','img/apps/chaines/logos/LogoManga100x100.png','mangas','0');channelsInfos2.push('Lucky Jack','234','logos/tv_services/Lucky_Jack_color.png','lucky-jack','0');channelsInfos2.push('MTV Hits','250','img/apps/chaines/logos/MTVHITSlogonoir100x100.png','mtv-hits','0');channelsInfos2.push('M6 Music','254','logos/tv_services/M6_Music_color.png','m6-music','1');channelsInfos2.push('RFM TV','255','logos/tv_services/RFM_TV_color.png','rfm-tv','1');channelsInfos2.push('NRJ Hits','256','logos/tv_services/NRJ_Hits_color.png','nrj-hits','0');channelsInfos2.push('Mezzo','260','img/apps/chaines/logos/Mezzo100x100fondblanc.png','mezzo','0');channelsInfos2.push('Mezzo Live HD','261','img/apps/chaines/logos/MezzoLive100x100fondblanc.png','mezzo-live-hd','0');channelsInfos2.push('MELODY TV','262','logos/tv_services/MELODY_TV_color.png','melody-tv','0');channelsInfos2.push('Trace Urban','263','logos/tv_services/Trace_Urban_color.png','trace-urban','0');channelsInfos2.push('Trace Toca','264','logos/tv_services/Trace_Toca_color.png','trace-toca','0');channelsInfos2.push('TRACE CARIBBEAN','265','logos/tv_services/TRACE_CARIBBEAN_color.png','trace-caribbean','0');channelsInfos2.push('Trace Gospel','266','logos/tv_services/Trace_Gospel_color.png','trace-gospel','0');channelsInfos2.push('BBLACK Classik','267','logos/tv_services/BBLACK_CLASSIK_color.png','bblack-classik','0');channelsInfos2.push('BBLACK Caribbean','268','logos/tv_services/BBLACK_CARIBBEAN_color.png','bblack-caribbean','0');channelsInfos2.push('BBLACK Africa','269','logos/tv_services/BBLACK_AFRICA_color.png','bblack-africa','0');channelsInfos2.push('Melody d Afrique','272','logos/tv_services/Melody_d_Afrique_color.png','melody-dafrique','0');channelsInfos2.push('BFM Lyon','281','logos/tv_services/BFM_Lyon_color.png','bfm-lyon','1');channelsInfos2.push('BFM Grand Lille','282','logos/tv_services/bfmgrandlille-100x100.png','bfm-grand-lille','1');channelsInfos2.push('BFM Grand Littoral','283','logos/tv_services/bfmgrandlittoral-100x100.png','bfm-grand-littoral','1');channelsInfos2.push('BFM MARSEILLE PROVENCE','284','img/apps/chaines/logos/NEUFBFMMARSEILLEPROV100x100.png','bfm-marseille-provence','1');channelsInfos2.push('BFM NICE COTE D AZUR','285','img/apps/chaines/logos/NEUFBFMNICECOTEDAZUR100x100.png','bfm-nice-cote-dazur','1');channelsInfos2.push('BFM TOULON VAR','286','img/apps/chaines/logos/NEUFBFMTOULONVAR100x100.png','bfm-toulon-var','1');channelsInfos2.push('BFM DICI ALPES DU SUD','287','img/apps/chaines/logos/BFMDICIALPESDUSUD100x100.png','bfm-dici-alpes-du-sud','1');channelsInfos2.push('BFM DICI HAUTE-PROVENCE','288','img/apps/chaines/logos/BFMDICIHAUTEPROVENCE100x100.png','bfm-dici-haute-provence','1');channelsInfos2.push('BFM ALSACE','289','img/apps/chaines/logos/BFMALSACE100x100.png','bfm-alsace','1');channelsInfos2.push('BFM NORMANDIE','290','img/apps/chaines/logos/BFMNORMANDIE100x100COULEUR.png','bfm-normandie','1');channelsInfos2.push('vià30','295','logos/tv_services/via30_color.png','via30','0');channelsInfos2.push('vià31','296','logos/tv_services/via31_color.png','via31','0');channelsInfos2.push('vià34','297','logos/tv_services/via34_color.png','via34','0');channelsInfos2.push('vià66','298','logos/tv_services/via66_color.png','via66','0');channelsInfos2.push('beIN SPORTS MAX 4','300','logos/tv_services/beIN_SPORTS_MAX_4_color.png','bein-sports-max-4','0');channelsInfos2.push('beIN SPORTS MAX 5','301','logos/tv_services/beIN_SPORTS_MAX_5_color.png','bein-sports-max-5','0');channelsInfos2.push('beIN SPORTS MAX 6','302','logos/tv_services/beIN_SPORTS_MAX_6_color.png','bein-sports-max-6','0');channelsInfos2.push('beIN SPORTS MAX 7','303','logos/tv_services/beIN_SPORTS_MAX_7_color.png','bein-sports-max-7','0');channelsInfos2.push('beIN SPORTS MAX 8','304','logos/tv_services/beIN_SPORTS_MAX_8_color.png','bein-sports-max-8','0');channelsInfos2.push('beIN SPORTS MAX 9','305','logos/tv_services/beIN_SPORTS_MAX_9_color.png','bein-sports-max-9','0');channelsInfos2.push('beIN SPORTS MAX 10','306','logos/tv_services/beIN_SPORTS_MAX_10_color.png','bein-sports-max-10','0');channelsInfos2.push('RMC Sport Live 3','316','img/apps/chaines/logos/RMCSPORTLIVE3100x100.png','rmc-sport-live-3','0');channelsInfos2.push('RMC Sport Live 4','317','img/apps/chaines/logos/RMCSPORTLIVE4100x100.png','rmc-sport-live-4','0');channelsInfos2.push('+ d’Afrique','390','img/apps/chaines/logos/PLUSDAFRIQUE100x100Couleur.png','dafrique','0');channelsInfos2.push('France 3 - Alpes','431','logos/tv_services/France-3-Alpes-Color.jpg','france-3-alpes','1');channelsInfos2.push('France 3 - Alsace','432','logos/tv_services/France-3-Alsace-Color.jpg','france-3-alsace','1');channelsInfos2.push('France 3 - Aquitaine','433','logos/tv_services/France-3-Aquitaine-Color.jpg','france-3-aquitaine','1');channelsInfos2.push('France 3 - Auvergne','434','logos/tv_services/France-3-Auvergne-Color.jpg','france-3-auvergne','1');channelsInfos2.push('France 3 - Basse-Normandie','435','logos/tv_services/France-3-Normandie-Color.jpg','france-3-basse-normandie','1');channelsInfos2.push('France 3 - Bourgogne','436','logos/tv_services/France-3-Bourgogne-Color.jpg','france-3-bourgogne','1');channelsInfos2.push('France 3 - Bretagne','437','logos/tv_services/France-3-Bretagne-Color.jpg','france-3-bretagne','1');channelsInfos2.push('France 3 - Centre','438','img/apps/chaines/logos/France3CenCouleur.jpg','france-3-centre','1');channelsInfos2.push('France 3 - Champagne-Ardenne','439','logos/tv_services/France-3-Champagne-Ardenne-Color.jpg','france-3-champagne-ardenne','1');channelsInfos2.push('France 3 - Via Stella','440','logos/tv_services/France-3-Corse-Color.jpg','france-3-via-stella','1');channelsInfos2.push('France 3 - Côte d Azur','441','logos/tv_services/France-3-Cote-Azur-Color.jpg','france-3-cote-dazur','1');channelsInfos2.push('France 3 - Franche-Comté','442','logos/tv_services/France-3-Franche-Comte-Color.jpg','france-3-franche-comte','1');channelsInfos2.push('France 3 - Haute-Normandie','443','logos/tv_services/France-3-Normandie-Color.jpg','france-3-haute-normandie','1');channelsInfos2.push('France 3 - Languedoc','444','logos/tv_services/France-3-Languedoc-Roussillon-Color.jpg','france-3-languedoc','1');channelsInfos2.push('France 3 - Limousin','445','logos/tv_services/France-3-Limousin-Color.jpg','france-3-limousin','1');channelsInfos2.push('France 3 - Lorraine','446','logos/tv_services/France-3-Lorraine-Color.jpg','france-3-lorraine','1');channelsInfos2.push('France 3 - Midi-Pyrénées','447','logos/tv_services/France-3-Midi-Pyrenees-Color.jpg','france-3-midi-pyrenees','1');channelsInfos2.push('France 3 - Nord Pas-de-Calais','448','logos/tv_services/France-3-Nord-pas-de-Calais-Color.jpg','france-3-nord-pas-de-calais','1');channelsInfos2.push('France 3 - Paris Ile-de-France','449','logos/tv_services/France-3-Paris-IdF-Color.jpg','france-3-paris-ile-de-france','1');channelsInfos2.push('France 3 - Pays de Loire','450','logos/tv_services/France-3-Pyas-de-la-Loire-Color.jpg','france-3-pays-de-loire','1');channelsInfos2.push('France 3 - Picardie','451','logos/tv_services/France-3-Picardie-Color.jpg','france-3-picardie','1');channelsInfos2.push('France 3 - Poitou-Charentes','452','logos/tv_services/France-3-Poitou-Charentes-Color.jpg','france-3-poitou-charentes','1');channelsInfos2.push('France 3 - Provence Alpes','453','logos/tv_services/France-3-Provence-Alpes-Color.jpg','france-3-provence-alpes','1');channelsInfos2.push('France 3 - Rhône-Alpes','454','logos/tv_services/France-3-Rhone-Alpes-Color.jpg','france-3-rhone-alpes','1');channelsInfos2.push('France 3 Nouvelle Aquitaine','455','logos/tv_services/France-3-Nouvelle-Aquitaine-Color.jpg','france-3-nouvelle-aquitaine','1');channelsInfos2.push('Canal 21','457','logos/tv_services/Canal_21_color.png','canal-21','0');channelsInfos2.push('20 Minutes TV','461','img/apps/chaines/logos/20mnTV100x100.png','20-minutes-tv','0');channelsInfos2.push('Télé Bocal','464','logos/tv_services/Tele_Bocal_color.png','tele-bocal','1');channelsInfos2.push('vià93','467','img/apps/chaines/logos/Via93100x100.png','via93','0');channelsInfos2.push('Figaro TV IDF','468','img/apps/chaines/logos/LEFIGARO100x100couleur.png','figaro-tv-idf','0');channelsInfos2.push('TV78','469','img/apps/chaines/logos/TV78100x100COULEUR.png','tv78','0');channelsInfos2.push('Lyon Capitale TV','476','img/apps/chaines/logos/lyoncapitaletv1100x100couleur.png','lyon-capitale-tv','0');channelsInfos2.push('Télé Grenoble','477','img/apps/chaines/logos/LogoTlgrenoble100x100.png','tele-grenoble','0');channelsInfos2.push('TL7','478','logos/tv_services/TL7_Saint_etienne_color.png','tl7','0');channelsInfos2.push('8 Mont Blanc','480','logos/tv_services/8_Mont_Blanc_color.png','8-mont-blanc','0');channelsInfos2.push('IL TV','481','logos/tv_services/IL_TV_color.png','il-tv','0');channelsInfos2.push('ASTV','482','img/apps/chaines/logos/ASTV100x100couleuir.png','astv','1');channelsInfos2.push('TELEGOHELLE','485','logos/tv_services/TELEGOHELLE_color.png','telegohelle','0');channelsInfos2.push('Wéo Picardie','486','img/apps/chaines/logos/WeoPicardie100x100.png','weo-picardie','1');channelsInfos2.push('Wéo TV, La voix du nord','487','img/apps/chaines/logos/WEOLAVDN100x100.png','weo-tv-la-voix-du-nord','0');channelsInfos2.push('Vià MATÉLÉ','489','img/apps/chaines/logos/viamatele100x100couleur.png','via-matele','1');channelsInfos2.push('7 A LIMOGES','490','logos/tv_services/7_A_LIMOGES_color.png','7-a-limoges','0');channelsInfos2.push('TV7 Bordeaux','491','logos/tv_services/TV7_Bordeaux_color.png','tv7-bordeaux','0');channelsInfos2.push('TVPI','492','img/apps/chaines/logos/Tvpilogojaunealpha100x100.png','tvpi','1');channelsInfos2.push('KANALDUDE','496','img/apps/chaines/logos/Kanaldude100x100fondblanc.png','kanaldude','1');channelsInfos2.push('TV2COM','501','img/apps/chaines/logos/100x100tv2com.png','tv2com','1');channelsInfos2.push('NA TV','504','img/apps/chaines/logos/NATV100x100couleur.png','na-tv','1');channelsInfos2.push('Canal 32','505','logos/tv_services/Canal_32_color.png','canal-32','0');channelsInfos2.push('VIA Mirabelle','506','logos/tv_services/VIA_Mirabelle_color.png','via-mirabelle','0');channelsInfos2.push('Puissance TV','507','img/apps/chaines/logos/PUISSANCETV100x100.png','puissance-tv','1');channelsInfos2.push('TVMonaco','511','img/apps/chaines/logos/TVMonaco100x100.png','tvmonaco','1');channelsInfos2.push('Mosaïk Cristal','512','logos/tv_services/Mosaik_color.png','mosaik-cristal','0');channelsInfos2.push('TV8 Moselle-Est','513','logos/tv_services/TV8_Moselle_Est_color.png','tv8-moselle-est','0');channelsInfos2.push('Vosges tv','514','img/apps/chaines/logos/VOSGES100x100couleur.png','vosges-tv','0');channelsInfos2.push('Cannes Lérins TV','515','img/apps/chaines/logos/CannesLerins100x100.png','cannes-lerins-tv','1');channelsInfos2.push('Maritima TV','520','logos/tv_services/Maritima_TV_color.png','maritima-tv','0');channelsInfos2.push('MAURIENNE TV','522','img/apps/chaines/logos/mauriennetv100x100.png','maurienne-tv','1');channelsInfos2.push('Angers télé','523','img/apps/chaines/logos/AngersTV100x100.png','angers-tele','0');channelsInfos2.push('Télénantes','524','logos/tv_services/Telenantes_color.png','telenantes','0');channelsInfos2.push('TV Vendée','525','logos/tv_services/TV_Vendee_color.png','tv-vendee','0');channelsInfos2.push('LMtv Sarthe','526','img/apps/chaines/logos/LMTV100x100.png','lmtv-sarthe','1');channelsInfos2.push('TEBEO','529','img/apps/chaines/logos/TEBEOcolor1.png','tebeo','1');channelsInfos2.push('TV RENNES 35','530','img/apps/chaines/logos/TVRennes35100x100couleur.png','tv-rennes-35','1');channelsInfos2.push('TV Tours','533','logos/tv_services/TV_Tours_color.png','tv-tours','0');channelsInfos2.push('ZOUK TV','536','logos/tv_services/ZOUK_TV_color.png','zouk-tv','0');channelsInfos2.push('Télé Paese','537','logos/tv_services/Tele_Paese_color.png','tele-paese','0');channelsInfos2.push('CNN International','541','logos/tv_services/CNN_International_color.png','cnn-international','1');channelsInfos2.push('BBC NEWS','542','img/apps/chaines/logos/BBCNews100x100.png','bbc-news','0');channelsInfos2.push('France 24 Anglais','543','logos/tv_services/France_24_English_color.png','france-24-anglais','1');channelsInfos2.push('CNBC Europe','544','logos/tv_services/CNBC_EUROPE_color.png','cnbc-europe','0');channelsInfos2.push('Bloomberg PAN-European','545','logos/tv_services/Bloomberg_PAN_European_color.png','bloomberg-pan-european','0');channelsInfos2.push('Al Jazeera English','546','logos/tv_services/Al_Jazeera_English_color.png','al-jazeera-english','0');channelsInfos2.push('i24 News Anglais','547','logos/tv_services/I24_NEWS_ENGLISH_color.png','i24-news-anglais','1');channelsInfos2.push('NHK WORLD-JAPAN','548','logos/tv_services/NHK_WORLD_JAPAN_color.png','nhk-world-japan','1');channelsInfos2.push('Sky News','549','logos/tv_services/Sky_News_color.png','sky-news','0');channelsInfos2.push('TGCOM24','550','img/apps/chaines/logos/LogoTGCOM100x100couleur.png','tgcom24','1');channelsInfos2.push('i24 News Arabe','555','logos/tv_services/I24_NEWS_ARABIC_color.png','i24-news-arabe','1');channelsInfos2.push('France 24 Arabe','556','logos/tv_services/France_24_Arabic_color.png','france-24-arabe','1');channelsInfos2.push('Medi1TV','558','logos/tv_services/Medi1TV_color.png','medi1tv','0');channelsInfos2.push('AL ARABIYA','559','img/apps/chaines/logos/AlArabiya100x100.png','al-arabiya','0');channelsInfos2.push('Ennahar TV','561','logos/tv_services/Ennahar_TV_color.png','ennahar-tv','0');channelsInfos2.push('Canal 11','568','img/apps/chaines/logos/Channel11100x100fondblanc.png','canal-11','0');channelsInfos2.push('France 24 Espanol','573','img/apps/chaines/logos/FR24esp100x100.png','france-24-espanol','1');channelsInfos2.push('24h','574','logos/tv_services/24H_TVE_color.png','24h','0');channelsInfos2.push('TVE','575','logos/tv_services/TVEI_color.png','tve','0');channelsInfos2.push('DW-TV','578','logos/tv_services/DW_TV_color.png','dw-tv','0');channelsInfos2.push('WELT','579','logos/tv_services/WELT_color.png','welt','0');channelsInfos2.push('Record News','586','logos/tv_services/Record_News_color.png','record-news','0');channelsInfos2.push('Africa 24','595','logos/tv_services/Africa_24_color.png','africa-24','0');channelsInfos2.push('Canal2','597','logos/tv_services/Canal2_color.png','canal2','0');channelsInfos2.push('V+','602','img/apps/chaines/logos/V100x100.png','v','0');channelsInfos2.push('Porto Canal','604','logos/tv_services/Porto_Canal_color.png','porto-canal','0');channelsInfos2.push('Local Visao','605','logos/tv_services/Local_Visao_color.png','local-visao','0');channelsInfos2.push('Benfica TV','608','logos/tv_services/Benfica_TV_color.png','benfica-tv','0');channelsInfos2.push('A BOLA TV','609','logos/tv_services/A_BOLA_TV_color.png','a-bola-tv','0');channelsInfos2.push('Canal Q','622','logos/tv_services/Canal_Q_color.png','canal-q','0');channelsInfos2.push('RTPI','624','logos/tv_services/RTPI_color.png','rtpi','0');channelsInfos2.push('Rai Uno','626','img/apps/chaines/logos/rai1100x100.png','rai-uno','0');channelsInfos2.push('RAI SCUOLA','629','logos/tv_services/rai-scuola-100x100-couleur.png','rai-scuola','0');channelsInfos2.push('RAI STORIA','630','logos/tv_services/rai-storia-100x100-couleur.png','rai-storia','0');channelsInfos2.push('REAL MADRID TV','645','img/apps/chaines/logos/RealMadridTV100x100couleur.png','real-madrid-tv','0');channelsInfos2.push('STAR TVE','646','img/apps/chaines/logos/StarTVE100x100.png','star-tve','0');channelsInfos2.push('ALL FLAMENCO_','650','img/apps/chaines/logos/AllFlamenco100x100.png','all-flamenco','0');channelsInfos2.push('TVG EUROPA','651','logos/tv_services/TVG_EUROPA_color.png','tvg-europa','0');channelsInfos2.push('etb basque','655','img/apps/chaines/logos/ETBBasque2022logo100x100couleur.png','etb-basque','0');channelsInfos2.push('TELE MADRID','657','img/apps/chaines/logos/TeleMadrid100x100couleur.png','tele-madrid','0');channelsInfos2.push('ANDALUCIA TV','658','img/apps/chaines/logos/AndaluciaTV100x100.png','andalucia-tv','0');channelsInfos2.push('Boomerang Anglais','664','img/apps/chaines/logos/Boomerang100x100.png','boomerang-anglais','0');channelsInfos2.push('FilmBox Arthouse','665','img/apps/chaines/logos/FILMBOX100x100.png','filmbox-arthouse','0');channelsInfos2.push('TCM Anglais','666','img/apps/chaines/logos/TCM100x100.png','tcm-anglais','0');channelsInfos2.push('TinyTeen','667','img/apps/chaines/logos/TinyTeen100x100.png','tinyteen','0');channelsInfos2.push('Lang Lab','668','img/apps/chaines/logos/LangLab100x100.png','lang-lab','0');channelsInfos2.push('Lingo Toons','669','img/apps/chaines/logos/LingoToons100x100.png','lingo-toons','0');channelsInfos2.push('DocuBox HD','670','img/apps/chaines/logos/DOCUBOX100x100.png','docubox-hd','0');channelsInfos2.push('FashionBox HD','671','img/apps/chaines/logos/FASHION100x100.png','fashionbox-hd','0');channelsInfos2.push('ProSieben','673','logos/tv_services/ProSieben_color.png','prosieben','0');channelsInfos2.push('N-TV','674','logos/tv_services/N_TV_color.png','n-tv','0');channelsInfos2.push('RTL Television','675','img/apps/chaines/logos/RTLlogocollection06cmyk100x100.png','rtl-television','0');channelsInfos2.push('RTL2','676','logos/tv_services/RTL2_color.png','rtl2','0');channelsInfos2.push('Super RTL','678','logos/tv_services/Super_RTL_color.png','super-rtl','0');channelsInfos2.push('VOX','680','logos/tv_services/Vox_color.png','vox','0');channelsInfos2.push('KABEL EINS','682','logos/tv_services/KABEL_EINS_color.png','kabel-eins','0');channelsInfos2.push('RTL NITRO TV','685','logos/tv_services/RTL_NITRO_TV_color.png','rtl-nitro-tv','0');channelsInfos2.push('Arte Allemand','686','logos/tv_services/Arte_Allemand_color.png','arte-allemand','0');channelsInfos2.push('TVP Polonia','700','logos/tv_services/TVP_Polonia_color.png','tvp-polonia','0');channelsInfos2.push('Armenia 1','713','logos/tv_services/Armenia_1_color.png','armenia-1','0');channelsInfos2.push('ART CINEMA','733','img/apps/chaines/logos/ARTCINEMA100x100couleur.png','art-cinema','0');channelsInfos2.push('ART AFLAM 1','734','img/apps/chaines/logos/ARTAFLAM1100x100couleur.png','art-aflam-1','0');channelsInfos2.push('ART AFLAM 2','735','img/apps/chaines/logos/ARTAFLAM2100x100couleur.png','art-aflam-2','0');channelsInfos2.push('AL HEKAYAT 1','736','img/apps/chaines/logos/AlHekayat100x100.png','al-hekayat-1','0');channelsInfos2.push('AL HEKAYAT 2','737','img/apps/chaines/logos/ALHEKAYAT2100x100couleur.png','al-hekayat-2','0');channelsInfos2.push('TV Romania International','738','logos/tv_services/TV_Romania_International_color.png','tv-romania-international','0');channelsInfos2.push('Bahia TV','739','img/apps/chaines/logos/Bahia100x100Couleur.png','bahia-tv','0');channelsInfos2.push('Télé Maroc','740','img/apps/chaines/logos/telemaroc100x100color.png','tele-maroc','0');channelsInfos2.push('Canal Algérie','742','logos/tv_services/Canal_Algerie_color.png','canal-algerie','0');channelsInfos2.push('Beur FM TV','746','logos/tv_services/Beur_FM_TV_color.png','beur-fm-tv','0');channelsInfos2.push('2M Maroc','749','logos/tv_services/2M_Maroc_color.png','2m-maroc','0');channelsInfos2.push('Al Aoula','750','logos/tv_services/Al_Aoula_color.png','al-aoula','0');channelsInfos2.push('Arryadia','751','logos/tv_services/Arryadia_color.png','arryadia','0');channelsInfos2.push('Assadissa','752','logos/tv_services/Assadissa_color.png','assadissa','0');channelsInfos2.push('Watania 2','758','img/apps/chaines/logos/Watania2100x100Couleur.png','watania-2','0');channelsInfos2.push('Tunisia 1','759','logos/tv_services/Tunisia_1_color.png','tunisia-1','0');channelsInfos2.push('Asharq News','760','img/apps/chaines/logos/ASHARQNEWS100x100COULEUR.png','asharq-news','1');channelsInfos2.push('Berbère TV','765','logos/tv_services/Berbere_TV_color.png','berbere-tv','0');channelsInfos2.push('Sky News Arabia','767','img/apps/chaines/logos/SKYNEWSARABIA100x100COULEUR.png','sky-news-arabia','0');channelsInfos2.push('CHADA TV','768','img/apps/chaines/logos/CHADATV100x100.png','chada-tv','0');channelsInfos2.push('Rotana Comedy','769','img/apps/chaines/logos/RotanaComedy100x100.png','rotana-comedy','0');channelsInfos2.push('HELWA TV','770','img/apps/chaines/logos/100x100couleur.png','helwa-tv','0');channelsInfos2.push('Alaraby 1','773','img/apps/chaines/logos/alaraby100x100.png','alaraby-1','0');channelsInfos2.push('Echorouk News','774','logos/tv_services/Echorouk_News_color.png','echorouk-news','0');channelsInfos2.push('El Bilad TV','775','logos/tv_services/elbiladtv-100x100.png','el-bilad-tv','0');channelsInfos2.push('Dizi','776','img/apps/chaines/logos/DIZI100x100COULEUR.png','dizi','0');channelsInfos2.push('Alaraby 2','777','img/apps/chaines/logos/Alaraby2100x100Couleur.png','alaraby-2','0');channelsInfos2.push('Rotana Aflam+','778','img/apps/chaines/logos/RotanaAflam100x100.png','rotana-aflam','0');channelsInfos2.push('Rotana Cinéma+ FR','779','img/apps/chaines/logos/RatanaCinama100x100Couleur.png','rotana-cinema-fr','0');channelsInfos2.push('Rotana Music','780','img/apps/chaines/logos/RotanaMusic100x100.png','rotana-music','0');channelsInfos2.push('Rotana Kids','782','img/apps/chaines/logos/RotanaKids100x100.png','rotana-kids','0');channelsInfos2.push('Rotana Cinema','783','logos/tv_services/Rotana_Cinema_color.png','rotana-cinema','0');channelsInfos2.push('Rotana Classic','784','img/apps/chaines/logos/ROTANACLASSIC100x100COULEUR.png','rotana-classic','0');channelsInfos2.push('Nessma','785','logos/tv_services/Nessma_color.png','nessma','0');channelsInfos2.push('DMC','786','img/apps/chaines/logos/DMC100x100color.png','dmc','0');channelsInfos2.push('Fix and Foxi','787','img/apps/chaines/logos/FOXETFOXI100x100color.png','fix-and-foxi','0');channelsInfos2.push('Carthage+','788','img/apps/chaines/logos/carthage100x100color.png','carthage','0');channelsInfos2.push('DMC Drama','789','img/apps/chaines/logos/dmcdrama100x100color.png','dmc-drama','0');channelsInfos2.push('Iqraa International','790','logos/tv_services/Iqraa_International_color.png','iqraa-international','0');channelsInfos2.push('Iqraa TV','791','logos/tv_services/Iqraa_TV_color.png','iqraa-tv','0');channelsInfos2.push('Al Majd Holy Quran','792','logos/tv_services/Al_Majd_Holy_Quran_color.png','al-majd-holy-quran','0');channelsInfos2.push('Al Maghribia','798','logos/tv_services/Al_Maghribia_color.png','al-maghribia','0');channelsInfos2.push('Arrabiâ','799','logos/tv_services/Arrabia_color.png','arrabia','0');channelsInfos2.push('LBC Sat','801','img/apps/chaines/logos/LBC_100x100-couleur.png','lbc-sat','0');channelsInfos2.push('Lana TV','802','img/apps/chaines/logos/LanaTV100x100.png','lana-tv','1');channelsInfos2.push('Murr TV','805','logos/tv_services/Murr_TV_color.png','murr-tv','0');channelsInfos2.push('Rotana M+','806','img/apps/chaines/logos/Rotana-M+_100x100-couleur.png','rotana-m','0');channelsInfos2.push('Dubaï TV','807','logos/tv_services/Dubai_TV_color.png','dubai-tv','0');channelsInfos2.push('ON TV','809','img/apps/chaines/logos/ontv100x100color.png','on-tv','0');channelsInfos2.push('HANNIBAL TV','810','logos/tv_services/HANNIBALTV-100x100.png','hannibal-tv','0');channelsInfos2.push('Al Masriya','813','logos/tv_services/Al_Masriya_color.png','al-masriya','0');channelsInfos2.push('The Israeli Network','814','logos/tv_services/The_Israeli_Network_color.png','the-israeli-network','0');channelsInfos2.push('Jordan Satellite Channel','815','logos/tv_services/Jordan_Satellite_Channel_color.png','jordan-satellite-channel','0');channelsInfos2.push('Euro Star','818','img/apps/chaines/logos/EUROSTAR100x100.png','euro-star','0');channelsInfos2.push('Euro D','819','img/apps/chaines/logos/eurod100x100.png','euro-d','0');channelsInfos2.push('BEIN MOVIES','821','logos/tv_services/beinmovies-100x100-couleur.png','bein-movies','0');channelsInfos2.push('SHOW MAX','822','logos/tv_services/showmax-100x100-couleur.png','show-max','0');channelsInfos2.push('ATV Avrupa','824','img/apps/chaines/logos/ATVAVRUPA100x100.png','atv-avrupa','0');channelsInfos2.push('KANAL 7 AVRUPA','825','logos/tv_services/avrupa-100x100-couleur.png','kanal-7-avrupa','0');channelsInfos2.push('ORTB','839','logos/tv_services/ORTB_color.png','ortb','0');channelsInfos2.push('NOVELAS','840','img/apps/chaines/logos/100x100couleurNOVELAS.png','novelas','0');channelsInfos2.push('CRTV','841','logos/tv_services/CRTV_color.png','crtv','0');channelsInfos2.push('CHERIFLA TV','844','img/apps/chaines/logos/100x100Cherifla.png','cherifla-tv','0');channelsInfos2.push('ORTC','845','logos/tv_services/ORTC_color.png','ortc','0');channelsInfos2.push('TV Congo','846','logos/tv_services/TV_Congo_color.png','tv-congo','0');channelsInfos2.push('Maboke TV','847','img/apps/chaines/logos/MABOKE_TV_100x100-COULEUR.png','maboke-tv','0');channelsInfos2.push('RTNC','848','logos/tv_services/RTNC_color.png','rtnc','0');channelsInfos2.push('NCI','849','img/apps/chaines/logos/NCI100x100couleurNCI.png','nci','0');channelsInfos2.push('RTI 1','851','img/apps/chaines/logos/RTI1100x100Couleur.png','rti-1','0');channelsInfos2.push('CDIRECT','852','img/apps/chaines/logos/100x100couleurCDIRECT.png','cdirect','0');channelsInfos2.push('Gabon 1ère','853','img/apps/chaines/logos/GABON_1ERE_100x100_COULEUR.png','gabon-1ere','0');channelsInfos2.push('RTG','854','img/apps/chaines/logos/RTG100x100COULEUR.png','rtg','0');channelsInfos2.push('TVM','855','logos/tv_services/TVM_color.png','tvm','0');channelsInfos2.push('ORTM','856','img/apps/chaines/logos/ORTM100x100Couleur.png','ortm','0');channelsInfos2.push('Nollywood TV','858','img/apps/chaines/logos/NollywoodTV100x100.png','nollywood-tv','0');channelsInfos2.push('Pulaagu','859','img/apps/chaines/logos/PULAAGU100x100.png','pulaagu','0');channelsInfos2.push('Trace Africa','861','logos/tv_services/Trace_Africa_color.png','trace-africa','0');channelsInfos2.push('Vox Africa','862','logos/tv_services/Vox_Africa_color.png','vox-africa','0');channelsInfos2.push('2STV','863','logos/tv_services/2STV_color.png','2stv','0');channelsInfos2.push('RTS 1','864','logos/tv_services/RTS_1_color.png','rts-1','0');channelsInfos2.push('TFM','866','logos/tv_services/TFM_color.png','tfm','0');channelsInfos2.push('SUNU YEUF','867','img/apps/chaines/logos/100x100couleurSUNUYEUF.png','sunu-yeuf','0');channelsInfos2.push('Beijing TV','878','logos/tv_services/Beijing_TV_color.png','beijing-tv','0');channelsInfos2.push('#### YuLe','879','logos/tv_services/####_YuLe_color.png','####-yule','0');channelsInfos2.push('####-4','880','logos/tv_services/####_4_color.png','####-4','0');channelsInfos2.push('CMC','881','logos/tv_services/CMC_color.png','cmc','0');channelsInfos2.push('Hunan TV','882','logos/tv_services/Hunan_Satellite_TV_color.png','hunan-tv','0');channelsInfos2.push('JSBC International','883','logos/tv_services/JSBC_International_color.png','jsbc-international','0');channelsInfos2.push('Phoenix CNE','884','logos/tv_services/Phoenix_CNE_color.png','phoenix-cne','0');channelsInfos2.push('Dragon TV','886','logos/tv_services/Dragon_TV_color.png','dragon-tv','0');channelsInfos2.push('Great Wall Elite','887','img/apps/chaines/logos/GWE100x100couleur.png','great-wall-elite','0');channelsInfos2.push('Zhejiang Star TV','888','img/apps/chaines/logos/ZHEJIANGSTV100x100couleur.png','zhejiang-star-tv','0');channelsInfos2.push('GRT GBA Satellite TV','916','img/apps/chaines/logos/GRTGBASatelliteTV100x100couleur.png','grt-gba-satellite-tv','0');channelsInfos2.push('CGTN-Documentary','918','logos/tv_services/CGTN_Documentary_color.png','cgtn-documentary','0');channelsInfos2.push('CGTN-Français','920','logos/tv_services/CGTN_Francais_color.png','cgtn-francais','0');channelsInfos2.push('NTD','921','logos/tv_services/NTD_color.png','ntd','0');channelsInfos2.push('NHK World Premium','938','img/apps/chaines/logos/NHK-_WORLD_PREMIUM_100x100-couleur.png','nhk-world-premium','0');////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////function createDivVideoState() // Fonction qui crée le bandeau rouge{if ( window.location.href.includes('https://tv.sfr.fr/direct-tv/') ) // Si l'url est un live{var div = document.createElement("div"); // Création de l'élémentdiv.style.top = "0"; // Position verticale de l'élémentdiv.style.left = "0"; // Position horizontale de l'élémentdiv.style.width = "10%"; // Largeur de l'élémentdiv.style.height = "40px"; // Hauteur de l'élémentdiv.style.position = "fixed"; // Type de position de l'élémentdiv.style.background = "red"; // Couleur de fond de l'élément (rouge)div.style.color = "white"; // Couleur de la police du texte (blanc)div.style.fontSize = "32px"; // Taille de la police du textediv.innerHTML = videoPlaying; // Texte de l'élémentdiv.style.textAlign = "center"; // Position du texte de l'élémentdiv.style.zIndex = zindex1; // Mettre au premier plan l'élémentdiv.setAttribute('id', 'divVideoState'); // Définir un id pour retrouver l'élémentdocument.body.appendChild(div); // Ajouter l'élémentsetTimeout( () => { document.getElementById("divVideoState").remove(); },1000); // Supression de l'élément au bout de 1s}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////function createRedDivFunc() // Fonction qui crée le bandeau rouge{if ( window.location.href.includes('https://tv.sfr.fr/direct-tv/') )// Si l'url est un live{var div = document.createElement("div"); // Création de l'élémentdiv.style.top = "0"; // Position verticale de l'élémentdiv.style.left = "0"; // Position horizontale de l'élémentdiv.style.width = "100%"; // Largeur de l'élémentdiv.style.height = "40px"; // Hauteur de l'élémentdiv.style.position = "fixed"; // Type de position de l'élémentdiv.style.background = "red"; // Couleur de fond de l'élément (rouge)div.style.color = "white"; // Couleur de la police du texte (blanc)div.style.fontSize = "32px"; // Taille de la police du textevar html1 = "";html1 = window.location.href; // Assignation del'url à la variable html1html1 = html1.replace("https://tv.sfr.fr/direct-tv/", ""); // Remplacement de "https://tv.sfr.fr/channel/" par rien afin d'obtenir un nombrehtml1 = html1.replace(";play=true", ""); // Remplacementfor ( var i=0; i<channelsInfos2.length/dataStep; i++ ) // Boucle qui parcourt le tableau channelsInfos2if ( channelsInfos2[dataStep*i+3] == html1 ) // Si l'occurence (pas de 3) du tableau est égale au fameux nombre qui finit l'url{html1 = channelsInfos2[dataStep*i]; // html1 vaut le nom de la chaine tvbreak; // Stopper la boucle}var canGetTitle = document.querySelector(".info h1") !== null; // Vérifier que le programme existeif ( canGetTitle )html1 += " - "+document.querySelector(".info h1").innerHTML; // L'ajouter si il existediv.innerHTML = html1; // Texte de l'élémentdiv.style.textAlign = "center"; // Position du texte de l'élémentdiv.style.zIndex = zindex1; // Mettre au premier plan l'élémentdiv.setAttribute('id', 'divScript'); // Définir un id pour retrouver l'élémentdocument.body.appendChild(div); // Ajouter l'élémentsetTimeout( () => { document.getElementById("divScript").remove(); },1000); // Supression de l'élément ayant l'id 'divscript' (le bandeau rouge) au bout de 1s}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////function mykeyupFunc(event) // Fonction éxécutée lorsqu'une touche est relachée{////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Modifier les chaines du tableau vignettesif ( event.key === "v" ) // Si la touche relachée est "v"if ( window.location.href.includes('https://tv.sfr.fr/content/')|| window.location.href.includes('https://tv.sfr.fr/direct-tv/') ) // Si l'url est un live ou un replay{if ( channelTabAddedConfig == false ) // Si le tableau des chaines n'est pas affiché{var htmlCodeChannelTabConfig = '<table style="background-color:rgba(255,255,255,0.7);" cellspacing=10 cellpadding=10>'; // Variable qui contiendra le code html du tableauhtmlCodeChannelTabConfig += '<tr><td style="opacity:1;" colspan="'+nbColumnChannelTabConfig+'">'; //if ( 'myChannelConfigStored' in localStorage ) htmlCodeChannelTabConfig += "myChannelConfigStored : " + localStorage.getItem("myChannelConfigStored");htmlCodeChannelTabConfig += "<tr>";if ( 'nbColumnChannelTabConfig' in localStorage ) nbColumnChannelTabConfig = localStorage.getItem('nbColumnChannelTabConfig');// Si la variable est stockée , remplacer celle par défautif ( 'imgChannelWidthConfig' in localStorage ) imgChannelWidthConfig = localStorage.getItem('imgChannelWidthConfig'); // Si la variable est stockée , remplacer celle par défautlet nbAddedColumnsConfig = 0;let addStuff = "";for ( var u=0; u<channelsInfos2.length/dataStep; u++ ) // Boucle{addStuff = ' id="ChannelTabConfigTd'+ u + '"';if ( channelsInfos2[dataStep*u+4] == 1 ){//addStuff += ' style="background-color:rgba(0,0,255,0.5);" ';//addStuff += ' style="background-color:#0000FF80;" ';addStuff += ' style="background-color:blue;opacity:0.8;" ';}else{addStuff += ' style="background-color:white;opacity:0.8;" ';}//var folder = ""; // Variable pour le dossier de l'image//if ( channelsInfos2[dataStep*u+2] == "1" ) folder = "logos/tv_services/"; // Deux dossiers possibles pour les images// else folder = "img/apps/chaines/logos/";var nameChannel = channelsInfos2[dataStep*u+0]; // Variable pour le titre de l'imagehtmlCodeChannelTabConfig += '<td'+ addStuff + ' '; // Ajout d'une cellulehtmlCodeChannelTabConfig += 'onclick="'; // Fonction click de la cellule//htmlCodeChannelTabConfig += 'this.style.backgroundColor = this.style.backgroundColor==\'#0000FF80\'? \'#FFFFFF80\':\'#0000FF80\';';htmlCodeChannelTabConfig += 'this.style.backgroundColor = this.style.backgroundColor==\'white\'? \'blue\':\'white\'; '; // Changer de couleur au clichtmlCodeChannelTabConfig += '">';htmlCodeChannelTabConfig += '<img style="opacity:1;background-color:white;" width="' + imgChannelWidthConfig ; // Image de la chainehtmlCodeChannelTabConfig += 'px" src="http://static-cdn.tv.sfr.net/data/'; // Image de la chainehtmlCodeChannelTabConfig += channelsInfos2[dataStep*u+2] + '" title="' + nameChannel + '">'; // Image de la chainehtmlCodeChannelTabConfig += '<div '; // Ajout d'un bloc "div"htmlCodeChannelTabConfig += 'style="margin-top:1em;text-align:center;background-color:#000000;color:#FFFFFF;opacity:1; ">';// Ajout d'un stylehtmlCodeChannelTabConfig += channelsInfos2[dataStep*u+1] +'</div>'; // Ajout du numéro du "canal"nbAddedColumnsConfig++; // Incrémentationif ( nbAddedColumnsConfig % nbColumnChannelTabConfig == 0 ) // Si le modulo vaut 0 (reste de la division)htmlCodeChannelTabConfig += "<tr>"; // Création d'une nouvelle rangée}htmlCodeChannelTabConfig += "</table>"; // Fermeture balise "tableau"var div = document.createElement("div"); // Création de l'élémentdiv.style.top = "10vh"; // Position verticale de l'élémentdiv.style.width = "100%"; // Largeur de l'élémentdiv.style.maxHeight = "80vh"; // Hauteur maximale de l'élémentdiv.style.overflowY = "auto"; // Pour scrolldiv.style.position = "fixed"; // Type de position de l'élémentdiv.style.color = "white"; // Couleur de la police du texte (blanc)div.style.fontSize = "16px"; // Taille de la police du textediv.style.zIndex = zindex2; // Mettre au premier plan l'élémentdiv.style.display = "flex"; // L'élément est flexiblediv.style.justifyContent = "center"; // Style du contenudiv.setAttribute('id', 'ChannelTabConfig'); // Définir un id pour retrouver l'élémentdiv.innerHTML = htmlCodeChannelTabConfig; // Texte de l'élémentvar fullScreenElement = document.fullscreenElement; // Quel élément est en plein écranif ( fullScreenElement != null) // Si un élément est en plein écranfullScreenElement.insertBefore(div,fullScreenElement.firstChild); // Insérer le tableau avant le premier enfantelse // Pas d'élément en plein écrandocument.body.appendChild(div); // Ajouter l'élémentchannelTabAddedConfig = true; // Variable indiquant que le tableau des chaines est affiché}else // Sinon le tableau des chaines est affiché// A la fermeture , sauvegarde de la config{var myChannelConfig =''; // Definition d'une variable utilisée comme une valeur binairevar myChannelConfigTemp =''; // Definition d'une variablevar myChannelConfig2 = ''; // Definition d'une variablefor ( var u=1; u<=channelsInfos2.length/dataStep; u++ ) // Boucle{if ( document.getElementById("ChannelTabConfigTd"+(u-1)).style.backgroundColor == "white" ) // Si l'arrière plan est blanc{channelsInfos2[dataStep*(u-1)+4] = '0'; // Changement de valeurmyChannelConfig += ''+0; // Ajout d'un 0}else{channelsInfos2[dataStep*(u-1)+4] = '1'; // Changement de valeurmyChannelConfig += ''+1; // Ajout d'un 1}if ( (u) % 4 == 0 ) // Si le modulo vaut 0 , une suite de 4 '0' ou '1' est obtenue{myChannelConfigTemp += ''+channelsInfos2[dataStep*(u-1)+4]; // Changement de la variablemyChannelConfig2 += ''+parseInt(myChannelConfigTemp,2).toString(16); // La suite de 4 '0' ou '1' est transformé en valeur héxadécimale//console.log(u);//console.log(myChannelConfigTemp);myChannelConfigTemp = ''; // Réinitialisation de la variable}else{//console.log(myChannelConfigTemp);myChannelConfigTemp += ''+channelsInfos2[dataStep*(u-1)+4]; // Concaténation}}if ( myChannelConfigTemp != '' ) localStorage.setItem("myChannelConfigStored",myChannelConfig2+'_'+myChannelConfigTemp); // Config sauvegardée localementelse localStorage.setItem("myChannelConfigStored",myChannelConfig2);document.getElementById("ChannelTabConfig").remove(); // Suppression du tableau des chaineschannelTabAddedConfig = false; // Variable indiquant que le tableau des chaines n'est pas affiché}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Fonction vignettes des chainesif ( window.location.href.includes('https://tv.sfr.fr/content/')|| window.location.href.includes('https://tv.sfr.fr/direct-tv/') ) // Si l'url est un live ou un replayif ( event.code === "NumpadEnter" || event.code === "ControlLeft") // Si la touche relachée est "entrée" du pavé numérique ou contrôle gauche{if ( channelTabAdded == false ) // Si le tableau des chaines n'est pas affiché{var htmlCodeChannelTab = '<table style="background-color:rgba(255, 255, 255, 0.7);" cellspacing=10 cellpadding=10>'; // Variable qui contiendra le code html du tableauif ( 'nbColumnChannelTab' in localStorage ) nbColumnChannelTab = localStorage.getItem('nbColumnChannelTab'); // Si la variable est stockée , remplacer celle par défautif ( 'imgChannelWidth' in localStorage ) imgChannelWidth = localStorage.getItem('imgChannelWidth'); // Si la variable est stockée , remplacer celle par défautlet nbAddedColumns = 0;for ( var u=0; u<channelsInfos2.length/dataStep; u++ ) // Boucleif ( channelsInfos2[dataStep*u+4] == 1 ){//var folder = ""; // Variable pour le dossier de l'image//if ( channelsInfos2[dataStep*u+2] == "1" ) folder = "logos/tv_services/"; // Deux dossiers possibles pour les images//else folder = "img/apps/chaines/logos/";var nameChannel = channelsInfos2[dataStep*u+0]; // Variable pour le titre de l'imagehtmlCodeChannelTab += '<div>';htmlCodeChannelTab += '<td><a href="https://tv.sfr.fr/direct-tv/' + channelsInfos2[dataStep*u+3] + '">'; // Lien pointant vers l'url de la chainehtmlCodeChannelTab += '<img width="' + imgChannelWidth + 'px" src="http://static-cdn.tv.sfr.net/data/'; // Image de la chainehtmlCodeChannelTab += channelsInfos2[dataStep*u+2] + '" title="' + nameChannel + '">'; // Image de la chainehtmlCodeChannelTab += '</a>'; // Fermeture balise "lien"htmlCodeChannelTab += '</div><div style="margin-top:1em;text-align:center;background-color:#000000;color:#FFFFFF; ">'; // Ajout d'un bloc "div"htmlCodeChannelTab += channelsInfos2[dataStep*u+1] +'</div>'; // Ajout du numéro du "canal"nbAddedColumns++;if ( nbAddedColumns % nbColumnChannelTab == 0 ) // Si le modulo vaut 0htmlCodeChannelTab += "<tr>"; // Création d'une nouvelle rangée}htmlCodeChannelTab += "</table>"; // Fermeture balise "tableau"var div = document.createElement("div"); // Création de l'élémentdiv.style.top = "10vh"; // Position verticale de l'élémentdiv.style.width = "100%"; // Largeur de l'élémentdiv.style.maxHeight = "80vh"; // Hauteur maximale de l'élémentdiv.style.overflowY = "auto"; // Pour scrolldiv.style.position = "fixed"; // Type de position de l'élémentdiv.style.color = "white"; // Couleur de la police du texte (blanc)div.style.fontSize = "16px"; // Taille de la police du textediv.style.zIndex = zindex2; // Mettre au premier plan l'élémentdiv.style.display = "flex"; // L'élément est flexiblediv.style.justifyContent = "center"; // Style du contenudiv.setAttribute('id', 'ChannelTab'); // Définir un id pour retrouver l'élémentdiv.innerHTML = htmlCodeChannelTab; // Texte de l'élémentvar fullScreenElement = document.fullscreenElement; // Quel élément est en plein écranif ( fullScreenElement != null) // Si un élément est en plein écranfullScreenElement.insertBefore(div,fullScreenElement.firstChild); // Insérer le tableau avant le premier enfantelse // Pas d'élément en plein écrandocument.body.appendChild(div); // Ajouter l'élémentchannelTabAdded = true; // Variable indiquant que le tableau des chaines est affiché}else // Sinon le tableau des chaines est affiché{document.getElementById("ChannelTab").remove(); // Suppression du tableau des chaineschannelTabAdded = false; // Variable indiquant que le tableau des chaines n'est pas affiché}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Logsif ( event.key === "l" ) // Si la touche relachée est "l"if ( window.location.href.includes('https://tv.sfr.fr/direct-tv/')|| window.location.href.includes('https://tv.sfr.fr/content/') ) // Si l'url est un live ou un replay{if ( 'nbLoggedErrors' in localStorage ) nbLoggedErrors = localStorage.getItem('nbLoggedErrors');if ( logTabAdded == false ) // Si le tableau des logs n'est pas affiché{var htmlCodeLogTab = '<table style="background-color:rgba(0, 0, 0, 0.7);" cellspacing=10 cellpadding=10>'; // Variable qui contiendra le code html du tableauhtmlCodeLogTab += '<tr><td><td><p id="PurgeP">Purger les logs</p><td>'; // Pour purger les erreursfor ( var l=1; l<=nbLoggedErrors; l++ ) // Boucleif ( 'ErrorLogged'+l in localStorage ) // Si le log erreur existehtmlCodeLogTab += "<tr><td>"+l+localStorage.getItem('ErrorLogged'+l); // Ajout d'une lignehtmlCodeLogTab += "</table>"; // Fermeture balise "tableau"var div = document.createElement("div"); // Création de l'élémentdiv.style.top = "20vh"; // Position verticale de l'élémentdiv.style.width = "100%"; // Largeur de l'élémentdiv.style.maxHeight = "50vh"; // Hauteur maximale de l'élémentdiv.style.overflowY = "auto"; // Pour scrolldiv.style.position = "fixed"; // Type de position de l'élémentdiv.style.color = "white"; // Couleur de la police du texte (blanc)div.style.fontSize = "16px"; // Taille de la police du textediv.style.zIndex = zindex2; // Mettre au premier plan l'élémentdiv.style.display = "flex"; // L'élément est flexiblediv.style.justifyContent = "center"; // Style du contenudiv.setAttribute('id', 'LogTab'); // Définir un id pour retrouver l'élémentdiv.innerHTML = htmlCodeLogTab; // Texte de l'élémentvar fullScreenElement = document.fullscreenElement; // Quel élément est en plein écranif ( fullScreenElement != null ) // Si un élément est en plein écranfullScreenElement.insertBefore(div,fullScreenElement.firstChild); // Insérer le tableau avant le premier enfantelse // Pas d'élément en plein écrandocument.body.appendChild(div); // Ajouter l'élémentdocument.getElementById("PurgeP").onclick = function() { // Ajout d'une fonctionfor ( var l=1; l<=nbLoggedErrors; l++ ) // Boucleif ( 'ErrorLogged'+l in localStorage ) // Si la variable existelocalStorage.removeItem('ErrorLogged'+l); // Effacerdocument.getElementById("LogTab").remove(); // Suppression du tableau des logslogTabAdded = false; // Variable indiquant que le tableau des logs n'est pas affiché};logTabAdded = true; // Variable indiquant que le tableau des logs est affiché}else // Sinon le tableau des logs est affiché{document.getElementById("LogTab").remove(); // Suppression du tableau des logslogTabAdded = false; // Variable indiquant que le tableau des logs n'est pas affiché}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Configif ( event.key === "c" ) // Si la touche relachée est "C"if ( window.location.href.includes('https://tv.sfr.fr/direct-tv/')|| window.location.href.includes('https://tv.sfr.fr/content/') ) // Si l'url est un live ou un replay ,{if ( configDivAdded == false ) // Si div config n'est pas affiché{var htmlCodeConfigDiv = '<table cellspacing=10 cellpadding=10 style="background-color:rgba(0, 0, 0, 0.7);">'; // Variable contenant le code html du tableau configif ( 'volumeStart' in localStorage ) volumeStart = localStorage.getItem('volumeStart'); // Si la variable est stockée , remplacer celle par défauthtmlCodeConfigDiv += '<tr><td><input type="range" style="vertical-align:middle;margin:2px;width:150px;"'; // Input type range pour définir les valeurs des variableshtmlCodeConfigDiv += 'id="VolumeStart" name="VolumeStart" min="0" max="100" step="5" value="' + volumeStart*100 + '"'; // La même chose en dessous pour les autres variableshtmlCodeConfigDiv += 'oninput=" this.parentElement.nextElementSibling.nextElementSibling.innerText=this.value;';htmlCodeConfigDiv += ' localStorage.setItem(\'volumeStart\',this.value/100);';htmlCodeConfigDiv += ' volumeStart = this.value*100;">';htmlCodeConfigDiv += '<td title="Volume de départ">volumeStart';htmlCodeConfigDiv += '<td>' + volumeStart*100;if ( 'volumeStep' in localStorage ) volumeStep = localStorage.getItem('volumeStep');htmlCodeConfigDiv += '<tr><td><input type="range" style="vertical-align:middle;margin:2px;width:150px;"';htmlCodeConfigDiv += 'id="VolRange" name="VolRange" min="5" max="25" step="5" value="' + volumeStep + '" ';htmlCodeConfigDiv += 'oninput=" this.parentElement.nextElementSibling.nextElementSibling.innerText=this.value; ';htmlCodeConfigDiv += ' localStorage.setItem(\'volumeStep\',this.value);';htmlCodeConfigDiv += ' volumeStep = this.value;">';htmlCodeConfigDiv += '<td title="Augmenter ou dimiuer le volume de cette valeur">volumeStep';htmlCodeConfigDiv += '<td>' + volumeStep;if ( 'volumeDelay' in localStorage ) volumeDelay = localStorage.getItem('volumeDelay');htmlCodeConfigDiv += '<tr><td><input type="range" style="vertical-align:middle;margin:2px;width:150px;"';htmlCodeConfigDiv += 'id="VolumeDelay" name="VolumeDelay" min="1" max="10" step="1" value="' + volumeDelay/1000 + '"';htmlCodeConfigDiv += 'oninput=" this.parentElement.nextElementSibling.nextElementSibling.innerText = this.value; ';htmlCodeConfigDiv += ' localStorage.setItem(\'volumeDelay\',this.value*1000);';htmlCodeConfigDiv += ' volumeDelay = this.value*1000;">';htmlCodeConfigDiv += '<td title="Délai avant effacement de l\'indicateur de volume">volumeDelay';htmlCodeConfigDiv += '<td>' + volumeDelay/1000;if ( 'inputKeysDelay' in localStorage ) inputKeysDelay = localStorage.getItem('inputKeysDelay');htmlCodeConfigDiv += '<tr><td><input type="range" style="vertical-align:middle;margin:2px;width:150px;"';htmlCodeConfigDiv += 'id="InputKeysDelay" name="InputKeysDelay" min="1" max="10" step="1" value="' + inputKeysDelay/1000 + '"';htmlCodeConfigDiv += 'oninput=" this.parentElement.nextElementSibling.nextElementSibling.innerText = this.value; ';htmlCodeConfigDiv += ' localStorage.setItem(\'inputKeysDelay\',this.value*1000);';htmlCodeConfigDiv += ' inputKeysDelay = this.value*1000;">';htmlCodeConfigDiv += '<td title="Délai pour saisir le numéro d\'une chaine">inputKeysDelay';htmlCodeConfigDiv += '<td>' + inputKeysDelay/1000;if ( 'nbLoggedErrors' in localStorage ) nbLoggedErrors = localStorage.getItem('nbLoggedErrors');htmlCodeConfigDiv += '<tr><td><input type="range" style="vertical-align:middle;margin:2px;width:150px;"';htmlCodeConfigDiv += 'id="NbLoggedErrors" name="NbLoggedErrors" min="0" max="150" step="10" value="' + nbLoggedErrors + '"';htmlCodeConfigDiv += 'oninput=" this.parentElement.nextElementSibling.nextElementSibling.innerText = this.value; ';htmlCodeConfigDiv += ' localStorage.setItem(\'nbLoggedErrors\',this.value);';htmlCodeConfigDiv += ' nbLoggedErrors = this.value;">';htmlCodeConfigDiv += '<td title="Nombre d\'erreurs conservées">nbLoggedErrors';htmlCodeConfigDiv += '<td>' + nbLoggedErrors;htmlCodeConfigDiv += '<tr><td colspan=3 id="TDFixLogs" style="text-align:center;">Cliquer ici pour fix les logs si vous réduisez le nombre <br>Les plus récents sont conservés';if ( 'imgChannelWidth' in localStorage ) imgChannelWidth = localStorage.getItem('imgChannelWidth');htmlCodeConfigDiv += '<tr><td><input type="range" style="vertical-align:middle;margin:2px;width:150px;"';htmlCodeConfigDiv += 'id="ImgChannelWidth" name="ImgChannelWidth" min="20" max="150" step="5" value="' + imgChannelWidth + '"';htmlCodeConfigDiv += 'oninput=" this.parentElement.nextElementSibling.nextElementSibling.innerText = this.value; ';htmlCodeConfigDiv += ' localStorage.setItem(\'imgChannelWidth\',this.value);';htmlCodeConfigDiv += ' imgChannelWidth = this.value;">';htmlCodeConfigDiv += '<td title="Largeur des vignettes">imgChannelWidth';htmlCodeConfigDiv += '<td>' + imgChannelWidth;if ( 'nbColumnChannelTab' in localStorage ) nbColumnChannelTab = localStorage.getItem('nbColumnChannelTab');htmlCodeConfigDiv += '<tr><td><input type="range" style="vertical-align:middle;margin:2px;width:150px;"';htmlCodeConfigDiv += 'id="NbColumnChannelTab" name="NbColumnChannelTab" min="5" max="20" step="1" value="' + nbColumnChannelTab + '"';htmlCodeConfigDiv += 'oninput=" this.parentElement.nextElementSibling.nextElementSibling.innerText = this.value; ';htmlCodeConfigDiv += ' localStorage.setItem(\'nbColumnChannelTab\',this.value);';htmlCodeConfigDiv += ' nbColumnChannelTab = this.value;">';htmlCodeConfigDiv += '<td title="Nombre de colonnes du tableau des vignettes">nbColumnChannelTab';htmlCodeConfigDiv += '<td>' + nbColumnChannelTab;if ( 'nbloopBeforeReload' in localStorage ) nbloopBeforeReload = localStorage.getItem('nbloopBeforeReload');htmlCodeConfigDiv += '<tr><td><input type="range" style="vertical-align:middle;margin:2px;width:150px;"';htmlCodeConfigDiv += 'id="NbloopBeforeReload" name="NbloopBeforeReload" min="3" max="15" step="1" value="' + nbloopBeforeReload + '"';htmlCodeConfigDiv += 'oninput=" this.parentElement.nextElementSibling.nextElementSibling.innerText = this.value; ';htmlCodeConfigDiv += ' localStorage.setItem(\'nbloopBeforeReload\',this.value);';htmlCodeConfigDiv += ' nbloopBeforeReload = this.value;">';htmlCodeConfigDiv += '<td title="Nombre de fois où un lag est détecté avant de recharger la page">nbloopBeforeReload';htmlCodeConfigDiv += '<td>' + nbloopBeforeReload;if ( 'nbloopBeforeBegin' in localStorage ) nbloopBeforeBegin = localStorage.getItem('nbloopBeforeBegin');htmlCodeConfigDiv += '<tr><td><input type="range" style="vertical-align:middle;margin:2px;width:150px;"';htmlCodeConfigDiv += 'id="NbloopBeforeBegin" name="NbloopBeforeBegin" min="1" max="15" step="1" value="' + nbloopBeforeBegin + '"';htmlCodeConfigDiv += 'oninput=" this.parentElement.nextElementSibling.nextElementSibling.innerText = this.value; ';htmlCodeConfigDiv += ' localStorage.setItem(\'nbloopBeforeBegin\',this.value);';htmlCodeConfigDiv += ' nbloopBeforeBegin = this.value;">';htmlCodeConfigDiv += '<td title="Nombre de fois où la fonction de recherche des erreurs s\'éxécute avant de prendre en compte les lags">nbloopBeforeBegin';htmlCodeConfigDiv += '<td>' + nbloopBeforeBegin;if ( 'mainLoopDelay' in localStorage ) mainLoopDelay = localStorage.getItem('mainLoopDelay');htmlCodeConfigDiv += '<tr><td><input type="range" style="vertical-align:middle;margin:2px;width:150px;"';htmlCodeConfigDiv += 'id="MainLoopDelay" name="MainLoopDelay" min="3" max="15" step="1" value="' + mainLoopDelay/1000 + '"';htmlCodeConfigDiv += 'oninput=" this.parentElement.nextElementSibling.nextElementSibling.innerText = this.value; ';htmlCodeConfigDiv += ' localStorage.setItem(\'mainLoopDelay\',this.value*1000);';htmlCodeConfigDiv += ' mainLoopDelay = this.value*1000;">';htmlCodeConfigDiv += '<td title="Délai entre deux éxécution de la fonction de recherche des erreurs , besoin de rafraîchir la page">mainLoopDelay';htmlCodeConfigDiv += '<td>' + mainLoopDelay/1000;htmlCodeConfigDiv += '<tr><td colspan=3 style="text-align:center;">Si les variables ne sont pas prises en compte <br>Fermer et ouvrir de nouveau l\'interface';var div = document.createElement("div"); // Création de l'élémentdiv.style.top = "20vh"; // Position verticale de l'élémentdiv.style.width = "100%"; // Largeur de l'élémentdiv.style.maxHeight = "70vh"; // Hauteur maximale de l'élémentdiv.style.overflowY = "auto"; // Pour scrolldiv.style.position = "fixed"; // Type de position de l'élémentdiv.style.color = "white"; // Couleur de la police du texte (blanc)div.style.fontSize = "16px"; // Taille de la police du textediv.style.zIndex = zindex2; // Mettre au premier plan l'élémentdiv.style.display = "flex"; // L'élément est flexiblediv.style.justifyContent = "center"; // Style du contenudiv.setAttribute('id', 'ConfigDiv'); // Définir un id pour retrouver l'élémentdiv.innerHTML = htmlCodeConfigDiv; // Texte de l'élémentvar fullScreenElement = document.fullscreenElement; // Quel élément est en plein écranif ( fullScreenElement != null ) // Si un élément est en plein écranfullScreenElement.insertBefore(div,fullScreenElement.firstChild); // Insérer le div avant le premier enfantelse // Pas d'élément en plein écrandocument.body.appendChild(div); // Ajouter l'élémentdocument.getElementById("TDFixLogs").onclick = function() { // Ajout d'une fonction qui conserve les logs les plus récentsvar trueNbLoggedErrors = 0;for (i = 0; i < localStorage.length; i++) // Parcourir les variables stockéesif ( localStorage.key(i).includes('ErrorLogged')) // En particulier celle ayant pour nom ErrorLoggedtrueNbLoggedErrors++;if ( nbLoggedErrors < trueNbLoggedErrors) // Si il y a plus d'erreurs stockées que la nouvelle valeur définie{for ( l=1 ; l<=nbLoggedErrors ; l++) // Remplacement des valeurs les plus anciennes{let index = l+trueNbLoggedErrors-nbLoggedErrors;localStorage.setItem('ErrorLogged'+l, localStorage.getItem('ErrorLogged'+index ) );}for ( l= Number(nbLoggedErrors) + 1; l<=trueNbLoggedErrors ; l++)// Chercher les erreurs en trop et les supprimerlocalStorage.removeItem('ErrorLogged'+l);}};configDivAdded = true; // Variable indiquant que le div config est affiché}else // Si div config est affiché{document.getElementById("ConfigDiv").remove(); // Suppression du div configconfigDivAdded = false; // Variable indiquant que le div config n'est pas affiché}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Pour afficher la chaine suivanteif ( window.location.href.includes('https://tv.sfr.fr/direct-tv/') ) // Si l'url est un liveif ( event.code === "NumpadAdd" || event.code === "ArrowRight") // Si la touche relachée est "plus" du pavé numérique ou la flèche droite{let needIndex = 0;var currentChannelNumber = window.location.href.replace('https://tv.sfr.fr/direct-tv/','').replace(";play=true", ""); // Obtenir le nombre à la fin de l'urlfor ( var i=0; i<channelsInfos2.length/dataStep; i++ ) // Parcourir le tableauif ( channelsInfos2[dataStep*i+3] == currentChannelNumber ) // Si la chaine est trouvée{let channelfound = false;for ( var j=i+1; j<channelsInfos2.length/dataStep; j++ ){if ( channelsInfos2[dataStep*j+4] == '1' ){if ( (j+1) < channelsInfos2.length/dataStep ) // Si on ne dépasse la fin du tableau{window.location.href = 'https://tv.sfr.fr/direct-tv/'+channelsInfos2[dataStep*j+3] ; // Chargement de la prochaine chainechannelfound = true;}break;}}if ( channelfound == false ){window.location.href = 'https://tv.sfr.fr/direct-tv/'+channelsInfos2[0+3] ; // Fin du tableau atteinte , chargement de la première chainebreak;}break;}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Chaine précédenteif ( window.location.href.includes('https://tv.sfr.fr/direct-tv/') ) // Si l'url est un liveif ( event.code === "NumpadSubtract" || event.code === "ArrowLeft") // Si la touche relachée est "moins" du pavé numérique ou la flèche gauche{let needIndex = 0;var currentChannelNumber = window.location.href.replace('https://tv.sfr.fr/direct-tv/','').replace(";play=true", ""); // Obtenir le nombre à la fin de l'urlfor ( var i=0; i<channelsInfos2.length/dataStep; i++ ) // Parcourir le tableauif ( channelsInfos2[dataStep*i+3] == currentChannelNumber ) // Si la chaine est trouvée{let channelfound = false;for ( var j=i-1; j>=0; j-- ){if ( channelsInfos2[dataStep*j+4] == '1' ){if ( (j) >= 0 ) // Si l'index n'est pas négatif{window.location.href = 'https://tv.sfr.fr/direct-tv/'+channelsInfos2[dataStep*j+3] ; // Chargement de la chaine précédentechannelfound = true;}break;}}if ( channelfound == false )for ( var j=channelsInfos2.length/dataStep; j>=0; j-- )if ( channelsInfos2[dataStep*j+4] == '1' ){window.location.href = 'https://tv.sfr.fr/direct-tv/'+channelsInfos2[dataStep*j+3]; // Début du tableau atteint , chargement de la dernière chainebreak;}break;}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Fonction changement de chainesif ( window.location.href.includes('https://tv.sfr.fr/direct-tv/')|| window.location.href.includes('https://tv.sfr.fr/content/') // Si l'url est un un replay|| window.location.href.includes('https://www.sfr.fr/cas/login') // Si l'url est la page de connexion)if ( event.code === "Numpad0" || event.code === "Numpad1" || event.code === "Numpad2" || event.code === "Numpad3" // Si la touche relachée est une touche du pavé numérique (0-9)|| event.code === "Numpad4" || event.code === "Numpad5" || event.code === "Numpad6"|| event.code === "Numpad7" || event.code === "Numpad8" || event.code === "Numpad9"||event.code === "Digit0" || event.code === "Digit1" || event.code === "Digit2" || event.code === "Digit3" // Si la touche relachée est un chiffre (0-9)|| event.code === "Digit4" || event.code === "Digit5" || event.code === "Digit6"|| event.code === "Digit7" || event.code === "Digit8" || event.code === "Digit9"){var divInputKeys = document.getElementById('DivInputKeys'); // Variable pour le div avec l'id "DivInputKeys"if ( typeof(divInputKeys) == 'undefined' || divInputKeys == null ) // Chercher si le div avec l'id "DivInputKeys" existe{var div = document.createElement("div"); // Création de l'élémentdiv.style.top = "1em"; // Position verticale de l'élémentdiv.style.left = "1em"; // Position horizontale de l'élémentdiv.style.background = "rgba(0, 0, 0, 0.9)"; // Opacité de l'élémentdiv.style.position = "fixed"; // Type de position de l'élémentdiv.style.color = "white"; // Couleur de la police du texte (blanc)div.style.fontSize = "1.5em"; // Taille de la police du textediv.style.textAlign = "center"; // Position du texte de l'élémentdiv.style.zIndex = zindex3; // Mettre au premier plan l'élémentdiv.style.border = "0.1em solid white"; // Encadrerdiv.style.padding = "0.3em"; // Marge intérieurediv.innerHTML = event.code.replace('Numpad','').replace('Digit',''); // Texte de l'élémentdiv.setAttribute('id', 'DivInputKeys'); // Définir un id pour retrouver l'élémentvar fullScreenElement = document.fullscreenElement; // Quel élément est en plein écranif ( fullScreenElement != null) // Si un élément est en plein écranfullScreenElement.insertBefore(div,fullScreenElement.firstChild); // Insérer le tableau avant le premier enfantelse // Pas d'élément en plein écrandocument.body.appendChild(div); // Ajouter l'élémentinputKeys = event.code.replace('Numpad','').replace('Digit',''); // Supression de Numpad ou Digit}else // Sinon le div existe et une nouvelle touche est relachée{divInputKeys.innerHTML += event.code.replace('Numpad','').replace('Digit',''); // Texte de l'élémentinputKeys += event.code.replace('Numpad','').replace('Digit',''); // Supression de Numpad}setTimeout(function () { // Fonction qui attend avant de changer la chainevar channelfound = false; // Variable définitionif ( !window.location.href.includes('https://www.sfr.fr/cas/login')) // Si ce n'est pas la page de connexion{for ( var c=0; c<channelsInfos2.length/dataStep; c++ ) // Boucleif ( inputKeys == channelsInfos2[dataStep*c+1] ) // Correspondance entrée utilisateur et canal{window.location.href = 'https://tv.sfr.fr/channel/' + inputKeys; // Chargement de la chainechannelfound = true; // La chaine a été trouvéebreak; // Casser la boucle}if ( channelfound == false ) // Si la chaine n'a pas été trouvée{divInputKeys.innerHTML= "Pas de chaine"; // Indicateur visuelsetTimeout(function () { document.getElementById('DivInputKeys').remove(); } ,inputKeysDelay) ; // Effacer l'Indicateur visuel}}if ( window.location.href.includes('https://www.sfr.fr/cas/login?service=https')) // Si c'est la page de connexion (redirection depuis une chaine tv){console.log("----- login");if ( inputKeys == "0000" ) // L'utilisateur a saisi 0000{localStorage.removeItem("myUserName"); // Effacer le nom ou l'email enregistrélocalStorage.removeItem("myPassword"); // Effacer le mot de passe enregistrédivInputKeys.innerHTML= "LocalStorage effacé"; // Indicateur visuelsetTimeout(function () { document.getElementById('DivInputKeys').remove(); } ,inputKeysDelay) ; // Effacer l'Indicateur visuel}if ( inputKeys == "0001" && prompted == false ) // L'utilisateur a saisi 0001{prompted = true; // Variable sur vraivar getInputUsername = prompt("Enter your username or your email:"); // Afficher une invite de saisie pour le nom ou l'emaillocalStorage.setItem("myUserName",getInputUsername); // Enregistrervar getInputPassword = prompt("Enter your password :"); // Afficher une invite de saisie pour le mot de passelocalStorage.setItem("myPassword",getInputPassword); // Enregistrer//prompted = false; // Variable sur faux}if ( inputKeys == "0002" ) // L'utilisateur a saisi 0002{var textFromLocalStorage = ""; // Variable définitiontextFromLocalStorage += localStorage.getItem("myUserName"); // Variable , ajouter le nom ou l'emailtextFromLocalStorage += ' / '; // VariabletextFromLocalStorage += localStorage.getItem("myPassword"); // Variable , ajouter le mot de passedivInputKeys.innerHTML= textFromLocalStorage; // Afficher les infos utilisateur//inputKeys = "";setTimeout(function () { document.getElementById('DivInputKeys').remove(); } ,inputKeysDelay) ; // Effacer l'Indicateur visuel}}} ,inputKeysDelay) ;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Fonction plein écran ou fenêtreif ( window.location.href.includes('https://tv.sfr.fr/direct-tv/')|| window.location.href.includes('https://tv.sfr.fr/content/') ) // Si l'url est un live ou un replayif ( event.code === "NumpadDecimal" || event.code === "ShiftLeft") // Si la touche relachée est "." du pavé numérique ou maj gauche{var fullScreenElement = document.fullscreenElement; // Quel élément est en plein écranif ( fullScreenElement == null) // Si aucun élément est en plein écran{//var testElement = document.getElementsByClassName("shaka-container shaka-video-container")[0]; // Trouver le conteneur vidéovar testElement = document.getElementById("shaka-player-video");//var testElement = document.getElementsByClassName("player-container")[0];// var testElement = document.getElementsByTagName("web-player")[0]if ( typeof(testElement) != 'undefined' || testElement != null )testElement.requestFullscreen(); // Passer en plein écran le conteneur vidéo}elsedocument.exitFullscreen(); // Sinon sortir du plein écran}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Fonction pour diminuer le sonif ( window.location.href.includes('https://tv.sfr.fr/direct-tv/')|| window.location.href.includes('https://tv.sfr.fr/content/') ) // Si l'url est un live ou un replayif ( event.code === "ArrowDown" ) // Si la touche relachée est "bas"{if ( 'volumeStep' in localStorage ) volumeStep = localStorage.getItem('volumeStep'); // Si volumeStep existe dans localStorage , assignation d'une valeurvar elementShakaPlayerVideo = document.getElementById("shaka-player-video"); // Trouver l'élément vidéovar videoVolume = elementShakaPlayerVideo.volume; // Trouver le volume de l'élément vidéo (0-1)if ( videoVolume - volumeStep/100 > 0 ) // Si le nouveau volume est supérieur à zéro{elementShakaPlayerVideo.volume = (videoVolume-volumeStep/100).toFixed(2); // Diminuer le volume}elseelementShakaPlayerVideo.volume = 0; // Sinon mettre le volume à zérovar divVolume = document.getElementById('DivVolume'); // Variable pour le div avec l'id "DivVolume"if ( typeof(divVolume) == 'undefined' || divVolume == null ) // Chercher si le div avec l'id "DivVolume" existe{var div = document.createElement("div"); // Création de l'élémentdiv.style.top = "3.3em"; // Position verticale de l'élémentdiv.style.left = "1em"; // Position horizontale de l'élémentdiv.style.background = "rgba(0, 0, 0, 0.9)"; // Opacité de l'élémentdiv.style.position = "fixed"; // Type de position de l'élémentdiv.style.color = "white"; // Couleur de la police du texte (blanc)div.style.fontSize = "1.5em"; // Taille de la police du textediv.style.textAlign = "center"; // Position du texte de l'élémentdiv.style.zIndex = zindex3; // Mettre au premier plan l'élémentdiv.style.border = "0.1em solid white"; // Encadrerdiv.style.padding = "0.3em"; // Marge intérieurediv.innerHTML = "Vol: " + Math.trunc(100*elementShakaPlayerVideo.volume) + "%"; // Texte de l'élémentdiv.setAttribute('id', 'DivVolume'); // Définir un id pour retrouver l'élémentvar fullScreenElement = document.fullscreenElement; // Quel élément est en plein écranif ( fullScreenElement != null) // Si un élément est en plein écranfullScreenElement.insertBefore(div,fullScreenElement.firstChild); // Insérer le tableau avant le premier enfantelse // Pas d'élément en plein écrandocument.body.appendChild(div); // Ajouter l'élémentif ( 'volumeDelay' in localStorage ) volumeDelay = localStorage.getItem('volumeDelay');setTimeout(function () { document.getElementById('DivVolume').remove(); } ,volumeDelay); // Fonction qui attend avant d'effacer l'indicateur de volume}else // Sinon le div existedivVolume.innerHTML = "Vol: " + Math.trunc(100*elementShakaPlayerVideo.volume) + "%"; // Texte de l'élément}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Fonction pour augmenter le sonif ( window.location.href.includes('https://tv.sfr.fr/direct-tv/')|| window.location.href.includes('https://tv.sfr.fr/content/') ) // Si l'url est un live ou un replayif ( event.code === "ArrowUp" ) // Si la touche relachée est "haut"{if ( 'volumeStep' in localStorage ) volumeStep = localStorage.getItem('volumeStep'); // Si volumeStep existe dans localStorage , assignation d'une valeurvar elementShakaPlayerVideo = document.getElementById("shaka-player-video"); // Trouver l'élément vidéovar videoVolume = elementShakaPlayerVideo.volume; // Trouver le volume de l'élément vidéo (0-1)if ( videoVolume + volumeStep/100 > 1 ) // Si le nouveau volume est supérieur à unelementShakaPlayerVideo.volume = 1; // Mettre le volume à 100%else{elementShakaPlayerVideo.volume = (videoVolume+volumeStep/100).toFixed(2); // Augmenter le volume}var divVolume = document.getElementById('DivVolume'); // Variable pour le div avec l'id "DivVolume"if ( typeof(divVolume) == 'undefined' || divVolume == null ) // Chercher si le div avec l'id "DivVolume" existe{var div = document.createElement("div"); // Création de l'élémentdiv.style.top = "3.3em"; // Position verticale de l'élémentdiv.style.left = "1em"; // Position horizontale de l'élémentdiv.style.background = "rgba(0, 0, 0, 0.9)"; // Opacité de l'élémentdiv.style.position = "fixed"; // Type de position de l'élémentdiv.style.color = "white"; // Couleur de la police du texte (blanc)div.style.fontSize = "1.5em"; // Taille de la police du textediv.style.textAlign = "center"; // Position du texte de l'élémentdiv.style.zIndex = zindex3; // Mettre au premier plan l'élémentdiv.style.border = "0.1em solid white"; // Encadrerdiv.style.padding = "0.3em"; // Marge intérieurediv.innerHTML = "Vol: " + Math.trunc(100*elementShakaPlayerVideo.volume) + "%"; // Texte de l'élémentdiv.setAttribute('id', 'DivVolume'); // Définir un id pour retrouver l'élémentvar fullScreenElement = document.fullscreenElement; // Quel élément est en plein écranif ( fullScreenElement != null) // Si un élément est en plein écranfullScreenElement.insertBefore(div,fullScreenElement.firstChild); // Insérer le tableau avant le premier enfantelse // Pas d'élément en plein écrandocument.body.appendChild(div); // Ajouter l'élémentif ( 'volumeDelay' in localStorage ) volumeDelay = localStorage.getItem('volumeDelay');setTimeout(function () { document.getElementById('DivVolume').remove(); } ,volumeDelay); // Fonction qui attend avant d'effacer l'indicateur de volume}else // Sinon le div existedivVolume.innerHTML = "Vol: " + Math.trunc(100*elementShakaPlayerVideo.volume) + "%"; // Texte de l'élément}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////function myLog(error) // Fonction qui me permet d'enregistrer les erreurs{ // Au rechargement la console s'effacelet d = new Date(); // Datelet textDate = d.toLocaleDateString()+' '+d.toLocaleTimeString(); // Datelet currentChannelUrl = window.location.href.replace('https://tv.sfr.fr/direct-tv/','').replace(";play=true", ""); // Urllet currentChannelName = " "; // Nomlet currentChannelNumber = ""; // Canalfor ( var c=0; c<channelsInfos2.length/dataStep; c++ ) // Boucleif ( currentChannelUrl == channelsInfos2[dataStep*c+3] ) // Chercher Url{currentChannelName = channelsInfos2[dataStep*c+0] ;currentChannelNumber = channelsInfos2[dataStep*c+1] ;break; // Casser la boucle}if ( window.location.href.includes('https://tv.sfr.fr/?state') ) // Cas particulier de l'url{currentChannelUrl = "_"; // VariablecurrentChannelName = "_"; // Variable}let myError = "<td>"+textDate+"<td>"+currentChannelName+"<td>"+currentChannelNumber+"<td>"+error; // Création du code pour une rangée du tableau htmllet needLogRotation = 1; // Variable définissant la rotation des logsif ( 'nbLoggedErrors' in localStorage ) nbLoggedErrors = localStorage.getItem('nbLoggedErrors'); // Si la variable est stockée , remplacer celle par défautfor ( l=1 ; l<=nbLoggedErrors; l++) // Boucleif ( !('ErrorLogged'+l in localStorage)) // Si pas d'erreur enregistrée sur cet index{localStorage.setItem('ErrorLogged'+l,myError); // Log de l'erreurneedLogRotation = 0; // Pas besoin de faire une rotation des logsbreak; // Casser la boucle}if ( needLogRotation == 1 ) // Si besoin de faire une rotation des logs{for ( l=1 ; l<nbLoggedErrors ; l++) // Boucle //localStorage.setItem('ErrorLogged'+l, localStorage.getItem('ErrorLogged'+(l+1)) ); // l'erreur d'index 2 remplave celle en index 1 ...localStorage.setItem('ErrorLogged'+nbLoggedErrors,myError); // Log de la dernière erreur}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////function searchErrorFunc() // Fonction qui contrôle l'apparition des erreurs{// createDivVideoState(); // Afficher l'état du lecteur vidéowindow.document.body.addEventListener('keyup', mykeyupFunc); // Gestion des touchesvar connectState = false;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////if ( !window.location.href.includes('https://www.sfr.fr/cas/login?service=https') )if ( document.getElementsByTagName("gen8-profile").length > 0 ){if ( document.getElementsByTagName("gen8-profile")[0].getAttribute("pn") == "Se connecter" ){myLog("Se connecter");document.getElementsByTagName("gen8-profile")[0].children[0].click();}else connectState = true;}else{myLog("No profile"); // Log FonctionsetTimeout( () => { location.reload(); },1000);}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////if ( window.location.href.includes('https://www.sfr.fr/cas/login?service=https')) // Si c'est une redirection vers la connexion ( 1ère visite du site , session expirée ){if ( 'myUserName' in localStorage && 'myPassword' in localStorage ){if ( document.getElementById("username").getAttribute("type") != "hidden" )document.getElementById("username").value = localStorage.getItem('myUserName'); // Remplir le mail de l'utilisateurdocument.getElementById("password").value = localStorage.getItem('myPassword'); // Remplir le mot de passesetTimeout(function () { document.getElementById("identifier").click(); } ,1500) ; // Attendre x secondes et simuler l'appui sur le bouton}}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*var Overlay = document.getElementsByClassName("cdk-overlay-container force"); // Tableau pointant vers les éléments ayant pour classes 'cdk-overlay-container' et 'force'if ( Overlay.length > 0 ){myLog(document.querySelector(".cdk-overlay-container.force web-modal-header").textContent.trim()); // Texte du '<web-modal-header' (enfant de l'overlay à deux classes)setTimeout( () => { location.reload(); },2000);}//else console.log("no overlay");*/var Overlay = document.getElementsByClassName("cdk-overlay-backdrop app-modal-backdrop cdk-overlay-backdrop-showing"); // Tableau pointant vers l'overlayif ( Overlay.length > 0 ){if ( document.querySelector(".cdk-overlay-backdrop.app-modal-backdrop.cdk-overlay-backdrop-showing web-modal-header") !== null )myLog(document.querySelector(".cdk-overlay-backdrop.app-modal-backdrop.cdk-overlay-backdrop-showing web-modal-header").textContent.trim()); // Texte du '<web-modal-header' (enfant de l'overlay à deux classes)if ( document.querySelector(".cdk-overlay-backdrop.app-modal-backdrop.cdk-overlay-backdrop-showing .modal__title") !== null){myLog(document.querySelector(".cdk-overlay-backdrop.app-modal-backdrop.cdk-overlay-backdrop-showing .modal__title").textContent.trim()); // Texte du '<div class="modal__title"' (enfant de l'overlay à deux classes)if ( document.querySelector(".cdk-overlay-backdrop.app-modal-backdrop.cdk-overlay-backdrop-showing .modal__title").textContent.trim() == "Session expirée" )sessionExpired == true;}setTimeout( () => { location.reload(); },1000);}/*cdk-overlay-backdrop app-modal-backdrop cdk-overlay-backdrop-showing-> div class="modal__title">Session expirée</div>-> <web-modal-header ... erreur XXX*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////if ( connectState == true ) // Si l'utilisateur est connectéif ( window.location.href.includes('https://tv.sfr.fr/content/')|| window.location.href.includes('https://tv.sfr.fr/direct-tv/') // Si l'url est un live ou un replay){if ( oldUrl != window.location.href && oldUrl != "") // Fix lors de l'utilisation de l'interface utilsateur originale (les chaines)FirstTimeScriptIsLoaded = true;if ( FirstTimeScriptIsLoaded == true ) // Si la variable est définie sur vrai{oldUrl = window.location.href; // Fix lors de l'utilisation de l'interface utilsateur originale (les chaines)createRedDivFunc(); // Appel de la fonction qui crée le bandeau rougeFirstTimeScriptIsLoaded = false;window.addEventListener("keydown", // Désactiver scroll clavier (besoin pour le volume)function(e) { if ( ["Space","ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].indexOf(e.code) > -1 ) e.preventDefault(); }, false);mainLoopStartTime = Date.now(); // Timestamp (nb secondes depuis le 01/01/70) de la 1ère exécutionvideo = document.getElementById("shaka-player-video"); //document.querySelector('video'); // Trouver le lecteurif ( video !== null) // Si le lecteur est trouvé{//console.log("video");video.addEventListener('progress', () => { lastTimeVideoEventProgressEvent = Date.now(); }); // Gestion des événements (Le lecteur reçoit des données) Récupération du timestampvideo.addEventListener('play' , () => { videoPlaying = 2; }); // Gestion des événements (Le lecteur est en cours de lecture)video.addEventListener('pause' , () => { videoPlaying = 1; }); // Gestion des événements (Le lecteur est en pause)video.addEventListener('ended' , () => { videoPlaying = 0; }); // Gestion des événements (Le film est fini)if ( 'volumeStart' in localStorage ) volumeStart = localStorage.getItem('volumeStart'); // Si la variable est stockée , remplacer celle par défautvideo.volume = volumeStart; // Définir le volume du lecteur}if ( 'nbLoggedErrors' in localStorage ) nbLoggedErrors = localStorage.getItem('nbLoggedErrors'); // Si la variable est stockée , remplacer celle par défaut}if ( videoPlaying == 1 ){mainLoopStartTime = Date.now();lastTimeVideoEventProgressEvent = Date.now();}if ( 'nbloopBeforeBegin' in localStorage ) nbloopBeforeBegin = localStorage.getItem('nbloopBeforeBegin'); // Si la variable est stockée , remplacer celle par défautif ( 'nbloopBeforeReload' in localStorage ) nbloopBeforeReload = localStorage.getItem('nbloopBeforeReload'); // Si la variable est stockée , remplacer celle par défaut// Cette partie sert à regarder les dates où le lecteur envoye l'événement "progress"if ( debugMode != 1&& videoPlaying == 2 // Le lecteur est en cours de lecture , même figé ? (pas en pause ou pas atteint la fin)&& sessionExpired == false // Une session expirée -> connexion&& lastTimeVideoEventProgressEvent != 0 // Après une session expirée , sans auto-login , le lecteur ne peut pas démarrer&& Date.now() > lastTimeVideoEventProgressEvent + nbloopBeforeReload*mainLoopDelay // Durée écoulée ?&& Date.now() > mainLoopStartTime + nbloopBeforeBegin*mainLoopDelay ) // Durée écoulée ? (pour les vieux coucous qui chargent lentement les pages){console.log('No progress since 3 loops , do something'); // Message consoleif ( document.getElementsByClassName("modal__title")[0] )myLog("No progress " + document.getElementsByClassName("modal__title")[0].textContent ); // Log FonctionelsemyLog("No progress (No error)"); // Log FonctionsetTimeout( () => { location.reload(); },1000); // Simple rechargement !, le lecteur semble gelé}else{//console.log('progress ' + lastTimeVideoEventProgressEvent);}}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////if ( 'myChannelConfigStored' in localStorage ) // Sauvegarde locale trouvée ?{// localStorage.removeItem("myChannelConfigStored");// 2025/02 myChannelConfigStored: ffe9fe001025af420080860000c00440000000000000000000000000000000000000000000000000000000000000000_00var myChannelConfigStored = localStorage.getItem("myChannelConfigStored"); // Déclaration de variablevar myChannelConfigStoredTemp =""; // Déclaration de variablevar myChannelConfigStoredReverse =""; // Déclaration de variablevar zIndex = myChannelConfigStored.indexOf("_"); // Déclaration de variable , chercher le _if ( zIndex != '-1' ) myChannelConfigStoredTemp += ''+myChannelConfigStored.substr(0,zIndex); // '_' trouvé , découpage de la configelse myChannelConfigStoredTemp += ''+myChannelConfigStored;for ( h=0; h<myChannelConfigStoredTemp.length; h++) // Boucle{let temp = parseInt(myChannelConfigStoredTemp[h], 16).toString(2); // Passage de l'héxadécimal au binaireif ( temp.length == 1 ) temp = ''+'000'+ temp; // Concaténationif ( temp.length == 2 ) temp = ''+ '00'+ temp; // Concaténationif ( temp.length == 3 ) temp = ''+ '0'+ temp; // ConcaténationmyChannelConfigStoredReverse += ''+temp; // Concaténation}if ( zIndex != '-1' ) myChannelConfigStoredReverse += ''+myChannelConfigStored.substr(zIndex+1); // Ajout des dernières chaines (max 3 car 4 -> valeur hex)for ( var u=0; u<channelsInfos2.length/dataStep; u++ ) // BouclechannelsInfos2[dataStep*u+4] = myChannelConfigStoredReverse.charAt(u); // Modification des valeurs du tableau avec la sauvegarde locale}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////if ( 'mainLoopDelay' in localStorage ) mainLoopDelay = localStorage.getItem('mainLoopDelay'); // Si la variable est stockée , remplacer celle par défaut////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////setInterval(searchErrorFunc, mainLoopDelay); // Eexécution sz la vérification toutes les 'mainloopDelay' ms/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*if ( window.location.href.includes('https://tv.sfr.fr/direct-tv/'))if ( event.key === "z" ){var miniguide = document.getElementsByTagName("gen8-miniguide-item");for ( var i=0; i< miniguide.length; i++ ){var channelNameIndex = miniguide[i].children[1].children[0].title.lastIndexOf("sur ");var channelName = miniguide[i].children[1].children[0].title.substring(channelNameIndex+4);var channelNumber = miniguide[i].children[0].children[0].innerHTML.replace(".","");var channelUrl = miniguide[i].children[1].children[0].children[0].href.replace("https://tv.sfr.fr/direct-tv/","");var channelImg = miniguide[i].children[1].children[0].children[0].children[0].children[1].children[0].src;var canShow = "1";if ( miniguide[i].children[0].children[1] )canShow = "0";var temp = 'channelsInfos2.push(\''+channelName+'\',\''+channelNumber+'\',\''+channelImg+'\',\''+channelUrl+'\',\''+canShow+'\'); ';var isPresent = 0;for ( var j=0; j< channelsInfos3.length; j++ )if ( channelsInfos3[j] == temp )isPresent = 1;if ( isPresent == 0)channelsInfos3.push(temp);}console.log( channelsInfos3.length );}////////////////////////////////////////////////////////////////////////////////////////////if ( window.location.href.includes('https://tv.sfr.fr/direct-tv/'))if ( event.key === "e" ){console.log( channelsInfos3 );}////////////////////////////////////////////////////////////////////////////////////////////if ( window.location.href.includes('https://tv.sfr.fr/direct-tv/'))if ( event.key === "r" ){var channelsInfos4 = [];for ( var i=0; i< channelsInfos2.length/dataStep; i++ )for ( var j=0; j< channelsInfos3.length/2; j++ )if ( channelsInfos2[i*dataStep+1] == channelsInfos3[j*2] ){channelsInfos4.push('channelsInfos2.push(\''+channelsInfos2[i*dataStep+0]+'\',\''+channelsInfos2[i*dataStep+1]+'\',\''+channelsInfos2[i*dataStep+2]+'\',\''+channelsInfos2[i*dataStep+3]+'\',\''+channelsInfos2[i*dataStep+4]+'\',\''+channelsInfos2[i*dataStep+5]+'\',\''+channelsInfos3[j*2+1]+'\'); ');}console.log( channelsInfos4 );}////////////////////////////////////////////////////////////////////////////////////////////*/