feat: enhance model version context with file metadata

- Rename `preview_overrides` to `version_context` to better reflect expanded purpose
- Add file_path and file_name fields to version serialization
- Update method names and parameter signatures for consistency
- Include file metadata from cache in version context building
- Maintain backward compatibility with existing preview URL functionality

The changes provide more comprehensive version information including file details while maintaining existing preview override behavior.
This commit is contained in:
Will Miao
2025-10-26 08:53:53 +08:00
parent 9ca2b9dd56
commit 795b9e8418
20 changed files with 1542 additions and 51 deletions

View File

@@ -140,6 +140,14 @@ export class DownloadManager {
this.loadDefaultPathSetting();
}
async retrieveVersionsForModel(modelId, source = null) {
this.versions = await this.apiClient.fetchCivitaiVersions(modelId, source);
if (!this.versions || !this.versions.length) {
throw new Error(translate('modals.download.errors.noVersions'));
}
return this.versions;
}
async validateAndFetchVersions() {
const url = document.getElementById('modelUrl').value.trim();
const errorElement = document.getElementById('urlError');
@@ -152,12 +160,8 @@ export class DownloadManager {
throw new Error(translate('modals.download.errors.invalidUrl'));
}
this.versions = await this.apiClient.fetchCivitaiVersions(this.modelId, this.source);
if (!this.versions.length) {
throw new Error(translate('modals.download.errors.noVersions'));
}
await this.retrieveVersionsForModel(this.modelId, this.source);
// If we have a version ID from URL, pre-select it
if (this.modelVersionId) {
this.currentVersion = this.versions.find(v => v.id.toString() === this.modelVersionId);
@@ -171,6 +175,27 @@ export class DownloadManager {
}
}
async fetchVersionsForCurrentModel() {
const errorElement = document.getElementById('urlError');
if (errorElement) {
errorElement.textContent = '';
}
try {
this.loadingManager.showSimpleLoading(translate('modals.download.fetchingVersions'));
await this.retrieveVersionsForModel(this.modelId, this.source);
if (this.modelVersionId) {
this.currentVersion = this.versions.find(v => v.id.toString() === this.modelVersionId);
}
this.showVersionStep();
} catch (error) {
if (errorElement) {
errorElement.textContent = error.message;
}
} finally {
this.loadingManager.hide();
}
}
extractModelId(url) {
const versionMatch = url.match(/modelVersionId=(\d+)/i);
this.modelVersionId = versionMatch ? versionMatch[1] : null;
@@ -191,6 +216,26 @@ export class DownloadManager {
return null;
}
async openForModelVersion(modelType, modelId, versionId = null) {
try {
this.apiClient = getModelApiClient(modelType);
} catch (error) {
this.apiClient = getModelApiClient();
}
this.showDownloadModal();
this.modelId = modelId ? modelId.toString() : null;
this.modelVersionId = versionId ? versionId.toString() : null;
this.source = null;
if (!this.modelId) {
return;
}
await this.fetchVersionsForCurrentModel();
}
showVersionStep() {
document.getElementById('urlStep').style.display = 'none';
document.getElementById('versionStep').style.display = 'block';