Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a2afce2405 | ||
|
|
a9e43e5bab | ||
|
|
db2199cc87 | ||
|
|
f968de1987 | ||
|
|
f10920883d | ||
|
|
bc6b7cac03 | ||
|
|
78e90876a6 |
No files matched your search
+2
-2
@@ -51,7 +51,7 @@
|
|||||||
|
|
||||||
如果你遭遇或目睹了违反本准则的行为,请尽快联系项目维护者:
|
如果你遭遇或目睹了违反本准则的行为,请尽快联系项目维护者:
|
||||||
|
|
||||||
- 对于需要保密的事件,请在 [Starlight Issues](https://git.starlight.cool/AxTps/Starlight_Lancher/issues) 中仅留下“需要私下联系维护者”的简短说明,不要公开事件细节、个人信息、账号令牌或完整日志;维护者会通过可用的私下渠道与你联系。
|
- 对于需要保密的事件,请在 [Starlight Issues](https://git.starlight.cool/aptxyyds/Starlight_Launcher/issues) 中仅留下“需要私下联系维护者”的简短说明,不要公开事件细节、个人信息、账号令牌或完整日志;维护者会通过可用的私下渠道与你联系。
|
||||||
- 对于一般性的社区问题,可以在相关 Issue 或官方 QQ 群(737601250)中提出。请勿在公开频道发布可能使当事人被识别的敏感信息。
|
- 对于一般性的社区问题,可以在相关 Issue 或官方 QQ 群(737601250)中提出。请勿在公开频道发布可能使当事人被识别的敏感信息。
|
||||||
|
|
||||||
维护者会及时、公平地受理和调查报告,并尽可能保护报告人的隐私。请仅提供与事件相关且你有权分享的信息;恶意或明显虚假的报告也可能构成对社区的骚扰。
|
维护者会及时、公平地受理和调查报告,并尽可能保护报告人的隐私。请仅提供与事件相关且你有权分享的信息;恶意或明显虚假的报告也可能构成对社区的骚扰。
|
||||||
@@ -115,7 +115,7 @@ Maintainers may remove, edit, or reject comments, commits, issues, pull requests
|
|||||||
|
|
||||||
If you experience or witness a violation of this Code of Conduct, please contact the project maintainers as soon as possible:
|
If you experience or witness a violation of this Code of Conduct, please contact the project maintainers as soon as possible:
|
||||||
|
|
||||||
- For confidential matters, please leave only a brief note saying "Need to contact maintainers privately" in the [Starlight Issues](https://git.starlight.cool/AxTps/Starlight_Lancher/issues), without publicly disclosing event details, personal information, account tokens, or full logs; the maintainers will contact you through available private channels.
|
- For confidential matters, please leave only a brief note saying "Need to contact maintainers privately" in the [Starlight Issues](https://git.starlight.cool/aptxyyds/Starlight_Launcher/issues), without publicly disclosing event details, personal information, account tokens, or full logs; the maintainers will contact you through available private channels.
|
||||||
- For general community issues, you can raise them in the relevant Issue or the official QQ group (737601250). Do not post sensitive information in public channels that could identify the parties involved.
|
- For general community issues, you can raise them in the relevant Issue or the official QQ group (737601250). Do not post sensitive information in public channels that could identify the parties involved.
|
||||||
|
|
||||||
Maintainers will promptly and fairly receive and investigate reports, and protect the privacy of reporters to the best of their ability. Please only provide information that is relevant to the incident and that you are authorized to share; malicious or clearly false reports may also constitute harassment of the community.
|
Maintainers will promptly and fairly receive and investigate reports, and protect the privacy of reporters to the best of their ability. Please only provide information that is relevant to the incident and that you are authorized to share; malicious or clearly false reports may also constitute harassment of the community.
|
||||||
|
|||||||
Generated
+2
-2
@@ -6841,7 +6841,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "theseus"
|
name = "theseus"
|
||||||
version = "1.0.2-beta13"
|
version = "1.0.2-beta15"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ariadne",
|
"ariadne",
|
||||||
"async-minecraft-ping",
|
"async-minecraft-ping",
|
||||||
@@ -6945,7 +6945,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "theseus_gui"
|
name = "theseus_gui"
|
||||||
version = "1.0.2-beta13"
|
version = "1.0.2-beta15"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ashpd",
|
"ashpd",
|
||||||
"async_zip",
|
"async_zip",
|
||||||
|
|||||||
@@ -5,13 +5,13 @@
|
|||||||
<p><strong>次世代 Minecraft 桌面客户端,全能、美观、全平台覆盖。</strong></p>
|
<p><strong>次世代 Minecraft 桌面客户端,全能、美观、全平台覆盖。</strong></p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href="https://github.com/ApTx2012/Starlight_Lancher/actions">
|
<a href="https://github.com/StarLight-Server/Starlight_Launcher/actions">
|
||||||
<img src="https://img.shields.io/badge/Repo-GitHub-black?style=for-the-badge&logo=github" alt="Repository" />
|
<img src="https://img.shields.io/badge/Repo-GitHub-black?style=for-the-badge&logo=github" alt="Repository" />
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/ApTx2012/Starlight_Lancher/releases">
|
<a href="https://github.com/StarLight-Server/Starlight_Launcher/releases">
|
||||||
<img src="https://img.shields.io/badge/Releases-Download-green?style=for-the-badge&logo=github" alt="Releases" />
|
<img src="https://img.shields.io/badge/Releases-Download-green?style=for-the-badge&logo=github" alt="Releases" />
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/ApTx2012/Starlight_Lancher/stargazers">
|
<a href="https://github.com/StarLight-Server/Starlight_Launcher/stargazers">
|
||||||
<img src="https://img.shields.io/badge/Stars-★-ffb800?style=for-the-badge&logo=github" alt="Stars" />
|
<img src="https://img.shields.io/badge/Stars-★-ffb800?style=for-the-badge&logo=github" alt="Stars" />
|
||||||
</a>
|
</a>
|
||||||
<a href="COPYING.md">
|
<a href="COPYING.md">
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
<a href="https://skin.starlight.cool/">官方网站</a> |
|
<a href="https://skin.starlight.cool/">官方网站</a> |
|
||||||
<a href="https://github.com/ApTx2012/Starlight_Lancher/releases/latest">下载最新版</a> |
|
<a href="https://github.com/StarLight-Server/Starlight_Launcher/releases/latest">下载最新版</a> |
|
||||||
<a href="CONTRIBUTING.md">参与贡献</a>
|
<a href="CONTRIBUTING.md">参与贡献</a>
|
||||||
| <a href="CODE_OF_CONDUCT.md">行为准则</a>
|
| <a href="CODE_OF_CONDUCT.md">行为准则</a>
|
||||||
</p>
|
</p>
|
||||||
@@ -57,7 +57,7 @@ _(注:本项目是调用 Modrinth 公开 API 的独立客户端,与 Rinth, I
|
|||||||
|
|
||||||
## 下载与安装
|
## 下载与安装
|
||||||
|
|
||||||
请前往 [Releases](https://github.com/ApTx2012/Starlight_Lancher/releases/latest) 下载适合你操作系统的最新安装包。
|
请前往 [Releases](https://github.com/StarLight-Server/Starlight_Launcher/releases/latest) 下载适合你操作系统的最新安装包。
|
||||||
已安装的用户每次均可通过内置的 Tauri 签名校验机制,自动在后台完成更新,无需手动下载安装更新。
|
已安装的用户每次均可通过内置的 Tauri 签名校验机制,自动在后台完成更新,无需手动下载安装更新。
|
||||||
|
|
||||||
| 系统平台 | 推荐下载文件 |
|
| 系统平台 | 推荐下载文件 |
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@modrinth/app-frontend",
|
"name": "@modrinth/app-frontend",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.0.2-beta13",
|
"version": "1.0.2-beta15",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -32,6 +32,121 @@ export const ANNOUNCEMENT_CHANGE_TYPES: readonly AnnouncementChangeType[] = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
export const launcherAnnouncements: readonly LauncherAnnouncement[] = [
|
export const launcherAnnouncements: readonly LauncherAnnouncement[] = [
|
||||||
|
{
|
||||||
|
id: 'launcher-1.0.2-beta15',
|
||||||
|
version: '1.0.2-beta15',
|
||||||
|
publishedAt: '2026-10-24',
|
||||||
|
title: {
|
||||||
|
'en-US': 'Starlight Launcher 1.0.2-beta15',
|
||||||
|
'zh-CN': 'Starlight Launcher 1.0.2-beta15',
|
||||||
|
},
|
||||||
|
changes: {
|
||||||
|
fixed: [
|
||||||
|
{
|
||||||
|
'en-US':
|
||||||
|
'Fixed the announcement center failing to open and blank pages in the wiki and profile views caused by it.',
|
||||||
|
'zh-CN': '修复公告中心无法打开,以及由此导致的维基与个人资料页面空白。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US':
|
||||||
|
'Fixed the skin preview showing garbled textures after switching between players.',
|
||||||
|
'zh-CN': '修复切换玩家后皮肤预览出现纹理错乱的问题。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US':
|
||||||
|
'Fixed instance group changes only showing up after refreshing the page.',
|
||||||
|
'zh-CN': '修复实例分组修改后需要刷新页面才能生效的问题。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US':
|
||||||
|
'Fixed server maps not loading because the map iframe was blocked by the content security policy.',
|
||||||
|
'zh-CN': '修复服务器地图因 iframe 被内容安全策略拦截而无法显示的问题。',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'launcher-1.0.2-beta14',
|
||||||
|
version: '1.0.2-beta14',
|
||||||
|
publishedAt: '2026-10-23',
|
||||||
|
title: {
|
||||||
|
'en-US': 'Starlight Launcher 1.0.2-beta14',
|
||||||
|
'zh-CN': 'Starlight Launcher 1.0.2-beta14',
|
||||||
|
},
|
||||||
|
changes: {
|
||||||
|
added: [
|
||||||
|
{
|
||||||
|
'en-US':
|
||||||
|
'Skin-site players can now be created, renamed and deleted, and one can be marked as the default account.',
|
||||||
|
'zh-CN': '皮肤站玩家支持新建、重命名与删除,并可设置默认角色。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US':
|
||||||
|
'The wiki gained search, recent changes and category browsing, plus page watching and title moves.',
|
||||||
|
'zh-CN': '维基支持搜索、最近更新与分类浏览,页面可关注并修改标题。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US':
|
||||||
|
'Wiki pages now support reading revision history, diffing versions and reverting to an older revision.',
|
||||||
|
'zh-CN': '维基页面支持查看历史修订、版本对比与撤销到指定版本。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US': 'Announcements now display the images attached on the skin site.',
|
||||||
|
'zh-CN': '公告中心可显示皮肤站公告附带的图片。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US': 'Bug reports now render their attached screenshots instead of file hashes.',
|
||||||
|
'zh-CN': '问题追踪的附件图片改为直接展示,不再显示文件哈希。',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
changed: [
|
||||||
|
{
|
||||||
|
'en-US': 'The downloads page shows a sign-in prompt instead of an error when signed out.',
|
||||||
|
'zh-CN': '未登录时资源下载页改为提示登录,不再弹出错误。',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
fixed: [
|
||||||
|
{
|
||||||
|
'en-US': 'Fixed the downloads page reporting a sign-in error even when already signed in.',
|
||||||
|
'zh-CN': '修复资源下载页在已登录状态下仍提示未登录的问题。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US':
|
||||||
|
'Fixed the admin panel missing user permission groups, showing UUIDs instead of names for announcement authors, and showing option IDs in review answers.',
|
||||||
|
'zh-CN':
|
||||||
|
'修复管理面板不显示用户权限组、公告发布人显示为 UUID、审核作答显示选项 ID 的问题。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US': 'Fixed the wiki opening a blank page and internal links not navigating correctly.',
|
||||||
|
'zh-CN': '修复维基首次打开为空白、内部链接跳转异常的问题。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US': 'Skin-site player login errors now surface the server-provided reason.',
|
||||||
|
'zh-CN': '皮肤站玩家登录失败时改为显示服务端给出的具体原因。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US': 'Fixed server maps being blocked by CSP and font commands missing permission.',
|
||||||
|
'zh-CN': '修复服务器地图被 CSP 拦截、字体命令缺少权限的问题。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US': 'Backups now support instances that use an external game directory.',
|
||||||
|
'zh-CN': '备份支持使用外部游戏目录的实例。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US': 'The online-player tooltip now renders MOTD colour codes.',
|
||||||
|
'zh-CN': '在线玩家提示可渲染 MOTD 颜色代码。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US': 'Fixed captcha images being cropped and missing the rotation hint.',
|
||||||
|
'zh-CN': '修复验证码图片被裁切、缺少旋转提示的问题。',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'en-US': 'The skin-site player list now retries automatically and shows an error state after failures.',
|
||||||
|
'zh-CN': '皮肤站玩家列表加载失败后自动重试,并显示错误状态。',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 'launcher-1.0.2-beta13',
|
id: 'launcher-1.0.2-beta13',
|
||||||
version: '1.0.2-beta13',
|
version: '1.0.2-beta13',
|
||||||
|
|||||||
@@ -219,6 +219,32 @@ function saveCache(next: RemoteAnnouncement[]) {
|
|||||||
// localStorage may be unavailable (private mode / quota)
|
// localStorage may be unavailable (private mode / quota)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
const imageUrls = reactive<Record<string, string>>({})
|
||||||
|
|
||||||
|
async function loadImage(item: RemoteAnnouncement, token: string) {
|
||||||
|
const name = item.image_name
|
||||||
|
if (!name || imageUrls[item.id]) return
|
||||||
|
try {
|
||||||
|
const url = `https://skin.starlight.cool/starlight/skin/image/BROADCAST_ATTACHMENT/${encodeURIComponent(name)}`
|
||||||
|
const response = await tauriFetch(url, {
|
||||||
|
method: 'GET',
|
||||||
|
headers: { Authorization: `Bearer ${token}` },
|
||||||
|
})
|
||||||
|
if (!response.ok) return
|
||||||
|
const type = response.headers.get('content-type') ?? ''
|
||||||
|
if (type.includes('application/json') || type.includes('text/')) return
|
||||||
|
const blob = await response.blob()
|
||||||
|
imageUrls[item.id] = URL.createObjectURL(blob)
|
||||||
|
} catch {
|
||||||
|
// 图片加载失败不影响公告本身展示
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function revokeImages() {
|
||||||
|
for (const url of Object.values(imageUrls)) URL.revokeObjectURL(url)
|
||||||
|
for (const key of Object.keys(imageUrls)) delete imageUrls[key]
|
||||||
|
}
|
||||||
|
|
||||||
async function refresh() {
|
async function refresh() {
|
||||||
if (disposed) return
|
if (disposed) return
|
||||||
loadCache()
|
loadCache()
|
||||||
|
|||||||
@@ -622,6 +622,7 @@ watch(signedIn, (value) => {
|
|||||||
</div>
|
</div>
|
||||||
<SkinPreviewRenderer
|
<SkinPreviewRenderer
|
||||||
v-else
|
v-else
|
||||||
|
:key="selectedId ?? ''"
|
||||||
:texture-src="texture.skin ?? ''"
|
:texture-src="texture.skin ?? ''"
|
||||||
:cape-src="texture.cape"
|
:cape-src="texture.cape"
|
||||||
:variant="skinVariant"
|
:variant="skinVariant"
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { type SkinSiteWikiNode } from '@/helpers/skin-site-api'
|
import { type SkinSiteWikiNode } from '@/helpers/skin-site-api'
|
||||||
|
|
||||||
|
import WikiAttachmentNode from './WikiAttachmentNode.vue'
|
||||||
|
import WikiNotice from './WikiNotice.vue'
|
||||||
import { safeExternalUrl, safeWikiColor } from './wiki-color'
|
import { safeExternalUrl, safeWikiColor } from './wiki-color'
|
||||||
|
|
||||||
defineOptions({ name: 'WikiNodeRenderer' })
|
defineOptions({ name: 'WikiNodeRenderer' })
|
||||||
|
|||||||
@@ -157,6 +157,13 @@ export function useInstanceGroups(instances: Ref<{ id: string; groups: string[]
|
|||||||
|
|
||||||
async function setMemberships(updates: InstanceGroupMembershipUpdate[]): Promise<boolean> {
|
async function setMemberships(updates: InstanceGroupMembershipUpdate[]): Promise<boolean> {
|
||||||
await set_group_memberships(updates)
|
await set_group_memberships(updates)
|
||||||
|
// 接口成功后同步本地实例的 groups 字段,否则依赖 instances 的分组视图不会重算,
|
||||||
|
// 用户必须刷新页面才能看到新的分组归属。
|
||||||
|
const byId = new Map(updates.map((update) => [update.instance_id, update.group_ids]))
|
||||||
|
instances.value = instances.value.map((instance) => {
|
||||||
|
const nextGroups = byId.get(instance.id)
|
||||||
|
return nextGroups ? { ...instance, groups: [...nextGroups] } : instance
|
||||||
|
})
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ export const AxolotlBrandConfig = Object.freeze({
|
|||||||
productName: 'Starlight Launcher',
|
productName: 'Starlight Launcher',
|
||||||
shortProductName: 'Starlight',
|
shortProductName: 'Starlight',
|
||||||
website: 'https://skin.starlight.cool/',
|
website: 'https://skin.starlight.cool/',
|
||||||
repositoryUrl: 'https://github.com/ApTx2012/Starlight_Lancher',
|
repositoryUrl: 'https://github.com/StarLight-Server/Starlight_Launcher',
|
||||||
releasesUrl: 'https://github.com/ApTx2012/Starlight_Lancher/releases',
|
releasesUrl: 'https://github.com/StarLight-Server/Starlight_Launcher/releases',
|
||||||
supportUrl: 'https://skin.starlight.cool/',
|
supportUrl: 'https://skin.starlight.cool/',
|
||||||
qqGroupNumber: '000000000',
|
qqGroupNumber: '000000000',
|
||||||
qqChannelUrl: 'https://skin.starlight.cool/',
|
qqChannelUrl: 'https://skin.starlight.cool/',
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "theseus_gui"
|
name = "theseus_gui"
|
||||||
# The actual version is set by the theseus-build workflow on tagging
|
# The actual version is set by the theseus-build workflow on tagging
|
||||||
version = "1.0.2-beta13"
|
version = "1.0.2-beta15"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
description = "Axolotl Launcher is a cross-platform Minecraft launcher"
|
description = "Axolotl Launcher is a cross-platform Minecraft launcher"
|
||||||
homepage = "https://www.ghs.red"
|
homepage = "https://www.ghs.red"
|
||||||
|
|||||||
@@ -126,7 +126,7 @@
|
|||||||
"script-src": "'self' 'unsafe-eval' 'wasm-unsafe-eval'",
|
"script-src": "'self' 'unsafe-eval' 'wasm-unsafe-eval'",
|
||||||
"worker-src": "'self' blob:",
|
"worker-src": "'self' blob:",
|
||||||
|
|
||||||
"frame-src": "https://www.youtube.com https://www.youtube-nocookie.com https://discord.com 'self' http://axolotl-skin.localhost axolotl-skin://localhost https://skin.starlight.cool https://map.starlight.cool",
|
"frame-src": "https: http://axolotl-skin.localhost axolotl-skin://localhost 'self'",
|
||||||
"media-src": "'self' data: https://*.githubusercontent.com"
|
"media-src": "'self' data: https://*.githubusercontent.com"
|
||||||
},
|
},
|
||||||
"csp": {
|
"csp": {
|
||||||
@@ -136,7 +136,7 @@
|
|||||||
"img-src": "https: 'unsafe-inline' 'self' asset: http://asset.localhost http://textures.minecraft.net blob: data:",
|
"img-src": "https: 'unsafe-inline' 'self' asset: http://asset.localhost http://textures.minecraft.net blob: data:",
|
||||||
"style-src": "'unsafe-inline' 'self'",
|
"style-src": "'unsafe-inline' 'self'",
|
||||||
"script-src": "'self' 'unsafe-eval' 'wasm-unsafe-eval'",
|
"script-src": "'self' 'unsafe-eval' 'wasm-unsafe-eval'",
|
||||||
"frame-src": "https://www.youtube.com https://www.youtube-nocookie.com https://discord.com 'self' axolotl-skin://localhost http://axolotl-skin.localhost https://skin.starlight.cool https://map.starlight.cool",
|
"frame-src": "https: axolotl-skin://localhost http://axolotl-skin.localhost 'self'",
|
||||||
"media-src": "'self' data: https://*.githubusercontent.com"
|
"media-src": "'self' data: https://*.githubusercontent.com"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "theseus"
|
name = "theseus"
|
||||||
# The actual version is set by the theseus-build workflow on tagging
|
# The actual version is set by the theseus-build workflow on tagging
|
||||||
version = "1.0.2-beta13"
|
version = "1.0.2-beta15"
|
||||||
edition.workspace = true
|
edition.workspace = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -216,9 +216,33 @@ async fn modrinth_update_candidates(
|
|||||||
.get(&file.id)
|
.get(&file.id)
|
||||||
.map(Vec::as_slice)
|
.map(Vec::as_slice)
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
|
// A file whose provider release tracking was invalidated (e.g. by an
|
||||||
|
// external sync replacing the jar) no longer carries a release id. In
|
||||||
|
// that case the SHA1 lookup below may resolve to an unrelated project
|
||||||
|
// or to a different version of the same project, which would surface a
|
||||||
|
// bogus "update available" right after a sync. Only trust the hash
|
||||||
|
// lookup when it resolves to the same project we already track.
|
||||||
|
let recorded_project_id = provider_refs.iter().find_map(|reference| {
|
||||||
|
match reference {
|
||||||
|
ContentProviderRef::Modrinth { project_id, .. } => {
|
||||||
|
Some(project_id.as_str())
|
||||||
|
}
|
||||||
|
ContentProviderRef::CurseForge { .. }
|
||||||
|
| ContentProviderRef::McArchive { .. } => None,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let Some(current_version_id) =
|
||||||
|
installed_modrinth_version_id(provider_refs).or_else(|| {
|
||||||
|
if recorded_project_id == Some(metadata.project_id.as_str()) {
|
||||||
|
ModrinthVersionId::new(metadata.version_id.to_string()).ok()
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
})
|
||||||
|
else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
let project_id = ModrinthProjectId::new(metadata.project_id.clone())?;
|
let project_id = ModrinthProjectId::new(metadata.project_id.clone())?;
|
||||||
let current_version_id = installed_modrinth_version_id(provider_refs)
|
|
||||||
.unwrap_or(ModrinthVersionId::new(metadata.version_id.clone())?);
|
|
||||||
candidates.push(UpdateCandidate {
|
candidates.push(UpdateCandidate {
|
||||||
entry: context.entries_by_file_id.get(&file.id).cloned(),
|
entry: context.entries_by_file_id.get(&file.id).cloned(),
|
||||||
file: file.clone(),
|
file: file.clone(),
|
||||||
|
|||||||
Reference in new issue
Block a user