Exemple #1
0
        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() }
            });
        }
Exemple #2
0
        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}`"
            });
        }
Exemple #3
0
 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);
 }
Exemple #4
0
 private void SaveCurrentSearch()
 {
     if (!CanSaveCurrentSearch())
     {
         return;
     }
     _relay.Send(this, new RequestShowDialogMessage.SaveSearch {
         SearchTags = _currentSearchTags
     });
 }
Exemple #5
0
        private void ForceShowUpdateDialog()
        {
            var message = _message.Value;

            message.UserRequested = true;
            _relay.Send(this, message);
        }
Exemple #6
0
 protected override void OnAccept()
 {
     _relay.Send(this, new SaveSearchMessage
     {
         Alias      = Alias,
         SearchTags = _searchTags
     });
 }
Exemple #7
0
 private void OpenIn3DView()
 {
     _relay.Send(this, new RequestShowDialogMessage.EditScreen
     {
         SelectedItems = _detailMenuModel.Mode == SelectionMode.Current
             ? new[] { _detailMenuModel.Current.Value }
             : _detailMenuModel.Selection.ToArray()
     });
 }
Exemple #8
0
        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));
        }
Exemple #9
0
 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()
     });
 }
Exemple #10
0
        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);
            }
        }
Exemple #11
0
        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
            });
        }
Exemple #12
0
 private void OnTagsChanged()
 {
     _relay.Send(this, new SearchChangedMessage {
         SearchTags = Tags.Select(tag => tag.Text).ToList()
     });
 }
Exemple #13
0
 protected override void OnAccept()
 {
     _relay.Send(this, new AddCollectionMessage {
         Name = Name
     });
 }
Exemple #14
0
 private IDisposable NotifyMassSelection()
 {
     _relay.Send <MassSelectionStartingMessage>(this);
     return(Disposable.FromAction(() => _relay.Send <MassSelectionFinishedMessage>(this)));
 }