private void ProcessAsset(Task task, bool shouldHideWhenDone = true) { _isError = false; AuroraDbManager.ContentItem asset = null; Dispatcher.InvokeIfRequired(() => asset = FtpAssetsBox.SelectedItem as AuroraDbManager.ContentItem, DispatcherPriority.Normal); if(asset == null) return; ContentItemLocal assetWrapper = new ContentItemLocal(asset); var bw = new BackgroundWorker(); bw.DoWork += (sender, args) => { try { switch(task) { case Task.GetBoxart: _buffer = assetWrapper.GetBoxart(); break; case Task.GetBackground: _buffer = assetWrapper.GetBackground(); break; case Task.GetIconBanner: _buffer = assetWrapper.GetIconBanner(); break; case Task.GetScreenshots: _buffer = assetWrapper.GetScreenshots(); break; case Task.SetBoxart: assetWrapper.SaveAsBoxart(_buffer); break; case Task.SetBackground: assetWrapper.SaveAsBackground(_buffer); break; case Task.SetIconBanner: assetWrapper.SaveAsIconBanner(_buffer); break; case Task.SetScreenshots: assetWrapper.SaveAsScreenshots(_buffer); break; } args.Result = true; } catch(Exception ex) { MainWindow.SaveError(ex); args.Result = false; } }; bw.RunWorkerCompleted += (sender, args) => { if(shouldHideWhenDone) Dispatcher.InvokeIfRequired(() => _main.BusyIndicator.Visibility = Visibility.Collapsed, DispatcherPriority.Normal); var isGet = true; if((bool)args.Result) { if(_buffer.Length > 0) { var aurora = new AuroraAsset.AssetFile(_buffer); switch(task) { case Task.GetBoxart: _boxart.Load(aurora); Dispatcher.InvokeIfRequired(() => _main.BoxartTab.IsSelected = true, DispatcherPriority.Normal); break; case Task.GetBackground: _background.Load(aurora); Dispatcher.InvokeIfRequired(() => _main.BackgroundTab.IsSelected = true, DispatcherPriority.Normal); break; case Task.GetIconBanner: _iconBanner.Load(aurora); Dispatcher.InvokeIfRequired(() => _main.IconBannerTab.IsSelected = true, DispatcherPriority.Normal); break; case Task.GetScreenshots: _screenshots.Load(aurora); Dispatcher.InvokeIfRequired(() => _main.ScreenshotsTab.IsSelected = true, DispatcherPriority.Normal); break; default: isGet = false; break; } } if(shouldHideWhenDone && isGet) Dispatcher.InvokeIfRequired(() => Status.Text = "Finished grabbing assets from FTP", DispatcherPriority.Normal); else if(shouldHideWhenDone) Dispatcher.InvokeIfRequired(() => Status.Text = "Finished saving assets to FTP", DispatcherPriority.Normal); } else { switch(task) { case Task.GetBoxart: case Task.GetBackground: case Task.GetIconBanner: case Task.GetScreenshots: break; default: isGet = false; break; } if(isGet) Dispatcher.InvokeIfRequired(() => Status.Text = "Failed getting asset data... See error.log for more information...", DispatcherPriority.Normal); else Dispatcher.InvokeIfRequired(() => Status.Text = "Failed saving asset data... See error.log for more information...", DispatcherPriority.Normal); _isError = true; } _isBusy = false; }; Dispatcher.InvokeIfRequired(() => _main.BusyIndicator.Visibility = Visibility.Visible, DispatcherPriority.Normal); _isBusy = true; bw.RunWorkerAsync(); }