From ce0d9f70548d47b565a160d870b0002449e014ad Mon Sep 17 00:00:00 2001 From: hama3254 <52826614+hama3254@users.noreply.github.com> Date: Fri, 2 Dec 2022 18:43:43 +0100 Subject: [PATCH] Merge WebView2 version Merge WebView2 version --- .vs/Crunchyroll Downloader/v17/.suo | Bin 208896 -> 168448 bytes CRD-addon/background.js | 32 - CRD-addon/icons/icon-128.png | Bin 3904 -> 0 bytes CRD-addon/icons/icon-20.png | Bin 793 -> 0 bytes CRD-addon/icons/icon-48.png | Bin 1706 -> 0 bytes CRD-addon/images/submit.png | Bin 3695 -> 0 bytes CRD-addon/inject.js | 34 - CRD-addon/inject_beta.js | 10 - CRD-addon/inject_funimation.js | 34 - CRD-addon/inject_funimation_new.js | 11 - CRD-addon/manifest.json | 42 - CRD-addon/popup.css | 30 - CRD-addon/popup.html | 37 - CRD-addon/popup.js | 583 ----- Crunchyroll Downloader/Anime_Add.Designer.vb | 7 +- Crunchyroll Downloader/Anime_Add.resx | 2 +- Crunchyroll Downloader/Anime_Add.vb | 392 ++-- Crunchyroll Downloader/App.config | 10 +- ...rowser.Designer.vb => Browser.Designer.vb} | 59 +- .../{CefSharp_Browser.resx => Browser.resx} | 3 + Crunchyroll Downloader/Browser.vb | 263 +++ .../CRD_List_Item.Designer.vb | 2 +- Crunchyroll Downloader/CRD_List_Item.vb | 24 +- Crunchyroll Downloader/CefSharp_Browser.vb | 361 --- .../Crunchyroll Downloader.vbproj | 58 +- Crunchyroll Downloader/Debug_Mode.Designer.vb | 123 - Crunchyroll Downloader/Debug_Mode.resx | 120 - Crunchyroll Downloader/Debug_Mode.vb | 88 - Crunchyroll Downloader/Main.designer.vb | 20 +- Crunchyroll Downloader/Main.resx | 311 ++- Crunchyroll Downloader/Main.vb | 482 ++-- Crunchyroll Downloader/MaxPath.resx | 120 - .../My Project/AssemblyInfo.vb | 4 +- .../My Project/Resources.Designer.vb | 2025 ++++++++--------- .../My Project/Resources.resx | 2 +- Crunchyroll Downloader/Subfolder.vb | 52 +- .../einstellungen.Designer.vb | 8 +- Crunchyroll Downloader/einstellungen.vb | 8 +- .../network_scan.Designer.vb | 175 -- Crunchyroll Downloader/network_scan.resx | 128 -- Crunchyroll Downloader/network_scan.vb | 512 ----- Crunchyroll Downloader/packages.config | 5 +- item.png | Bin 50743 -> 0 bytes main.png | Bin 42391 -> 0 bytes 44 files changed, 2009 insertions(+), 4168 deletions(-) delete mode 100644 CRD-addon/background.js delete mode 100644 CRD-addon/icons/icon-128.png delete mode 100644 CRD-addon/icons/icon-20.png delete mode 100644 CRD-addon/icons/icon-48.png delete mode 100644 CRD-addon/images/submit.png delete mode 100644 CRD-addon/inject.js delete mode 100644 CRD-addon/inject_beta.js delete mode 100644 CRD-addon/inject_funimation.js delete mode 100644 CRD-addon/inject_funimation_new.js delete mode 100644 CRD-addon/manifest.json delete mode 100644 CRD-addon/popup.css delete mode 100644 CRD-addon/popup.html delete mode 100644 CRD-addon/popup.js rename Crunchyroll Downloader/{CefSharp_Browser.Designer.vb => Browser.Designer.vb} (68%) rename Crunchyroll Downloader/{CefSharp_Browser.resx => Browser.resx} (96%) create mode 100644 Crunchyroll Downloader/Browser.vb delete mode 100644 Crunchyroll Downloader/CefSharp_Browser.vb delete mode 100644 Crunchyroll Downloader/Debug_Mode.Designer.vb delete mode 100644 Crunchyroll Downloader/Debug_Mode.resx delete mode 100644 Crunchyroll Downloader/Debug_Mode.vb delete mode 100644 Crunchyroll Downloader/MaxPath.resx delete mode 100644 Crunchyroll Downloader/network_scan.Designer.vb delete mode 100644 Crunchyroll Downloader/network_scan.resx delete mode 100644 Crunchyroll Downloader/network_scan.vb delete mode 100644 item.png delete mode 100644 main.png diff --git a/.vs/Crunchyroll Downloader/v17/.suo b/.vs/Crunchyroll Downloader/v17/.suo index b13060cc0bf6a0dc57ccc7d3c6ad5fb668adf2e4..862e801e294708bf7f19dc259a26bee6fda089b0 100644 GIT binary patch literal 168448 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 { - browser.test.log(`onHeadersReceived ${JSON.stringify(details)}\n`); - if (!details.fromCache) { - //console.log("not cached"); - browser.test.sendMessage("statusCode", details.statusCode); - const mime = details.responseHeaders.find(header => { - return header.value && header.name === "Server"; - }); - if (mime) { - //console.log(mime.value); - browser.runtime.sendMessage({ - Server: mime.value - }); - - } else { - details.responseHeaders.push({ - name: "Content-Security-Policy", - value: "upgrade-insecure-requests", - }); - } - - return { - responseHeaders: details.responseHeaders, - }; - } else { - console.log("cached"); - } -}, { - urls: ["http://127.0.0.1/*"], -}, - ["blocking", "responseHeaders"]); diff --git a/CRD-addon/icons/icon-128.png b/CRD-addon/icons/icon-128.png deleted file mode 100644 index 7e9eb886e6908f15fa0754e5c8bd081ee890082b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3904 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 JFITgD`af#;M4JEr diff --git a/CRD-addon/icons/icon-20.png b/CRD-addon/icons/icon-20.png deleted file mode 100644 index 012e05745cdfc995f70cc090864da8cbba0e2ae3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 793 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 A`Tzg` diff --git a/CRD-addon/images/submit.png b/CRD-addon/images/submit.png deleted file mode 100644 index 0c6adb8474fb44786f026554f20a3b4d8cccc5dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3695 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 - - - - - CR Unblocker plugin popup - - - - -
- -
- - - - - - - - - - - Enter the port or start the Desktop application - - -
- -
- - - diff --git a/CRD-addon/popup.js b/CRD-addon/popup.js deleted file mode 100644 index 6d9d6f5..0000000 --- a/CRD-addon/popup.js +++ /dev/null @@ -1,583 +0,0 @@ -var Port; -var FunCookie; -document.getElementById("btn_add").hidden = true; -document.getElementById("btn_enable_select").hidden = true; -document.getElementById("btn_add_mass").hidden = true; -document.getElementById("btn_select_all").hidden = true; -document.getElementById("btn_select_none").hidden = true; -document.getElementById("btn_enable_funimation_select").hidden = true; -document.getElementById("btn_add_funimation").hidden = true; -document.getElementById("btn_add_mass_funimation").hidden = true; -document.getElementById("btn_add_AoD").hidden = true; - -browser.storage.local.get("CRD_Port") -.then(gotPort, NoPort); - -function getServerValue(request, sender, sendResponse) { - if (request.Server == "CRD 1.0") { - document.getElementById("CRD-Webserver").hidden = false; - document.getElementById("txtOutput").remove(); - document.getElementById("txtInput").hidden = true; - document.getElementById("btn_set_port").hidden = true; - browser.tabs.query({ - currentWindow: true, - active: true - }).then((tabs) => { - - let tab = tabs[0]; // Safe to assume there will only be one resultconsole.log(tab.url); - console.log(tab.url); - if (tab.url.includes('crunchyroll.com')) { - if (tab.url.includes('beta.crunchyroll.com')) { - var crunchyroll = browser.tabs.executeScript({ - code: 'document.getElementsByClassName("c-playable-card__link")[0].href;' - }); - - crunchyroll.then(onExecuted, onError); - - } else { - - var crunchyroll = browser.tabs.executeScript({ - code: 'document.getElementsByClassName("episode")[0].href;' - }); - - crunchyroll.then(onExecuted, onError); - } - - } else if (tab.url.includes('funimation.com')) { - - var funimation = browser.tabs.executeScript({ - - code: 'document.getElementsByClassName("trackVideo")[0].href' - }); - funimation.then(FunimationSuccess, FunimationOldNotFound); - } else if (tab.url.includes('anime-on-demand.de/anime/')) { - - document.getElementById("btn_add").hidden = true; - document.getElementById("btn_enable_select").hidden = true; - document.getElementById("btn_add_mass").hidden = true; - document.getElementById("btn_select_all").hidden = true; - document.getElementById("btn_select_none").hidden = true; - document.getElementById("btn_enable_funimation_select").hidden = true; - document.getElementById("btn_add_funimation").hidden = true; - document.getElementById("btn_add_AoD").hidden = true; //false if implemented - - } else { - - document.getElementById("btn_add").hidden = true; - document.getElementById("btn_enable_select").hidden = true; - document.getElementById("btn_add_mass").hidden = true; - document.getElementById("btn_select_all").hidden = true; - document.getElementById("btn_select_none").hidden = true; - document.getElementById("btn_enable_funimation_select").hidden = true; - document.getElementById("btn_add_funimation").hidden = true; - document.getElementById("btn_add_AoD").hidden = true; - } - }, console.error) - } else {} - -} -browser.runtime.onMessage.addListener(getServerValue); - -function setItem() { - console.log("OK"); -} -function notsetItem() { - console.log("Not OK"); -} - -function gotPort(result) { - try { - onStartup(result.CRD_Port.value); - console.log("Port: " + result.CRD_Port.value) - } catch (e) { - onStartup(80); - console.log("no port") - } - -} - -function NoPort(result) { - onStartup(80); - console.log("no port") -} - -function onStartup(result) { - Port = result; - var ifrm = document.createElement("iframe"); - ifrm.src = "http://127.0.0.1:" + Port; - ifrm.style = "border:0px solid black;"; - ifrm.style.width = "760px"; - ifrm.style.height = "320px"; - ifrm.id = "CRD-Webserver"; - ifrm.hidden = true; - document.body.appendChild(ifrm); - -} - -document.getElementById('btn_set_port').addEventListener('click', () => { - let CRD_Port = { - value: document.getElementById('txtInput').value - } - - browser.storage.local.set({ - CRD_Port - }) - .then(setItem, notsetItem); - - window.close(); -}); - -document.getElementById('btn_add_AoD').addEventListener('click', () => { - //browser.cookies.getAllCookieStores().then((cookie) => { - // browser.cookies.getAll({ - // name: "_aod_session" - // }).then((cookie) => { - //console.log(cookie) - - //}, console.error) - - var cookies = {}; - - cookies.all = url => new Promise(resolve => chrome.cookies.getAll({ - url - }, resolve)); - - console.log(cookies) -}); - -document.getElementById('btn_enable_select').addEventListener('click', () => { - - browser.tabs.query({ - currentWindow: true, - active: true - }).then((tabs) => { - - let tab = tabs[0]; // Safe to assume there will only be one resultconsole.log(tab.url); - console.log(tab.url); - - if (tab.url.includes('beta.crunchyroll.com')) { - - let executing = browser.tabs.executeScript({ - file: "inject_beta.js" - }); - executing.then(OnChange); - - } else { - - browser.tabs.executeScript({ - code: 'var script=document.createElement("script");script.type="text/javascript",script.src="http://127.0.0.1:' + Port + '/inject.js",document.head.appendChild(script);' - }); //load script from local CRD Server included in https://github.com/hama3254/Crunchyroll-Downloader-v3.0 - - document.getElementById("btn_add_mass").hidden = false; - document.getElementById("btn_select_all").hidden = false; - document.getElementById("btn_select_none").hidden = false; - document.getElementById("btn_enable_select").hidden = true; - document.getElementById("btn_add").hidden = true; - document.getElementById("btn_enable_funimation_select").hidden = true; - document.getElementById("btn_add_funimation").hidden = true; - document.getElementById("btn_add_AoD").hidden = true; - - } - }, console.error) -}); - -function OnChange(result) { - - window.close() -} - -document.getElementById('btn_select_all').addEventListener('click', () => { - browser.tabs.query({ - currentWindow: true, - active: true - }).then((tabs) => { - - let tab = tabs[0]; - if (tab.url.includes('beta.crunchyroll.com')) { - - browser.tabs.executeScript({ - code: 'var i,episodeCount=document.getElementsByClassName("c-playable-card__link").length;for(i=0;i { - browser.tabs.query({ - currentWindow: true, - active: true - }).then((tabs) => { - - let tab = tabs[0]; - if (tab.url.includes('beta.crunchyroll.com')) { - - browser.tabs.executeScript({ - code: 'var i,episodeCount=document.getElementsByClassName("c-playable-card__link").length;for(i=0;i { - - browser.tabs.query({ - currentWindow: true, - active: true - }).then((tabs) => { - - let tab = tabs[0]; - if (tab.url.includes('beta.crunchyroll.com')) { - - - add_beta_ok(tab.url) - - } else if (tab.url.includes('crunchyroll.com')) { - - var add_one = browser.tabs.executeScript({ - code: "document.getElementsByClassName('no-js')[0].innerHTML;" - }); - add_one.then(add_one_ok, add_one_error); - - } else if (tab.url.includes('funimation.com')) { - - browser.tabs.executeScript({ - code: 'var i,episodeCount=document.getElementsByClassName("fullEpisodeThumbs").length;for(i=0;i { - - var add_fun = browser.tabs.executeScript({ - code: "document.cookie" //"document.getElementsByClassName('show-details')[0].innerHTML;" - }); - add_fun.then(add_fun_ok, add_one_error); - -}); - -document.getElementById('btn_add_mass').addEventListener('click', () => { - - var add_mass = browser.tabs.executeScript({ - code: 'var i,URLList="";for(i=0;i { - - var add_mass = browser.tabs.executeScript({ - code: 'var i,URLList="";for(i=0;i { - let tab = tabs[0]; // Safe to assume there will only be one resultconsole.log(tab.url); - console.log(tab.url); - - document.getElementById("btn_add_funimation").disabled = true; - document.getElementById("btn_add_funimation").style.background = "#c9c9c9" - - var xhttp = new XMLHttpRequest(); - xhttp.open("POST", "http://127.0.0.1:" + Port + "/post", true); - xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); - xhttp.send("FunimationURL=" + tab.url + "&FunimationCookie=" + result); - - setTimeout(function () { - document.getElementById("btn_add_funimation").style.background = "#ff8000" - }, 10000); - setTimeout(function () { - document.getElementById("btn_add_funimation").disabled = false; - }, 10000); - - }, console.error) -} - -function add_one_ok(result) { - - document.getElementById("btn_add").disabled = true; - document.getElementById("btn_add").style.background = "#c9c9c9" - - var xhttp = new XMLHttpRequest(); - xhttp.open("POST", "http://127.0.0.1:" + Port + "/post", true); - xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); - xhttp.send("HTMLSingle=" + result); - - setTimeout(function () { - document.getElementById("btn_add").style.background = "#ff8000" - }, 10000); - setTimeout(function () { - document.getElementById("btn_add").disabled = false; - }, 10000); - -} - -function add_one_error(error) { - console.log(`Error: ${error}`); -} -function add_mass_ok(result) { - - document.getElementById("btn_add_mass").disabled = true; - document.getElementById("btn_add_mass").style.background = "#c9c9c9" - - var xhttp = new XMLHttpRequest(); - xhttp.open("POST", "http://127.0.0.1:" + Port + "/post", true); - xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); - xhttp.send("HTMLMass=" + result); - - setTimeout(function () { - document.getElementById("btn_add_mass").style.background = "#ff8000" - }, 10000); - setTimeout(function () { - document.getElementById("btn_add_mass").disabled = false; - }, 10000); - -} - - -function add_beta_ok(result) { - - document.getElementById("btn_add").disabled = true; - document.getElementById("btn_add").style.background = "#c9c9c9" - - var xhttp = new XMLHttpRequest(); - xhttp.open("POST", "http://127.0.0.1:" + Port + "/post", true); - xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); - xhttp.send("HTMLMass=" + result); - - setTimeout(function () { - document.getElementById("btn_add").style.background = "#ff8000" - }, 10000); - setTimeout(function () { - document.getElementById("btn_add").disabled = false; - }, 10000); - -} - -function add_mass_fun_ok(result) { - - document.getElementById("btn_add_mass_funimation").disabled = true; - document.getElementById("btn_add_mass_funimation").style.background = "#c9c9c9" - - var postdata = result + "&FunimationCookie=" + FunCookie - - var xhttp = new XMLHttpRequest(); - xhttp.open("POST", "http://127.0.0.1:" + Port + "/post", true); - xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); - xhttp.send("FunimationMass=" + postdata); - - setTimeout(function () { - document.getElementById("btn_add_mass_funimation").style.background = "#ff8000" - }, 10000); - setTimeout(function () { - document.getElementById("btn_add_mass_funimation").disabled = false; - }, 10000); - -} - -function add_mass_error(error) { - console.log(`Error: ${error}`); -} -//funimation - -document.getElementById('btn_enable_funimation_select').addEventListener('click', () => { - - - var funimation = browser.tabs.executeScript({ - - code: 'document.getElementsByClassName("episode-card")[0].href' - }); - funimation.then(FunimationNewSelect, FunimationOldSelect); - - - -}); - -function FunimationOldSelect(result) { - - browser.tabs.executeScript({ - code: 'var script=document.createElement("script");script.type="text/javascript",script.src="http://127.0.0.1:' + Port + '/inject_funimation.js",document.head.appendChild(script);' - }); //load script from local CRD Server included in https://github.com/hama3254/Crunchyroll-Downloader-v3.0 - - document.getElementById("btn_add_mass").hidden = true; - document.getElementById("btn_add_mass_funimation").hidden = false; - document.getElementById("btn_select_all").hidden = false; - document.getElementById("btn_select_none").hidden = false; - document.getElementById("btn_enable_select").hidden = true; - document.getElementById("btn_add").hidden = true; - document.getElementById("btn_add_funimation").hidden = true; - document.getElementById("btn_add_AoD").hidden = true; - document.getElementById("btn_enable_funimation_select").hidden = true; - -} - - -function FunimationNewSelect(result) { - - browser.tabs.executeScript({ - file: 'inject_funimation_new.js' - }); - - document.getElementById("btn_add_mass").hidden = true; - document.getElementById("btn_add_mass_funimation").hidden = false; - document.getElementById("btn_select_all").hidden = false; - document.getElementById("btn_select_none").hidden = false; - document.getElementById("btn_enable_select").hidden = true; - document.getElementById("btn_add").hidden = true; - document.getElementById("btn_add_funimation").hidden = true; - document.getElementById("btn_add_AoD").hidden = true; - document.getElementById("btn_enable_funimation_select").hidden = true; - -} - -function fun_cookie_ok(result) { - - FunCookie = result; - -} - -function FunimationSuccess(result) { - console.log(result[0]); - - if (result[0].includes('javascript:')) { - document.getElementById("btn_add").hidden = true; - document.getElementById("btn_add_mass").hidden = true; - document.getElementById("btn_add_mass_funimation").hidden = false; - document.getElementById("btn_select_all").hidden = false; - document.getElementById("btn_select_none").hidden = false; - document.getElementById("btn_enable_select").hidden = true; - document.getElementById("btn_add_AoD").hidden = true; - - document.getElementById("btn_enable_funimation_select").hidden = true; - document.getElementById("btn_add_funimation").hidden = true; - document.getElementById("btn_add_AoD").hidden = true; - var SaveFunimationCookie = browser.tabs.executeScript({ - code: "document.cookie" - }); - SaveFunimationCookie.then(fun_cookie_ok, add_mass_error); - console.log(true); - } else { - document.getElementById("btn_add").hidden = true; - document.getElementById("btn_add_funimation").hidden = true; - document.getElementById("btn_enable_select").hidden = true; - document.getElementById("btn_add_mass").hidden = true; - document.getElementById("btn_select_all").hidden = true; - document.getElementById("btn_select_none").hidden = true; - document.getElementById("btn_enable_funimation_select").hidden = false; - document.getElementById("btn_add_AoD").hidden = true; - var SaveFunimationCookie = browser.tabs.executeScript({ - code: "document.cookie" - }); - SaveFunimationCookie.then(fun_cookie_ok, add_mass_error); - console.log(false); - } -} -function FunimationOldNotFound(error) { - - var funimation = browser.tabs.executeScript({ - - code: 'document.getElementsByClassName("episode-card")[0].href' - }); - funimation.then(FunimationSuccess, FunimationError); -} - -function FunimationError(error) { - - console.log(`Error: ${error}`); - - document.getElementById("btn_add").hidden = true; - document.getElementById("btn_add_mass").hidden = true; - document.getElementById("btn_select_all").hidden = true; - document.getElementById("btn_select_none").hidden = true; - document.getElementById("btn_enable_select").hidden = true; - document.getElementById("btn_add_funimation").hidden = false; - document.getElementById("btn_enable_funimation_select").hidden = true; - document.getElementById("btn_add_AoD").hidden = true; - - - -} diff --git a/Crunchyroll Downloader/Anime_Add.Designer.vb b/Crunchyroll Downloader/Anime_Add.Designer.vb index b5343b1..7683d67 100644 --- a/Crunchyroll Downloader/Anime_Add.Designer.vb +++ b/Crunchyroll Downloader/Anime_Add.Designer.vb @@ -321,9 +321,9 @@ Partial Class Anime_Add Me.ListBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.ListBox1.FormattingEnabled = True Me.ListBox1.ItemHeight = 15 - Me.ListBox1.Location = New System.Drawing.Point(13, 18) + Me.ListBox1.Location = New System.Drawing.Point(13, 30) Me.ListBox1.Name = "ListBox1" - Me.ListBox1.Size = New System.Drawing.Size(693, 244) + Me.ListBox1.Size = New System.Drawing.Size(693, 229) Me.ListBox1.TabIndex = 0 ' 'Timer1 @@ -382,6 +382,7 @@ Partial Class Anime_Add 'Timer3 ' Me.Timer3.Enabled = True + Me.Timer3.Interval = 2000 ' 'Anime_Add ' @@ -392,9 +393,9 @@ Partial Class Anime_Add Me.Controls.Add(Me.btn_dl) Me.Controls.Add(Me.Btn_min) Me.Controls.Add(Me.Btn_Close) - Me.Controls.Add(Me.groupBox1) Me.Controls.Add(Me.GroupBox3) Me.Controls.Add(Me.groupBox2) + Me.Controls.Add(Me.groupBox1) Me.Font = New System.Drawing.Font("Arial", 24.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Name = "Anime_Add" Me.Padding = New System.Windows.Forms.Padding(10, 60, 20, 20) diff --git a/Crunchyroll Downloader/Anime_Add.resx b/Crunchyroll Downloader/Anime_Add.resx index 8500321..fa7a95f 100644 --- a/Crunchyroll Downloader/Anime_Add.resx +++ b/Crunchyroll Downloader/Anime_Add.resx @@ -127,7 +127,7 @@ iVBORw0KGgoAAAANSUhEUgAAABoAAAAhCAYAAADH97ugAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAAd0SU1FB+QMDQ03N1b5UIAAAAApSURBVEhL7cyxCQAwDASx339pZ4EUcTC4keDa + vQAADr0BR/uQrQAAAAd0SU1FB+QMDQ03N1b5UIAAAAApSURBVEhL7cyxCQAwDASx339pZ4EUcTC4keDa CwDMqs/abpOXAGBZcgDKSBvlblfsRgAAAABJRU5ErkJggg== diff --git a/Crunchyroll Downloader/Anime_Add.vb b/Crunchyroll Downloader/Anime_Add.vb index eb6df75..2cc6915 100644 --- a/Crunchyroll Downloader/Anime_Add.vb +++ b/Crunchyroll Downloader/Anime_Add.vb @@ -7,7 +7,6 @@ Imports System.Threading Imports MetroFramework.Forms Imports MetroFramework Imports MetroFramework.Components -Imports CefSharp Imports System.Text Imports System.Runtime.InteropServices.ComTypes Imports System.Windows.Forms.VisualStyles.VisualStyleElement.Status @@ -16,7 +15,6 @@ Public Class Anime_Add Public Mass_DL_Cancel As Boolean = False Public List_DL_Cancel As Boolean = False - Public ThreadList As New List(Of Thread) @@ -26,103 +24,74 @@ Public Class Anime_Add Public Sub LoadBrowser(ByVal Url As String) - 'Main.LoadedUrl = Url + Main.LoadingUrl = Url Main.LoadedUrls.Clear() - If CBool(InStr(Url, "crunchyroll.com")) = True And CBool(InStr(Url, "series")) = True Then + 'Browser.WebView2.Source = New Uri(Url) + 'Exit Sub + 'MsgBox(Url) + + If CBool(InStr(Url, "crunchyroll.com")) = True And CBool(InStr(Url, "series")) = True Or CBool(InStr(Url, "crunchyroll.com")) = True And CBool(InStr(Url, "watch")) = True Then + - Dim locale1() As String = Url.Split(New String() {"crunchyroll.com/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim locale2() As String = locale1(1).Split(New String() {"/series"}, System.StringSplitOptions.RemoveEmptyEntries) - Main.locale = Main.Convert_locale(locale2(0)) - If Main.locale = "en-US" Then - Main.Url_locale = "" - Else - Main.Url_locale = locale2(0) - End If - CefSharp_Browser.WebBrowser1.Load(Url) - ElseIf CBool(InStr(Url, "crunchyroll.com")) = True And CBool(InStr(Url, "watch")) = True And CBool(Main.CrBetaBasic = Nothing) = False Then #Region "Get Cookies" + Main.CR_Cookies = "Cookie: " + 'MsgBox("Cookies") + Browser.GetCookies(Url) + 'MsgBox("Cookies2") + + Debug.WriteLine(Main.CookieList.Count.ToString) + If Main.CookieList.Count = 0 Then + Browser.WebView2.CoreWebView2.Navigate(Url) + StatusLabel.Text = "Status: loading in browser..." + Main.Text = "Status: loading in browser..." + Exit Sub + End If + Try - Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\CRDownloader") - Dim etp_rt As Boolean = False - Dim ajs_user_id As Boolean = False - Dim Collector As New TaskCookieVisitor - Dim CM As ICookieManager = CefSharp_Browser.WebBrowser1.GetCookieManager - CM.VisitAllCookies(Collector) + + Dim DeviceRegion As String = Nothing - Dim list As List(Of Global.CefSharp.Cookie) = Collector.Task.Result() - For i As Integer = 0 To list.Count - 1 + ' Main.CookieList = Collector.Task.Result() + For i As Integer = 0 To Main.CookieList.Count - 1 - '__cf_bm - If CBool(InStr(list.Item(i).Domain, ".crunchyroll.com")) And CBool(InStr(list.Item(i).Name, "_evidon_suppress")) = False Then - Main.CR_Cookies = Main.CR_Cookies + list.Item(i).Name + "=" + list.Item(i).Value + ";" + If CBool(InStr(Main.CookieList.Item(i).Domain, ".crunchyroll.com")) And CBool(InStr(Main.CookieList.Item(i).Name, "_evidon_suppress")) = False Then + Main.CR_Cookies = Main.CR_Cookies + Main.CookieList.Item(i).Name + "=" + Main.CookieList.Item(i).Value + ";" End If - 'If CBool(InStr(list.Item(i).Domain, ".crunchyroll.com")) And CBool(InStr(list.Item(i).Name, "c_locale")) Then - ' Main.locale = list.Item(i).Value - 'End If - 'If CBool(InStr(list.Item(i).Domain, ".crunchyroll.com")) = True And CBool(InStr(list.Item(i).Name, "etp_rt")) = True And Main.CheckCRLogin = True And Main.CR_etp_rt = Nothing Then - ' Debug.WriteLine("etp_rt = True") - ' etp_rt = True - ' Main.CR_etp_rt = list.Item(i).Value - ' rk.SetValue("etp_rt", Main.CR_etp_rt, RegistryValueKind.String) - 'ElseIf CBool(InStr(list.Item(i).Domain, ".crunchyroll.com")) = True And CBool(InStr(list.Item(i).Name, "__cf_bm")) = True = True And Main.CheckCRLogin = True And Main.CR_ajs_user_id = Nothing Then - ' 'MsgBox(list.Item(i).Value) - ' Debug.WriteLine("ajs_user_id = True") - ' ajs_user_id = True - ' Main.CR_ajs_user_id = list.Item(i).Value - ' rk.SetValue("ajs_user_id", Main.CR_ajs_user_id, RegistryValueKind.String) - 'End If Next - 'If Main.locale = Nothing Then - Dim locale1() As String = Url.Split(New String() {"crunchyroll.com/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim locale2() As String = locale1(1).Split(New String() {"/watch"}, System.StringSplitOptions.RemoveEmptyEntries) - 'MsgBox(locale2(0)) - Main.locale = Main.Convert_locale(locale2(0)) - 'End If - If Main.locale = "en-US" Then - Main.Url_locale = "" - Else - Main.Url_locale = locale2(0) + If CBool(InStr(Url, "/series")) Then + Dim locale1() As String = Url.Split(New String() {"crunchyroll.com/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim locale2() As String = locale1(1).Split(New String() {"/series"}, System.StringSplitOptions.RemoveEmptyEntries) + Main.locale = Main.Convert_locale(locale2(0)) + If Main.locale = "en-US" Then + Main.Url_locale = "" + Else + Main.Url_locale = locale2(0) + End If + ElseIf CBool(InStr(Url, "/watch")) Then + Dim locale1() As String = Url.Split(New String() {"crunchyroll.com/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim locale2() As String = locale1(1).Split(New String() {"/watch"}, System.StringSplitOptions.RemoveEmptyEntries) + 'MsgBox(locale2(0)) + + Main.locale = Main.Convert_locale(locale2(0)) + 'End If + If Main.locale = "en-US" Then + Main.Url_locale = "" + Else + Main.Url_locale = locale2(0) + End If End If - 'MsgBox(Main.locale) - - If Main.locale = Nothing Then - - CefSharp_Browser.WebBrowser1.Load(Url) - Exit Sub - End If - - - 'If Main.CR_etp_rt IsNot Nothing And etp_rt = False Then - ' Main.CR_Cookies = "Cookie: " + "etp_rt" + "=" + Main.CR_etp_rt + ";" + Main.CR_Cookies.Replace("Cookie: ", "") - ' Dim etp_rt_cookie As New CefSharp.Cookie - ' etp_rt_cookie.Name = "etp_rt" - ' etp_rt_cookie.Value = Main.CR_etp_rt - ' etp_rt_cookie.HttpOnly = True - ' etp_rt_cookie.Domain = ".crunchyroll.com" - ' Debug.WriteLine("Set etp_rt_cookie: " + CM.SetCookieAsync("http://www.crunchyroll.com", etp_rt_cookie).Result.ToString) - 'End If - - 'If Main.CR_ajs_user_id IsNot Nothing And ajs_user_id = False Then - ' Main.CR_Cookies = Main.CR_Cookies + "ajs_user_id" + "=" + Main.CR_ajs_user_id + ";" - ' Dim ajs_user_id_cookie As New CefSharp.Cookie - ' ajs_user_id_cookie.Name = "__cf_bm" - ' ajs_user_id_cookie.Value = Main.CR_ajs_user_id - ' ajs_user_id_cookie.HttpOnly = True - ' ajs_user_id_cookie.Domain = ".crunchyroll.com" - ' Debug.WriteLine("Set ajs_user_id_cookie: " + CM.SetCookieAsync("http://www.crunchyroll.com", ajs_user_id_cookie).Result.ToString) - 'End If - - + 'MsgBox("locale: " + Main.locale) Catch ex As Exception - CefSharp_Browser.WebBrowser1.Load(Url) + Browser.WebView2.CoreWebView2.Navigate(Url) + StatusLabel.Text = "Status: loading in browser..." Exit Sub End Try @@ -142,6 +111,8 @@ Public Class Anime_Add Dim v1Token As String = Main.CurlPost("https://www.crunchyroll.com/auth/v1/token", Main.CR_Cookies, Auth, Post) + + If CBool(InStr(v1Token, "curl:")) = True And CBool(InStr(v1Token, "400")) = True Then v1Token = Main.CurlPost("https://www.crunchyroll.com/auth/v1/token", Main.CR_Cookies, Auth, Post.Replace("etp_rt_cookie", "client_id")) @@ -153,6 +124,13 @@ Public Class Anime_Add Me.StatusLabel.Text = "Status: Failed - bad request, check CR login" Main.Text = "Status: Failed - bad request, check CR login" Debug.WriteLine("Status: Failed - bad request, check CR login") + If GroupBox3.Visible = True Then + GroupBox3.Visible = False + groupBox2.Visible = False + groupBox1.Visible = True + List_DL_Cancel = False + btn_dl.BackgroundImage = My.Resources.main_button_download_default + End If Main.b = True Exit Sub @@ -161,7 +139,8 @@ Public Class Anime_Add End If If CBool(InStr(v1Token, "curl:")) = True Then - CefSharp_Browser.WebBrowser1.Load(Url) + Browser.WebView2.CoreWebView2.Navigate(Url) + StatusLabel.Text = "Status: loading in browser..." Exit Sub End If @@ -173,27 +152,17 @@ Public Class Anime_Add Dim ObjectsUrl As String = Nothing - 'Try - 'Using client As New WebClient() - ' client.Encoding = System.Text.Encoding.UTF8 - ' client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) - ' client.Headers.Add("ACCEPT: application/json, text/javascript, */*; q=0.01") - ' client.Headers.Add("Accept-Encoding: identity") - ' client.Headers.Add("Referer: " + Url) - ' client.Headers.Add("Authorization: " + CRBetaBearer) - ' client.Headers.Add(Cookies) '+ WebBrowser1.Document.Cookie) - 'MsgBox(OmUStreamSplitEpisodeIndex(1)) + Dim Auth2 As String = " -H " + Chr(34) + "Authorization: " + CRBetaBearer + Chr(34) Dim v2Content As String = Main.CurlAuth("https://www.crunchyroll.com/index/v2", Main.CR_Cookies, Auth2) 'client.DownloadString("https://www.crunchyroll.com/index/v2") - 'Debug.WriteLine(v2Content) - 'MsgBox("v2: " + v2Content) If CBool(InStr(v2Content, "curl:")) = True Then v2Content = Main.CurlAuth("https://www.crunchyroll.com/index/v2", Main.CR_Cookies, Auth2) End If If CBool(InStr(v2Content, "curl:")) = True Then - CefSharp_Browser.WebBrowser1.Load(Url) + Browser.WebView2.CoreWebView2.Navigate(Url) + StatusLabel.Text = "Status: loading in browser..." Exit Sub End If @@ -214,104 +183,108 @@ Public Class Anime_Add Dim key_pair_id2() As String = key_pair_id(1).Split(New String() {Chr(34) + "," + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) - 'MsgBox(Url) - Dim ObjectsURLBuilder3() As String = Url.Split(New String() {"watch/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ObjectsURLBuilder4() As String = ObjectsURLBuilder3(1).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) + If CBool(InStr(Url, "crunchyroll.com")) = True And CBool(InStr(Url, "series/")) = True Then - ObjectsUrl = "https://www.crunchyroll.com/cms/v2" + bucket2(0) + "/objects/" + ObjectsURLBuilder4(0) + "?locale=" + Main.locale + "&Signature=" + signature2(0) + "&Policy=" + policy2(0) + "&Key-Pair-Id=" + key_pair_id2(0) - 'End Using - 'MsgBox(ObjectsUrl) - - Debug.WriteLine("ObjectsUrl: " + ObjectsUrl) + Dim Series_idUrlBuilder() As String = Url.Split(New String() {"series/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim Series_idUrlBuilder2() As String = Series_idUrlBuilder(1).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) - 'Catch ex As Exception - ' MsgBox(ex.ToString) - ' CefSharp_Browser.WebBrowser1.Load(Url) - ' Exit Sub - 'End Try + Dim SeriesUrl As String = "https://www.crunchyroll.com/cms/v2" + bucket2(0) + "/seasons?series_id=" + Series_idUrlBuilder2(0) + "&locale=" + Main.locale + "&Signature=" + signature2(0) + "&Policy=" + policy2(0) + "&Key-Pair-Id=" + key_pair_id2(0) - Dim StreamsUrl As String = Nothing - Dim ObjectJson As String - Try - ObjectJson = Main.Curl(ObjectsUrl) - 'MsgBox(ObjectJson) + 'MsgBox(SeriesUrl) + Main.GetBetaSeasons(SeriesUrl) - If CBool(InStr(ObjectJson, "curl:")) = True Then + + ElseIf CBool(InStr(Url, "crunchyroll.com")) = True And CBool(InStr(Url, "watch/")) = True And CBool(Main.CrBetaBasic = Nothing) = False Then + + + + 'MsgBox(Url) + Dim ObjectsURLBuilder3() As String = Url.Split(New String() {"watch/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim ObjectsURLBuilder4() As String = ObjectsURLBuilder3(1).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) + + + ObjectsUrl = "https://www.crunchyroll.com/cms/v2" + bucket2(0) + "/objects/" + ObjectsURLBuilder4(0) + "?locale=" + Main.locale + "&Signature=" + signature2(0) + "&Policy=" + policy2(0) + "&Key-Pair-Id=" + key_pair_id2(0) + 'End Using + 'MsgBox(ObjectsUrl) + + Debug.WriteLine("ObjectsUrl: " + ObjectsUrl) + + + Dim StreamsUrl As String = Nothing + Dim ObjectJson As String + Try ObjectJson = Main.Curl(ObjectsUrl) - End If + 'MsgBox(ObjectJson) - If CBool(InStr(ObjectJson, "curl:")) = True Then - CefSharp_Browser.WebBrowser1.Load(Url) + If CBool(InStr(ObjectJson, "curl:")) = True Then + ObjectJson = Main.Curl(ObjectsUrl) + End If + + If CBool(InStr(ObjectJson, "curl:")) = True Then + Browser.WebView2.CoreWebView2.Navigate(Url) + Exit Sub + ElseIf CBool(InStr(ObjectJson, "videos/")) = False Then + + StatusLabel.Text = "Status: Failed - no video, check CR login" + Main.Text = "Status: Failed - no video, check CR login" + Debug.WriteLine("Status: Failed - no video, check CR login") + If GroupBox3.Visible = True Then + GroupBox3.Visible = False + groupBox2.Visible = False + groupBox1.Visible = True + List_DL_Cancel = False + btn_dl.BackgroundImage = My.Resources.main_button_download_default + End If + Exit Sub + End If + + Catch ex As Exception + Browser.WebView2.CoreWebView2.Navigate(Url) Exit Sub - ElseIf CBool(InStr(ObjectJson, "videos/")) = False Then + End Try - StatusLabel.Text = "Status: Failed - no video, check CR login" - Main.Text = "Status: Failed - no video, check CR login" - Debug.WriteLine("Status: Failed - no video, check CR login") + Try + Dim StreamsUrlBuilder() As String = ObjectJson.Split(New String() {"videos/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim StreamsUrlBuilder2() As String = StreamsUrlBuilder(1).Split(New String() {"/streams"}, System.StringSplitOptions.RemoveEmptyEntries) + + Dim StreamsUrlBuilder3() As String = ObjectsUrl.Split(New String() {"objects/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim StreamsUrlBuilder4() As String = StreamsUrlBuilder3(1).Split(New String() {"?"}, System.StringSplitOptions.RemoveEmptyEntries) + + StreamsUrl = StreamsUrlBuilder3(0) + "videos/" + StreamsUrlBuilder2(0) + "/streams?" + StreamsUrlBuilder4(1) + + ' Debug.WriteLine(StreamsUrl) + Catch ex As Exception + Browser.WebView2.CoreWebView2.Navigate(Url) Exit Sub - End If + End Try - 'Try - ' Using client As New WebClient() - ' client.Encoding = System.Text.Encoding.UTF8 - ' client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) - ' ObjectJson = client.DownloadString(ObjectsUrl) - ' End Using - 'Catch ex As Exception - ' Debug.WriteLine("error- getting name data") - ' Exit Sub - 'End Try - - Catch ex As Exception - CefSharp_Browser.WebBrowser1.Load(Url) - Exit Sub - End Try - - Try - Dim StreamsUrlBuilder() As String = ObjectJson.Split(New String() {"videos/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim StreamsUrlBuilder2() As String = StreamsUrlBuilder(1).Split(New String() {"/streams"}, System.StringSplitOptions.RemoveEmptyEntries) - - Dim StreamsUrlBuilder3() As String = ObjectsUrl.Split(New String() {"objects/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim StreamsUrlBuilder4() As String = StreamsUrlBuilder3(1).Split(New String() {"?"}, System.StringSplitOptions.RemoveEmptyEntries) - - StreamsUrl = StreamsUrlBuilder3(0) + "videos/" + StreamsUrlBuilder2(0) + "/streams?" + StreamsUrlBuilder4(1) - - ' Debug.WriteLine(StreamsUrl) - Catch ex As Exception - CefSharp_Browser.WebBrowser1.Load(Url) - Exit Sub - End Try - - Main.GetBetaVideoProxy(StreamsUrl, Url) + Main.GetBetaVideoProxy(StreamsUrl, Url) + Else + Browser.WebView2.CoreWebView2.Navigate(Url) + End If Else - CefSharp_Browser.WebBrowser1.Load(Url) + 'to do End If - - End Sub Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged Try If ComboBox2.Text = SubFolder_Nothing Then - Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\CRDownloader") - rk.SetValue("SubFolder_Value", SubFolder_Nothing, RegistryValueKind.String) SubFolder_Value = SubFolder_Nothing + My.Settings.SubFolder_Value = SubFolder_Value ElseIf ComboBox2.Text = SubFolder_automatic Then - Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\CRDownloader") - rk.SetValue("SubFolder_Value", SubFolder_automatic, RegistryValueKind.String) SubFolder_Value = SubFolder_automatic + My.Settings.SubFolder_Value = SubFolder_Value ElseIf ComboBox2.Text = SubFolder_automatic2 Then - Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\CRDownloader") - rk.SetValue("SubFolder_Value", SubFolder_automatic2, RegistryValueKind.String) SubFolder_Value = SubFolder_automatic2 + My.Settings.SubFolder_Value = SubFolder_Value Else - Dim rk As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\CRDownloader") - rk.SetValue("SubFolder_Value", ComboBox2.Text, RegistryValueKind.String) SubFolder_Value = ComboBox2.Text + My.Settings.SubFolder_Value = SubFolder_Value End If Catch ex As Exception ComboBox2.Text = SubFolder_Nothing @@ -367,8 +340,7 @@ Public Class Anime_Add ' Dim SubFolder_Value As String Try - Dim rkg As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\CRDownloader") - SubFolder_Value = rkg.GetValue("SubFolder_Value").ToString + SubFolder_Value = My.Settings.SubFolder_Value If SubFolder_Value = SubFolder_Nothing Then ComboBox2.Items.Add(SubFolder_automatic) ComboBox2.Items.Add(SubFolder_automatic2) @@ -421,38 +393,23 @@ Public Class Anime_Add Catch ex As Exception End Try + + 'Timer3.Enabled = True + End Sub - 'Public Sub BetaCR(ByVal Auth As String, ByVal Cookie As String) - ' Try - ' Using client As New WebClient() - ' client.Encoding = System.Text.Encoding.UTF8 - ' client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) - ' client.Headers.Add("ACCEPT: gzip") - ' client.Headers.Add("Cookie: " + Cookie) - ' client.Headers.Add("Authorization: " + Auth) - ' client.Headers.Add("Content-Type: application/x-www-form-urlencoded") - ' client.Headers.Add("Referer: https://beta.crunchyroll.com/") ' - ' Dim reqparm As New Specialized.NameValueCollection - - ' reqparm.Add("grant_type", "etp_rt_cookie") - ' Dim responsebytes = client.UploadValues("https://beta-api.crunchyroll.com/auth/v1/token", "POST", reqparm) - ' Dim responsebody = (New Text.UTF8Encoding).GetString(responsebytes) - ' 'My.Computer.Clipboard.SetText(responsebody) - ' End Using - ' Catch ex As Exception - ' MsgBox(ex.ToString) - ' End Try - - - 'End Sub Private Sub Btn_dl_Click(sender As Object, e As EventArgs) Handles btn_dl.Click - CefSharp_Browser.Show() + If Application.OpenForms().OfType(Of Browser).Any = True Then + Else + Main.UserBowser = False + Browser.Show() + End If + Main.LoginOnly = "Download Mode!" 'MsgBox(Main.WebbrowserURL) If SubTitlesOnlyCB.Text = "[Default]" Then @@ -491,8 +448,10 @@ Public Class Anime_Add Main.WebbrowserURL = textBox1.Text If CBool(InStr(textBox1.Text, "funimation.com/v/")) Then - Dim Episode() As String = textBox1.Text.Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim Episode0() As String = textBox1.Text.Split(New String() {"?"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim Episode() As String = Episode0(0).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) Dim v1JsonUrl As String = "https://d33et77evd9bgg.cloudfront.net/data/v1/episodes/" + Episode(Episode.Length - 1) + ".json" + MsgBox(v1JsonUrl) Dim v1Json As String = Nothing Try Using client As New WebClient() @@ -500,10 +459,11 @@ Public Class Anime_Add client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) v1Json = client.DownloadString(v1JsonUrl) End Using + Main.WebbrowserURL = textBox1.Text Main.GetFunimationNewJS_VideoProxy(Nothing, v1Json) Exit Sub Catch ex As Exception - Debug.WriteLine("error- getting v1Json data for the bypasss") + Debug.WriteLine("error- getting v1Json data for the bypass") Debug.WriteLine(ex.ToString) End Try @@ -701,24 +661,6 @@ Public Class Anime_Add Debug.WriteLine(EpisodeJsonURL) - - - 'CefSharp_Browser.WebBrowser1.LoadUrl(EpisodeJsonURL) - - - 'Try - ' Using client As New WebClient() - ' client.Encoding = System.Text.Encoding.UTF8 - ' client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) - ' EpisodeJson = client.DownloadString(EpisodeJsonURL) - ' End Using - 'Catch ex As Exception - ' Debug.WriteLine("error- getting EpisodeJson data") - ' Debug.WriteLine(ex.ToString) - ' Exit Sub - 'End Try - - Dim EpisodeJson As String = Main.Curl(EpisodeJsonURL) 'localHTML.Replace("", "").Replace("", "").Replace("
", "").Replace("
", "").Replace("", "").Replace(My.Resources.htmlReplace, "") @@ -884,7 +826,9 @@ Public Class Anime_Add Dim UriUsed As String = ListBox1.GetItemText(ListBox1.Items(0)) If CBool(InStr(UriUsed, "funimation.com/v/")) Then - Dim Episode() As String = UriUsed.Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim Episode0() As String = textBox1.Text.Split(New String() {"?"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim Episode() As String = Episode0(0).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim v1JsonUrl As String = "https://d33et77evd9bgg.cloudfront.net/data/v1/episodes/" + Episode(Episode.Length - 1) + ".json" Dim v1Json As String = Nothing Try @@ -921,11 +865,11 @@ Public Class Anime_Add Else If Main.Grapp_RDY = True Then Main.Grapp_RDY = False + StatusLabel.Text = "Status: loading ..." + Main.Text = "Status: loading ..." LoadBrowser(ListBox1.GetItemText(ListBox1.Items(0))) ListBox1.Items.Remove(ListBox1.Items(0)) Main.b = False - StatusLabel.Text = "Status: loading ..." - Main.Text = "Status: loading ..." Main.Invalidate() End If @@ -1014,8 +958,6 @@ Public Class Anime_Add If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then ComboBox2.Items.Clear() Main.Pfad = FolderBrowserDialog1.SelectedPath - 'Dim rk0 As RegistryKey = Registry.CurrentUser.CreateSubKey("Software\CRDownloader") - 'rk0.SetValue("Ordner", Main.Pfad, RegistryValueKind.String) My.Settings.Pfad = Main.Pfad My.Settings.Save() @@ -1068,19 +1010,9 @@ Public Class Anime_Add End If End Sub - Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick - Try - For tlc As Integer = 0 To ThreadList.Count - 1 - If ThreadList.Item(tlc).IsAlive Then - Else - ThreadList.Remove(ThreadList.Item(tlc)) - End If - Next - Catch ex As Exception - - End Try - End Sub - - + 'Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick + ' Timer3.Enabled = False + ' 'MsgBox(True.ToString) + 'End Sub End Class diff --git a/Crunchyroll Downloader/App.config b/Crunchyroll Downloader/App.config index ca8ac4b..76e4e62 100644 --- a/Crunchyroll Downloader/App.config +++ b/Crunchyroll Downloader/App.config @@ -11,15 +11,7 @@ - - - - - - - - - + diff --git a/Crunchyroll Downloader/CefSharp_Browser.Designer.vb b/Crunchyroll Downloader/Browser.Designer.vb similarity index 68% rename from Crunchyroll Downloader/CefSharp_Browser.Designer.vb rename to Crunchyroll Downloader/Browser.Designer.vb index 1e1c217..e854fcf 100644 --- a/Crunchyroll Downloader/CefSharp_Browser.Designer.vb +++ b/Crunchyroll Downloader/Browser.Designer.vb @@ -1,5 +1,5 @@ -Partial Class CefSharp_Browser +Partial Class Browser Inherits System.Windows.Forms.Form 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. @@ -25,11 +25,12 @@ Partial Class CefSharp_Browser Me.components = New System.ComponentModel.Container() Me.TextBox1 = New System.Windows.Forms.TextBox() Me.Button1 = New System.Windows.Forms.Button() - Me.Btn_Scan = New System.Windows.Forms.Button() Me.Panel1 = New System.Windows.Forms.Panel() - Me.WebBrowser1 = New CefSharp.WinForms.ChromiumWebBrowser() + Me.WebView2 = New Microsoft.Web.WebView2.WinForms.WebView2() Me.Timer1 = New System.Windows.Forms.Timer(Me.components) + Me.Timer2 = New System.Windows.Forms.Timer(Me.components) Me.Panel1.SuspendLayout() + CType(Me.WebView2, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'TextBox1 @@ -38,80 +39,74 @@ Partial Class CefSharp_Browser Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.TextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle Me.TextBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.TextBox1.Location = New System.Drawing.Point(291, 1) + Me.TextBox1.Location = New System.Drawing.Point(114, 1) Me.TextBox1.Name = "TextBox1" - Me.TextBox1.Size = New System.Drawing.Size(976, 26) + Me.TextBox1.Size = New System.Drawing.Size(1153, 26) Me.TextBox1.TabIndex = 1 ' 'Button1 ' - Me.Button1.Location = New System.Drawing.Point(189, 1) + Me.Button1.Location = New System.Drawing.Point(12, 1) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(96, 26) Me.Button1.TabIndex = 2 Me.Button1.Text = "Copy URL" Me.Button1.UseVisualStyleBackColor = True ' - 'Btn_Scan - ' - Me.Btn_Scan.Enabled = False - Me.Btn_Scan.Location = New System.Drawing.Point(5, 1) - Me.Btn_Scan.Name = "Btn_Scan" - Me.Btn_Scan.Size = New System.Drawing.Size(178, 26) - Me.Btn_Scan.TabIndex = 3 - Me.Btn_Scan.Text = "Start network scan" - Me.Btn_Scan.UseVisualStyleBackColor = True - ' 'Panel1 ' Me.Panel1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.Panel1.Controls.Add(Me.WebBrowser1) + Me.Panel1.Controls.Add(Me.WebView2) Me.Panel1.Location = New System.Drawing.Point(0, 30) Me.Panel1.Name = "Panel1" Me.Panel1.Size = New System.Drawing.Size(1280, 720) Me.Panel1.TabIndex = 4 ' - 'WebBrowser1 + 'WebView2 ' - Me.WebBrowser1.ActivateBrowserOnCreation = False - Me.WebBrowser1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ - Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.WebBrowser1.Location = New System.Drawing.Point(0, 0) - Me.WebBrowser1.Name = "WebBrowser1" - Me.WebBrowser1.Size = New System.Drawing.Size(1280, 720) - Me.WebBrowser1.TabIndex = 0 + Me.WebView2.AllowExternalDrop = True + Me.WebView2.CreationProperties = Nothing + Me.WebView2.DefaultBackgroundColor = System.Drawing.Color.White + Me.WebView2.Dock = System.Windows.Forms.DockStyle.Fill + Me.WebView2.Location = New System.Drawing.Point(0, 0) + Me.WebView2.Name = "WebView2" + Me.WebView2.Size = New System.Drawing.Size(1280, 720) + Me.WebView2.TabIndex = 0 + Me.WebView2.ZoomFactor = 1.0R ' 'Timer1 ' Me.Timer1.Interval = 1000 ' - 'CefSharp_Browser + 'Timer2 + ' + Me.Timer2.Interval = 15000 + ' + 'Browser ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font Me.ClientSize = New System.Drawing.Size(1279, 750) Me.Controls.Add(Me.Panel1) - Me.Controls.Add(Me.Btn_Scan) Me.Controls.Add(Me.Button1) Me.Controls.Add(Me.TextBox1) Me.MinimumSize = New System.Drawing.Size(480, 480) - Me.Name = "CefSharp_Browser" + Me.Name = "Browser" Me.ShowIcon = False Me.Text = "Browser" Me.Panel1.ResumeLayout(False) + CType(Me.WebView2, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) Me.PerformLayout() End Sub - 'Public WithEvents WebBrowser1 As Gecko.GeckoWebBrowser Friend WithEvents TextBox1 As TextBox Friend WithEvents Button1 As Button - Friend WithEvents Btn_Scan As Button Friend WithEvents Panel1 As Panel Friend WithEvents Timer1 As Timer - Friend WithEvents WebBrowser1 As CefSharp.WinForms.ChromiumWebBrowser + Friend WithEvents Timer2 As Timer + Public WithEvents WebView2 As Microsoft.Web.WebView2.WinForms.WebView2 End Class diff --git a/Crunchyroll Downloader/CefSharp_Browser.resx b/Crunchyroll Downloader/Browser.resx similarity index 96% rename from Crunchyroll Downloader/CefSharp_Browser.resx rename to Crunchyroll Downloader/Browser.resx index d0d99f4..22db872 100644 --- a/Crunchyroll Downloader/CefSharp_Browser.resx +++ b/Crunchyroll Downloader/Browser.resx @@ -120,4 +120,7 @@ 17, 17 + + 106, 17 + \ No newline at end of file diff --git a/Crunchyroll Downloader/Browser.vb b/Crunchyroll Downloader/Browser.vb new file mode 100644 index 0000000..063647d --- /dev/null +++ b/Crunchyroll Downloader/Browser.vb @@ -0,0 +1,263 @@ +Option Strict On + +Imports System.IO +Imports System.ComponentModel +Imports System.Threading +Imports System.Net +Imports System.Net.WebUtility +Imports System.IO.Compression +Imports System.Text +Imports System.Security.Policy +Imports Microsoft.Web.WebView2.Core +Imports MetroFramework.Drawing + +Public Class Browser + + + + + Private Sub WebView2_CoreWebView2InitializationCompleted(sender As Object, e As CoreWebView2InitializationCompletedEventArgs) Handles WebView2.CoreWebView2InitializationCompleted + WebView2.CoreWebView2.AddWebResourceRequestedFilter("https://www.crunchyroll.com/*", CoreWebView2WebResourceContext.All) + WebView2.CoreWebView2.AddWebResourceRequestedFilter("https://www.funimation.com/*", CoreWebView2WebResourceContext.All) + 'WebView2.CoreWebView2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.All) + + AddHandler WebView2.CoreWebView2.WebResourceRequested, AddressOf ObserveHttp + WebView2.CoreWebView2.Settings.UserAgent = My.Resources.ffmpeg_user_agend.Replace(Chr(34), "").Replace("User-Agent: ", "") + If WebView2.CoreWebView2.Source = "about:blank" Or WebView2.CoreWebView2.Source = Nothing Then + 'TextBox1.Text = Main.Startseite + WebView2.CoreWebView2.Navigate(Main.Startseite) + + End If + + End Sub + + + Private Sub WebView2_SourceChanged(sender As Object, e As CoreWebView2SourceChangedEventArgs) Handles WebView2.SourceChanged + Try + TextBox1.Text = WebView2.CoreWebView2.Source + + Catch ex As Exception + End Try + + End Sub + + + + Private Sub WebView2_NavigationCompleted(sender As Object, e As CoreWebView2NavigationCompletedEventArgs) Handles WebView2.NavigationCompleted + ' Dim HTML As String = WebView2.CoreWebView2. + 'TextBox1.Text = WebView2.CoreWebView2.Source + ' Exit Sub + + If e.HttpStatusCode = 200 Then + Dim DocumentTitle As String = WebView2.CoreWebView2.DocumentTitle + + Debug.WriteLine("NavigationCompleted: " + Date.Now.ToString) + Main.WebbrowserURL = WebView2.CoreWebView2.Source + TextBox1.Text = Main.WebbrowserURL + + 'Main.WebbrowserText = "" 'HTML + Main.WebbrowserTitle = DocumentTitle + Main.ProcessHTML("", Main.WebbrowserURL, DocumentTitle) + + GetCookies(Main.WebbrowserURL) + End If + + End Sub + + Public Async Sub GetCookies(ByVal Uri As String) + Main.CookieList = Await WebView2.CoreWebView2.CookieManager.GetCookiesAsync(Uri) + End Sub + + + Private Sub GeckoFX_Load(sender As Object, e As EventArgs) Handles Me.Load + Main.waveOutSetVolume(0, 0) + If Me.Width > My.Computer.Screen.Bounds.Width Then + Me.Width = My.Computer.Screen.Bounds.Width + Panel1.Width = Me.Size.Width - 15 ', Me.Size.Height - 69) + Panel1.Location = New Point(0, 30) + TextBox1.Width = My.Computer.Screen.Bounds.Width - 435 + + End If + + If Me.Size.Height > My.Computer.Screen.Bounds.Height Then + Me.Height = My.Computer.Screen.Bounds.Height + Panel1.Height = Me.Size.Height - 69 + Panel1.Location = New Point(0, 30) + End If + + + Try + Me.Icon = My.Resources.icon + Catch ex As Exception + + End Try + + If Main.UserBowser = False Then + Me.Location = New Point(-10000, 10000) + + End If + WebView2.Source = New Uri(Main.Startseite) + End Sub + + Private Sub Browser_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing + 'Main.UserBowser = False + 'Me.Location = New Point(-10000, -10000) + 'Main.LoadingUrl = "" + 'Debug.WriteLine("Collecting") + 'Dim Collector As New TaskCookieVisitor + 'Dim CM As ICookieManager = WebBrowser1.GetCookieManager + 'CM.VisitAllCookies(Collector) + 'Main.CookieList = Collector.Task.Result() + 'Debug.WriteLine("Collecting-end") + ''e.Cancel = True + End Sub + + + Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click + 'MsgBox(Main.CR_etp_rt) + 'MsgBox(Main.CR_ajs_user_id) + 'MsgBox(Main.CheckCRLogin.ToString) + Try + My.Computer.Clipboard.SetText(WebView2.CoreWebView2.Source) + MsgBox("copied: " + Chr(34) + WebView2.CoreWebView2.Source + Chr(34)) + Catch ex As Exception + End Try + + 'My.Computer.Clipboard.SetText(WebBrowser1.Document.Body.InnerHtml) + + End Sub + + Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown + Try + If e.KeyCode = Keys.Return Then + e.SuppressKeyPress = True + Debug.WriteLine("Start loading: " + Date.Now.ToString) + WebView2.CoreWebView2.Navigate(TextBox1.Text) + End If + + Catch ex As Exception + MsgBox("Error in URL", MsgBoxStyle.Critical) + End Try + End Sub + + + + + + + + + Private Sub ObserveHttp(ByVal sender As Object, ByVal e As CoreWebView2WebResourceRequestedEventArgs) 'Handles RequestResource.GetUrl + + If CBool(InStr(e.Request.Uri, "crunchyroll.com")) = True And Main.CrBetaBasic = Nothing Then + Dim Headers As New List(Of KeyValuePair(Of String, String)) + Headers.AddRange(e.Request.Headers.ToList) + For i As Integer = 0 To Headers.Count + If CBool(InStr(Headers.Item(i).Value, "Basic")) Then + Main.CrBetaBasic = Headers.Item(i).Value + Debug.WriteLine(Main.CrBetaBasic) + End If + Next + End If + + + + If CBool(InStr(Main.LoadingUrl, "crunchyroll.com")) Then + If CBool(InStr(e.Request.Uri, "crunchyroll.com/")) And CBool(InStr(e.Request.Uri, "streams?")) Then + Debug.WriteLine("Crunchyroll-Single: " + e.Request.Uri) + If (Me.InvokeRequired) Then + Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Uri)) + Exit Sub + Else + Main.LoadedUrls.Add(e.Request.Uri) + Exit Sub + End If + ElseIf CBool(InStr(e.Request.Uri, "crunchyroll.com/")) And CBool(InStr(e.Request.Uri, "/objects/")) And CBool(InStr(e.Request.Uri, "/watch/")) Then + If (Me.InvokeRequired) Then + Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Uri)) + Exit Sub + Else + Main.LoadedUrls.Add(e.Request.Uri) + Exit Sub + End If + Debug.WriteLine(e.Request.Uri) + ElseIf CBool(InStr(e.Request.Uri, "crunchyroll.com/")) And CBool(InStr(e.Request.Uri, "seasons?series_id=")) Then + Debug.WriteLine("Crunchyroll-Season: " + e.Request.Uri) + If (Me.InvokeRequired) Then + Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Uri)) + Exit Sub + Else + Main.LoadedUrls.Add(e.Request.Uri) + Exit Sub + End If + End If + + + + + ElseIf CBool(InStr(Main.LoadingUrl, "funimation.com")) Then + If CBool(InStr(e.Request.Uri, "?deviceType=web")) Then + 'Debug.WriteLine(e.Request.Uri) + Dim parms As String() = e.Request.Uri.Split(New String() {"?deviceType="}, System.StringSplitOptions.RemoveEmptyEntries) + Main.FunimationDeviceRegion = "?deviceType=" + parms(1) + + End If + If CBool(InStr(e.Request.Uri, "https://title-api.prd.funimationsvc.com")) Then + Debug.WriteLine("Funimtaion: " + e.Request.Uri) + If (Me.InvokeRequired) Then + Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Uri)) + Exit Sub + Else + Main.LoadedUrls.Add(e.Request.Uri) + Exit Sub + End If + ElseIf CBool(InStr(e.Request.Uri, "/data/v2/shows/")) Then + Debug.WriteLine("Funimtaion: " + e.Request.Uri) + If (Me.InvokeRequired) Then + Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Uri)) + Exit Sub + Else + Main.LoadedUrls.Add(e.Request.Uri) + Exit Sub + End If + ElseIf CBool(InStr(e.Request.Uri, "/data/v1/episodes/")) Then + Debug.WriteLine("Funimtaion: " + e.Request.Uri) + If (Me.InvokeRequired) Then + Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Uri)) + Exit Sub + Else + Main.LoadedUrls.Add(e.Request.Uri) + Exit Sub + End If + End If + + End If + + End Sub + + + + Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick + Me.Close() + End Sub + + + + + + + + + + + + + + + + 'Private Sub WebBrowser1_ConsoleMessage(sender As Object, e As ConsoleMessageEventArgs) Handles WebBrowser1.ConsoleMessage + ' Debug.WriteLine(e.Message) + 'End Sub + +End Class + diff --git a/Crunchyroll Downloader/CRD_List_Item.Designer.vb b/Crunchyroll Downloader/CRD_List_Item.Designer.vb index 78f3e6d..c30ac86 100644 --- a/Crunchyroll Downloader/CRD_List_Item.Designer.vb +++ b/Crunchyroll Downloader/CRD_List_Item.Designer.vb @@ -122,7 +122,7 @@ Partial Class CRD_List_Item Me.Label_Hardsub.BackColor = System.Drawing.Color.Transparent Me.Label_Hardsub.FontSize = MetroFramework.MetroLabelSize.Tall Me.Label_Hardsub.FontWeight = MetroFramework.MetroLabelWeight.Regular - Me.Label_Hardsub.Location = New System.Drawing.Point(265, 97) + Me.Label_Hardsub.Location = New System.Drawing.Point(255, 97) Me.Label_Hardsub.Name = "Label_Hardsub" Me.Label_Hardsub.Size = New System.Drawing.Size(126, 25) Me.Label_Hardsub.TabIndex = 6 diff --git a/Crunchyroll Downloader/CRD_List_Item.vb b/Crunchyroll Downloader/CRD_List_Item.vb index c0d256c..c45b29c 100644 --- a/Crunchyroll Downloader/CRD_List_Item.vb +++ b/Crunchyroll Downloader/CRD_List_Item.vb @@ -55,6 +55,7 @@ Public Class CRD_List_Item Dim FailedSegments As New List(Of FailedSegemtsWithURL) Dim LogText As New List(Of String) + Dim GlobalLogfile As String Private Event UpdateUI(ByVal Percent As Integer, ByVal di As DirectoryInfo, ByVal Idle As Integer) @@ -75,7 +76,7 @@ Public Class CRD_List_Item Label_website.Location = New Point(195, 12) Label_Anime.Location = New Point(195, 40) Label_Reso.Location = New Point(195, 97) - Label_Hardsub.Location = New Point(265, 97) + Label_Hardsub.Location = New Point(255, 97) Label_percent.SetBounds(Me.Width - 400, 97, 378, 27) Label_percent.AutoSize = False ProgressBar1.SetBounds(195, 70, 601, 20) @@ -455,6 +456,10 @@ Public Class CRD_List_Item HistoryDL_Pfad = DL_Pfad HistoryFilename = Filename + GlobalLogfile = DL_Pfad.Replace(".mkv", ".txt").Replace(Chr(34), "") + + 'Debug.WriteLine(GlobalLogfile) + 'If (Me.InvokeRequired) Then ' Me.Invoke(Sub() @@ -1298,9 +1303,26 @@ Public Class CRD_List_Item Sub FFMPEGOutput(ByVal sender As Object, ByVal e As DataReceivedEventArgs) Try LogText.Add(Date.Now.ToString + " " + e.Data) + 'My.Computer.FileSystem.WriteAllText(GlobalLogfile, Date.Now.ToString + " " + e.Data, True) + 'Dim Log As String = "" + 'Dim logfile As String = DownloadPfad.Replace(Main.VideoFormat, ".log").Replace(Chr(34), "") + + 'For i As Integer = 1 To LogText.Count - 1 + ' Log = Log + vbNewLine + ' Log = Log + LogText.Item(i) + 'Next + 'WriteText(logfile, Log) Catch ex As Exception + Debug.WriteLine("FFMPEGOutput: " + ex.ToString) End Try + 'Dim TH As String = "FFMPEGOutput_ID: " + Thread.CurrentThread.Name + 'Debug.WriteLine(TH) + + 'My.Computer.FileSystem.WriteAllText(GlobalLogfile, TH, True) + 'My.Computer.FileSystem.WriteAllText(GlobalLogfile, vbNewLine, True) + 'Thread.CurrentThread.Name = "FFMPEGOutput" + #Region "Detect Auto resolution" Try diff --git a/Crunchyroll Downloader/CefSharp_Browser.vb b/Crunchyroll Downloader/CefSharp_Browser.vb deleted file mode 100644 index 3038fa0..0000000 --- a/Crunchyroll Downloader/CefSharp_Browser.vb +++ /dev/null @@ -1,361 +0,0 @@ -Option Strict On - -Imports System.IO -Imports CefSharp -Imports System.ComponentModel -Imports System.Threading -Imports System.Net -Imports System.Net.WebUtility -Imports System.IO.Compression -Imports System.Text -Imports AdapterRequestHandler -Imports System.Security.Policy - -Public Class CefSharp_Browser - - - - 'Public keks As String = Nothing - 'Public c As Boolean = True - Dim t As Thread - Public ScanTrue As Boolean = False - Public ScanTime As Integer = 0 - - - Dim DocumentTitle As String = "" - Dim Document As String = "" - Dim Cookie As String = "" - - Dim LoadingUrl As String = "" - - Private Sub WebBrowser1_FrameLoadStart(sender As Object, e As FrameLoadStartEventArgs) Handles WebBrowser1.FrameLoadStart - LoadingUrl = e.Url - Main.LoadedUrls.Clear() - End Sub - - - - - Private Sub WebBrowser1_FrameLoadEnd(sender As Object, e As FrameLoadEndEventArgs) Handles WebBrowser1.FrameLoadEnd - If e.Frame.IsMain Then - - - - Me.Invoke(New Action(Function() As Object - ' Main.LoadedUrls.Clear() - Debug.WriteLine("FrameLoadEnd" + Date.Now.ToString) - Main.WebbrowserURL = WebBrowser1.Address - TextBox1.Text = Main.WebbrowserURL - - Try - If Btn_Scan.Enabled = False And Btn_Scan.Text = "Start network scan" Then - Btn_Scan.Enabled = True - - End If - Catch ex As Exception - End Try - - - Return Nothing - End Function)) - - GetHTML() - - End If - End Sub - - - 'Private Sub WebBrowser1_LoadingStateChanged(sender As Object, ByVal Status As LoadingStateChangedEventArgs) Handles WebBrowser1.LoadingStateChanged - ' 'Debug.WriteLine("b:" + Main.b.ToString) - ' Debug.WriteLine(InvokeRequired.ToString) - - ' If Status.IsLoading = True Then - ' Exit Sub - ' End If - - 'End Sub - - Async Sub GetHTML() - Try - - Dim HTML As String = Await WebBrowser1.GetSourceAsync - ' Dim HTML2 As String = Await - - Document = HTML - Debug.WriteLine("get html") - - Me.Invoke(New Action(Function() As Object - - Main.WebbrowserText = HTML - Main.WebbrowserURL = WebBrowser1.Address - Main.WebbrowserTitle = DocumentTitle - Main.ProcessHTML(HTML, WebBrowser1.Address, DocumentTitle) - 'If Main.UserBowser = False Then - ' Me.Close() - 'End If - Return Nothing - End Function)) - - Catch ex As Exception - - End Try - End Sub - - - - - Private Sub GeckoFX_Load(sender As Object, e As EventArgs) Handles MyBase.Load - AddHandler RequestResource.GetUrl, AddressOf ObserveHttp - WebBrowser1.RequestHandler = New RequestEventHandler() - Main.waveOutSetVolume(0, 0) - If Me.Width > My.Computer.Screen.Bounds.Width Then - Me.Width = My.Computer.Screen.Bounds.Width - WebBrowser1.Width = Me.Size.Width - 15 ', Me.Size.Height - 69) - WebBrowser1.Location = New Point(0, 30) - TextBox1.Width = My.Computer.Screen.Bounds.Width - 435 - - End If - - If Me.Size.Height > My.Computer.Screen.Bounds.Height Then - Me.Height = My.Computer.Screen.Bounds.Height - WebBrowser1.Height = Me.Size.Height - 69 - WebBrowser1.Location = New Point(0, 30) - End If - - If Main.Debug2 = True Then - Debug_Mode.Show() - Debug_Mode.Location = New Point(Me.Location.X + Me.Width - 15, Me.Location.Y) - End If - 'MsgBox(WebBrowser1.Address) - If WebBrowser1.Address = "about:blank" Or WebBrowser1.Address = Nothing Then - TextBox1.Text = Main.Startseite - WebBrowser1.Load(Main.Startseite) - - End If - Try - Me.Icon = My.Resources.icon - Catch ex As Exception - - End Try - - If Main.UserBowser = False Then - Me.Location = New Point(-10000, -10000) - - End If - End Sub - - Private Sub CefSharp_Browser_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing - Main.UserBowser = False - Me.Location = New Point(-10000, -10000) - - e.Cancel = True - End Sub - - - Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click - 'MsgBox(Main.CR_etp_rt) - 'MsgBox(Main.CR_ajs_user_id) - 'MsgBox(Main.CheckCRLogin.ToString) - - Try - My.Computer.Clipboard.SetText(WebBrowser1.Address) - MsgBox("copied: " + Chr(34) + WebBrowser1.Address + Chr(34)) - Catch ex As Exception - End Try - - 'My.Computer.Clipboard.SetText(WebBrowser1.Document.Body.InnerHtml) - - End Sub - - Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown - Try - If e.KeyCode = Keys.Return Then - e.SuppressKeyPress = True - Debug.WriteLine("Start loading: " + Date.Now.ToString) - WebBrowser1.Load(TextBox1.Text) - End If - - Catch ex As Exception - MsgBox("Error in URL", MsgBoxStyle.Critical) - End Try - End Sub - - Private Sub WebBrowser1_DocumentTitleChanged(sender As Object, e As TitleChangedEventArgs) Handles WebBrowser1.TitleChanged - - If (Me.InvokeRequired) Then - Me.Invoke(Sub() - DocumentTitle = e.Title - Me.Text = "Browser - " + e.Title - - End Sub) - Else - DocumentTitle = e.Title - Me.Text = "Browser - " + e.Title - - End If - - Try - TextBox1.Text = WebBrowser1.Address - Catch ex As Exception - End Try - End Sub - - Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Btn_Scan.Click - - Main.m3u8List.Clear() - Main.mpdList.Clear() - Main.txtList.Clear() - Btn_Scan.Enabled = False - ScanTrue = True - Main.LogBrowserData = True - NetworkScanEnd() - - End Sub - - Private Sub GeckoFX_LocationChanged(sender As Object, e As EventArgs) Handles Me.LocationChanged - If Main.Debug2 = True Then - Debug_Mode.Location = New Point(Me.Location.X + Me.Width - 15, Me.Location.Y) - End If - End Sub - - - Private Sub ObserveHttp(e As RequestResourceEventArgs) 'Handles RequestResource.GetUrl - - If CBool(InStr(LoadingUrl, "crunchyroll.com")) Then - If CBool(InStr(e.Request.Url, "crunchyroll.com/")) And CBool(InStr(e.Request.Url, "streams?")) Then - Debug.WriteLine("Crunchyroll-Single: " + e.Request.Url) - If (Me.InvokeRequired) Then - Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Url)) - Exit Sub - Else - Main.LoadedUrls.Add(e.Request.Url) - Exit Sub - End If - ElseIf CBool(InStr(e.Request.Url, "crunchyroll.com/")) And CBool(InStr(e.Request.Url, "/objects/")) And CBool(InStr(e.Request.Url, "/watch/")) Then - If (Me.InvokeRequired) Then - Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Url)) - Exit Sub - Else - Main.LoadedUrls.Add(e.Request.Url) - Exit Sub - End If - Debug.WriteLine(e.Request.Url) - ElseIf CBool(InStr(e.Request.Url, "crunchyroll.com/")) And CBool(InStr(e.Request.Url, "seasons?series_id=")) Then - Debug.WriteLine("Crunchyroll-Season: " + e.Request.Url) - If (Me.InvokeRequired) Then - Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Url)) - Exit Sub - Else - Main.LoadedUrls.Add(e.Request.Url) - Exit Sub - End If - End If - - - If (Me.InvokeRequired) Then - Me.Invoke(Sub() - If CBool(InStr(e.Request.Url, "crunchyroll.com")) = True And CBool(InStr(e.Request.Headers, "Basic ")) = True And Main.CrBetaBasic = Nothing Then - Dim Basic As String() = e.Request.Headers.Split(New String() {"Basic "}, System.StringSplitOptions.RemoveEmptyEntries) - Dim Basic2 As String() = Basic(1).Split(New String() {","}, System.StringSplitOptions.RemoveEmptyEntries) - Main.CrBetaBasic = "Basic " + Basic2(0) - Debug.WriteLine(Main.CrBetaBasic) - End If - - - - End Sub) - Else - If CBool(InStr(e.Request.Url, "crunchyroll.com")) = True And CBool(InStr(e.Request.Headers, "Basic ")) = True And Main.CrBetaBasic = Nothing Then - - Dim Basic As String() = e.Request.Headers.Split(New String() {"Basic "}, System.StringSplitOptions.RemoveEmptyEntries) - Dim Basic2 As String() = Basic(1).Split(New String() {","}, System.StringSplitOptions.RemoveEmptyEntries) - Main.CrBetaBasic = "Basic " + Basic2(0) - Debug.WriteLine(Main.CrBetaBasic) - - End If - - End If - ElseIf CBool(InStr(LoadingUrl, "funimation.com")) Then - If CBool(InStr(e.Request.Url, "?deviceType=web")) Then - 'Debug.WriteLine(e.Request.Url) - Dim parms As String() = e.Request.Url.Split(New String() {"?deviceType="}, System.StringSplitOptions.RemoveEmptyEntries) - Main.FunimationDeviceRegion = "?deviceType=" + parms(1) - - End If - If CBool(InStr(e.Request.Url, "https://title-api.prd.funimationsvc.com")) Then - Debug.WriteLine("Funimtaion: " + e.Request.Url) - If (Me.InvokeRequired) Then - Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Url)) - Exit Sub - Else - Main.LoadedUrls.Add(e.Request.Url) - Exit Sub - End If - ElseIf CBool(InStr(e.Request.Url, "/data/v2/shows/")) Then - Debug.WriteLine("Funimtaion: " + e.Request.Url) - If (Me.InvokeRequired) Then - Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Url)) - Exit Sub - Else - Main.LoadedUrls.Add(e.Request.Url) - Exit Sub - End If - ElseIf CBool(InStr(e.Request.Url, "/data/v1/episodes/")) Then - Debug.WriteLine("Funimtaion: " + e.Request.Url) - If (Me.InvokeRequired) Then - Me.Invoke(Sub() Main.LoadedUrls.Add(e.Request.Url)) - Exit Sub - Else - Main.LoadedUrls.Add(e.Request.Url) - Exit Sub - End If - End If - - End If - - - - - ' - 'Debug.WriteLine(e.Request.Url) - - - - - - End Sub - - Public Sub NetworkScanEnd() - For i As Integer = 20 To 0 Step -1 - Pause(1) - Btn_Scan.Text = "network scan is in progess " + Math.Abs(i).ToString - Try - Anime_Add.StatusLabel.Text = "network scan is in progess " + Math.Abs(i).ToString - Catch ex As Exception - - End Try - Next - ScanTrue = False - Main.LogBrowserData = False - Try - Main.WebbrowserURL = WebBrowser1.Address - Main.WebbrowserText = Document - Main.WebbrowserTitle = DocumentTitle - Main.WebbrowserCookie = Cookie - Catch ex As Exception - End Try - Btn_Scan.Text = "use network scan dialog" - network_scan.Show() - End Sub - - - - - - - 'Private Sub WebBrowser1_ConsoleMessage(sender As Object, e As ConsoleMessageEventArgs) Handles WebBrowser1.ConsoleMessage - ' Debug.WriteLine(e.Message) - 'End Sub - -End Class - diff --git a/Crunchyroll Downloader/Crunchyroll Downloader.vbproj b/Crunchyroll Downloader/Crunchyroll Downloader.vbproj index 95510ad..3501efb 100644 --- a/Crunchyroll Downloader/Crunchyroll Downloader.vbproj +++ b/Crunchyroll Downloader/Crunchyroll Downloader.vbproj @@ -1,8 +1,5 @@  - - - Debug @@ -107,18 +104,17 @@ 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 - - ..\packages\CefSharp.Common.103.0.90\lib\net452\CefSharp.dll + + ..\..\metroframework-modern-ui\MetroFramework\bin\x64\Debug\MetroFramework.dll - - ..\packages\CefSharp.Common.103.0.90\lib\net452\CefSharp.Core.dll + + ..\packages\Microsoft.Web.WebView2.1.0.1418.22\lib\net45\Microsoft.Web.WebView2.Core.dll - - ..\packages\CefSharp.WinForms.103.0.90\lib\net462\CefSharp.WinForms.dll + + ..\packages\Microsoft.Web.WebView2.1.0.1418.22\lib\net45\Microsoft.Web.WebView2.WinForms.dll - - False - ..\..\metroframework-modern-ui\MetroFramework\bin\Debug\MetroFramework.dll + + ..\packages\Microsoft.Web.WebView2.1.0.1418.22\lib\net45\Microsoft.Web.WebView2.Wpf.dll ..\..\..\MyProvider\MyProvider\bin\x64\Debug\MyProvider.dll @@ -126,9 +122,6 @@ ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll - - ..\..\RequestHandler\RequestHandler\bin\x64\Debug\RequestHandler.dll - @@ -169,12 +162,6 @@ True Resources.resx - - network_scan.vb - - - Form - Anime_Add.vb @@ -187,16 +174,10 @@ Form - - Debug_Mode.vb + + Browser.vb - - Form - - - CefSharp_Browser.vb - - + Form @@ -235,20 +216,14 @@ Trackbar.vb - - network_scan.vb - Anime_Add.vb einstellungen.vb - - Debug_Mode.vb - - - CefSharp_Browser.vb + + Browser.vb CRD_List_Item.vb @@ -419,14 +394,11 @@ + Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". - - - - + - \ No newline at end of file diff --git a/Crunchyroll Downloader/Debug_Mode.Designer.vb b/Crunchyroll Downloader/Debug_Mode.Designer.vb deleted file mode 100644 index 81643ba..0000000 --- a/Crunchyroll Downloader/Debug_Mode.Designer.vb +++ /dev/null @@ -1,123 +0,0 @@ - _ -Partial Class Debug_Mode - Inherits System.Windows.Forms.Form - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - _ - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - _ - Private Sub InitializeComponent() - Me.ComboBox1 = New System.Windows.Forms.ComboBox() - Me.RichTextBox1 = New System.Windows.Forms.RichTextBox() - Me.ComboBox2 = New System.Windows.Forms.ComboBox() - Me.Button1 = New System.Windows.Forms.Button() - Me.RichTextBox2 = New System.Windows.Forms.RichTextBox() - Me.Button2 = New System.Windows.Forms.Button() - Me.Button3 = New System.Windows.Forms.Button() - Me.SuspendLayout() - ' - 'ComboBox1 - ' - Me.ComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.ComboBox1.FormattingEnabled = True - Me.ComboBox1.Location = New System.Drawing.Point(61, 84) - Me.ComboBox1.Name = "ComboBox1" - Me.ComboBox1.Size = New System.Drawing.Size(414, 21) - Me.ComboBox1.TabIndex = 1 - ' - 'RichTextBox1 - ' - Me.RichTextBox1.Location = New System.Drawing.Point(49, 151) - Me.RichTextBox1.Name = "RichTextBox1" - Me.RichTextBox1.Size = New System.Drawing.Size(444, 241) - Me.RichTextBox1.TabIndex = 3 - Me.RichTextBox1.Text = "" - ' - 'ComboBox2 - ' - Me.ComboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.ComboBox2.FormattingEnabled = True - Me.ComboBox2.Items.AddRange(New Object() {".txt", ".m3u8", ".mpd"}) - Me.ComboBox2.Location = New System.Drawing.Point(61, 25) - Me.ComboBox2.Name = "ComboBox2" - Me.ComboBox2.Size = New System.Drawing.Size(414, 21) - Me.ComboBox2.TabIndex = 4 - ' - 'Button1 - ' - Me.Button1.Location = New System.Drawing.Point(194, 409) - Me.Button1.Name = "Button1" - Me.Button1.Size = New System.Drawing.Size(139, 23) - Me.Button1.TabIndex = 5 - Me.Button1.Text = "URL Convert" - Me.Button1.UseVisualStyleBackColor = True - ' - 'RichTextBox2 - ' - Me.RichTextBox2.Location = New System.Drawing.Point(49, 451) - Me.RichTextBox2.Name = "RichTextBox2" - Me.RichTextBox2.Size = New System.Drawing.Size(444, 241) - Me.RichTextBox2.TabIndex = 3 - Me.RichTextBox2.Text = "" - ' - 'Button2 - ' - Me.Button2.Location = New System.Drawing.Point(230, 715) - Me.Button2.Name = "Button2" - Me.Button2.Size = New System.Drawing.Size(75, 23) - Me.Button2.TabIndex = 5 - Me.Button2.Text = "Reso Test" - Me.Button2.UseVisualStyleBackColor = True - ' - 'Button3 - ' - Me.Button3.Location = New System.Drawing.Point(382, 715) - Me.Button3.Name = "Button3" - Me.Button3.Size = New System.Drawing.Size(75, 23) - Me.Button3.TabIndex = 6 - Me.Button3.Text = "Button3" - Me.Button3.UseVisualStyleBackColor = True - ' - 'Debug_Mode - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(537, 750) - Me.Controls.Add(Me.Button3) - Me.Controls.Add(Me.Button2) - Me.Controls.Add(Me.Button1) - Me.Controls.Add(Me.RichTextBox2) - Me.Controls.Add(Me.ComboBox2) - Me.Controls.Add(Me.RichTextBox1) - Me.Controls.Add(Me.ComboBox1) - Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow - Me.Name = "Debug_Mode" - Me.ShowIcon = False - Me.ShowInTaskbar = False - Me.Text = "Debug" - Me.ResumeLayout(False) - - End Sub - Friend WithEvents ComboBox1 As ComboBox - Friend WithEvents ComboBox2 As ComboBox - Friend WithEvents Button1 As Button - Public WithEvents RichTextBox2 As RichTextBox - Friend WithEvents Button2 As Button - Public WithEvents RichTextBox1 As RichTextBox - Friend WithEvents Button3 As Button -End Class diff --git a/Crunchyroll Downloader/Debug_Mode.resx b/Crunchyroll Downloader/Debug_Mode.resx deleted file mode 100644 index 1af7de1..0000000 --- a/Crunchyroll Downloader/Debug_Mode.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Crunchyroll Downloader/Debug_Mode.vb b/Crunchyroll Downloader/Debug_Mode.vb deleted file mode 100644 index bab6f5c..0000000 --- a/Crunchyroll Downloader/Debug_Mode.vb +++ /dev/null @@ -1,88 +0,0 @@ -Option Strict On - - -Public Class Debug_Mode - Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load - - End Sub - - Private Sub Form1_LocationChanged(sender As Object, e As EventArgs) Handles Me.LocationChanged - - - End Sub - - Private Sub Button1_Click(sender As Object, e As EventArgs) - - End Sub - - Private Sub Button2_Click(sender As Object, e As EventArgs) - ComboBox1.Items.Clear() - For i As Integer = 0 To Main.m3u8List.Count - 1 - ComboBox1.Items.Add(Main.m3u8List.Item(i)) - Next - End Sub - - Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged - RichTextBox1.Text = ComboBox1.Text - End Sub - - Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged - If ComboBox2.Text = ".txt" Then - ComboBox1.Items.Clear() - For i As Integer = 0 To Main.txtList.Count - 1 - ComboBox1.Items.Add(Main.txtList.Item(i)) - Next - ElseIf ComboBox2.Text = ".m3u8" Then - ComboBox1.Items.Clear() - For i As Integer = 0 To Main.m3u8List.Count - 1 - ComboBox1.Items.Add(Main.m3u8List.Item(i)) - Next - ElseIf ComboBox2.Text = ".mpd" Then - ComboBox1.Items.Clear() - For i As Integer = 0 To Main.mpdList.Count - 1 - ComboBox1.Items.Add(Main.mpdList.Item(i)) - Next - End If - End Sub - - - Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click - Dim HTMLString As String = RichTextBox1.Text - Dim HTMLSplit() As String = HTMLString.Split(New String() {vbNewLine}, System.StringSplitOptions.RemoveEmptyEntries) - For i As Integer = 0 To HTMLSplit.Count - 1 - If CBool(InStr(HTMLSplit(i), ".mpd?")) Then - Dim URLPart2() As String = HTMLSplit(i).Split(New String() {" GET "}, System.StringSplitOptions.RemoveEmptyEntries) - Dim URLPart2Split2() As String = URLPart2(1).Split(New String() {" HTTP/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim URLPart1() As String = HTMLSplit(i).Split(New String() {" Host: "}, System.StringSplitOptions.RemoveEmptyEntries) - RichTextBox2.Text = "https://" + URLPart1(1) + URLPart2Split2(0) - 'MsgBox(Main.NonCR_URL) - 'RichTextBox1.Text = RichTextBox1.Text + vbNewLine + URL_Final - Exit For - ElseIf CBool(InStr(HTMLSplit(i), ".m3u8?")) Then - Dim URLPart2() As String = HTMLSplit(i).Split(New String() {" GET "}, System.StringSplitOptions.RemoveEmptyEntries) - Dim URLPart2Split2() As String = URLPart2(1).Split(New String() {" HTTP/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim URLPart1() As String = HTMLSplit(i).Split(New String() {" Host: "}, System.StringSplitOptions.RemoveEmptyEntries) - RichTextBox2.Text = "https://" + URLPart1(1) + URLPart2Split2(0) - 'MsgBox(Main.NonCR_URL) - 'RichTextBox1.Text = RichTextBox1.Text + vbNewLine + URL_Final - Exit For - ElseIf CBool(InStr(HTMLSplit(i), ".txt?")) Then - Dim URLPart2() As String = HTMLSplit(i).Split(New String() {" GET "}, System.StringSplitOptions.RemoveEmptyEntries) - Dim URLPart2Split2() As String = URLPart2(1).Split(New String() {" HTTP/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim URLPart1() As String = HTMLSplit(i).Split(New String() {" Host: "}, System.StringSplitOptions.RemoveEmptyEntries) - RichTextBox2.Text = "https://" + URLPart1(1) + URLPart2Split2(0) - 'MsgBox(Main.NonCR_URL) - 'RichTextBox1.Text = RichTextBox1.Text + vbNewLine + URL_Final - Exit For - End If - Next - End Sub - - Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click - 'Main.FFMPEG_Reso(RichTextBox2.Text) - End Sub - - Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click - 'MsgBox(Main.ResoAvalibe) - End Sub -End Class \ No newline at end of file diff --git a/Crunchyroll Downloader/Main.designer.vb b/Crunchyroll Downloader/Main.designer.vb index f890f31..1c2e40f 100644 --- a/Crunchyroll Downloader/Main.designer.vb +++ b/Crunchyroll Downloader/Main.designer.vb @@ -41,7 +41,7 @@ Partial Class Main Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) Me.ToggleDebugModeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.OpenSettingsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.TestDownloadToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.Funimation_Token = New System.Windows.Forms.ToolStripMenuItem() Me.CheckCRBetaTokenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.AddonHTMLToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.Timer3OffToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() @@ -52,6 +52,7 @@ Partial Class Main Me.ItemBoundsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.DummyItemToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.Panel1 = New System.Windows.Forms.Panel() + Me.ScanTimeout = New System.Windows.Forms.Timer(Me.components) CType(Me.PictureBox5, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.ConsoleBar, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.MetroStyleManager1, System.ComponentModel.ISupportInitialize).BeginInit() @@ -69,7 +70,7 @@ Partial Class Main 'Timer2 ' Me.Timer2.Enabled = True - Me.Timer2.Interval = 1000 + Me.Timer2.Interval = 3000 ' 'Timer3 ' @@ -160,7 +161,7 @@ Partial Class Main ' 'ContextMenuStrip1 ' - Me.ContextMenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToggleDebugModeToolStripMenuItem, Me.OpenSettingsToolStripMenuItem, Me.TestDownloadToolStripMenuItem, Me.CheckCRBetaTokenToolStripMenuItem, Me.AddonHTMLToolStripMenuItem, Me.Timer3OffToolStripMenuItem, Me.ThreadCount, Me.MsgBoxToolStripMenuItem, Me.CRCookieToolStripMenuItem, Me.ClearAllSettingsToolStripMenuItem, Me.ItemBoundsToolStripMenuItem, Me.DummyItemToolStripMenuItem}) + Me.ContextMenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToggleDebugModeToolStripMenuItem, Me.OpenSettingsToolStripMenuItem, Me.Funimation_Token, Me.CheckCRBetaTokenToolStripMenuItem, Me.AddonHTMLToolStripMenuItem, Me.Timer3OffToolStripMenuItem, Me.ThreadCount, Me.MsgBoxToolStripMenuItem, Me.CRCookieToolStripMenuItem, Me.ClearAllSettingsToolStripMenuItem, Me.ItemBoundsToolStripMenuItem, Me.DummyItemToolStripMenuItem}) Me.ContextMenuStrip1.Name = "ContextMenuStrip1" resources.ApplyResources(Me.ContextMenuStrip1, "ContextMenuStrip1") ' @@ -174,10 +175,10 @@ Partial Class Main Me.OpenSettingsToolStripMenuItem.Name = "OpenSettingsToolStripMenuItem" resources.ApplyResources(Me.OpenSettingsToolStripMenuItem, "OpenSettingsToolStripMenuItem") ' - 'TestDownloadToolStripMenuItem + 'Funimation_Token ' - Me.TestDownloadToolStripMenuItem.Name = "TestDownloadToolStripMenuItem" - resources.ApplyResources(Me.TestDownloadToolStripMenuItem, "TestDownloadToolStripMenuItem") + Me.Funimation_Token.Name = "Funimation_Token" + resources.ApplyResources(Me.Funimation_Token, "Funimation_Token") ' 'CheckCRBetaTokenToolStripMenuItem ' @@ -229,6 +230,10 @@ Partial Class Main resources.ApplyResources(Me.Panel1, "Panel1") Me.Panel1.Name = "Panel1" ' + 'ScanTimeout + ' + Me.ScanTimeout.Interval = 1000 + ' 'Main ' Me.ApplyImageInvert = True @@ -275,7 +280,7 @@ Partial Class Main Friend WithEvents ContextMenuStrip1 As ContextMenuStrip Friend WithEvents ToggleDebugModeToolStripMenuItem As ToolStripMenuItem Friend WithEvents OpenSettingsToolStripMenuItem As ToolStripMenuItem - Friend WithEvents TestDownloadToolStripMenuItem As ToolStripMenuItem + Friend WithEvents Funimation_Token As ToolStripMenuItem Friend WithEvents CheckCRBetaTokenToolStripMenuItem As ToolStripMenuItem Friend WithEvents AddonHTMLToolStripMenuItem As ToolStripMenuItem Friend WithEvents Timer3OffToolStripMenuItem As ToolStripMenuItem @@ -286,4 +291,5 @@ Partial Class Main Friend WithEvents ItemBoundsToolStripMenuItem As ToolStripMenuItem Friend WithEvents DummyItemToolStripMenuItem As ToolStripMenuItem Public WithEvents Panel1 As Panel + Friend WithEvents ScanTimeout As Timer End Class diff --git a/Crunchyroll Downloader/Main.resx b/Crunchyroll Downloader/Main.resx index 3c61daa..4d741d5 100644 --- a/Crunchyroll Downloader/Main.resx +++ b/Crunchyroll Downloader/Main.resx @@ -151,7 +151,7 @@ 9 - 612, 17 + 370, 2 272, 14 @@ -231,21 +231,6 @@ 842, 630 - - True - - - 1, 71 - - - 798, 403 - - - 840, 546 - - - 0 - Panel1 @@ -258,24 +243,6 @@ 1 - - None - - - Flat - - - NoControl - - - 800, 1 - - - 40, 40 - - - 5 - Btn_Close @@ -288,24 +255,6 @@ 2 - - None - - - Flat - - - NoControl - - - 757, 1 - - - 40, 40 - - - 4 - Btn_min @@ -318,24 +267,6 @@ 3 - - Zoom - - - Flat - - - NoControl - - - 641, 18 - - - 80, 35 - - - 3 - Btn_Settings @@ -348,21 +279,6 @@ 4 - - Zoom - - - Flat - - - 124, 18 - - - 80, 35 - - - 2 - Btn_Browser @@ -375,24 +291,6 @@ 5 - - Zoom - - - Flat - - - NoControl - - - 11, 18 - - - 80, 35 - - - 1 - Btn_add @@ -465,10 +363,10 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - TestDownloadToolStripMenuItem + + Funimation_Token - + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -525,6 +423,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ScanTimeout + + + System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Main @@ -534,9 +438,165 @@ 276, 52 + + Zoom + + + Flat + + + NoControl + + + 11, 18 + + + 80, 35 + + + 1 + + + Btn_add + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + Zoom + + + Flat + + + 124, 18 + + + 80, 35 + + + 2 + + + Btn_Browser + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + Zoom + + + Flat + + + NoControl + + + 641, 18 + + + 80, 35 + + + 3 + + + Btn_Settings + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + None + + + Flat + + + NoControl + + + 757, 1 + + + 40, 40 + + + 4 + + + Btn_min + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + None + + + Flat + + + NoControl + + + 800, 1 + + + 40, 40 + + + 5 + + + Btn_Close + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + - 578, 45 + 352, 49 + + 234, 268 + + + ContextMenuStrip1 + + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + 233, 22 @@ -549,10 +609,10 @@ Open Settings - + 233, 22 - + Check Funimation Token @@ -609,13 +669,34 @@ Dummy_Item - - 234, 268 + + True - - ContextMenuStrip1 + + 1, 71 - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 798, 403 + + 840, 546 + + + 0 + + + Panel1 + + + System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + 167, 10 + \ No newline at end of file diff --git a/Crunchyroll Downloader/Main.vb b/Crunchyroll Downloader/Main.vb index ed32b2c..46e4393 100644 --- a/Crunchyroll Downloader/Main.vb +++ b/Crunchyroll Downloader/Main.vb @@ -13,20 +13,16 @@ Imports System.Globalization Imports System.ComponentModel Imports Newtonsoft.Json.Linq Imports System.Runtime.InteropServices -Imports CefSharp.WinForms -Imports CefSharp Imports System.Security.Policy Imports MyProvider.MyProvider Imports System.Windows - +Imports Microsoft.Web.WebView2.Core Public Class Main Inherits MetroForm Dim t As Thread Dim HTML As String = Nothing Public CR_Cookies As String = "Cookie: " - Public CR_etp_rt As String = Nothing - Public CR_ajs_user_id As String = Nothing Public CheckCRLogin As Boolean = True 'Public LoadedUrl As String = Nothing @@ -37,11 +33,11 @@ Public Class Main Public CrBetaBasic As String = Nothing Public locale As String = Nothing Public Url_locale As String = Nothing - + Dim ProcessCounting As Integer = 30 'Public CrBetaObjects As String = Nothing 'Public CrBetaStreams As String = Nothing 'Public CrBetaStreamsUrl As String = Nothing - + Public LoadingUrl As String = "" Public LoadedUrls As New List(Of String) Public FunimationAPIRegion As String = Nothing Public FunimationRegion As String = Nothing @@ -59,6 +55,7 @@ Public Class Main Dim ServerThread As Thread Public KodiNaming As Boolean = False Public ErrorTolerance As Integer = 0 + Public CookieList As New List(Of CoreWebView2Cookie) 'Public liList As New List(Of String) Public HTMLString As String = My.Resources.Startuphtml Public ListBoxList As New List(Of String) @@ -66,9 +63,6 @@ Public Class Main Public RunningDownloads As Integer = 0 Public UseQueue As Boolean = False Public StartServer As Integer = 0 - Public m3u8List As New List(Of String) - Public txtList As New List(Of String) - Public mpdList As New List(Of String) Public ResoAvalibe As String = Nothing Public ResoSearchRunning As Boolean = False Public UsedMap As String = Nothing @@ -105,7 +99,7 @@ Public Class Main Public Reso As Integer Public Season_Prefix As String = "[default season prefix]" Public Episode_Prefix As String = "[default episode prefix]" - Dim Reso2 As String + Public ResoSave As String = "6666x6666" Public ResoFunBackup As String = "6666x6666" Public SubSprache As String @@ -279,6 +273,7 @@ Public Class Main Private Sub ConsoleBar_Click(sender As Object, e As EventArgs) Handles ConsoleBar.Click If TheTextBox.Visible = True Then + 'TheTextBox.Lines = DebugList.ToArray TheTextBox.Visible = False ListViewHeightOffset = 7 ConsoleBar.Location = New Point(0, Me.Height - ListViewHeightOffset) @@ -318,11 +313,13 @@ Public Class Main Dim W As Integer = Panel1.Width If Panel1.Controls.Count * 142 > Panel1.Height Then - w = Panel1.Width - SystemInformation.VerticalScrollBarWidth + W = Panel1.Width - SystemInformation.VerticalScrollBarWidth End If Dim Item As New List(Of CRD_List_Item) Item.AddRange(Panel1.Controls.OfType(Of CRD_List_Item)) + Item.Reverse() + For s As Integer = 0 To Item.Count - 1 Item(s).SetBounds(0, 142 * s, W - 2, 142) If Debug2 = True Then @@ -376,7 +373,7 @@ Public Class Main End Function - Private Sub Form8_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' #Region "settings path" @@ -394,33 +391,6 @@ Public Class Main b = True Thread.CurrentThread.Name = "Main" Debug.WriteLine("Thread Name: " + Thread.CurrentThread.Name) - 'Try - ' Dim rkg As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\CRDownloader") - ' ProfileFolder = rkg.GetValue("ProfilFolder").ToString - 'Catch ex As Exception - 'End Try - Dim settings As CefSettings = New CefSettings() - If Not Directory.Exists(Path.GetDirectoryName(ProfileFolder)) Then - ' Nein! Jetzt erstellen... - Try - Directory.CreateDirectory(Path.GetDirectoryName(ProfileFolder)) - settings.CachePath = ProfileFolder - Catch ex As Exception - ' Ordner wurde nich erstellt - settings.CachePath = Application.StartupPath + "\lib" - End Try - Else - settings.CachePath = ProfileFolder - End If - settings.CefCommandLineArgs.Add("disable-features=PreloadMediaEngagementData, MediaEngagementBypassAutoplayPolicies") - settings.CefCommandLineArgs.Add("disable-gpu") - settings.CefCommandLineArgs.Add("disable-gpu-vsync") - settings.CefCommandLineArgs.Add("disable-d3d11") - settings.CefCommandLineArgs.Add("disable-gpu-rasterization") - settings.UserAgent = My.Resources.ffmpeg_user_agend.Replace("User-Agent: ", "").Replace(Chr(34), "") - settings.DisableGpuAcceleration() - settings.LogFile = Path.Combine(Application.StartupPath, "lib", "browser.log") - Cef.Initialize(settings) DarkModeValue = My.Settings.DarkModeValue @@ -877,7 +847,7 @@ Public Class Main CurlOutput = CurlOutput + sr.ReadToEnd CurlError = CurlError + sr2.ReadToEnd 'ffmpegOutput2 = sr.ReadLine - Debug.WriteLine(CurlOutput) + 'Debug.WriteLine(CurlOutput) Loop Until Proc.HasExited Or Microsoft.VisualBasic.DateAndTime.Timer < finish @@ -918,7 +888,7 @@ Public Class Main End If cmd = cmd + "--no-alpn -fsSLm 15 -A " + My.Resources.ffmpeg_user_agend.Replace("User-Agent: ", "") + Cookies + Auth + Post + " " + Chr(34) + Url + Chr(34) Dim Proc As New Process - 'MsgBox(cmd) + 'Debug.WriteLine("CurlPost: " + cmd) Dim CurlOutput As String = Nothing Dim CurlError As String = Nothing ' all parameters required to run the process @@ -945,25 +915,25 @@ Public Class Main CurlOutput = CurlOutput + sr.ReadToEnd CurlError = CurlError + sr2.ReadToEnd 'ffmpegOutput2 = sr.ReadLine - Debug.WriteLine(CurlOutput) + 'Debug.WriteLine(CurlOutput) Loop Until Proc.HasExited Or Microsoft.VisualBasic.DateAndTime.Timer < finish If CurlOutput = Nothing And CurlError = Nothing Then - Debug.WriteLine("curl-E: " + "curl: ") + Debug.WriteLine("CurlPost-E: " + "curl: ") Return CurlError ElseIf CurlOutput = Nothing And CurlError IsNot Nothing Then - Debug.WriteLine("curl-E: " + CurlError) + Debug.WriteLine("CurlPost-E: " + CurlError) Return CurlError ElseIf CurlOutput IsNot Nothing And CurlError = Nothing Then - Debug.WriteLine("curl-O: " + CurlOutput) + Debug.WriteLine("CurlPost-O: " + CurlOutput) Return CurlOutput ElseIf CurlOutput IsNot Nothing And CurlError IsNot Nothing Then - Debug.WriteLine("curl-O: " + CurlOutput) + Debug.WriteLine("CurlPost-O: " + CurlOutput) Return CurlOutput Else - Debug.WriteLine("curl-E: " + "curl: ") + Debug.WriteLine("CurlPost-E: " + "curl: ") Return CurlError End If @@ -1016,24 +986,24 @@ Public Class Main CurlOutput = CurlOutput + sr.ReadToEnd CurlError = CurlError + sr2.ReadToEnd 'ffmpegOutput2 = sr.ReadLine - Debug.WriteLine(CurlOutput) + 'Debug.WriteLine(CurlOutput) Loop Until Proc.HasExited Or Microsoft.VisualBasic.DateAndTime.Timer < finish If CurlOutput = Nothing And CurlError = Nothing Then - Debug.WriteLine("curl-E: " + "curl: ") + Debug.WriteLine("CurlAuth-E: " + "curl: ") Return CurlError ElseIf CurlOutput = Nothing And CurlError IsNot Nothing Then - Debug.WriteLine("curl-E: " + CurlError) + Debug.WriteLine("CurlAuth-E: " + CurlError) Return CurlError ElseIf CurlOutput IsNot Nothing And CurlError = Nothing Then - Debug.WriteLine("curl-O: " + CurlOutput) + Debug.WriteLine("CurlAuth-O: " + CurlOutput) Return CurlOutput ElseIf CurlOutput IsNot Nothing And CurlError IsNot Nothing Then - Debug.WriteLine("curl-O: " + CurlOutput) + Debug.WriteLine("CurlAuth-O: " + CurlOutput) Return CurlOutput Else - Debug.WriteLine("curl-E: " + "curl: ") + Debug.WriteLine("CurlAuth-E: " + "curl: ") Return CurlError End If @@ -1052,7 +1022,6 @@ Public Class Main Dim ListOfEpisodes As New List(Of String) Dim EpisodeSplit() As String = CrBetaMassEpisodes.Split(New String() {Chr(34) + "id" + Chr(34) + ":" + Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) - 'My.Computer.FileSystem.WriteAllText("D:\Projecte\Crunchyroll Downloader - v3.0-final\Crunchyroll-Downloader-v3.0 - CefSharp\Crunchyroll Downloader\bin\x64\Debug\WebInterface\EpisodeSplit.txt", CrBetaMassEpisodes, False) '"slug_title":" For i As Integer = 1 To EpisodeSplit.Count - 1 Dim EpisodeSplit2() As String = EpisodeSplit(i).Split(New String() {Chr(34)}, System.StringSplitOptions.RemoveEmptyEntries) @@ -1084,6 +1053,8 @@ Public Class Main Dim ItemFinshedCount As Integer = 0 ' Dim Item As New List(Of CRD_List_Item) Item.AddRange(Panel1.Controls.OfType(Of CRD_List_Item)) + Item.Reverse() + For i2 As Integer = 0 To Item.Count - 1 If Item(i2).GetIsStatusFinished() = True Then ItemFinshedCount = ItemFinshedCount + 1 @@ -1176,7 +1147,7 @@ Public Class Main End If If CBool(InStr(SeasonJson, "curl:")) = True Then - MsgBox("Error - Getting SeasonJson data") + MsgBox("Error - Getting SeasonJson data" + vbNewLine + SeasonJson) Exit Sub End If SeasonJson = CleanJSON(SeasonJson) @@ -1210,10 +1181,6 @@ Public Class Main 'CrBetaStreamsUrl = Nothing 'LoadedUrl = Nothing - 'My.Computer.FileSystem.WriteAllText("D:\Projecte\Crunchyroll Downloader - v3.0-final\Crunchyroll-Downloader-v3.0 - CefSharp\Crunchyroll Downloader\bin\x64\Debug\WebInterface\debugObjects.txt", ObjectJson, False) - - 'My.Computer.FileSystem.WriteAllText("D:\Projecte\Crunchyroll Downloader - v3.0-final\Crunchyroll-Downloader-v3.0 - CefSharp\Crunchyroll Downloader\bin\x64\Debug\WebInterface\debugStreams.txt", VideoJson, False) - Try Grapp_RDY = False @@ -1234,6 +1201,8 @@ Public Class Main Dim CR_episode_int As String = Nothing Dim CR_title As String = Nothing Dim CR_audio_locale As String = Nothing + Dim ResoUsed As String = "x" + Reso.ToString + #Region "Name + Pfad" Dim Pfad2 As String Dim TextBox2_Text As String = Nothing @@ -1263,7 +1232,7 @@ Public Class Main End If If CBool(InStr(ObjectJson, "curl:")) = True Then - MsgBox("Error - Getting ObjectJson data") + MsgBox("Error - Getting ObjectJson data" + vbNewLine + ObjectJson) Exit Sub End If @@ -1566,7 +1535,7 @@ Public Class Main If CBool(InStr(VideoJson, "curl:")) = True Then VideoJson = Nothing - MsgBox("Error - Getting VideoJson data") + MsgBox("Error - Getting VideoJson data" + vbNewLine + VideoJson) Exit Sub End If @@ -1584,7 +1553,7 @@ Public Class Main ' Exit Sub 'End Try - Dim LangNew As String = ConvertCC(SubSprache) + Dim CR_HardSubLang As String = ConvertCC(SubSprache) #End Region #Region "Download softsub file or build ffmpeg cmd" Dim SoftSubs2 As New List(Of String) @@ -1734,7 +1703,7 @@ Public Class Main For i As Integer = 0 To CR_Streams.Count - 1 Debug.WriteLine(CR_Streams.Item(i).subLang) - If CR_Streams.Item(i).subLang = LangNew Then + If CR_Streams.Item(i).subLang = CR_HardSubLang Then CR_URI_Master = CR_Streams.Item(i).Url ElseIf CR_Streams.Item(i).subLang = "" And CR_audio_locale IsNot "ja-JP" And DubMode = True Then 'nothing/raw RawStream = CR_Streams.Item(i).Url @@ -1754,12 +1723,12 @@ Public Class Main If UserCloseDialog = True Then Throw New System.Exception(Chr(34) + "UserAbort" + Chr(34)) Else - LangNew = ResoBackString + CR_HardSubLang = ResoBackString ResoBackString = Nothing For i As Integer = 0 To CR_Streams.Count - 1 Debug.WriteLine(CR_Streams.Item(i).subLang) - If CR_Streams.Item(i).subLang = LangNew Then + If CR_Streams.Item(i).subLang = CR_HardSubLang Then CR_URI_Master = CR_Streams.Item(i).Url End If @@ -1837,11 +1806,11 @@ Public Class Main 'MsgBox(str) If CBool(InStr(str, "x" + Reso.ToString + ",")) Then - Reso2 = "x" + Reso.ToString + ResoUsed = "x" + Reso.ToString Else 'MsgBox(str) If CBool(InStr(str, ResoSave + ",")) Then - Reso2 = Reso2 + ResoUsed = ResoSave Else Me.Invoke(New Action(Function() As Object DialogTaskString = "Resolution" @@ -1853,61 +1822,85 @@ Public Class Main If UserCloseDialog = True Then Throw New System.Exception(Chr(34) + "UserAbort" + Chr(34)) Else - Reso2 = ResoBackString + 'MsgBox(ResoBackString) + ResoUsed = ResoBackString ResoSave = ResoBackString End If End If End If - Dim ffmpeg_url_1 As String() = str.Split(New String() {Reso2 + ","}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ffmpeg_url_3 As String() = Nothing - Dim ffmpeg_url_2 As String() = ffmpeg_url_1(1).Split(New [Char]() {Chr(34)}) - ffmpeg_url_3 = ffmpeg_url_2(2).Split(New [Char]() {System.Convert.ToChar("#")}) + Dim ffmpeg_url_3 As String = Nothing + Dim LineChar As String = vbLf + If CBool(InStr(str, vbCrLf)) Then + LineChar = vbCrLf + ElseIf CBool(InStr(str, vbCr)) Then + LineChar = vbCr + End If + Dim ffmpeg_url_1 As String() = str.Split(New String() {LineChar}, System.StringSplitOptions.RemoveEmptyEntries) + + For i As Integer = 0 To ffmpeg_url_1.Count - 2 'Step 2 + If CBool(InStr(ffmpeg_url_1(i), ResoUsed + ",")) Then + ffmpeg_url_3 = ffmpeg_url_1(i + 1) + End If + Next + 'MsgBox(ffmpeg_url_3) Debug.WriteLine("Line 2120-CR_audio_locale: " + CR_audio_locale) - If MergeSubs = True And CR_MetadataUsage = False Then - URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " " + ffmpeg_command_temp + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + If MergeSubs = True And CR_MetadataUsage = False Then + URL_DL = "-i " + Chr(34) + ffmpeg_url_3.Trim() + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " " + ffmpeg_command_temp + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) ElseIf MergeSubs = False And CR_MetadataUsage = False Then - URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command_temp + URL_DL = "-i " + Chr(34) + ffmpeg_url_3.Trim() + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command_temp ElseIf MergeSubs = True And CR_MetadataUsage = True Then - URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + " -i " + Chr(34) + Mdata_File + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " -map_metadata 1" + " " + ffmpeg_command_temp + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + URL_DL = "-i " + Chr(34) + ffmpeg_url_3.Trim() + Chr(34) + " -i " + Chr(34) + Mdata_File + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " -map_metadata 1" + " " + ffmpeg_command_temp + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) ElseIf MergeSubs = False And CR_MetadataUsage = True Then - URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + " -i " + Chr(34) + Mdata_File + Chr(34) + " -map_metadata 1" + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command_temp + URL_DL = "-i " + Chr(34) + ffmpeg_url_3.Trim() + Chr(34) + " -i " + Chr(34) + Mdata_File + Chr(34) + " -map_metadata 1" + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command_temp End If - 'If MergeSubs = True And CR_MetadataUsage = False Then - ' URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " " + ffmpeg_command + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) - 'Else - ' URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command_temp - 'End If + 'If MergeSubs = True And CR_MetadataUsage = False Then + ' URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + SoftSubMergeURLs + SoftSubMergeMaps + " " + ffmpeg_command + " -c:s " + MergeSubsFormat + SoftSubMergeMetatata + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + 'Else + ' URL_DL = "-i " + Chr(34) + ffmpeg_url_3(0).Trim() + Chr(34) + " -metadata:s:a:0 language=" + CCtoMP4CC(CR_audio_locale) + " " + ffmpeg_command_temp + 'End If + End If End If - End If #Region "thumbnail" Dim thumbnail As String() = ObjectJson.Split(New String() {"https://"}, System.StringSplitOptions.RemoveEmptyEntries) Dim thumbnail2 As String() = thumbnail(1).Split(New String() {Chr(34) + "}"}, System.StringSplitOptions.RemoveEmptyEntries) '(New [Char]() {"-"}) Dim thumbnail3 As String = "https://" + thumbnail2(0).Replace("\/", "/") #End Region -#Region "
  • constructor" - Dim Subsprache3 As String = "none" 'HardSubValuesToDisplay(SubSprache2.Replace(Chr(34), "")) - Dim ResoHTMLDisplay As String = Nothing - If ResoBackString = Nothing Then - ResoHTMLDisplay = Reso.ToString + "p" - ElseIf DialogTaskString = "Language" Then - ResoHTMLDisplay = Reso.ToString + "p" - Else - Dim ResoHTML As String() = ResoBackString.Split(New String() {"x"}, System.StringSplitOptions.RemoveEmptyEntries) - If ResoHTML.Count > 1 Then - ResoHTMLDisplay = ResoHTML(1) + "p" - Else - ResoHTMLDisplay = ResoHTML(0) + "p" - End If +#Region "item constructor" + Dim SubType_Value As String = Nothing 'HardSubValuesToDisplay(SubSprache2.Replace(Chr(34), "")) + + 'MsgBox(CR_HardSubLang) + + If Not CR_HardSubLang = "" Then + SubType_Value = "Hardsub: " + HardSubValuesToDisplay(CR_HardSubLang) End If + + If SoftSubs2.Count > 0 And CR_HardSubLang = "" Then + SubType_Value = "Softsubs: " + For i As Integer = 0 To SoftSubs2.Count - 1 + SubType_Value = SubType_Value + HardSubValuesToDisplay(SoftSubs2(i)) + If i < SoftSubs2.Count - 1 Then + SubType_Value = SubType_Value + ", " + End If + Next + End If + + Dim ResoHTMLDisplay As String = Nothing + Dim ResoHTML As String() = ResoUsed.Split(New String() {"x"}, System.StringSplitOptions.RemoveEmptyEntries) + If ResoHTML.Count > 1 Then + ResoHTMLDisplay = ResoHTML(1) + "p" + Else + ResoHTMLDisplay = ResoHTML(0) + "p" + End If + Dim L2Name As String = String.Join(" ", CR_FilenName.Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c) 'System.Text.RegularExpressions.Regex.Replace(CR_FilenName_Backup, "[^\w\\-]", " ") + If Reso = 42 And HybridMode = False Then ResoHTMLDisplay = "[Auto]" - ElseIf Reso = 42 And HybridMode = False Then - ResoHTMLDisplay = Reso2 End If + Pfad_DL = Pfad2 Dim L1Name_Split As String() = WebsiteURL.Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) Dim L1Name As String = L1Name_Split(1).Replace("www.", "") + " | Dub : " + HardSubValuesToDisplay(CR_audio_locale) @@ -1918,7 +1911,7 @@ Public Class Main Me.Invoke(New Action(Function() As Object - ListItemAdd(Path.GetFileName(Pfad_DL.Replace(Chr(34), "")), L1Name, L2Name, ResoHTMLDisplay, Subsprache3, SubValuesToDisplay(), thumbnail3, URL_DL, Pfad_DL) + ListItemAdd(Path.GetFileName(Pfad_DL.Replace(Chr(34), "")), L1Name, L2Name, ResoHTMLDisplay, SubType_Value, SubValuesToDisplay(), thumbnail3, URL_DL, Pfad_DL) Return Nothing End Function)) 'liList.Add(My.Resources.htmlvorThumbnail + thumbnail3 + My.Resources.htmlnachTumbnail + CR_title + "
    " + CR_season_number + " " + CR_episode + My.Resources.htmlvorAufloesung + ResoHTMLDisplay + My.Resources.htmlvorSoftSubs + vbNewLine + SubValuesToDisplay() + My.Resources.htmlvorHardSubs + Subsprache3 + My.Resources.htmlnachHardSubs + "") @@ -2029,6 +2022,8 @@ Public Class Main Dim Item As New List(Of CRD_List_Item) Item.AddRange(Panel1.Controls.OfType(Of CRD_List_Item)) + Item.Reverse() + For i As Integer = 0 To Item.Count - 1 Item(i).KillRunningTask() Next @@ -2128,10 +2123,10 @@ Public Class Main Private Sub Btn_add_Click(sender As Object, e As EventArgs) Handles Btn_add.Click - If Application.OpenForms().OfType(Of CefSharp_Browser).Any = True Then + If Application.OpenForms().OfType(Of Browser).Any = True Then Else UserBowser = False - CefSharp_Browser.Show() + Browser.Show() End If If Anime_Add.WindowState = System.Windows.Forms.FormWindowState.Minimized Then @@ -2185,11 +2180,11 @@ Public Class Main Debug.WriteLine(Date.Now.ToString + "." + Date.Now.Millisecond.ToString) UserBowser = True - If Application.OpenForms().OfType(Of CefSharp_Browser).Any = True Then - CefSharp_Browser.Location = Me.Location + If Application.OpenForms().OfType(Of Browser).Any = True Then + Browser.Location = Me.Location Else - CefSharp_Browser.Location = Me.Location - CefSharp_Browser.Show() + Browser.Location = Me.Location + Browser.Show() End If @@ -2276,9 +2271,10 @@ Public Class Main Dim ItemFinshedCount As Integer = 0 Dim Item As New List(Of CRD_List_Item) Item.AddRange(Panel1.Controls.OfType(Of CRD_List_Item)) + Item.Reverse() For i As Integer = 0 To Item.Count - 1 - Debug.WriteLine(Item(i).GetIsStatusFinished().ToString) + 'Debug.WriteLine(Item(i).GetIsStatusFinished().ToString) If Item(i).GetIsStatusFinished() = True Then ItemFinshedCount = ItemFinshedCount + 1 End If @@ -2448,6 +2444,8 @@ Public Class Main Dim ItemFinshedCount As Integer = 0 Dim Item As New List(Of CRD_List_Item) Item.AddRange(Panel1.Controls.OfType(Of CRD_List_Item)) + Item.Reverse() + For i2 As Integer = 0 To Item.Count - 1 If Item(i2).GetIsStatusFinished() = True Then ItemFinshedCount = ItemFinshedCount + 1 @@ -2483,8 +2481,10 @@ Public Class Main b = False If CBool(InStr(ListOfEpisodes(i), "funimation.com/v/")) Then - Dim Episode() As String = ListOfEpisodes(i).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim Episode0() As String = ListOfEpisodes(i).Split(New String() {"?"}, System.StringSplitOptions.RemoveEmptyEntries) + Dim Episode() As String = Episode0(0).Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) Dim v1JsonUrl As String = "https://d33et77evd9bgg.cloudfront.net/data/v1/episodes/" + Episode(Episode.Length - 1) + ".json" + 'MsgBox(v1JsonUrl) Dim v1Json As String = Nothing Try Using client As New WebClient() @@ -2492,6 +2492,7 @@ Public Class Main client.Headers.Add(My.Resources.ffmpeg_user_agend.Replace(Chr(34), "")) v1Json = client.DownloadString(v1JsonUrl) End Using + WebbrowserURL = ListOfEpisodes(i) GetFunimationNewJS_VideoProxy(Nothing, v1Json) Catch ex As Exception Debug.WriteLine("error- getting v1Json data for the bypasss") @@ -2568,12 +2569,9 @@ Public Class Main Return "N/A" End If End Function - Public Sub GetFunimationNewJS_VideoProxy(Optional ByVal v1JsonURL As String = Nothing, Optional ByVal v1JsonData As String = Nothing) + Public Async Sub GetFunimationNewJS_VideoProxy(Optional ByVal v1JsonURL As String = Nothing, Optional ByVal v1JsonData As String = Nothing) Try - Dim Collector As New TaskCookieVisitor - Dim CM As ICookieManager = CefSharp_Browser.WebBrowser1.GetCookieManager - CM.VisitAllCookies(Collector) - Dim list As List(Of Global.CefSharp.Cookie) = Collector.Task.Result() + Dim list As List(Of CoreWebView2Cookie) = Await Browser.WebView2.CoreWebView2.CookieManager.GetCookiesAsync("https://www.funimation.com/") Dim Cookie As String = "" For i As Integer = 0 To list.Count - 1 If CBool(InStr(list.Item(i).Domain, "funimation.com")) Then 'list.Item(i).Domain = "funimation.com" Then @@ -3313,6 +3311,7 @@ Public Class Main Dim Item As New List(Of CRD_List_Item) Item.AddRange(Panel1.Controls.OfType(Of CRD_List_Item)) + Item.Reverse() Dim GeckoHTML As String = My.Resources.htmlTop + vbNewLine + My.Resources.htmlTitlel.Replace("Placeholder", Me.Text.Replace("open the add window to continue", "")) @@ -3393,92 +3392,48 @@ Public Class Main Exit Sub End If 'MsgBox("loaded!") - If CBool(InStr(Address, "crunchyroll.com")) Then + If CBool(InStr(Address, "crunchyroll.com")) Or CBool(InStr(Address, "funimation.com")) Then WebbrowserURL = Address + ScanTimeout.Start() - For i As Integer = 10 To 1 Step -1 - If Application.OpenForms().OfType(Of Anime_Add).Any = True Then - Anime_Add.StatusLabel.Text = "Status: Processing Url " + i.ToString - End If - Me.Text = "Status: Processing Url " + i.ToString - Pause(1) + 'ElseIf CBool(InStr(Address, "funimation.com")) Then - If b = True Then - If Application.OpenForms().OfType(Of Anime_Add).Any = True Then - Anime_Add.StatusLabel.Text = "Status: idle" - End If - Me.Text = "Crunchyroll Downloader" - Grapp_RDY = True - LoadedUrls.Clear() - Debug.WriteLine("canceled....") - Exit Sub - End If - Next - - Debug.WriteLine("LoadedUrls: " + LoadedUrls.Count.ToString) - For i As Integer = 0 To LoadedUrls.Count - 1 - Debug.WriteLine("LoadedUrls: " + LoadedUrls(i)) - Next - - If LoadedUrls.Count > 0 Then - If Application.OpenForms().OfType(Of Anime_Add).Any = True Then - Anime_Add.StatusLabel.Text = "Status: Processing... " - End If - Me.Text = "Status: Processing... " - ProcessUrls() - Debug.WriteLine("ProcessUrls") - Exit Sub - Else - If Application.OpenForms().OfType(Of Anime_Add).Any = True Then - Anime_Add.StatusLabel.Text = "Status: nothing found" - End If - Me.Text = "Status: nothing found" - ProcessUrls() - Debug.WriteLine("3530: nothing found") - Grapp_RDY = True - Exit Sub - End If - - ElseIf CBool(InStr(Address, "funimation.com")) Then - Dim Collector As New TaskCookieVisitor - Dim CM As ICookieManager = CefSharp_Browser.WebBrowser1.GetCookieManager - CM.VisitAllCookies(Collector) - Dim list As List(Of Global.CefSharp.Cookie) = Collector.Task.Result() - Dim Cookie As String = "" - For i As Integer = 0 To list.Count - 1 - If CBool(InStr(list.Item(i).Domain, "funimation.com")) Then 'list.Item(i).Domain = "funimation.com" Then - 'MsgBox(list.Item(i).Name + vbNewLine + list.Item(i).Value) - Cookie = Cookie + list.Item(i).Name + "=" + list.Item(i).Value + ";" - End If - If CBool(InStr(list.Item(i).Domain, "funimation.com")) And CBool(InStr(list.Item(i).Name, "src_token")) Then 'list.Item(i).Domain = "funimation.com" Then - 'MsgBox(list.Item(i).Name + vbNewLine + list.Item(i).Value) - FunimationToken = "Token " + list.Item(i).Value - End If - Next - If b = False Then - WebbrowserCookie = Cookie - WebbrowserURL = Address - Text = "Crunchyroll Downloader" - For i As Integer = 10 To 0 Step -1 - Anime_Add.StatusLabel.Text = "Status: checking traffic - " + i.ToString - Pause(1) - Next - Dim Evaluator = New Thread(Sub() Me.ProcessUrls()) - Evaluator.Start() - Exit Sub - End If - Else - WebbrowserURL = Address - Text = "Crunchyroll Downloader" - For i As Integer = 10 To 0 Step -1 - Anime_Add.StatusLabel.Text = "Status: checking traffic - " + i.ToString - Pause(1) - Next - ProcessUrls() - 'Pause(10) - 'ProcessUrls() + ' Dim list As List(Of CoreWebView2Cookie) = Await Browser.WebView2.CoreWebView2.CookieManager.GetCookiesAsync("https://www.funimation.com") + ' Dim Cookie As String = "" + ' For i As Integer = 0 To list.Count - 1 + ' If CBool(InStr(list.Item(i).Domain, "funimation.com")) Then 'list.Item(i).Domain = "funimation.com" Then + ' 'MsgBox(list.Item(i).Name + vbNewLine + list.Item(i).Value) + ' Cookie = Cookie + list.Item(i).Name + "=" + list.Item(i).Value + ";" + ' End If + ' If CBool(InStr(list.Item(i).Domain, "funimation.com")) And CBool(InStr(list.Item(i).Name, "src_token")) Then 'list.Item(i).Domain = "funimation.com" Then + ' 'MsgBox(list.Item(i).Name + vbNewLine + list.Item(i).Value) + ' FunimationToken = "Token " + list.Item(i).Value + ' End If + ' Next + ' If b = False Then + ' WebbrowserCookie = Cookie + ' WebbrowserURL = Address + ' Text = "Crunchyroll Downloader" + ' For i As Integer = 10 To 0 Step -1 + ' Anime_Add.StatusLabel.Text = "Status: checking traffic - " + i.ToString + ' Pause(1) + ' Next + ' Dim Evaluator = New Thread(Sub() Me.ProcessUrls()) + ' Evaluator.Start() + ' Exit Sub + ' End If + 'Else + ' WebbrowserURL = Address + ' Text = "Crunchyroll Downloader" + ' For i As Integer = 10 To 0 Step -1 + ' Anime_Add.StatusLabel.Text = "Status: checking traffic - " + i.ToString + ' Pause(1) + ' Next + ' ProcessUrls() + ' 'Pause(10) + ' 'ProcessUrls() End If 'End If End Sub @@ -3487,6 +3442,64 @@ Public Class Main #End Region + + Private Sub Process(sender As Object, e As EventArgs) Handles ScanTimeout.Tick + If b = True Then + If Application.OpenForms().OfType(Of Anime_Add).Any = True Then + Anime_Add.StatusLabel.Text = "Status: idle" + End If + Me.Text = "Crunchyroll Downloader" + Grapp_RDY = True + LoadedUrls.Clear() + Debug.WriteLine("canceled....") + ProcessCounting = 30 + ScanTimeout.Enabled = False + Exit Sub + End If + + If LoadedUrls.Count = 0 And ProcessCounting > 0 Then + + If Application.OpenForms().OfType(Of Anime_Add).Any = True Then + Anime_Add.StatusLabel.Text = "Status: Processing Url " + ProcessCounting.ToString + End If + Me.Text = "Status: Processing Url " + ProcessCounting.ToString + + ProcessCounting = ProcessCounting - 1 + Exit Sub + ElseIf LoadedUrls.Count = 0 And ProcessCounting > 0 Then + If Application.OpenForms().OfType(Of Anime_Add).Any = True Then + Anime_Add.StatusLabel.Text = "Status: nothing found" + End If + Me.Text = "Status: nothing found" + 'ProcessUrls() + b = True + Debug.WriteLine("3412: nothing found") + Grapp_RDY = True + ProcessCounting = 30 + ScanTimeout.Enabled = False + Exit Sub + End If + + + Debug.WriteLine("LoadedUrls: " + LoadedUrls.Count.ToString) + 'For i As Integer = 0 To LoadedUrls.Count - 1 + ' Debug.WriteLine("LoadedUrls: " + LoadedUrls(i)) + 'Next + + If Application.OpenForms().OfType(Of Anime_Add).Any = True Then + Anime_Add.StatusLabel.Text = "Status: Processing... " + End If + Me.Text = "Status: Processing... " + ProcessUrls() + Debug.WriteLine("ProcessUrls") + + ProcessCounting = 30 + ScanTimeout.Enabled = False + Exit Sub + + + + End Sub Public Sub ProcessUrls() Debug.WriteLine(LoadedUrls.Count.ToString) Debug.WriteLine(Date.Now.ToString + " Thread Name: " + Thread.CurrentThread.Name) @@ -3505,7 +3518,7 @@ Public Class Main GetBetaVideoProxy(requesturl, WebbrowserURL) b = True - 'CefSharp_Browser.WebBrowser1.LoadUrl(requesturl) + 'Browser.WebBrowser1.LoadUrl(requesturl) LoadedUrls.Clear() @@ -3570,7 +3583,7 @@ Public Class Main Me.Text = "Status: Crunchyroll season found." Debug.WriteLine("Crunchyroll season found") GetBetaSeasons(requesturl) - 'CefSharp_Browser.WebBrowser1.LoadUrl(requesturl) + 'Browser.WebBrowser1.LoadUrl(requesturl) b = True LoadedUrls.Clear() Me.Text = "Crunchyroll Downloader" @@ -3618,21 +3631,6 @@ Public Class Main Exit Sub End If If CBool(InStr(requesturl, "https://title-api.prd.funimationsvc.com")) And CBool(InStr(requesturl, "?region=")) Then - Try - Dim Collector As New TaskCookieVisitor - Dim CM As ICookieManager = CefSharp_Browser.WebBrowser1.GetCookieManager - CM.VisitAllCookies(Collector) - Dim list As List(Of Global.CefSharp.Cookie) = Collector.Task.Result() - Dim Cookie As String = "" - For ii As Integer = 0 To list.Count - 1 - If CBool(InStr(list.Item(ii).Domain, "funimation.com")) Then 'list.Item(i).Domain = "funimation.com" Then - 'MsgBox(list.Item(i).Name + vbNewLine + list.Item(i).Value) - Cookie = Cookie + list.Item(ii).Name + "=" + list.Item(ii).Value + ";" - End If - Next - WebbrowserCookie = Cookie - Catch ex As Exception - End Try If FunimationAPIRegion = Nothing Then Me.Invoke(New Action(Function() As Object Dim parms As String() = requesturl.Split(New String() {"?region="}, System.StringSplitOptions.RemoveEmptyEntries) @@ -3641,29 +3639,9 @@ Public Class Main End Function)) End If If b = False Then - 'If CBool(InStr(requesturl, "https://title-api.prd.funimationsvc.com/v1/episodes/")) Then - ' GetFunimationJS_VideoProxy(requesturl) - ' Debug.WriteLine("processing :" + requesturl) - ' b = True - ' Exit For - 'Else + If CBool(InStr(requesturl, "https://title-api.prd.funimationsvc.com/v1/show")) And CBool(InStr(requesturl, "/episodes/")) Then b = True - Try - Dim Collector As New TaskCookieVisitor - Dim CM As ICookieManager = CefSharp_Browser.WebBrowser1.GetCookieManager - CM.VisitAllCookies(Collector) - Dim list As List(Of Global.CefSharp.Cookie) = Collector.Task.Result() - Dim Cookie As String = "" - For ii As Integer = 0 To list.Count - 1 - If CBool(InStr(list.Item(ii).Domain, "funimation.com")) Then 'list.Item(i).Domain = "funimation.com" Then - 'MsgBox(list.Item(i).Name + vbNewLine + list.Item(i).Value) - Cookie = Cookie + list.Item(ii).Name + "=" + list.Item(ii).Value + ";" - End If - Next - WebbrowserCookie = Cookie - Catch ex As Exception - End Try GetFunimationNewJS_VideoProxy(requesturl) Debug.WriteLine("processing :" + requesturl) LoadedUrls.Clear() @@ -3687,25 +3665,25 @@ Public Class Main End Sub Public Sub Navigate(ByVal Url As String) - If Application.OpenForms().OfType(Of CefSharp_Browser).Any = True Then + If Application.OpenForms().OfType(Of Browser).Any = True Then If InvokeRequired = True Then Me.Invoke(New Action(Function() As Object - CefSharp_Browser.WebBrowser1.Load(Url) + Browser.WebView2.CoreWebView2.Navigate(Url) Return Nothing End Function)) Else - CefSharp_Browser.WebBrowser1.Load(Url) + Browser.WebView2.CoreWebView2.Navigate(Url) End If Else If InvokeRequired = True Then Me.Invoke(New Action(Function() As Object - CefSharp_Browser.Show() - CefSharp_Browser.WebBrowser1.Load(Url) + Browser.Show() + Browser.WebView2.CoreWebView2.Navigate(Url) Return Nothing End Function)) Else - CefSharp_Browser.Show() - CefSharp_Browser.WebBrowser1.Load(Url) + Browser.Show() + Browser.WebView2.CoreWebView2.Navigate(Url) End If End If End Sub @@ -4149,10 +4127,6 @@ Public Class Main Me.WindowState = System.Windows.Forms.FormWindowState.Minimized End Sub - Private Sub Button1_Click_2(sender As Object, e As EventArgs) - network_scan.Show() - End Sub - Private Sub Timer4_Tick(sender As Object, e As EventArgs) Handles Timer4.Tick If Application.OpenForms().OfType(Of Anime_Add).Any = False Then @@ -4170,14 +4144,14 @@ Public Class Main Panel1.Select() End Sub - Private Sub TestDownloadToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles TestDownloadToolStripMenuItem.Click + Private Async Sub Funimation_Token_Click(sender As Object, e As EventArgs) Handles Funimation_Token.Click Dim Token As String = Nothing Try - Dim Collector As New TaskCookieVisitor - Dim CM As ICookieManager = CefSharp_Browser.WebBrowser1.GetCookieManager - CM.VisitAllCookies(Collector) Dim DeviceRegion As String = Nothing - Dim list As List(Of Global.CefSharp.Cookie) = Collector.Task.Result() + + 'Browser.GetCookies() + + Dim list As List(Of CoreWebView2Cookie) = Await Browser.WebView2.CoreWebView2.CookieManager.GetCookiesAsync("https://www.funimation.com/") Dim Cookie As String = "" For i As Integer = 0 To list.Count - 1 If CBool(InStr(list.Item(i).Domain, "funimation.com")) Then 'list.Item(i).Domain = "funimation.com" Then @@ -4242,8 +4216,12 @@ Public Class Main Private Sub CRCookieToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CRCookieToolStripMenuItem.Click 'MsgBox(Curl(InputBox("test", "test"))) + 'For i As Integer = 0 To CookieList.Count - 1 - MsgBox(CR_Cookies) + + 'Next + MsgBox(CookieList.Count.ToString) + 'MsgBox(CR_Cookies) End Sub Private Sub ClearAllSettingsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ClearAllSettingsToolStripMenuItem.Click @@ -4290,6 +4268,8 @@ Public Class Main Dim Item As New List(Of CRD_List_Item) Item.AddRange(Panel1.Controls.OfType(Of CRD_List_Item)) + Item.Reverse() + For s As Integer = 0 To Item.Count - 1 Item(s).SetBounds(0, 142 * s, W - 2, 142) If Debug2 = True Then @@ -4326,6 +4306,8 @@ Public Class Main + + #End Region End Class diff --git a/Crunchyroll Downloader/MaxPath.resx b/Crunchyroll Downloader/MaxPath.resx deleted file mode 100644 index 1af7de1..0000000 --- a/Crunchyroll Downloader/MaxPath.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/Crunchyroll Downloader/My Project/AssemblyInfo.vb b/Crunchyroll Downloader/My Project/AssemblyInfo.vb index a4199b5..65fb66c 100644 --- a/Crunchyroll Downloader/My Project/AssemblyInfo.vb +++ b/Crunchyroll Downloader/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - - + + diff --git a/Crunchyroll Downloader/My Project/Resources.Designer.vb b/Crunchyroll Downloader/My Project/Resources.Designer.vb index 4915e51..21dddd1 100644 --- a/Crunchyroll Downloader/My Project/Resources.Designer.vb +++ b/Crunchyroll Downloader/My Project/Resources.Designer.vb @@ -1,1013 +1,1012 @@ -'------------------------------------------------------------------------------ -' -' Dieser Code wurde von einem Tool generiert. -' Laufzeitversion:4.0.30319.42000 -' -' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -' der Code erneut generiert wird. -' -'------------------------------------------------------------------------------ - -Option Strict On -Option Explicit On - -Imports System - -Namespace My.Resources - - 'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert - '-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. - 'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen - 'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. - ''' - ''' Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - ''' - _ - Friend Module Resources - - Private resourceMan As Global.System.Resources.ResourceManager - - Private resourceCulture As Global.System.Globalization.CultureInfo - - ''' - ''' Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - ''' - _ - Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager - Get - If Object.ReferenceEquals(resourceMan, Nothing) Then - Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Crunchyroll_Downloader.Resources", GetType(Resources).Assembly) - resourceMan = temp - End If - Return resourceMan - End Get - End Property - - ''' - ''' Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - ''' Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - ''' - _ - Friend Property Culture() As Global.System.Globalization.CultureInfo - Get - Return resourceCulture - End Get - Set - resourceCulture = value - End Set - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property about_icon() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("about_icon", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property add_mass_cancel() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("add_mass_cancel", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property add_mass_cancel_hover() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("add_mass_cancel_hover", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die {"sources":[{"file":" ähnelt. - ''' - Friend ReadOnly Property AoD_files() As String - Get - Return ResourceManager.GetString("AoD_files", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <h1 itemprop="name"> ähnelt. - ''' - Friend ReadOnly Property AoD_HTML_Anime_Title() As String - Get - Return ResourceManager.GetString("AoD_HTML_Anime_Title", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <h3 class="episodebox-title" title=" ähnelt. - ''' - Friend ReadOnly Property AoD_HTML_Episode_Title() As String - Get - Return ResourceManager.GetString("AoD_HTML_Episode_Title", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die "image":" ähnelt. - ''' - Friend ReadOnly Property AoD_Image() As String - Get - Return ResourceManager.GetString("AoD_Image", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die "mediaid": ähnelt. - ''' - Friend ReadOnly Property AoD_MediaID() As String - Get - Return ResourceManager.GetString("AoD_MediaID", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die "title":" ähnelt. - ''' - Friend ReadOnly Property AoD_Titel() As String - Get - Return ResourceManager.GetString("AoD_Titel", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die [Script Info] - '''; Template for error handling in the Crunchyrol Downloader by hama3254 https://github.com/hama3254/Crunchyroll-Downloader-v3.0 - '''; ass file from https://github.com/Aegisub/Aegisub/blob/master/automation/v4-docs/template-scripting-ideas.ass - '''; Script generated by Aegisub v2.00 PRE-RELEASE (SVN r939, jfs) - '''; http://www.aegisub.net - '''Title: Default Aegisub file - '''ScriptType: v4.00+ - '''WrapStyle: 0 - '''PlayResX: 640 - '''PlayResY: 480 - '''Video Aspect Ratio: 0 - '''Video Zoom: 6 - '''Video Position: 0 - ''' - '''[V4+ Styles] - ''' [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. - ''' - Friend ReadOnly Property ass_template() As String - Get - Return ResourceManager.GetString("ass_template", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property balken() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("balken", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property balken_console() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("balken_console", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <img id="footer_country_flag" src="https://www.crunchyroll.com/i/country_flags/ ähnelt. - ''' - Friend ReadOnly Property CC_String() As String - Get - Return ResourceManager.GetString("CC_String", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die display_episode_number":" ähnelt. - ''' - Friend ReadOnly Property CR_Episode_Nr() As String - Get - Return ResourceManager.GetString("CR_Episode_Nr", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <meta property="og:url" content=" ähnelt. - ''' - Friend ReadOnly Property CR_Head_Url_Split() As String - Get - Return ResourceManager.GetString("CR_Head_Url_Split", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <h4 id="showmedia_about_name" class="strong">“ ähnelt. - ''' - Friend ReadOnly Property CR_MediaName() As String - Get - Return ResourceManager.GetString("CR_MediaName", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die ”</h4> ähnelt. - ''' - Friend ReadOnly Property CR_MediaName2() As String - Get - Return ResourceManager.GetString("CR_MediaName2", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die </span> ähnelt. - ''' - Friend ReadOnly Property CR_MovieBT() As String - Get - Return ResourceManager.GetString("CR_MovieBT", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <span itemprop="name"> ähnelt. - ''' - Friend ReadOnly Property CR_MovieTop() As String - Get - Return ResourceManager.GetString("CR_MovieTop", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die seasonNumber":" ähnelt. - ''' - Friend ReadOnly Property CR_Season_Nr() As String - Get - Return ResourceManager.GetString("CR_Season_Nr", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property crdSettings_Button_SafeExit() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("crdSettings_Button_SafeExit", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property crdSettings_Button_SafeExit_hover() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("crdSettings_Button_SafeExit_hover", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property DialogNotFound_Submit() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("DialogNotFound_Submit", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property DialogNotFound_Submit_hover() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("DialogNotFound_Submit_hover", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property download_subs() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("download_subs", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property download_subs_hover() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("download_subs_hover", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> - '''<html><head> - '''<title>404 Not Found</title> - '''</head><body> - '''<h1>Not Found</h1> - '''<p>The requested URL was not found on this server.</p> - '''<hr> - '''<address>Server at Crunchyroll Downloader Port 8080</address> - '''</body></html> ähnelt. - ''' - Friend ReadOnly Property Error_404() As String - Get - Return ResourceManager.GetString("Error_404", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die ;FFMETADATA1 - '''title=[Titel] - ''' - '''[CHAPTER] - '''TIMEBASE=1/1000 - '''START=[Start] - '''END=[END] - '''title=Opening - ''' - '''[CHAPTER] - '''TIMEBASE=1/1000 - '''START=[after] - '''END=[duration_ms] ähnelt. - ''' - Friend ReadOnly Property ffmpeg_metadata() As String - Get - Return ResourceManager.GetString("ffmpeg_metadata", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die ;FFMETADATA1 - '''title=[Titel] - ''' - '''[CHAPTER] - '''TIMEBASE=1/1000 - '''START=1 - '''END=[Start-1] - ''' - '''[CHAPTER] - '''TIMEBASE=1/1000 - '''START=[Start] - '''END=[duration_ms] - '''title=Ending ähnelt. - ''' - Friend ReadOnly Property ffmpeg_metadata_out() As String - Get - Return ResourceManager.GetString("ffmpeg_metadata_out", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0" ähnelt. - ''' - Friend ReadOnly Property ffmpeg_user_agend() As String - Get - Return ResourceManager.GetString("ffmpeg_user_agend", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die src="/player/ ähnelt. - ''' - Friend ReadOnly Property Funimation_Player_ID() As String - Get - Return ResourceManager.GetString("Funimation_Player_ID", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die src="https://www.funimation.com/player/ ähnelt. - ''' - Friend ReadOnly Property Funimation_Player_ID_2() As String - Get - Return ResourceManager.GetString("Funimation_Player_ID_2", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <a class="trackVideo ng-binding" href=" ähnelt. - ''' - Friend ReadOnly Property Funimation_Split_1() As String - Get - Return ResourceManager.GetString("Funimation_Split_1", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die "> ähnelt. - ''' - Friend ReadOnly Property Funimation_Split_2() As String - Get - Return ResourceManager.GetString("Funimation_Split_2", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die "src": ähnelt. - ''' - Friend ReadOnly Property Funimation_src_string() As String - Get - Return ResourceManager.GetString("Funimation_src_string", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die {"src": " ähnelt. - ''' - Friend ReadOnly Property Funimation_subs_src() As String - Get - Return ResourceManager.GetString("Funimation_subs_src", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die ", "kind": "subtitle", "type": "CC", "language": " ähnelt. - ''' - Friend ReadOnly Property Funimation_Subtitle_String() As String - Get - Return ResourceManager.GetString("Funimation_Subtitle_String", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die ", "kind": "subtitle", "type": "Full", "language": " ähnelt. - ''' - Friend ReadOnly Property Funimation_Subtitle_String2() As String - Get - Return ResourceManager.GetString("Funimation_Subtitle_String2", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die ", "kind": "subtitle", "type": "full", "language": " ähnelt. - ''' - Friend ReadOnly Property Funimation_Subtitle_String3() As String - Get - Return ResourceManager.GetString("Funimation_Subtitle_String3", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <meta property="og:image" content=" ähnelt. - ''' - Friend ReadOnly Property Funimation_thumbnail() As String - Get - Return ResourceManager.GetString("Funimation_thumbnail", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die ","resolution":"adaptive" ähnelt. - ''' - Friend ReadOnly Property hls_endString() As String - Get - Return ResourceManager.GetString("hls_endString", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die "format":"adaptive_hls", ähnelt. - ''' - Friend ReadOnly Property hls_Value() As String - Get - Return ResourceManager.GetString("hls_Value", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <script> - ''' - '''setInterval(function loadXMLDoc() { - ''' var xhttp = new XMLHttpRequest(); - ''' xhttp.onreadystatechange = function() { - ''' if (this.readyState == 4 && this.status == 200) { - ''' document.getElementById("bodypage").innerHTML = this.responseText; - ''' //console.log(this.responseText); - ''' } - ''' }; - ''' xhttp.open("GET", "/", true); - ''' xhttp.send(); - '''}, 1000); - '''</script> - '''</body></html> ähnelt. - ''' - Friend ReadOnly Property htmlEnd() As String - Get - Return ResourceManager.GetString("htmlEnd", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die </a> - ''' - '''</div> - ''' - '''</div> - ''' - '''</div> - ''' - '''<img alt="image error" src="balken1.png" class="class-balken"> ähnelt. - ''' - Friend ReadOnly Property htmlnachHardSubs() As String - Get - Return ResourceManager.GetString("htmlnachHardSubs", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die " class="imagestyle"> - ''' - '''<div> - ''' - '''<span class="titel" dir="auto"> ähnelt. - ''' - Friend ReadOnly Property htmlnachTumbnail() As String - Get - Return ResourceManager.GetString("htmlnachTumbnail", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <html><head><meta name="color-scheme" content="light dark"></head><pre style="word-wrap: break-word; white-space: pre-wrap;"> ähnelt. - ''' - Friend ReadOnly Property htmlReplace() As String - Get - Return ResourceManager.GetString("htmlReplace", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <a class="main_titel">Placeholder</a> - '''<img alt="image error" src="balken.png" class="class-balken"> ähnelt. - ''' - Friend ReadOnly Property htmlTitlel() As String - Get - Return ResourceManager.GetString("htmlTitlel", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <!DOCTYPE html> - '''<head> - '''<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - '''</head> - '''<html> - ''' <title>CRD</title> - ''' - ''' <style> - ''' .main-bg {margin:0 0 0 0;background-color:#F2F2F2;font-family:Consolas;font-size:16px;} - ''' .div-spacer{width:16px;height:110px;display:block;margin-bottom:14px;position:relative} - ''' .div-episode{width:730px;height:110px;display:block;margin-bottom:14px;position:relative} - ''' .class-balken{width:735px;height:8px;display:block;margin-bottom:4px;marg [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. - ''' - Friend ReadOnly Property htmlTop() As String - Get - Return ResourceManager.GetString("htmlTop", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die </span> - ''' - '''<div class="progressbar"> - ''' - '''<div class="progressbar-value" style="width: 0%"></div> - ''' - '''</div> - '''<span dir="auto" class='percenttext'>0%</span> - '''<div> - '''<br> - '''<span dir="auto" class="resotext"> ähnelt. - ''' - Friend ReadOnly Property htmlvorAufloesung() As String - Get - Return ResourceManager.GetString("htmlvorAufloesung", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die "> <img alt="image error" src="cc1.png" class="class-cc"> ähnelt. - ''' - Friend ReadOnly Property htmlvorHardSubs() As String - Get - Return ResourceManager.GetString("htmlvorHardSubs", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die </span> - ''' - '''<a href="#" class="cc-wert" title="Softsubs: ähnelt. - ''' - Friend ReadOnly Property htmlvorSoftSubs() As String - Get - Return ResourceManager.GetString("htmlvorSoftSubs", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die - ''' <div class="div-episode"> - ''' - '''<img alt="image error" src=" ähnelt. - ''' - Friend ReadOnly Property htmlvorThumbnail() As String - Get - Return ResourceManager.GetString("htmlvorThumbnail", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol). - ''' - Friend ReadOnly Property icon() As System.Drawing.Icon - Get - Dim obj As Object = ResourceManager.GetObject("icon", resourceCulture) - Return CType(obj,System.Drawing.Icon) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die "error":false,"code":"ok" ähnelt. - ''' - Friend ReadOnly Property LoginSuccess() As String - Get - Return ResourceManager.GetString("LoginSuccess", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_add() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_add", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_add_invert() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_add_invert", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_add_invert_dark() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_add_invert_dark", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_background() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_background", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_browser() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_browser", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_browser_invert() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_browser_invert", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_browser_invert_dark() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_browser_invert_dark", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_button_download_deactivate() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_button_download_deactivate", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_button_download_default() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_button_download_default", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_button_download_hovert() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_button_download_hovert", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_close() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_close", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_close_dark() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_close_dark", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_close_dark_hover() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_close_dark_hover", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_close_hover() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_close_hover", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_del() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_del", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_mini() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_mini", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_mini_dark() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_mini_dark", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_mini_dark_hover() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_mini_dark_hover", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_mini_red() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_mini_red", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_pause() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_pause", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_pause_hover() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_pause_hover", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_pause_play() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_pause_play", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_pause_play_hover() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_pause_play_hover", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_setting_invert() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_setting_invert", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_setting_invert_dark() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_setting_invert_dark", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property main_settings() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("main_settings", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. - ''' - Friend ReadOnly Property Main_top() As System.Drawing.Bitmap - Get - Dim obj As Object = ResourceManager.GetObject("Main_top", resourceCulture) - Return CType(obj,System.Drawing.Bitmap) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die </p> - ''' </div> - ''' </body> - '''</html> ähnelt. - ''' - Friend ReadOnly Property Post_error_Bottom() As String - Get - Return ResourceManager.GetString("Post_error_Bottom", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <html> - ''' <head> - ''' <meta charset="UTF-8"> - ''' </head> - ''' <style> - ''' body { - ''' text-align: center; - ''' padding: 40px 0; - ''' background: #EBF0F5; - ''' } - ''' h1 { - ''' color: #ad3f26; - ''' font-family: sans-serif; - ''' font-weight: 900; - ''' font-size: 40px; - ''' margin-bottom: 10px; - ''' } - ''' p { - ''' color: #404F5E; - ''' font-family: sans-serif; - ''' font-size:20px; - ''' margin: 0; - ''' } - ''' i { - ''' co [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. - ''' - Friend ReadOnly Property Post_error_Top() As String - Get - Return ResourceManager.GetString("Post_error_Top", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die <!DOCTYPE html> - '''<html> - ''' <title>CRD</title> - ''' - ''' <style> - ''' .main-bg {margin:0 0 0 -36px;background-color:#757575;} - ''' .imagestyle{width:156px;height:88px;display:block;margin-bottom:4px} .ulStyle{margin:0 0 0 -10px;display:block;position:relative;margin-top:8px} - ''' .ulStyle li{margin-left:12px;float:left;display:block;position:relative} - ''' .listyle{width:156px;display:block;background:#fff;padding:16px;margin-bottom:14px;position:relative;background-color:#b5b3b3} - ''' .progressbar{height:14p [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. - ''' - Friend ReadOnly Property Startuphtml() As String - Get - Return ResourceManager.GetString("Startuphtml", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die "thumbnail":{"url":" ähnelt. - ''' - Friend ReadOnly Property thumbnailString() As String - Get - Return ResourceManager.GetString("thumbnailString", resourceCulture) - End Get - End Property - - ''' - ''' Sucht eine lokalisierte Zeichenfolge, die US cookies can't be used as long you are logged in. - '''I delete the curremt session with the unlock, if you want to be logged in with the US cookie you need to enter you data on the left. ähnelt. - ''' - Friend ReadOnly Property US_ToolTip() As String - Get - Return ResourceManager.GetString("US_ToolTip", resourceCulture) - End Get - End Property - End Module -End Namespace +'------------------------------------------------------------------------------ +' +' Dieser Code wurde von einem Tool generiert. +' Laufzeitversion:4.0.30319.42000 +' +' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +' der Code erneut generiert wird. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + '-Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + 'Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + 'mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + ''' + ''' Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Crunchyroll_Downloader.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + ''' Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property about_icon() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("about_icon", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property add_mass_cancel() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("add_mass_cancel", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property add_mass_cancel_hover() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("add_mass_cancel_hover", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die {"sources":[{"file":" ähnelt. + ''' + Friend ReadOnly Property AoD_files() As String + Get + Return ResourceManager.GetString("AoD_files", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <h1 itemprop="name"> ähnelt. + ''' + Friend ReadOnly Property AoD_HTML_Anime_Title() As String + Get + Return ResourceManager.GetString("AoD_HTML_Anime_Title", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <h3 class="episodebox-title" title=" ähnelt. + ''' + Friend ReadOnly Property AoD_HTML_Episode_Title() As String + Get + Return ResourceManager.GetString("AoD_HTML_Episode_Title", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die "image":" ähnelt. + ''' + Friend ReadOnly Property AoD_Image() As String + Get + Return ResourceManager.GetString("AoD_Image", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die "mediaid": ähnelt. + ''' + Friend ReadOnly Property AoD_MediaID() As String + Get + Return ResourceManager.GetString("AoD_MediaID", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die "title":" ähnelt. + ''' + Friend ReadOnly Property AoD_Titel() As String + Get + Return ResourceManager.GetString("AoD_Titel", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die [Script Info] + '''; Template for error handling in the Crunchyrol Downloader by hama3254 https://github.com/hama3254/Crunchyroll-Downloader-v3.0 + '''; ass file from https://github.com/Aegisub/Aegisub/blob/master/automation/v4-docs/template-scripting-ideas.ass + '''; Script generated by Aegisub v2.00 PRE-RELEASE (SVN r939, jfs) + '''; http://www.aegisub.net + '''Title: Default Aegisub file + '''ScriptType: v4.00+ + '''WrapStyle: 0 + '''PlayResX: 640 + '''PlayResY: 480 + '''Video Aspect Ratio: 0 + '''Video Zoom: 6 + '''Video Position: 0 + ''' + '''[V4+ Styles] ''' [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. + ''' + Friend ReadOnly Property ass_template() As String + Get + Return ResourceManager.GetString("ass_template", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property balken() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("balken", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property balken_console() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("balken_console", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <img id="footer_country_flag" src="https://www.crunchyroll.com/i/country_flags/ ähnelt. + ''' + Friend ReadOnly Property CC_String() As String + Get + Return ResourceManager.GetString("CC_String", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die display_episode_number":" ähnelt. + ''' + Friend ReadOnly Property CR_Episode_Nr() As String + Get + Return ResourceManager.GetString("CR_Episode_Nr", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <meta property="og:url" content=" ähnelt. + ''' + Friend ReadOnly Property CR_Head_Url_Split() As String + Get + Return ResourceManager.GetString("CR_Head_Url_Split", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <h4 id="showmedia_about_name" class="strong">“ ähnelt. + ''' + Friend ReadOnly Property CR_MediaName() As String + Get + Return ResourceManager.GetString("CR_MediaName", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die ”</h4> ähnelt. + ''' + Friend ReadOnly Property CR_MediaName2() As String + Get + Return ResourceManager.GetString("CR_MediaName2", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die </span> ähnelt. + ''' + Friend ReadOnly Property CR_MovieBT() As String + Get + Return ResourceManager.GetString("CR_MovieBT", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <span itemprop="name"> ähnelt. + ''' + Friend ReadOnly Property CR_MovieTop() As String + Get + Return ResourceManager.GetString("CR_MovieTop", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die seasonNumber":" ähnelt. + ''' + Friend ReadOnly Property CR_Season_Nr() As String + Get + Return ResourceManager.GetString("CR_Season_Nr", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property crdSettings_Button_SafeExit() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("crdSettings_Button_SafeExit", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property crdSettings_Button_SafeExit_hover() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("crdSettings_Button_SafeExit_hover", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property DialogNotFound_Submit() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("DialogNotFound_Submit", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property DialogNotFound_Submit_hover() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("DialogNotFound_Submit_hover", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property download_subs() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("download_subs", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property download_subs_hover() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("download_subs_hover", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> + '''<html><head> + '''<title>404 Not Found</title> + '''</head><body> + '''<h1>Not Found</h1> + '''<p>The requested URL was not found on this server.</p> + '''<hr> + '''<address>Server at Crunchyroll Downloader Port 8080</address> + '''</body></html> ähnelt. + ''' + Friend ReadOnly Property Error_404() As String + Get + Return ResourceManager.GetString("Error_404", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die ;FFMETADATA1 + '''title=[Titel] + ''' + '''[CHAPTER] + '''TIMEBASE=1/1000 + '''START=[Start] + '''END=[END] + '''title=Opening + ''' + '''[CHAPTER] + '''TIMEBASE=1/1000 + '''START=[after] + '''END=[duration_ms] ähnelt. + ''' + Friend ReadOnly Property ffmpeg_metadata() As String + Get + Return ResourceManager.GetString("ffmpeg_metadata", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die ;FFMETADATA1 + '''title=[Titel] + ''' + '''[CHAPTER] + '''TIMEBASE=1/1000 + '''START=1 + '''END=[Start-1] + ''' + '''[CHAPTER] + '''TIMEBASE=1/1000 + '''START=[Start] + '''END=[duration_ms] + '''title=Ending ähnelt. + ''' + Friend ReadOnly Property ffmpeg_metadata_out() As String + Get + Return ResourceManager.GetString("ffmpeg_metadata_out", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0" ähnelt. + ''' + Friend ReadOnly Property ffmpeg_user_agend() As String + Get + Return ResourceManager.GetString("ffmpeg_user_agend", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die src="/player/ ähnelt. + ''' + Friend ReadOnly Property Funimation_Player_ID() As String + Get + Return ResourceManager.GetString("Funimation_Player_ID", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die src="https://www.funimation.com/player/ ähnelt. + ''' + Friend ReadOnly Property Funimation_Player_ID_2() As String + Get + Return ResourceManager.GetString("Funimation_Player_ID_2", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <a class="trackVideo ng-binding" href=" ähnelt. + ''' + Friend ReadOnly Property Funimation_Split_1() As String + Get + Return ResourceManager.GetString("Funimation_Split_1", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die "> ähnelt. + ''' + Friend ReadOnly Property Funimation_Split_2() As String + Get + Return ResourceManager.GetString("Funimation_Split_2", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die "src": ähnelt. + ''' + Friend ReadOnly Property Funimation_src_string() As String + Get + Return ResourceManager.GetString("Funimation_src_string", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die {"src": " ähnelt. + ''' + Friend ReadOnly Property Funimation_subs_src() As String + Get + Return ResourceManager.GetString("Funimation_subs_src", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die ", "kind": "subtitle", "type": "CC", "language": " ähnelt. + ''' + Friend ReadOnly Property Funimation_Subtitle_String() As String + Get + Return ResourceManager.GetString("Funimation_Subtitle_String", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die ", "kind": "subtitle", "type": "Full", "language": " ähnelt. + ''' + Friend ReadOnly Property Funimation_Subtitle_String2() As String + Get + Return ResourceManager.GetString("Funimation_Subtitle_String2", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die ", "kind": "subtitle", "type": "full", "language": " ähnelt. + ''' + Friend ReadOnly Property Funimation_Subtitle_String3() As String + Get + Return ResourceManager.GetString("Funimation_Subtitle_String3", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <meta property="og:image" content=" ähnelt. + ''' + Friend ReadOnly Property Funimation_thumbnail() As String + Get + Return ResourceManager.GetString("Funimation_thumbnail", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die ","resolution":"adaptive" ähnelt. + ''' + Friend ReadOnly Property hls_endString() As String + Get + Return ResourceManager.GetString("hls_endString", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die "format":"adaptive_hls", ähnelt. + ''' + Friend ReadOnly Property hls_Value() As String + Get + Return ResourceManager.GetString("hls_Value", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <script> + ''' + '''setInterval(function loadXMLDoc() { + ''' var xhttp = new XMLHttpRequest(); + ''' xhttp.onreadystatechange = function() { + ''' if (this.readyState == 4 && this.status == 200) { + ''' document.getElementById("bodypage").innerHTML = this.responseText; + ''' //console.log(this.responseText); + ''' } + ''' }; + ''' xhttp.open("GET", "/", true); + ''' xhttp.send(); + '''}, 1000); + '''</script> + '''</body></html> ähnelt. + ''' + Friend ReadOnly Property htmlEnd() As String + Get + Return ResourceManager.GetString("htmlEnd", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die </a> + ''' + '''</div> + ''' + '''</div> + ''' + '''</div> + ''' + '''<img alt="image error" src="balken1.png" class="class-balken"> ähnelt. + ''' + Friend ReadOnly Property htmlnachHardSubs() As String + Get + Return ResourceManager.GetString("htmlnachHardSubs", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die " class="imagestyle"> + ''' + '''<div> + ''' + '''<span class="titel" dir="auto"> ähnelt. + ''' + Friend ReadOnly Property htmlnachTumbnail() As String + Get + Return ResourceManager.GetString("htmlnachTumbnail", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <html><head><meta name="color-scheme" content="light dark"></head><pre style="word-wrap: break-word; white-space: pre-wrap;"> ähnelt. + ''' + Friend ReadOnly Property htmlReplace() As String + Get + Return ResourceManager.GetString("htmlReplace", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <a class="main_titel">Placeholder</a> + '''<img alt="image error" src="balken.png" class="class-balken"> ähnelt. + ''' + Friend ReadOnly Property htmlTitlel() As String + Get + Return ResourceManager.GetString("htmlTitlel", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <!DOCTYPE html> + '''<head> + '''<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> + '''</head> + '''<html> + ''' <title>CRD</title> + ''' + ''' <style> + ''' .main-bg {margin:0 0 0 0;background-color:#F2F2F2;font-family:Consolas;font-size:16px;} + ''' .div-spacer{width:16px;height:110px;display:block;margin-bottom:14px;position:relative} + ''' .div-episode{width:730px;height:110px;display:block;margin-bottom:14px;position:relative} + ''' .class-balken{width:735px;height:8px;display:block;margin-bottom:4px;marg [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. + ''' + Friend ReadOnly Property htmlTop() As String + Get + Return ResourceManager.GetString("htmlTop", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die </span> + ''' + '''<div class="progressbar"> + ''' + '''<div class="progressbar-value" style="width: 0%"></div> + ''' + '''</div> + '''<span dir="auto" class='percenttext'>0%</span> + '''<div> + '''<br> + '''<span dir="auto" class="resotext"> ähnelt. + ''' + Friend ReadOnly Property htmlvorAufloesung() As String + Get + Return ResourceManager.GetString("htmlvorAufloesung", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die "> <img alt="image error" src="cc1.png" class="class-cc"> ähnelt. + ''' + Friend ReadOnly Property htmlvorHardSubs() As String + Get + Return ResourceManager.GetString("htmlvorHardSubs", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die </span> + ''' + '''<a href="#" class="cc-wert" title="Softsubs: ähnelt. + ''' + Friend ReadOnly Property htmlvorSoftSubs() As String + Get + Return ResourceManager.GetString("htmlvorSoftSubs", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die + ''' <div class="div-episode"> + ''' + '''<img alt="image error" src=" ähnelt. + ''' + Friend ReadOnly Property htmlvorThumbnail() As String + Get + Return ResourceManager.GetString("htmlvorThumbnail", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol). + ''' + Friend ReadOnly Property icon() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("icon", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die "error":false,"code":"ok" ähnelt. + ''' + Friend ReadOnly Property LoginSuccess() As String + Get + Return ResourceManager.GetString("LoginSuccess", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_add() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_add", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_add_invert() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_add_invert", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_add_invert_dark() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_add_invert_dark", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_background() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_background", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_browser() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_browser", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_browser_invert() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_browser_invert", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_browser_invert_dark() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_browser_invert_dark", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_button_download_deactivate() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_button_download_deactivate", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_button_download_default() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_button_download_default", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_button_download_hovert() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_button_download_hovert", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_close() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_close", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_close_dark() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_close_dark", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_close_dark_hover() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_close_dark_hover", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_close_hover() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_close_hover", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_del() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_del", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_mini() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_mini", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_mini_dark() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_mini_dark", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_mini_dark_hover() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_mini_dark_hover", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_mini_red() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_mini_red", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_pause() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_pause", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_pause_hover() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_pause_hover", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_pause_play() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_pause_play", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_pause_play_hover() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_pause_play_hover", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_setting_invert() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_setting_invert", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_setting_invert_dark() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_setting_invert_dark", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property main_settings() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("main_settings", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Main_top() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Main_top", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die </p> + ''' </div> + ''' </body> + '''</html> ähnelt. + ''' + Friend ReadOnly Property Post_error_Bottom() As String + Get + Return ResourceManager.GetString("Post_error_Bottom", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <html> + ''' <head> + ''' <meta charset="UTF-8"> + ''' </head> + ''' <style> + ''' body { + ''' text-align: center; + ''' padding: 40px 0; + ''' background: #EBF0F5; + ''' } + ''' h1 { + ''' color: #ad3f26; + ''' font-family: sans-serif; + ''' font-weight: 900; + ''' font-size: 40px; + ''' margin-bottom: 10px; + ''' } + ''' p { + ''' color: #404F5E; + ''' font-family: sans-serif; + ''' font-size:20px; + ''' margin: 0; + ''' } + ''' i { + ''' co [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. + ''' + Friend ReadOnly Property Post_error_Top() As String + Get + Return ResourceManager.GetString("Post_error_Top", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die <!DOCTYPE html> + '''<html> + ''' <title>CRD</title> + ''' + ''' <style> + ''' .main-bg {margin:0 0 0 -36px;background-color:#757575;} + ''' .imagestyle{width:156px;height:88px;display:block;margin-bottom:4px} .ulStyle{margin:0 0 0 -10px;display:block;position:relative;margin-top:8px} + ''' .ulStyle li{margin-left:12px;float:left;display:block;position:relative} + ''' .listyle{width:156px;display:block;background:#fff;padding:16px;margin-bottom:14px;position:relative;background-color:#b5b3b3} + ''' .progressbar{height:14p [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. + ''' + Friend ReadOnly Property Startuphtml() As String + Get + Return ResourceManager.GetString("Startuphtml", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die "thumbnail":{"url":" ähnelt. + ''' + Friend ReadOnly Property thumbnailString() As String + Get + Return ResourceManager.GetString("thumbnailString", resourceCulture) + End Get + End Property + + ''' + ''' Sucht eine lokalisierte Zeichenfolge, die US cookies can't be used as long you are logged in. + '''I delete the curremt session with the unlock, if you want to be logged in with the US cookie you need to enter you data on the left. ähnelt. + ''' + Friend ReadOnly Property US_ToolTip() As String + Get + Return ResourceManager.GetString("US_ToolTip", resourceCulture) + End Get + End Property + End Module +End Namespace diff --git a/Crunchyroll Downloader/My Project/Resources.resx b/Crunchyroll Downloader/My Project/Resources.resx index 5c45f9d..751414f 100644 --- a/Crunchyroll Downloader/My Project/Resources.resx +++ b/Crunchyroll Downloader/My Project/Resources.resx @@ -392,7 +392,7 @@ Dialogue: 0,0:00:00.00,0:00:00.00,Default,,0000,0000,0000,,some ideas on how tem ..\Resources\crdSettings_Button_SafeExit_hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0" + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0" ..\Resources\crdSettings_Button_SafeExit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/Crunchyroll Downloader/Subfolder.vb b/Crunchyroll Downloader/Subfolder.vb index 32646ad..45cc589 100644 --- a/Crunchyroll Downloader/Subfolder.vb +++ b/Crunchyroll Downloader/Subfolder.vb @@ -1,5 +1,7 @@ -Imports System.IO +Imports System.ComponentModel +Imports System.IO Imports System.Text +Imports System.Windows.Forms.VisualStyles Module Subfolder Public SubFolder_automatic As String = "[automatic by Series and Season]" @@ -97,22 +99,56 @@ Module Subfolder Private tBox As RichTextBox Dim lastmsg As String = Nothing + + Public Sub New(ByVal box As RichTextBox) Me.tBox = box End Sub - Public Overrides Sub Write(ByVal msg As String) + Dim WithEvents BG As BackgroundWorker + + Sub RunBG(ByVal sender As Object, e As DoWorkEventArgs) Handles BG.DoWork + Dim msg As String = CStr(e.Argument) + If msg <> lastmsg Then + lastmsg = msg + Else + Exit Sub + End If + Try tBox.Parent.Invoke(New MethodInvoker(Sub() - If msg <> lastmsg Then - lastmsg = msg - tBox.AppendText(msg) - - End If + tBox.AppendText(msg) End Sub)) Catch ex As Exception + End Try - 'My.Computer.FileSystem.WriteAllText(Application.StartupPath + "\log.txt", msg, True) + + End Sub + + Sub StopBG(sender As Object, e As EventArgs) + Dim T As Timer = CType(sender, Timer) + If BG.IsBusy Then + BG.CancelAsync() + T.Dispose() + Else + T.Dispose() + End If + End Sub + + Public Overrides Sub Write(ByVal msg As String) + + Dim time As New Timer + AddHandler time.Tick, AddressOf StopBG + time.Interval = 500 + time.Start() + BG = New BackgroundWorker + BG.WorkerSupportsCancellation = True + BG.RunWorkerAsync(msg) + + + + + End Sub Public Overrides Sub WriteLine(ByVal msg As String) diff --git a/Crunchyroll Downloader/einstellungen.Designer.vb b/Crunchyroll Downloader/einstellungen.Designer.vb index 856948a..91820c7 100644 --- a/Crunchyroll Downloader/einstellungen.Designer.vb +++ b/Crunchyroll Downloader/einstellungen.Designer.vb @@ -1125,7 +1125,7 @@ Partial Class Einstellungen Me.TabControl1.FontWeight = MetroFramework.MetroTabControlWeight.Regular Me.TabControl1.Location = New System.Drawing.Point(22, 60) Me.TabControl1.Name = "TabControl1" - Me.TabControl1.SelectedIndex = 0 + Me.TabControl1.SelectedIndex = 5 Me.TabControl1.Size = New System.Drawing.Size(509, 567) Me.TabControl1.TabIndex = 0 Me.TabControl1.UseSelectable = True @@ -1642,9 +1642,9 @@ Partial Class Einstellungen Me.TabPage7.Controls.Add(Me.Label4) Me.TabPage7.Controls.Add(Me.Label6) Me.TabPage7.Controls.Add(Me.Label5) - Me.TabPage7.Location = New System.Drawing.Point(4, 35) + Me.TabPage7.Location = New System.Drawing.Point(4, 44) Me.TabPage7.Name = "TabPage7" - Me.TabPage7.Size = New System.Drawing.Size(501, 528) + Me.TabPage7.Size = New System.Drawing.Size(501, 519) Me.TabPage7.TabIndex = 5 Me.TabPage7.Text = " About " ' @@ -1695,7 +1695,7 @@ Partial Class Einstellungen Me.Label7.Name = "Label7" Me.Label7.Size = New System.Drawing.Size(100, 30) Me.Label7.TabIndex = 46 - Me.Label7.Text = "CefSharp" + Me.Label7.Text = "WebView2" Me.Label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter ' 'Label3 diff --git a/Crunchyroll Downloader/einstellungen.vb b/Crunchyroll Downloader/einstellungen.vb index 01ca29f..29c889f 100644 --- a/Crunchyroll Downloader/einstellungen.vb +++ b/Crunchyroll Downloader/einstellungen.vb @@ -18,7 +18,7 @@ Public Class Einstellungen Private Sub Einstellungen_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Label6.Text = "You have: v" + Application.ProductVersion.ToString + Label6.Text = "You have: v" + Application.ProductVersion.ToString '+ " WebView2_Test" BackgroundWorker1.RunWorkerAsync() @@ -681,12 +681,12 @@ Public Class Einstellungen My.Settings.ffmpeg_command = Main.ffmpeg_command - If CBool(InStr(FFMPEG_CommandP1.Text, "nvenc")) Then + If CBool(InStr(FFMPEG_CommandP1.Text, "nvenc")) = True And CBool(Main.VideoFormat = ".aac") = False Then If NumericUpDown1.Value > 2 Then NumericUpDown1.Value = 2 End If - ElseIf CBool(InStr(FFMPEG_CommandP1.Text, "libx26")) Then + ElseIf CBool(InStr(FFMPEG_CommandP1.Text, "libx26")) = True And CBool(Main.VideoFormat = ".aac") = False Then If NumericUpDown1.Value > 1 Then NumericUpDown1.Value = 1 End If @@ -910,7 +910,7 @@ Public Class Einstellungen Private Sub Label7_Click(sender As Object, e As EventArgs) - Process.Start("https://github.com/cefsharp/CefSharp") + Process.Start("https://learn.microsoft.com/de-de/microsoft-edge/webview2/") End Sub Private Sub Label3_Click(sender As Object, e As EventArgs) diff --git a/Crunchyroll Downloader/network_scan.Designer.vb b/Crunchyroll Downloader/network_scan.Designer.vb deleted file mode 100644 index 29342ff..0000000 --- a/Crunchyroll Downloader/network_scan.Designer.vb +++ /dev/null @@ -1,175 +0,0 @@ - -Partial Class network_scan - Inherits MetroFramework.Forms.MetroForm - - - 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. - - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - Try - If disposing AndAlso components IsNot Nothing Then - components.Dispose() - End If - Finally - MyBase.Dispose(disposing) - End Try - End Sub - - 'Wird vom Windows Form-Designer benötigt. - Private components As System.ComponentModel.IContainer - - 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. - 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. - 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. - - Private Sub InitializeComponent() - Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(network_scan)) - Me.pictureBox4 = New System.Windows.Forms.PictureBox() - Me.groupBox2 = New System.Windows.Forms.GroupBox() - Me.ComboBox3 = New MetroFramework.Controls.MetroComboBox() - Me.ComboBox1 = New MetroFramework.Controls.MetroComboBox() - Me.ComboBox2 = New MetroFramework.Controls.MetroComboBox() - Me.NetworkStatusLabel = New MetroFramework.Controls.MetroLabel() - Me.Btn_min = New System.Windows.Forms.PictureBox() - Me.Btn_Close = New System.Windows.Forms.PictureBox() - CType(Me.pictureBox4, System.ComponentModel.ISupportInitialize).BeginInit() - Me.groupBox2.SuspendLayout() - CType(Me.Btn_min, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.Btn_Close, System.ComponentModel.ISupportInitialize).BeginInit() - Me.SuspendLayout() - ' - 'pictureBox4 - ' - Me.pictureBox4.BackColor = System.Drawing.Color.Transparent - Me.pictureBox4.Cursor = System.Windows.Forms.Cursors.Hand - Me.pictureBox4.Image = Global.Crunchyroll_Downloader.My.Resources.Resources.main_button_download_default - Me.pictureBox4.Location = New System.Drawing.Point(85, 304) - Me.pictureBox4.Name = "pictureBox4" - Me.pictureBox4.Size = New System.Drawing.Size(530, 50) - Me.pictureBox4.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage - Me.pictureBox4.TabIndex = 42 - Me.pictureBox4.TabStop = False - ' - 'groupBox2 - ' - Me.groupBox2.BackColor = System.Drawing.Color.Transparent - Me.groupBox2.Controls.Add(Me.ComboBox3) - Me.groupBox2.Controls.Add(Me.ComboBox1) - Me.groupBox2.Controls.Add(Me.ComboBox2) - Me.groupBox2.Controls.Add(Me.NetworkStatusLabel) - Me.groupBox2.Location = New System.Drawing.Point(10, 63) - Me.groupBox2.Name = "groupBox2" - Me.groupBox2.Size = New System.Drawing.Size(680, 220) - Me.groupBox2.TabIndex = 44 - Me.groupBox2.TabStop = False - ' - 'ComboBox3 - ' - Me.ComboBox3.Enabled = False - Me.ComboBox3.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.ComboBox3.FormattingEnabled = True - Me.ComboBox3.ItemHeight = 23 - Me.ComboBox3.Location = New System.Drawing.Point(15, 112) - Me.ComboBox3.Name = "ComboBox3" - Me.ComboBox3.Size = New System.Drawing.Size(650, 29) - Me.ComboBox3.TabIndex = 37 - Me.ComboBox3.UseSelectable = True - ' - 'ComboBox1 - ' - Me.ComboBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.ComboBox1.FormattingEnabled = True - Me.ComboBox1.ItemHeight = 23 - Me.ComboBox1.Items.AddRange(New Object() {"Video Stream", "Audio Stream", "Subtile"}) - Me.ComboBox1.Location = New System.Drawing.Point(15, 20) - Me.ComboBox1.Name = "ComboBox1" - Me.ComboBox1.Size = New System.Drawing.Size(650, 29) - Me.ComboBox1.TabIndex = 1 - Me.ComboBox1.UseSelectable = True - ' - 'ComboBox2 - ' - Me.ComboBox2.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.ComboBox2.FormattingEnabled = True - Me.ComboBox2.ItemHeight = 23 - Me.ComboBox2.Location = New System.Drawing.Point(15, 65) - Me.ComboBox2.Name = "ComboBox2" - Me.ComboBox2.Size = New System.Drawing.Size(650, 29) - Me.ComboBox2.TabIndex = 1 - Me.ComboBox2.UseSelectable = True - ' - 'NetworkStatusLabel - ' - Me.NetworkStatusLabel.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ - Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.NetworkStatusLabel.BackColor = System.Drawing.Color.Transparent - Me.NetworkStatusLabel.FontSize = MetroFramework.MetroLabelSize.Tall - Me.NetworkStatusLabel.FontWeight = MetroFramework.MetroLabelWeight.Regular - Me.NetworkStatusLabel.ForeColor = System.Drawing.Color.Black - Me.NetworkStatusLabel.Location = New System.Drawing.Point(15, 160) - Me.NetworkStatusLabel.Name = "NetworkStatusLabel" - Me.NetworkStatusLabel.Size = New System.Drawing.Size(651, 50) - Me.NetworkStatusLabel.TabIndex = 36 - Me.NetworkStatusLabel.Text = "..." - Me.NetworkStatusLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter - ' - 'Btn_min - ' - Me.Btn_min.BackColor = System.Drawing.Color.Transparent - Me.Btn_min.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None - Me.Btn_min.Cursor = System.Windows.Forms.Cursors.Hand - Me.Btn_min.Image = CType(resources.GetObject("Btn_min.Image"), System.Drawing.Image) - Me.Btn_min.Location = New System.Drawing.Point(567, 1) - Me.Btn_min.Margin = New System.Windows.Forms.Padding(0) - Me.Btn_min.Name = "Btn_min" - Me.Btn_min.Size = New System.Drawing.Size(25, 25) - Me.Btn_min.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.Btn_min.TabIndex = 73 - Me.Btn_min.TabStop = False - ' - 'Btn_Close - ' - Me.Btn_Close.BackColor = System.Drawing.Color.Transparent - Me.Btn_Close.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center - Me.Btn_Close.Cursor = System.Windows.Forms.Cursors.Hand - Me.Btn_Close.Image = Global.Crunchyroll_Downloader.My.Resources.Resources.main_close - Me.Btn_Close.Location = New System.Drawing.Point(592, 1) - Me.Btn_Close.Margin = New System.Windows.Forms.Padding(0) - Me.Btn_Close.Name = "Btn_Close" - Me.Btn_Close.Size = New System.Drawing.Size(40, 40) - Me.Btn_Close.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom - Me.Btn_Close.TabIndex = 72 - Me.Btn_Close.TabStop = False - ' - 'network_scan - ' - Me.ApplyImageInvert = True - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None - Me.BorderStyle = MetroFramework.Forms.MetroFormBorderStyle.FixedSingle - Me.ClientSize = New System.Drawing.Size(700, 377) - Me.Controls.Add(Me.Btn_min) - Me.Controls.Add(Me.Btn_Close) - Me.Controls.Add(Me.pictureBox4) - Me.Controls.Add(Me.groupBox2) - Me.Name = "network_scan" - Me.Padding = New System.Windows.Forms.Padding(10, 60, 20, 20) - Me.Text = "Select a stream or subtitle" - Me.TextAlign = MetroFramework.Forms.MetroFormTextAlign.Center - CType(Me.pictureBox4, System.ComponentModel.ISupportInitialize).EndInit() - Me.groupBox2.ResumeLayout(False) - CType(Me.Btn_min, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.Btn_Close, System.ComponentModel.ISupportInitialize).EndInit() - Me.ResumeLayout(False) - - End Sub - Public WithEvents pictureBox4 As PictureBox - Public WithEvents groupBox2 As GroupBox - Public WithEvents NetworkStatusLabel As MetroFramework.Controls.MetroLabel - Friend WithEvents MetroTextBox1 As MetroFramework.Controls.MetroTextBox - Public WithEvents ComboBox1 As MetroFramework.Controls.MetroComboBox - Public WithEvents ComboBox2 As MetroFramework.Controls.MetroComboBox - Private WithEvents Btn_min As PictureBox - Private WithEvents Btn_Close As PictureBox - Public WithEvents ComboBox3 As MetroFramework.Controls.MetroComboBox -End Class diff --git a/Crunchyroll Downloader/network_scan.resx b/Crunchyroll Downloader/network_scan.resx deleted file mode 100644 index ecb5ade..0000000 --- a/Crunchyroll Downloader/network_scan.resx +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - iVBORw0KGgoAAAANSUhEUgAAABoAAAAhCAYAAADH97ugAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAAd0SU1FB+QMDQ03N1b5UIAAAAApSURBVEhL7cyxCQAwDASx339pZ4EUcTC4keDa - CwDMqs/abpOXAGBZcgDKSBvlblfsRgAAAABJRU5ErkJggg== - - - \ No newline at end of file diff --git a/Crunchyroll Downloader/network_scan.vb b/Crunchyroll Downloader/network_scan.vb deleted file mode 100644 index 5554118..0000000 --- a/Crunchyroll Downloader/network_scan.vb +++ /dev/null @@ -1,512 +0,0 @@ -Option Strict On - -Imports Microsoft.Win32 -Imports System.Net -Imports System.IO -Imports System.Threading -Imports MetroFramework.Forms -Imports MetroFramework -Imports MetroFramework.Components -Imports System.Text - -Public Class network_scan - - - 'If b = False Then - ' m3u8List.Clear() - ' mpdList.Clear() - ' txtList.Clear() - ' Button2.Enabled = False - ' ScanTrue = True - ' LogBrowserData = True - ' NetworkScanEnd() - ' End If - - Dim Manager As MetroStyleManager = Main.Manager - Dim SubtitleFormat As String = Nothing - Dim VideoStreams As New List(Of String) - Dim AudioStreams As New List(Of String) - - Private Sub Network_scan_Load(sender As Object, e As EventArgs) Handles MyBase.Load - ComboBox2.Enabled = False - Manager.Owner = Me - Me.StyleManager = Manager - Btn_Close.Image = Main.CloseImg - Btn_min.Image = Main.MinImg - Try - Me.Icon = My.Resources.icon - Catch ex As Exception - End Try - Me.Location = New Point(CInt(Main.Location.X + Main.Width / 2 - Me.Width / 2), CInt(Main.Location.Y + Main.Height / 2 - Me.Height / 2)) - pictureBox4.Enabled = False - pictureBox4.Image = My.Resources.main_button_download_deactivate - End Sub - - Sub CheckVideoAudio(ByVal url As String) - Dim exepath As String = Application.StartupPath + "\ffmpeg.exe" - Dim startinfo As New System.Diagnostics.ProcessStartInfo - Dim sr As StreamReader - Dim cmd As String = "-headers " + My.Resources.ffmpeg_user_agend + " -i " + Chr(34) + url + Chr(34) 'start ffmpeg with command strFFCMD string - - 'MsgBox(cmd) - Dim ffmpegOutput As String = Nothing - Dim ffmpegOutputLine As String = Nothing - Dim ffmpegOutputLine2 As String = Nothing - - Dim NetworkScanTime As String = Nothing - - ' all parameters required to run the process - startinfo.FileName = exepath - startinfo.Arguments = cmd - startinfo.UseShellExecute = False - startinfo.WindowStyle = ProcessWindowStyle.Hidden - startinfo.RedirectStandardError = True - startinfo.RedirectStandardOutput = True - startinfo.CreateNoWindow = True - Dim proc As New Process - proc.StartInfo = startinfo - proc.Start() ' start the process - sr = proc.StandardError 'standard error is used by ffmpeg - - Do - ffmpegOutputLine = sr.ReadLine - ffmpegOutput = ffmpegOutput + vbNewLine + ffmpegOutputLine - - Loop Until proc.HasExited 'And ffmpegOutputLine = Nothing Or ffmpegOutputLine = "" - - Dim ffmpegOutput2() As String = ffmpegOutput.Split(New String() {vbNewLine}, System.StringSplitOptions.RemoveEmptyEntries) - For i As Integer = 0 To ffmpegOutput2.Count - 1 - - - If CBool(InStr(ffmpegOutput2(i), ": Video:")) Then - - Dim ZeileReso() As String = ffmpegOutput2(i).Split(New String() {" ["}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ZeileReso2() As String = ZeileReso(0).Split(New String() {"x"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ZeileReso3() As String = ffmpegOutput2(i).Split(New String() {": Video:"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ZeileReso4() As String = ZeileReso3(0).Split(New String() {"Stream #"}, System.StringSplitOptions.RemoveEmptyEntries) - - - - If CBool(InStr(ZeileReso2(ZeileReso2.Count - 1), ", ")) Then - - Dim ZeileReso5() As String = ZeileReso2(ZeileReso2.Count - 1).Split(New String() {", "}, System.StringSplitOptions.RemoveEmptyEntries) - ComboBox3.Items.Add(ZeileReso5(0).Trim + ":--:" + ZeileReso4(1)) - - Else - ComboBox3.Items.Add(ZeileReso2(ZeileReso2.Count - 1).Trim + ":--:" + ZeileReso4(1)) - - End If - ElseIf CBool(InStr(ffmpegOutput2(i), ": Audio:")) Then - - Dim ZeileStream() As String = ffmpegOutput2(i).Split(New String() {": Audio:"}, System.StringSplitOptions.RemoveEmptyEntries) - - ComboBox3.Items.Add("Audio:" + ZeileStream(1)) - - - End If - - Next - End Sub - - Private Sub PictureBox4_MouseEnter(sender As Object, e As EventArgs) Handles pictureBox4.MouseEnter - If pictureBox4.Enabled = True Then - pictureBox4.Image = My.Resources.main_button_download_hovert - Else - pictureBox4.Image = My.Resources.main_button_download_deactivate - End If - - End Sub - - Private Sub PictureBox4_MouseLeave(sender As Object, e As EventArgs) Handles pictureBox4.MouseLeave - If pictureBox4.Enabled = True Then - pictureBox4.Image = My.Resources.main_button_download_default - Else - pictureBox4.Image = My.Resources.main_button_download_deactivate - End If - - End Sub - - Private Sub Btn_Close_Click(sender As Object, e As EventArgs) Handles Btn_Close.Click - Me.Close() - End Sub - - Private Sub Network_scan_Resize(sender As Object, e As EventArgs) Handles Me.Resize - Btn_Close.Location = New Point(Me.Width - 40, 1) - Btn_min.Location = New Point(Me.Width - 68, 10) - End Sub - - Private Sub Btn_min_Click(sender As Object, e As EventArgs) Handles Btn_min.Click - Me.WindowState = System.Windows.Forms.FormWindowState.Minimized - End Sub - - - Private Sub Btn_min_MouseEnter(sender As Object, e As EventArgs) Handles Btn_min.MouseEnter - - Btn_min.Image = My.Resources.main_mini_red - End Sub - - Private Sub Btn_min_MouseLeave(sender As Object, e As EventArgs) Handles Btn_min.MouseLeave - - Btn_min.Image = Main.MinImg - End Sub - Private Sub Btn_Close_MouseEnter(sender As Object, e As EventArgs) Handles Btn_Close.MouseEnter - - Btn_Close.Image = My.Resources.main_del - End Sub - - Private Sub Btn_Close_MouseLeave(sender As Object, e As EventArgs) Handles Btn_Close.MouseLeave - - Btn_Close.Image = Main.CloseImg - End Sub - - Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged - ComboBox3.Enabled = False - ComboBox3.Items.Clear() - ComboBox3.Text = Nothing - ComboBox2.Items.Clear() - ComboBox2.Text = Nothing - ComboBox2.Enabled = True - SubtitleFormat = Nothing - pictureBox4.Enabled = False - pictureBox4.Image = My.Resources.main_button_download_deactivate - If ComboBox1.SelectedItem.ToString = "Video Stream" Then - If Main.m3u8List.Count > 0 Then - For i As Integer = 0 To Main.m3u8List.Count - 1 - ComboBox2.Items.Add(Main.m3u8List.Item(i)) - Next - ElseIf Main.mpdList.Count > 0 Then - If Main.mpdList.Count > 0 Then - For i As Integer = 0 To Main.mpdList.Count - 1 - ComboBox2.Items.Add(Main.mpdList.Item(i)) - Next - End If - End If - ElseIf ComboBox1.SelectedItem.ToString = "Subtile" Then - If Main.txtList.Count > 0 Then - For i As Integer = 0 To Main.txtList.Count - 1 - ComboBox2.Items.Add(Main.txtList.Item(i)) - Next - End If - End If - End Sub - - Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged - SubtitleFormat = Nothing - pictureBox4.Enabled = False - pictureBox4.Image = My.Resources.main_button_download_deactivate - ComboBox3.Enabled = False - ComboBox3.Items.Clear() - ComboBox3.Text = Nothing - - NetworkStatusLabel.Text = "Checking input..." - Pause(1) - 'If CBool(InStr(ComboBox2.Text, ".mpd") Or CBool(InStr(ComboBox2.Text, ".m3u8") Then - - Dim exepath As String = Application.StartupPath + "\ffmpeg.exe" - Dim startinfo As New System.Diagnostics.ProcessStartInfo - Dim sr As StreamReader - Dim cmd As String = "-headers " + My.Resources.ffmpeg_user_agend + " -i " + Chr(34) + ComboBox2.Text + Chr(34) 'start ffmpeg with command strFFCMD string - - 'MsgBox(cmd) - Dim ffmpegOutput As String = Nothing - Dim ffmpegOutputLine As String = Nothing - Dim ffmpegOutputLine2 As String = Nothing - - Dim NetworkScanTime As String = Nothing - - ' all parameters required to run the process - startinfo.FileName = exepath - startinfo.Arguments = cmd - startinfo.UseShellExecute = False - startinfo.WindowStyle = ProcessWindowStyle.Hidden - startinfo.RedirectStandardError = True - startinfo.RedirectStandardOutput = True - startinfo.CreateNoWindow = True - Dim proc As New Process - proc.StartInfo = startinfo - proc.Start() ' start the process - sr = proc.StandardError 'standard error is used by ffmpeg - - Do - ffmpegOutputLine = sr.ReadLine - ffmpegOutput = ffmpegOutput + vbNewLine + ffmpegOutputLine - - Loop Until proc.HasExited 'And ffmpegOutputLine = Nothing Or ffmpegOutputLine = "" - - Dim ffmpegOutput2() As String = ffmpegOutput.Split(New String() {vbNewLine}, System.StringSplitOptions.RemoveEmptyEntries) - For i As Integer = 0 To ffmpegOutput2.Count - 1 - - If CBool(InStr(ffmpegOutput2(i), ": Video:")) Then - Dim ZeileReso() As String = ffmpegOutput2(i).Split(New String() {" ["}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ZeileReso2() As String = ZeileReso(0).Split(New String() {"x"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ZeileReso3() As String = ffmpegOutput2(i).Split(New String() {": Video:"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ZeileReso4() As String = ZeileReso3(0).Split(New String() {"Stream #"}, System.StringSplitOptions.RemoveEmptyEntries) - - - If CBool(InStr(ZeileReso2(ZeileReso2.Count - 1), ", ")) Then - Dim ZeileReso5() As String = ZeileReso2(ZeileReso2.Count - 1).Split(New String() {", "}, System.StringSplitOptions.RemoveEmptyEntries) - ComboBox3.Items.Add(ZeileReso5(0).Trim + ":--:" + ZeileReso4(1)) - - Else - ComboBox3.Items.Add(ZeileReso2(ZeileReso2.Count - 1).Trim + ":--:" + ZeileReso4(1)) - - End If - - - - ElseIf CBool(InStr(ffmpegOutput2(i), ": Audio:")) Then - Dim ZeileStream() As String = ffmpegOutput2(i).Split(New String() {": Audio:"}, System.StringSplitOptions.RemoveEmptyEntries) - - - ComboBox3.Items.Add("Audio:" + ZeileStream(1)) - - ElseIf CBool(InStr(ffmpegOutput2(i), "Duration: N/A, bitrate: N/A")) Then - - ElseIf CBool(InStr(ffmpegOutput2(i), "Subtitle: ")) Then - Dim Format As String() = ffmpegOutput2(i).Split(New String() {"Subtitle: "}, System.StringSplitOptions.RemoveEmptyEntries) - SubtitleFormat = Format(1) - - ElseIf CBool(InStr(ffmpegOutput2(i), "Duration: ")) Then - Dim ZeitGesamt As String() = ffmpegOutput2(i).Split(New String() {"Duration: "}, System.StringSplitOptions.RemoveEmptyEntries) - Dim ZeitGesamt2 As String() = ZeitGesamt(1).Split(New [Char]() {System.Convert.ToChar(".")}) - NetworkScanTime = ZeitGesamt2(0) - ElseIf CBool(InStr(ffmpegOutput2(i), "At least one output file must be specified")) Then - - ElseIf CBool(InStr(ffmpegOutput2(i), "Invalid data found when processing input")) Then - NetworkStatusLabel.Text = "Invalid data found when processing input" - Exit Sub - End If - Next - If SubtitleFormat IsNot Nothing Then - NetworkStatusLabel.Text = "Subtitle found with format: " + SubtitleFormat - pictureBox4.Enabled = True - pictureBox4.Image = My.Resources.main_button_download_default - ElseIf NetworkScanTime = Nothing Then - If ComboBox3.Items.Count > 0 Then - NetworkStatusLabel.Text = "Duration check failed but it found valid streams." - ComboBox3.Enabled = True - Else - NetworkStatusLabel.Text = "No video stream found in that url." - End If - Else - NetworkStatusLabel.Text = "Video found with a duration of: " + NetworkScanTime - ComboBox3.Enabled = True - End If - - - - - End Sub - - Private Sub ComboBox3_SelectedIndexChanged_1(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged - pictureBox4.Enabled = True - pictureBox4.Image = My.Resources.main_button_download_default - End Sub - - Private Sub PictureBox4_Click(sender As Object, e As EventArgs) Handles pictureBox4.Click - pictureBox4.Enabled = False - pictureBox4.Image = My.Resources.main_button_download_deactivate - - Dim FileName As String = Main.WebbrowserTitle.Replace(" - Watch on VRV", "").Replace("Free Streaming", "").Replace("Tubi", "") - FileName = Main.RemoveExtraSpaces(String.Join(" ", FileName.Split(Main.invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd("."c)) 'System.Text.RegularExpressions.Regex.Replace(FileName, "[^\w\\-]", " ")) - Dim FilePfad As String = Main.Pfad + "\" + FileName - - - - If CBool(InStr(ComboBox3.Text, "Audio:")) Then - FilePfad = FilePfad + ".mka" - - - Dim m3u8Final As String = "-i " + Chr(34) + ComboBox2.Text + Chr(34) + " -c:a copy" - - - - - 'MsgBox(m3u8Final) - Dim DisplayReso As String = "Audio" - Dim Pfad2 As String = Chr(34) + FilePfad + Chr(34) - Dim Title As String = FileName '+ ".mp4" - Dim L1Name_Split As String() = Main.WebbrowserURL.Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim L1Name As String = L1Name_Split(1) - Me.Invoke(New Action(Function() As Object - Main.ListItemAdd(Main.Pfad, L1Name, Title, DisplayReso, "Unknown", "None", "", m3u8Final, Pfad2) - 'Main.liList.Add(My.Resources.htmlvorThumbnail + "" + My.Resources.htmlnachTumbnail + "
    " + Title + My.Resources.htmlvorAufloesung + "[Auto]" + My.Resources.htmlvorSoftSubs + vbNewLine + "None" + My.Resources.htmlvorHardSubs + "null" + My.Resources.htmlnachHardSubs + "") - Return Nothing - End Function)) - Else - - Dim client0 As New WebClient - client0.Encoding = Encoding.UTF8 - If Main.WebbrowserCookie = Nothing Then - Else - client0.Headers.Add(HttpRequestHeader.Cookie, Main.WebbrowserCookie) - End If - - Dim RequestURL As String = ComboBox2.Text - - ComboBox2.Text = Nothing - - Dim RequestReso As String = Nothing - Dim RequestMap As String = Nothing - If ComboBox3.Enabled = True Then - Dim ResoSplit() As String = ComboBox3.Text.Split(New String() {":--:"}, System.StringSplitOptions.RemoveEmptyEntries) - RequestReso = ResoSplit(0) - RequestMap = ResoSplit(1) - End If - - If ComboBox1.SelectedItem.ToString = "Video Stream" Then - - If CBool(InStr(RequestURL, ".m3u8")) Then - Main.m3u8List.Remove(RequestURL) - ElseIf CBool(InStr(RequestURL, ".mpd")) Then - Main.mpdList.Remove(RequestURL) - End If - - 'Me.Invoke(New Action(Function() - ' MsgBox(m3u8_Master_url) - ' Return Nothing - ' End Function)) - 'My.Computer.FileSystem.WriteAllText(Application.StartupPath + "\Test.txt", text, False) - Dim thumbnail As String() = Nothing - Dim thumbnail2 As String() = Nothing - Dim thumbnail4 As String = "https://abload.de/img/main-delx4krg.png" - Try - If CBool(InStr(Main.WebbrowserText, "thumbnail")) Then - thumbnail = Main.WebbrowserText.Split(New String() {"thumbnail"}, System.StringSplitOptions.RemoveEmptyEntries) - End If - Catch ex As Exception - - End Try - Try - For i As Integer = 0 To thumbnail.Count - 1 - If CBool(InStr(thumbnail(i), ".jpg")) Then - If CBool(InStr(thumbnail(i), "https:")) Then - thumbnail2 = thumbnail(i).Split(New String() {".jpg"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim thumbnail3 As String() = thumbnail2(0).Split(New String() {"https:"}, System.StringSplitOptions.RemoveEmptyEntries) - thumbnail4 = "https:" + thumbnail3(thumbnail3.Count - 1).Replace("&", "&").Replace("/u0026", "&").Replace("\u002F", "/").Replace("\/", "/") + ".jpg" - Exit For - End If - End If - Next - - Catch ex As Exception - End Try - - Dim m3u8Final As String = "-i " + Chr(34) + RequestURL + Chr(34) + " -map " + RequestMap + " -map 0:a" + Main.ffmpeg_command - - If Main.HybridMode = True Then - Dim client As New WebClient - client.Encoding = System.Text.Encoding.UTF8 - Dim text As String = client.DownloadString(RequestURL) - - If CBool(InStr(text, "RESOLUTION=")) Then 'master m3u8 no fragments - Dim new_m3u8() As String = text.Split(New String() {vbLf}, System.StringSplitOptions.RemoveEmptyEntries) - For i2 As Integer = 0 To new_m3u8.Count - 1 - - 'MsgBox("x" + Main.Resu.ToString) - If CBool(InStr(new_m3u8(i2), "x" + RequestReso.ToString)) = True Then - - m3u8Final = "-i " + Chr(34) + new_m3u8(i2 + 1) + Chr(34) + Main.ffmpeg_command - - - Exit For - - End If - - Next - - End If - - - End If - - - - - - 'MsgBox(m3u8Final) - Dim DisplayReso As String = RequestReso.ToString + "p" - Dim Pfad2 As String = Chr(34) + FilePfad + Main.VideoFormat + Chr(34) - Dim Title As String = FileName '+ ".mp4" - Dim L1Name_Split As String() = Main.WebbrowserURL.Split(New String() {"/"}, System.StringSplitOptions.RemoveEmptyEntries) - Dim L1Name As String = L1Name_Split(1) - Me.Invoke(New Action(Function() As Object - Main.ListItemAdd(Main.Pfad, L1Name, Title, DisplayReso, "Unknown", "None", thumbnail4, m3u8Final, Pfad2) - 'Main.liList.Add(My.Resources.htmlvorThumbnail + thumbnail4 + My.Resources.htmlnachTumbnail + "
    " + Title + My.Resources.htmlvorAufloesung + "[Auto]" + My.Resources.htmlvorSoftSubs + vbNewLine + "None" + My.Resources.htmlvorHardSubs + "null" + My.Resources.htmlnachHardSubs + "") - Return Nothing - End Function)) - ElseIf ComboBox1.SelectedItem.ToString = "Subtile" Then - Dim CheckFile As String = Nothing - Main.txtList.Remove(RequestURL) - If SubtitleFormat IsNot Nothing Then - client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + "." + SubtitleFormat) - CheckFile = FilePfad + "." + SubtitleFormat - ElseIf CBool(InStr(RequestURL, ".txt")) Then - client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".txt") - CheckFile = FilePfad + ".txt" - ElseIf CBool(InStr(RequestURL, ".vtt")) Then - client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".vtt") - CheckFile = FilePfad + ".vtt" - ElseIf CBool(InStr(RequestURL, ".srt")) Then - client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".srt") - CheckFile = FilePfad + ".srt" - ElseIf CBool(InStr(RequestURL, ".ass")) Then - client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".ass") - CheckFile = FilePfad + ".ass" - ElseIf CBool(InStr(RequestURL, ".ssa")) Then - client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".ssa") - CheckFile = FilePfad + ".ssa" - ElseIf CBool(InStr(RequestURL, ".dfxp")) Then - client0.DownloadFileAsync(New Uri(RequestURL), FilePfad + ".dfxp") - CheckFile = FilePfad + ".dfxp" - End If - - Pause(5) - If File.Exists(CheckFile) Then - NetworkStatusLabel.Text = "Subtitles have been Downloaded" - Else - Pause(5) - If File.Exists(CheckFile) Then - NetworkStatusLabel.Text = "Subtitles have been Downloaded" - Else - 'NetworkStatusLabel.Text = "Subtitles have been Downloaded" - End If - End If - - End If - - End If - - - End Sub - - Private Sub ComboBox2_Click(sender As Object, e As EventArgs) Handles ComboBox2.Click - ComboBox3.Enabled = False - ComboBox3.Items.Clear() - ComboBox3.Text = Nothing - ComboBox2.Items.Clear() - ComboBox2.Text = Nothing - SubtitleFormat = Nothing - pictureBox4.Enabled = False - pictureBox4.Image = My.Resources.main_button_download_deactivate - If ComboBox1.SelectedItem.ToString = "Video Stream" Then - If Main.m3u8List.Count > 0 Then - For i As Integer = 0 To Main.m3u8List.Count - 1 - ComboBox2.Items.Add(Main.m3u8List.Item(i)) - Next - ElseIf Main.mpdList.Count > 0 Then - If Main.mpdList.Count > 0 Then - For i As Integer = 0 To Main.mpdList.Count - 1 - ComboBox2.Items.Add(Main.mpdList.Item(i)) - Next - End If - End If - ElseIf ComboBox1.SelectedItem.ToString = "Subtile" Then - If Main.txtList.Count > 0 Then - For i As Integer = 0 To Main.txtList.Count - 1 - ComboBox2.Items.Add(Main.txtList.Item(i)) - Next - End If - End If - End Sub -End Class \ No newline at end of file diff --git a/Crunchyroll Downloader/packages.config b/Crunchyroll Downloader/packages.config index 44a6436..974a4fa 100644 --- a/Crunchyroll Downloader/packages.config +++ b/Crunchyroll Downloader/packages.config @@ -1,8 +1,5 @@  - - - - + \ No newline at end of file diff --git a/item.png b/item.png deleted file mode 100644 index 4e7a38c67cbb1dac31396e213c5506765af4bdfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50743 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

    VT_O)vX?7Ya1SOIiabIsWS+SkkZeBRQC{l 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