Skip to content

Commit 0b622fa

Browse files
authored
Merge branch 'main' into downmerge
2 parents 6ab7fab + e2bd539 commit 0b622fa

File tree

3 files changed

+110
-117
lines changed

3 files changed

+110
-117
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning 2.0](https://semver.org/spec/v2
77

88
## v2.13.1
99
### Fixed
10+
- Fixed [#1078](https://github.com/LykosAI/StabilityMatrix/issues/1078) - "Call from invalid thread" error after one-click install finishes
1011
- Fixed Inference image selector card buttons taking up the whole height of the card
1112

1213
## v2.13.0

StabilityMatrix.Avalonia/ViewModels/Dialogs/NewOneClickInstallViewModel.cs

Lines changed: 108 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -87,146 +87,138 @@ INotificationService notificationService
8787
.ThenByAscending(p => p.DisplayName)
8888
)
8989
.ObserveOn(SynchronizationContext.Current)
90-
.Subscribe();
90+
.Subscribe(_ =>
91+
{
92+
if (ShownPackages.Count > 0)
93+
return;
9194

92-
AllPackagesCache.AddOrUpdate(packageFactory.GetAllAvailablePackages());
93-
if (ShownPackages.Count > 0)
94-
return;
95+
ShowIncompatiblePackages = true;
96+
});
9597

96-
ShowIncompatiblePackages = true;
98+
AllPackagesCache.AddOrUpdate(packageFactory.GetAllAvailablePackages());
9799
}
98100

99101
[RelayCommand]
100-
private void InstallComfyForInference()
102+
private async Task InstallComfyForInference()
101103
{
102104
var comfyPackage = ShownPackages.FirstOrDefault(x => x is ComfyUI);
103105
if (comfyPackage == null)
104106
return;
105107

106108
isInferenceInstall = true;
107-
InstallPackage(comfyPackage);
109+
await InstallPackage(comfyPackage);
108110
}
109111

110112
[RelayCommand]
111-
private void InstallPackage(BasePackage selectedPackage)
113+
private async Task InstallPackage(BasePackage selectedPackage)
112114
{
113-
Task.Run(async () =>
114-
{
115-
var installLocation = Path.Combine(
116-
settingsManager.LibraryDir,
117-
"Packages",
118-
selectedPackage.Name
119-
);
120-
121-
var steps = new List<IPackageStep>
122-
{
123-
new SetPackageInstallingStep(settingsManager, selectedPackage.Name),
124-
new SetupPrerequisitesStep(prerequisiteHelper, pyRunner, selectedPackage),
125-
};
126-
127-
// get latest version & download & install
128-
if (Directory.Exists(installLocation))
129-
{
130-
var installPath = new DirectoryPath(installLocation);
131-
await installPath.DeleteVerboseAsync(logger);
132-
}
133-
134-
var downloadVersion = await selectedPackage.GetLatestVersion();
135-
var installedVersion = new InstalledPackageVersion { IsPrerelease = false };
115+
OnPrimaryButtonClick();
136116

137-
if (selectedPackage.ShouldIgnoreReleases)
138-
{
139-
installedVersion.InstalledBranch = downloadVersion.BranchName;
140-
installedVersion.InstalledCommitSha = downloadVersion.CommitHash;
141-
}
142-
else
143-
{
144-
installedVersion.InstalledReleaseVersion = downloadVersion.VersionTag;
145-
}
117+
var installLocation = Path.Combine(settingsManager.LibraryDir, "Packages", selectedPackage.Name);
118+
119+
var steps = new List<IPackageStep>
120+
{
121+
new SetPackageInstallingStep(settingsManager, selectedPackage.Name),
122+
new SetupPrerequisitesStep(prerequisiteHelper, pyRunner, selectedPackage)
123+
};
124+
125+
// get latest version & download & install
126+
if (Directory.Exists(installLocation))
127+
{
128+
var installPath = new DirectoryPath(installLocation);
129+
await installPath.DeleteVerboseAsync(logger);
130+
}
131+
132+
var downloadVersion = await selectedPackage.GetLatestVersion();
133+
var installedVersion = new InstalledPackageVersion { IsPrerelease = false };
134+
135+
if (selectedPackage.ShouldIgnoreReleases)
136+
{
137+
installedVersion.InstalledBranch = downloadVersion.BranchName;
138+
installedVersion.InstalledCommitSha = downloadVersion.CommitHash;
139+
}
140+
else
141+
{
142+
installedVersion.InstalledReleaseVersion = downloadVersion.VersionTag;
143+
}
144+
145+
var torchVersion = selectedPackage.GetRecommendedTorchVersion();
146+
var recommendedSharedFolderMethod = selectedPackage.RecommendedSharedFolderMethod;
147+
148+
var installedPackage = new InstalledPackage
149+
{
150+
DisplayName = selectedPackage.DisplayName,
151+
LibraryPath = Path.Combine("Packages", selectedPackage.Name),
152+
Id = Guid.NewGuid(),
153+
PackageName = selectedPackage.Name,
154+
Version = installedVersion,
155+
LaunchCommand = selectedPackage.LaunchCommand,
156+
LastUpdateCheck = DateTimeOffset.Now,
157+
PreferredTorchIndex = torchVersion,
158+
PreferredSharedFolderMethod = recommendedSharedFolderMethod
159+
};
160+
161+
var downloadStep = new DownloadPackageVersionStep(
162+
selectedPackage,
163+
installLocation,
164+
new DownloadPackageOptions { VersionOptions = downloadVersion }
165+
);
166+
steps.Add(downloadStep);
167+
168+
var unpackSiteCustomizeStep = new UnpackSiteCustomizeStep(Path.Combine(installLocation, "venv"));
169+
steps.Add(unpackSiteCustomizeStep);
170+
171+
var installStep = new InstallPackageStep(
172+
selectedPackage,
173+
installLocation,
174+
installedPackage,
175+
new InstallPackageOptions
176+
{
177+
SharedFolderMethod = recommendedSharedFolderMethod,
178+
VersionOptions = downloadVersion,
179+
PythonOptions = { TorchIndex = torchVersion }
180+
}
181+
);
182+
steps.Add(installStep);
183+
184+
var setupModelFoldersStep = new SetupModelFoldersStep(
185+
selectedPackage,
186+
recommendedSharedFolderMethod,
187+
installLocation
188+
);
189+
steps.Add(setupModelFoldersStep);
190+
191+
var setupOutputSharingStep = new SetupOutputSharingStep(selectedPackage, installLocation);
192+
steps.Add(setupOutputSharingStep);
193+
194+
var addInstalledPackageStep = new AddInstalledPackageStep(settingsManager, installedPackage);
195+
steps.Add(addInstalledPackageStep);
196+
197+
var runner = new PackageModificationRunner
198+
{
199+
ShowDialogOnStart = false,
200+
HideCloseButton = false,
201+
ModificationCompleteMessage = $"{selectedPackage.DisplayName} installed successfully"
202+
};
203+
204+
runner
205+
.ExecuteSteps(steps)
206+
.ContinueWith(_ =>
207+
{
208+
notificationService.OnPackageInstallCompleted(runner);
146209

147-
var torchVersion = selectedPackage.GetRecommendedTorchVersion();
148-
var recommendedSharedFolderMethod = selectedPackage.RecommendedSharedFolderMethod;
210+
EventManager.Instance.OnOneClickInstallFinished(false);
149211

150-
var installedPackage = new InstalledPackage
151-
{
152-
DisplayName = selectedPackage.DisplayName,
153-
LibraryPath = Path.Combine("Packages", selectedPackage.Name),
154-
Id = Guid.NewGuid(),
155-
PackageName = selectedPackage.Name,
156-
Version = installedVersion,
157-
LaunchCommand = selectedPackage.LaunchCommand,
158-
LastUpdateCheck = DateTimeOffset.Now,
159-
PreferredTorchIndex = torchVersion,
160-
PreferredSharedFolderMethod = recommendedSharedFolderMethod
161-
};
162-
163-
var downloadStep = new DownloadPackageVersionStep(
164-
selectedPackage,
165-
installLocation,
166-
new DownloadPackageOptions { VersionOptions = downloadVersion }
167-
);
168-
steps.Add(downloadStep);
169-
170-
var unpackSiteCustomizeStep = new UnpackSiteCustomizeStep(
171-
Path.Combine(installLocation, "venv")
172-
);
173-
steps.Add(unpackSiteCustomizeStep);
174-
175-
var installStep = new InstallPackageStep(
176-
selectedPackage,
177-
installLocation,
178-
installedPackage,
179-
new InstallPackageOptions
180-
{
181-
SharedFolderMethod = recommendedSharedFolderMethod,
182-
VersionOptions = downloadVersion,
183-
PythonOptions = { TorchIndex = torchVersion }
184-
}
185-
);
186-
steps.Add(installStep);
187-
188-
var setupModelFoldersStep = new SetupModelFoldersStep(
189-
selectedPackage,
190-
recommendedSharedFolderMethod,
191-
installLocation
192-
);
193-
steps.Add(setupModelFoldersStep);
194-
195-
var addInstalledPackageStep = new AddInstalledPackageStep(settingsManager, installedPackage);
196-
steps.Add(addInstalledPackageStep);
212+
if (!isInferenceInstall)
213+
return;
197214

198215
Dispatcher.UIThread.Post(() =>
199216
{
200-
var runner = new PackageModificationRunner
201-
{
202-
ShowDialogOnStart = false,
203-
HideCloseButton = false,
204-
ModificationCompleteMessage = $"{selectedPackage.DisplayName} installed successfully"
205-
};
206-
207-
runner
208-
.ExecuteSteps(steps)
209-
.ContinueWith(_ =>
210-
{
211-
notificationService.OnPackageInstallCompleted(runner);
212-
213-
EventManager.Instance.OnOneClickInstallFinished(false);
214-
215-
if (!isInferenceInstall)
216-
return;
217-
218-
Dispatcher.UIThread.Post(() =>
219-
{
220-
navigationService.NavigateTo<InferenceViewModel>();
221-
});
222-
})
223-
.SafeFireAndForget();
224-
225-
EventManager.Instance.OnPackageInstallProgressAdded(runner);
217+
navigationService.NavigateTo<InferenceViewModel>();
226218
});
227219
})
228220
.SafeFireAndForget();
229221

230-
OnPrimaryButtonClick();
222+
EventManager.Instance.OnPackageInstallProgressAdded(runner);
231223
}
232224
}

StabilityMatrix.Avalonia/ViewModels/PackageManager/MainPackageManagerViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ RunningPackageService runningPackageService
114114

115115
private void OnOneClickInstallFinished(object? sender, bool e)
116116
{
117-
OnLoadedAsync().SafeFireAndForget();
117+
Dispatcher.UIThread.Post(() => OnLoadedAsync().SafeFireAndForget());
118118
}
119119

120120
public void SetPackages(IEnumerable<InstalledPackage> packages)

0 commit comments

Comments
 (0)