[nFinder] DL周り修正

作成日時: 2018-12-17 03:05:53
公開終了: -

smile鯖からのDL時に「ダウンロード中にタイムアウトした」対策#

主に一般会員用。
100MB以上だと途中で通信が切られる?鯖がデータ送ってこなくなる?よくわからんけど、リトライ前に可能ならレジュームでDL続行するようにしてみる。
ちなみにDLじゃなくて普通にプレーヤーで最後まで再生したいだけなら、rubyの修正入れれば最近の動画はokになるはず。

1. nFinder2 → nFinder2.exe → nFinder → mFinder_Main を開く
2. 「ApplicationException」で検索 → Edit Method (C#)
3. 7行上の「break;」を削除、代わりに下記をコピペ
if (Conversions.ToDouble(httpWebResponse.Headers["Content-Length"]) <= (double)fileStream.Length)
{
break;
}
responseStream.Dispose();
Thread.Sleep(Conversions.ToInteger(InitializationSetup.getIni("DLCOOLTIME")) * 1000);
NetUtil.GetSmilevideoHTMLText("http://www.nicovideo.jp/watch/" + this._DL_NowDLVidOrg + "?watch_harmful=1", Conversions.ToInteger(InitializationSetup.getIni("nettimeout")), ref Variable.gp_CookieContainer);
HttpWebRequest httpWebRequest2 = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest2.Timeout = httpWebRequest.Timeout;
httpWebRequest2.UserAgent = httpWebRequest.UserAgent;
httpWebRequest2.Accept = httpWebRequest.Accept;
httpWebRequest2.Referer = httpWebRequest.Referer;
httpWebRequest2.AddRange(fileStream.Length);
httpWebRequest2.CookieContainer = new CookieContainer();
httpWebRequest2.CookieContainer.Add(Variable.gp_CookieContainer.GetCookies(httpWebRequest2.RequestUri));
HttpWebResponse httpWebResponse2 = (HttpWebResponse)httpWebRequest2.GetResponse();
responseStream = httpWebResponse2.GetResponseStream();
if (httpWebResponse2.StatusCode != HttpStatusCode.PartialContent || Conversions.ToLong(httpWebResponse2.Headers["Content-Length"]) + fileStream.Length != Conversions.ToLong(httpWebResponse.Headers["Content-Length"]))
{
break;
}
Misc.ConsoleOutputText(Variable.MYDOC_FOLDER, url + " " + fileStream.Length.ToString());
responseStream2 = responseStream;
4. Ctrl+Hで置換boxを出す
5. 「return result;」を「return text;」にReplace All
6. 「VB$AnonymousDelegate_0」を「Action」にReplace All
7. 「VB$AnonymousDelegate_3」を「Action」にReplace All
8. Compileを押す(エラーになる)
9. 「CS0592 'global::Microsoft.VisualBasic.CompilerServices.OptionText' is not valid ...」エラーが多数出るので、1個目のdescriptionのとこをダブルクリック
10. Ctrl+H
11. 「[global::Microsoft.VisualBasic.CompilerServices.OptionText]」を「」にReplace All (つまり削除)
12. Compileを押す(今度は成功するはず)

OptionText消した影響は不明。他にもいろいろコードが変化するけど… 動いてるっぽいからいいかな。
変化を最低限にしようとすると30ステップほど増えちゃうからとりあえずこれで。

DMC鯖からのDL時に「既存の接続はリモートホストに強制的に切断されました」対策#

ruby修正済で、DMC対応動画をDLしようとしたら途中でエラーになる人用(エラーメッセージは環境によって違うかも)。
プレーヤー開いてないせいでheartbeatが即座に中止されてるのが原因だろうから、session.rbだましてDL中はheartbeatを送り続けるように仕向ける。

1. nFinder2 → nFinder2.exe → nFinder → mFinder_Main を開く
2. 「this._DL_Stat = TrinityCS」で検索 → Edit Method (C#)
3. 「this._DL_Stat = TrinityCS」がある行の直後に下記の行を追加
nFinder.My.MyProject.Forms.mEntryPointClass.Text = this._DL_Stat.Replace("&", "&&") + "(" + in_vid + ")";
4. Compile (「nFinder.My.」は消えてもok)
CS0592エラーの対応方法は上の手順9-12を参考に。
5. 「void invoke_DLThread_Comp(string in_state)」で検索 → Edit Method (C#)
6. 「this.obj_Timer_DownloadRegister.Interval = 3000;」の直後に下記を追加
nFinder.My.MyProject.Forms.mEntryPointClass.Text = "";
7. Compile (「nFinder.My.」は消えてもok)

遅いのは諦め。