feat(mcim): 重新启用 MCIM 镜像源#6657
Conversation
|
重新调整了解析 Json 的时机,现在会在下载列表结束后立刻进行 Json 解析,以确保镜像源响应无效时可以重试 |
|
有针对整合包的问题考虑下吗?比如整合包不到最后不用镜像... 整合包这个逻辑太坑了,镜像可能少文件,但是看错误日志就只有写作者可能删除了之类的。 也许应该特别加上提示? 或者统一都加上提示... |
我明天看看能不能调下这个逻辑(叹气 |
|
合并必看 Message:这里弄了 Breaking Change,龙猫记得看仔细了( |
umm 具体哪儿? |
ModModpack.vb CurseForge 获取 Mod 信息那部分,把两个列表都改成了 Dictionary(Of Integer,Integer) (以此记录 file ID 和 mod ID) |
| ModList.Add(ModEntry("fileID"),ModEntry("projectID")) | ||
| If ModEntry("required") IsNot Nothing AndAlso Not ModEntry("required").ToObject(Of Boolean) Then ModOptionalList.Add(ModEntry("fileID"),ModEntry("projectID")) | ||
| Next | ||
| If ModList.Any Then | ||
| If ModList.Keys.Any Then | ||
| Dim ModDownloadLoaders As New List(Of LoaderBase) | ||
| '获取 Mod 下载信息 | ||
| ModDownloadLoaders.Add(New LoaderTask(Of Integer, JArray)("获取 Mod 下载信息", | ||
| Sub(Task As LoaderTask(Of Integer, JArray)) | ||
| Task.Output = GetJson(DlModRequest("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(ModList, ",") & "]}", "application/json"))("data") | ||
| ModDownloadLoaders.Add(New LoaderTask(Of Dictionary(Of Integer,Integer), JArray)("获取 Mod 下载信息", | ||
| Sub(Task As LoaderTask(Of Dictionary(Of Integer,Integer), JArray)) | ||
| Task.Output = GetJson(DlModRequest("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(ModList.Keys, ",") & "]}", "application/json"))("data") | ||
| '如果文件已被删除,则 API 会跳过那一项 | ||
| If ModList.Count > Task.Output.Count Then Throw New Exception("整合包中的部分 Mod 版本已被 Mod 作者删除,所以没法继续安装了,请向整合包作者反馈该问题") | ||
| If ModList.Keys.Count > Task.Output.Count Then | ||
| Dim missTip As String = "缺失的 Mod 列表" & vbCrLf | ||
| Dim realModList As New Dictionary(Of Integer,Integer) | ||
| For Each Id In Task.Output | ||
| Dim modId = Integer.Parse(If(Id("data")?("modId"),-1).ToString) | ||
| Dim fileId = Integer.Parse(If(Id("data")?("id"),-1).ToString) | ||
| realModList.Add(fileId,modId) | ||
| Next | ||
| missTip += String.Join(vbCrLf,ModList.Keys.ToList.Except(realModList.Keys.ToList).Select(Of String)( | ||
| Function(id As Integer) | ||
| Dim modId As Integer = ModList.TryGetValue(id,-1) | ||
| Return "缺少文件:" & id & "对应的工程 ID 为:" & If(modId = -1,"未找到对应的工程 ID",modId.ToString) | ||
| End Function | ||
| ) | ||
| ) | ||
| Log("[Mod] 缺失的 Mod 列表" & vbCrLf & missTip) | ||
| Throw New Exception("整合包中的部分 Mod 版本已被 Mod 作者删除,所以没法继续安装了,请向整合包作者反馈该问题") | ||
| End If |
There was a problem hiding this comment.
不要在一个 PR 里提交与 PR 本身无关的东西,这些得单开另一个 PR……
|
此外编译没过,ModModpack.vb 开头混了脏东西 |
| Replace("media.forgecdn.net","mcim-files.pysio.online"). | ||
| Replace("mediafilez.forgecdn.net","mcim-files.pysio.online"). | ||
| Replace("edge.forgecdn.net","mcim-files.pysio.online"). | ||
| Replace("api.curseforge.net","mod.mcimirror.top/curseforge"). |
There was a problem hiding this comment.
api.curseforge.net 是什么鬼啊,压根就不是这个域名啊
| Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5)) | ||
| Urls.Add(New KeyValuePair(Of String, Integer)(Url, 20)) | ||
| 'Dim McimUrl As String = DlSourceModGet(Url) | ||
| 'If McimUrl <> Url Then | ||
| ' Select Case Setup.Get("ToolDownloadMod") | ||
| ' Case 0 | ||
| ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5)) | ||
| ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10)) | ||
| ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15)) | ||
| ' Case 1 | ||
| ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5)) | ||
| ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5)) | ||
| ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15)) | ||
| ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10)) | ||
| ' Case Else | ||
| ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5)) | ||
| ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15)) | ||
| ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10)) | ||
| ' End Select | ||
| 'End If | ||
| Dim McimUrl As String = DlSourceModGet(Url) | ||
| If McimUrl <> Url Then | ||
| Select Case Setup.Get("ToolDownloadMod") | ||
| Case 0 | ||
| Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5)) |
|
……这个 PR 的 bug 太多了合不了一点,我自己重写了( |
我开过 VSCode 还有 Rider 压根没看到哪里混东西进去了 Orz 手动复制然后本地编译也没见哪里报错了( |
|
Actions 报 fail 了( |
|
考虑到隔壁 #6656 被关了,我觉得有必要再聊一聊这个 PR。 先看获取镜像源链接的部分,这里固定地将官方源添加到了数组顶部,所以 无论如何都是官方源优先。
由于这个 bug,我怀疑整个 PR 在测试过程中,实际上几乎没有对 MCIM 源进行过调用,一切东西都走的官方源——因为无论如何,都会先对官方源进行两次调用尝试。 然后 Mod 镜像源的地址替换,错误地将
所以,整个 CurseForge 源都只能走官方源,根本不会、也不可能走 MCIM 源。 然后是这一大段完全和 PR 主题不相干的代码。
不要在同一个 PR 里提交其他功能的代码,它不应该在这里进行审查。 以及,
所以我即使合并了这个 PR,Action 也无法完成编译,还需要我手动还原此处。 本 PR 意为重新启用 MCIM 源,但却没有还原镜像源设置项。
再退一步,即使这个 PR 正常运作,也会遇到 #6656 (comment) 的问题,无法使用 MCIM 源进行 CurseForge Mod 更新检查。 就,还是希望能够在交 PR 前至少完整测试一遍…… |
这确实,我没咋研究过(也几乎没空研究)官方版怎么处理下载源设定
也许复制粘贴会好点,因为我现在访问爱发电还是会把 afdian.com 打成旧域名 afdian.net
我在 Rider 贴了看开头是啥但是压根没显示,所以我当 MSBuild 有 Bug 就没管它(我也没法解释这个 BOM 哪来的)
这个我尽量避免(这个问题也太离谱了点 ....)
这种情况下进 Mod 下载大概率会有提示,但是可能被我忽略了 Orz 但是坦白说新功能代码的问题往往拖个几天几个月才会暴露出来,或者一开始就炸出来了但是被拦下来导致看起来是正常的,高耦合也让我没法把某段代码抽出来单独做白盒测试,所以只能说尽量避免了( |





Resolve #6656
是的,我又来开坑了(因为 CE 那个也是我做的.jpg)
喜欢做 feature belike