private async Task <(bool IsFirstLaunch, string CurrentVersion, string AppRootFolder, string AppVersionFolder)> Initialize() { _logger.Info("Initializing launcher"); var appRootFolder = _storageService.GetApplicationRootFolderPath(); _logger.Info("Application root folder: {AppRootFolder}", appRootFolder); var appVersionsFolder = _storageService.GetApplicationVersionsFolder(); _logger.Info("Application versions folder: {AppVersionsFolder}", appVersionsFolder); var isFirstLaunch = !Directory.Exists(appVersionsFolder); Directory.CreateDirectory(appVersionsFolder); _logger.Info("Is first launch: {IsFirstLaunch}", isFirstLaunch); var currentVersion = await _storageService.GetCurrentVersion(); return(isFirstLaunch, currentVersion, appRootFolder, appVersionsFolder); }
public async Task DownloadVersion(string version) { _logger.Info("Downloading the package using package name {PackageName} and version {Version}", _packageName, version); try { var package = await FindPackage(); var appVersionsFolder = _storageService.GetApplicationVersionsFolder(); var downloadedFiles = await _nuGetDownloader.DownloadAsync(package.Package, package.Repository, appVersionsFolder); _logger.Info("Files downloaded to {AppVersionsFolder}", appVersionsFolder); _logger.Debug("Downloaded the following files:"); foreach (var downloadedFile in downloadedFiles) { _logger.Debug("{FileName}", downloadedFile); } if (downloadedFiles.Any() != true) { _logger.Error("The package didn't contain any files. Unknown state."); } string launchCommand; var newVersionPackage = downloadedFiles.Single(x => x.EndsWith(".nupkg")); var newVersionRoot = Path.GetDirectoryName(newVersionPackage); if (string.IsNullOrWhiteSpace(Configuration.LaunchCommand)) { try { launchCommand = downloadedFiles.SingleOrDefault(x => x.EndsWith(".exe")); } catch (Exception e) { _logger.Error(e, "Failed to find executable from downloaded package. Does it contain many exe-files?"); throw; } } else { try { launchCommand = newVersionRoot + "/" + Configuration.LaunchCommand; } catch (Exception e) { _logger.Error(e, "Failed to set launch command based on parameter {LaunchCommand}", Configuration.LaunchCommand); throw; } } if (launchCommand == null) { _logger.Error("The package didn't contain an executable."); throw new Exception("The package didn't contain an executable."); } _logger.Info("Executable to the downloaded version is {ExeFile}", launchCommand); await _storageService.UpdatePendingVersionRoot(newVersionRoot); await _storageService.UpdatePendingVersion(version); await _storageService.UpdatePendingExe(launchCommand); } catch (Exception e) { _logger.Error(e, "Failed to download package using package name {PackageName} and version {Version}", _packageName, version); throw; } }