|
1 | | -using System; |
2 | | -using System.Collections.Immutable; |
3 | | -using System.IO; |
4 | | -using System.Linq; |
5 | | -using System.Text.RegularExpressions; |
6 | | -using System.Threading.Tasks; |
7 | | -using AsyncAwaitBestPractices; |
| 1 | +using System.Text.RegularExpressions; |
8 | 2 | using Avalonia.Controls; |
9 | 3 | using Avalonia.Controls.Notifications; |
10 | 4 | using Avalonia.Threading; |
11 | 5 | using CommunityToolkit.Mvvm.ComponentModel; |
12 | 6 | using CommunityToolkit.Mvvm.Input; |
13 | | -using FluentAvalonia.UI.Controls; |
14 | 7 | using Injectio.Attributes; |
15 | 8 | using NLog; |
16 | 9 | using StabilityMatrix.Avalonia.Animations; |
17 | | -using StabilityMatrix.Avalonia.Controls; |
18 | 10 | using StabilityMatrix.Avalonia.Services; |
19 | 11 | using StabilityMatrix.Avalonia.ViewModels.Base; |
20 | | -using StabilityMatrix.Avalonia.ViewModels.Dialogs; |
21 | | -using StabilityMatrix.Avalonia.Views.Dialogs; |
22 | 12 | using StabilityMatrix.Core.Api; |
23 | 13 | using StabilityMatrix.Core.Attributes; |
24 | 14 | using StabilityMatrix.Core.Database; |
25 | | -using StabilityMatrix.Core.Extensions; |
26 | 15 | using StabilityMatrix.Core.Helper; |
27 | | -using StabilityMatrix.Core.Models; |
28 | 16 | using StabilityMatrix.Core.Models.Api; |
29 | 17 | using StabilityMatrix.Core.Models.Database; |
30 | 18 | using StabilityMatrix.Core.Models.FileInterfaces; |
@@ -227,162 +215,6 @@ public void SearchAuthor() |
227 | 215 | EventManager.Instance.OnNavigateAndFindCivitAuthorRequested(CivitModel.Creator.Username); |
228 | 216 | } |
229 | 217 |
|
230 | | - [RelayCommand] |
231 | | - private async Task ShowVersionDialog(CivitModel model) |
232 | | - { |
233 | | - var versions = model.ModelVersions; |
234 | | - if (versions is null || versions.Count == 0) |
235 | | - { |
236 | | - notificationService.Show( |
237 | | - new Notification( |
238 | | - "Model has no versions available", |
239 | | - "This model has no versions available for download", |
240 | | - NotificationType.Warning |
241 | | - ) |
242 | | - ); |
243 | | - return; |
244 | | - } |
245 | | - |
246 | | - var newVm = dialogFactory.Get<CivitDetailsPageViewModel>(vm => |
247 | | - { |
248 | | - vm.CivitModel = model; |
249 | | - return vm; |
250 | | - }); |
251 | | - |
252 | | - navigationService.NavigateTo(newVm, BetterSlideNavigationTransition.PageSlideFromRight); |
253 | | - return; |
254 | | - |
255 | | - var dialog = new BetterContentDialog |
256 | | - { |
257 | | - Title = model.Name, |
258 | | - IsPrimaryButtonEnabled = false, |
259 | | - IsSecondaryButtonEnabled = false, |
260 | | - IsFooterVisible = false, |
261 | | - CloseOnClickOutside = true, |
262 | | - MaxDialogWidth = 750, |
263 | | - MaxDialogHeight = 1000, |
264 | | - }; |
265 | | - |
266 | | - var htmlDescription = $"""<html><body class="markdown-body">{model.Description}</body></html>"""; |
267 | | - |
268 | | - var viewModel = dialogFactory.Get<SelectModelVersionViewModel>(); |
269 | | - viewModel.Dialog = dialog; |
270 | | - viewModel.Title = model.Name; |
271 | | - |
272 | | - viewModel.Description = htmlDescription; |
273 | | - viewModel.CivitModel = model; |
274 | | - viewModel.Versions = versions |
275 | | - .Where(v => !settingsManager.Settings.HideEarlyAccessModels || !v.IsEarlyAccess) |
276 | | - .Select(version => new ModelVersionViewModel(modelIndexService, version)) |
277 | | - .ToImmutableArray(); |
278 | | - viewModel.SelectedVersionViewModel = viewModel.Versions.Any() ? viewModel.Versions[0] : null; |
279 | | - |
280 | | - // Update with latest version (including files) if we have no files |
281 | | - if (model.ModelVersions?.FirstOrDefault()?.Files is not { Count: > 0 }) |
282 | | - { |
283 | | - Task.Run(async () => |
284 | | - { |
285 | | - Logger.Debug("No files found for model {ModelId}. Updating versions...", model.Id); |
286 | | - |
287 | | - var latestModel = await civitApi.GetModelById(model.Id); |
288 | | - var latestVersions = latestModel.ModelVersions ?? []; |
289 | | - |
290 | | - // Update our model |
291 | | - civitModel.Description = latestModel.Description; |
292 | | - civitModel = latestModel; |
293 | | - foreach (var version in latestVersions) |
294 | | - { |
295 | | - if (version.Files is not { Count: > 0 }) |
296 | | - continue; |
297 | | - |
298 | | - var targetVersion = model.ModelVersions?.FirstOrDefault(v => v.Id == version.Id); |
299 | | - if (targetVersion is null) |
300 | | - continue; |
301 | | - |
302 | | - targetVersion.Files = version.Files; |
303 | | - targetVersion.Description = version.Description; |
304 | | - targetVersion.DownloadUrl = version.DownloadUrl; |
305 | | - } |
306 | | - |
307 | | - // Reinitialize |
308 | | - Logger.Debug("Updating Versions dialog"); |
309 | | - Dispatcher.UIThread.Post(() => |
310 | | - { |
311 | | - var newHtmlDescription = |
312 | | - $"""<html><body class="markdown-body">{model.Description}</body></html>"""; |
313 | | - |
314 | | - viewModel.Dialog = dialog; |
315 | | - viewModel.Title = latestModel.Name; |
316 | | - |
317 | | - viewModel.Description = newHtmlDescription; |
318 | | - viewModel.CivitModel = latestModel; |
319 | | - viewModel.Versions = (latestModel.ModelVersions ?? []) |
320 | | - .Where(v => !settingsManager.Settings.HideEarlyAccessModels || !v.IsEarlyAccess) |
321 | | - .Select(version => new ModelVersionViewModel(modelIndexService, version)) |
322 | | - .ToImmutableArray(); |
323 | | - viewModel.SelectedVersionViewModel = viewModel.Versions.Any() |
324 | | - ? viewModel.Versions[0] |
325 | | - : null; |
326 | | - }); |
327 | | - |
328 | | - // Save to db |
329 | | - var upsertResult = await liteDbContext.UpsertCivitModelAsync(latestModel); |
330 | | - Logger.Debug( |
331 | | - "Update model {ModelId} with latest version: {Result}", |
332 | | - model.Id, |
333 | | - upsertResult |
334 | | - ); |
335 | | - }) |
336 | | - .SafeFireAndForget(e => Logger.Error(e, "Failed to update model {ModelId}", model.Id)); |
337 | | - } |
338 | | - |
339 | | - dialog.Content = new SelectModelVersionDialog { DataContext = viewModel }; |
340 | | - |
341 | | - var result = await dialog.ShowAsync(); |
342 | | - |
343 | | - if (result != ContentDialogResult.Primary) |
344 | | - { |
345 | | - return; |
346 | | - } |
347 | | - |
348 | | - var selectedVersion = viewModel?.SelectedVersionViewModel?.ModelVersion; |
349 | | - var selectedFile = viewModel?.SelectedFile?.CivitFile; |
350 | | - |
351 | | - DirectoryPath downloadPath; |
352 | | - if (viewModel?.IsCustomSelected is true) |
353 | | - { |
354 | | - downloadPath = viewModel.CustomInstallLocation; |
355 | | - } |
356 | | - else |
357 | | - { |
358 | | - var sharedFolder = model.Type.ConvertTo<SharedFolderType>().GetStringValue(); |
359 | | - |
360 | | - if ( |
361 | | - model.BaseModelType == CivitBaseModelType.Flux1D.GetStringValue() |
362 | | - || model.BaseModelType == CivitBaseModelType.Flux1S.GetStringValue() |
363 | | - || model.BaseModelType == CivitBaseModelType.WanVideo.GetStringValue() |
364 | | - || model.BaseModelType == CivitBaseModelType.HunyuanVideo.GetStringValue() |
365 | | - || selectedFile?.Metadata.Format is CivitModelFormat.GGUF |
366 | | - ) |
367 | | - { |
368 | | - sharedFolder = SharedFolderType.DiffusionModels.GetStringValue(); |
369 | | - } |
370 | | - |
371 | | - var defaultPath = Path.Combine(@"Models", sharedFolder); |
372 | | - |
373 | | - var subFolder = viewModel?.SelectedInstallLocation ?? defaultPath; |
374 | | - subFolder = subFolder.StripStart(@$"Models{Path.DirectorySeparatorChar}"); |
375 | | - downloadPath = Path.Combine(settingsManager.ModelsDirectory, subFolder); |
376 | | - } |
377 | | - |
378 | | - await Task.Delay(100); |
379 | | - await DoImport(model, downloadPath, selectedVersion, selectedFile); |
380 | | - |
381 | | - Text = "Import started. Check the downloads tab for progress."; |
382 | | - Value = 100; |
383 | | - DelayedClearProgress(TimeSpan.FromMilliseconds(1000)); |
384 | | - } |
385 | | - |
386 | 218 | private async Task DoImport( |
387 | 219 | CivitModel model, |
388 | 220 | DirectoryPath downloadFolder, |
|
0 commit comments