public async void Receive(AddImportFolderMessage message) { var newConfig = new ImportFolderConfig { FullPath = Path.GetFullPath(message.FolderPath), ScanSubDirectories = message.ScanSubDirectories, AdditionalTags = message.Tags.OrderBy(tag => tag).Distinct().ToList(), Rotation = message.RotateOnImport ? message.Rotation : (Vector3?)null, Scale = message.ScaleOnImport ? message.Scale : (Vector3?)null, AutoTagMode = AutoTagMode.ExplodeResourcePath }; var folder = _importFolderFactory.Create(newConfig); var folders = SavedFolders .Append(folder) .OrderBy(f => f.DisplayName) .ToList(); await SaveAndRefreshAsync(folders); _ = folder.InitializeAsync(); // Switch to added folder _relay.Send(this, new SearchChangedMessage { SearchTags = new[] { "folder: " + newConfig.FullPath.ToLowerInvariant() } }); }
private async Task ImportBatched( IFileSource source, List <IFileInfo> itemsForImport, CancellationToken token) { var current = -1; var tasks = new Task[Parallelism]; for (var i = 0; i < tasks.Length; i++) { tasks[i] = Task.Run(async() => { int next; while ((next = Interlocked.Increment(ref current)) < itemsForImport.Count) { if (token.IsCancellationRequested) { return; } await ImportFile(source, itemsForImport[next], token); } }, token); } await Task.WhenAll(tasks); _relay.Send(this, new ProgressMessage { Text = $"Finished importing from `{source.DisplayName}`" }); }
public ApplicationModel([NotNull] IMessageRelay relay) { if (relay is null) { throw new ArgumentNullException(nameof(relay)); } ShowAppSettingsCommand = new DelegateCommand(() => relay.Send <RequestShowDialogMessage.AppSettings>(this)); ShowFeedbackCommand = new DelegateCommand(() => relay.Send <RequestShowDialogMessage.UserFeedback>(this)); ShowHelpCommand = new DelegateCommand(OpenWiki); }
private void SaveCurrentSearch() { if (!CanSaveCurrentSearch()) { return; } _relay.Send(this, new RequestShowDialogMessage.SaveSearch { SearchTags = _currentSearchTags }); }
private void ForceShowUpdateDialog() { var message = _message.Value; message.UserRequested = true; _relay.Send(this, message); }
protected override void OnAccept() { _relay.Send(this, new SaveSearchMessage { Alias = Alias, SearchTags = _searchTags }); }
private void OpenIn3DView() { _relay.Send(this, new RequestShowDialogMessage.EditScreen { SelectedItems = _detailMenuModel.Mode == SelectionMode.Current ? new[] { _detailMenuModel.Current.Value } : _detailMenuModel.Selection.ToArray() }); }
public ImportFoldersModel( [NotNull] IConfigStore configStore, [NotNull] IImportFolderFactory importFolderFactory, [NotNull] IMessageRelay relay) { _store = configStore ?? throw new ArgumentNullException(nameof(configStore)); _relay = relay ?? throw new ArgumentNullException(nameof(relay)); _importFolderFactory = importFolderFactory ?? throw new ArgumentNullException(nameof(importFolderFactory)); AddImportFolderCommand = new DelegateCommand(() => relay.Send <RequestShowDialogMessage.AddImportFolder>(this)); }
protected override void OnAccept() { _relay.Send(this, new AddImportFolderMessage { FolderPath = FolderPath, ScanSubDirectories = ScanSubDirectories, Rotation = Rotation, RotateOnImport = RotateOnImport, Scale = Scale, ScaleOnImport = ScaleOnImport, Tags = Tags.Value? .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries) .Select(tag => tag.Trim()) .Where(tag => !string.IsNullOrEmpty(tag)) .ToList() }); }
public async Task CheckForUpdatesAsync() { const string channelFile = "release.json"; try { using (var client = new HttpClient()) { var response = await client.GetStringAsync($"http://stlvault.com/{channelFile}"); if (response == null) { Logger.Warn("Received empty response for {0} from stlvault.com", channelFile); return; } var info = JsonConvert.DeserializeObject <UpdateInfo>(response); var currentVersion = Version.Parse(Application.version); var updateVersion = Version.Parse(info.Version); if (updateVersion <= currentVersion) { Logger.Info("Current version `{0}` is up to date with {1}.", currentVersion, channelFile); return; } var message = new RequestShowDialogMessage.UpdateAvailable { Version = updateVersion, DownloadUrl = info.UpdateUrl, Changes = info.Changes }; _relay.Send(this, message); } } catch (Exception ex) { Logger.Error(ex, "Error while getting {0} from stlvault.com", channelFile); } }
public ItemPreviewModel( [NotNull] IPreviewImageStore previewImageStore, [NotNull] IMessageRelay relay, [NotNull] PreviewInfo previewInfo) { _previewImageStore = previewImageStore ?? throw new ArgumentNullException(nameof(previewImageStore)); if (previewInfo is null) { throw new ArgumentNullException(nameof(previewInfo)); } if (relay is null) { throw new ArgumentNullException(nameof(relay)); } Name = previewInfo.ItemName; FileHash = previewInfo.FileHash; FileSize = previewInfo.FileSize; GeometryInfo.Value = new GeometryInfo { Rotation = previewInfo.Rotation ?? Vector3.zero, Scale = previewInfo.Scale ?? Vector3.one, Size = previewInfo.Size, Volume = previewInfo.Volume, TriangleCount = previewInfo.VertexCount / 3, VertexCount = previewInfo.VertexCount }; Tags.AddRange(previewInfo.Tags); Sources = previewInfo.Sources?.ToList() ?? new List <ImportedFileInfo>(); PreviewResolution = previewInfo.Resolution; Selected.ValueChanged += value => relay.Send(this, new SelectionChangedMessage { Sender = this }); }
private void OnTagsChanged() { _relay.Send(this, new SearchChangedMessage { SearchTags = Tags.Select(tag => tag.Text).ToList() }); }
protected override void OnAccept() { _relay.Send(this, new AddCollectionMessage { Name = Name }); }
private IDisposable NotifyMassSelection() { _relay.Send <MassSelectionStartingMessage>(this); return(Disposable.FromAction(() => _relay.Send <MassSelectionFinishedMessage>(this))); }