in WindowsSmartInk/SmartInkLaboratory/ViewModels/PackageManagerViewModel.cs [60:114]
public PackageManagerViewModel(ITagService tags, IProjectPackageMapper mapper, IAppStateService state, IDialogService dialog )
{
_tags = tags;
_mapper = mapper;
_state = state;
_dialog = dialog;
_state.KeysChanged += (s, e) => {
NewPackage.RaiseCanExecuteChanged();
};
_state.TagDeleted += async (s, e) => {
if (_state.CurrentPackage != null)
await _state.CurrentPackage.RemoveTagAsync(e.DeletedTag.Id);
};
_state.PackageChanged += (s, e) => {
RaisePropertyChanged(nameof(CurrentPackage));
PublishPackage.RaiseCanExecuteChanged();
};
_state.ProjectChanged += async (s, e) => {
_packageCount = ( await _mapper.GetPackagesByProjectAsync(_state.CurrentProject.Id.ToString())).Count;
OpenPackage.RaiseCanExecuteChanged();
};
this.NewPackage = new RelayCommand(async () => {
await _dialog.OpenAsync(DialogKeys.NewPackage);
},
() =>{ return _state.CurrentKeys != null; });
this.OpenPackage = new RelayCommand(async () => {
await _dialog.OpenAsync(DialogKeys.OpenPackage);
},
()=>{
return _state.CurrentProject != null && _packageCount > 0;
});
this.PublishPackage = new RelayCommand(async() => {
var savePicker = new Windows.Storage.Pickers.FileSavePicker();
savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
// Dropdown of file types the user can save the file as
savePicker.FileTypeChoices.Add("Nuget Package", new List<string>() { ".nupkg" });
var nugetFileName = $"SmartInk.{_state.CurrentPackage.Name}.{_state.CurrentPackage.Version}.nupkg";
// Default file name if the user does not type one in or select a file to replace
savePicker.SuggestedFileName = nugetFileName;
var file = await savePicker.PickSaveFileAsync();
if (file != null)
await _packageManager.PublishPackageAsync(_state.CurrentPackage.BasePackage, file);
},
()=> {
return _state.CurrentPackage != null; });
}