private static async Task <NamedPipeAsAppServiceConnection> BuildConnection(bool launchFullTrust) { try { if (launchFullTrust) { // Launch fulltrust process ApplicationData.Current.LocalSettings.Values["PackageSid"] = WebAuthenticationBroker.GetCurrentApplicationCallbackUri().Host.ToUpperInvariant(); await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync(); } var connection = new NamedPipeAsAppServiceConnection(); if (await connection.Connect(@"LOCAL\FilesInteropService_ServerPipe", TimeSpan.FromSeconds(15))) { return(connection); } connection.Dispose(); } catch (Exception ex) { App.Logger.Warn(ex, "Could not initialize FTP connection!"); } return(null); }
public static List <ContextMenuFlyoutItemViewModel> GetBaseContextCommands(NamedPipeAsAppServiceConnection connection, CurrentInstanceViewModel currentInstanceViewModel, ItemViewModel itemViewModel, BaseLayoutCommandsViewModel commandsViewModel, bool shiftPressed, bool showOpenMenu) { var menuItemsList = ShellContextmenuHelper.SetShellContextmenu(GetBaseLayoutMenuItems(currentInstanceViewModel, itemViewModel, commandsViewModel), shiftPressed, showOpenMenu, connection, itemViewModel.WorkingDirectory, new List <ListedItem>()); menuItemsList = Filter(items: menuItemsList, shiftPressed: shiftPressed, currentInstanceViewModel: currentInstanceViewModel, selectedItems: new List <ListedItem>()); return(menuItemsList); }
public static List <ContextMenuFlyoutItemViewModel> GetItemContextCommands(NamedPipeAsAppServiceConnection connection, CurrentInstanceViewModel currentInstanceViewModel, string workingDir, List <ListedItem> selectedItems, BaseLayoutCommandsViewModel commandsViewModel, bool shiftPressed, bool showOpenMenu, SelectedItemsPropertiesViewModel selectedItemsPropertiesViewModel) { var menuItemsList = ShellContextmenuHelper.SetShellContextmenu(GetBaseItemMenuItems(commandsViewModel: commandsViewModel, selectedItems: selectedItems, selectedItemsPropertiesViewModel: selectedItemsPropertiesViewModel), shiftPressed: shiftPressed, showOpenMenu: showOpenMenu, connection: connection, workingDirectory: workingDir, selectedItems: selectedItems); menuItemsList = Filter(items: menuItemsList, shiftPressed: shiftPressed, currentInstanceViewModel: currentInstanceViewModel, selectedItems: selectedItems); return(menuItemsList); }
private static async Task <NamedPipeAsAppServiceConnection> BuildConnection(bool launchFullTrust) { // Launch fulltrust process if (launchFullTrust) { await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync(); } var connection = new NamedPipeAsAppServiceConnection(); if (await connection.Connect(@$ "\\.\pipe\{" FilesInteropService_ServerPipe "}", TimeSpan.FromSeconds(15)))
public static async Task <bool> Elevate(this NamedPipeAsAppServiceConnection connection) { if (connection == null) { App.MainViewModel.IsFullTrustElevated = false; return(false); } bool wasElevated = false; var(status, response) = await connection.SendMessageForResponseAsync(new ValueSet() { { "Arguments", "Elevate" } }); if (status == AppServiceResponseStatus.Success) { var res = response.Get("Success", 1L); switch (res) { case 0: // FTP is restarting as admin var nullConn = Task.FromResult <NamedPipeAsAppServiceConnection>(null); ConnectionChanged?.Invoke(null, nullConn); (await Instance)?.Dispose(); Instance = BuildConnection(false); // Fulltrust process is already running _ = await Instance; ConnectionChanged?.Invoke(null, Instance); wasElevated = true; break; case -1: // FTP is already admin wasElevated = true; break; default: // Failed (e.g canceled UAC) wasElevated = false; break; } } App.MainViewModel.IsFullTrustElevated = wasElevated; return(wasElevated); }
public static async Task <bool> Elevate(this NamedPipeAsAppServiceConnection connection) { if (connection == null) { return(false); } var(status, response) = await connection.SendMessageForResponseAsync(new ValueSet() { { "Arguments", "Elevate" } }); if (status == AppServiceResponseStatus.Success) { var res = response.Get("Success", 1L); switch (res) { case 0: var nullConn = Task.FromResult <NamedPipeAsAppServiceConnection>(null); ConnectionChanged?.Invoke(null, nullConn); (await Instance)?.Dispose(); Instance = BuildConnection(false); // Fulltrust process is already running _ = await Instance; ConnectionChanged?.Invoke(null, Instance); break; case -1: return(true); default: return(false); } } return(false); }
public static async Task <List <ContextMenuFlyoutItemViewModel> > GetShellContextmenuAsync(bool showOpenMenu, bool shiftPressed, NamedPipeAsAppServiceConnection connection, string workingDirectory, List <ListedItem> selectedItems) { bool IsItemSelected = selectedItems?.Count > 0; var menuItemsList = new List <ContextMenuFlyoutItemViewModel>(); if (connection != null) { var(status, response) = await connection.SendMessageForResponseAsync(new ValueSet() { { "Arguments", "LoadContextMenu" }, { "FilePath", IsItemSelected ? string.Join('|', selectedItems.Select(x => x.ItemPath)) : workingDirectory }, { "ExtendedMenu", shiftPressed }, { "ShowOpenMenu", showOpenMenu } }); if (status == AppServiceResponseStatus.Success && response.ContainsKey("Handle")) { var contextMenu = JsonConvert.DeserializeObject <Win32ContextMenu>((string)response["ContextMenu"]); if (contextMenu != null) { LoadMenuFlyoutItem(menuItemsList, contextMenu.Items, (string)response["Handle"], true); } } } return(menuItemsList); }
public static List <ContextMenuFlyoutItemViewModel> SetShellContextmenu(List <ContextMenuFlyoutItemViewModel> baseItems, bool shiftPressed, bool showOpenMenu, NamedPipeAsAppServiceConnection connection, string workingDirectory, List <ListedItem> selectedItems) { bool IsItemSelected = selectedItems?.Count > 0; var menuItemsList = new List <ContextMenuFlyoutItemViewModel>(baseItems); var currentBaseLayoutItemCount = baseItems.Count; var maxItems = !App.AppSettings.MoveOverflowMenuItemsToSubMenu ? int.MaxValue : shiftPressed ? 6 : 4; if (connection != null) { var(status, response) = Task.Run(() => connection.SendMessageForResponseAsync(new ValueSet() { { "Arguments", "LoadContextMenu" }, { "FilePath", IsItemSelected ? string.Join('|', selectedItems.Select(x => x.ItemPath)) : workingDirectory }, { "ExtendedMenu", shiftPressed }, { "ShowOpenMenu", showOpenMenu } })).Result; if (status == AppServiceResponseStatus.Success && response.ContainsKey("Handle")) { var contextMenu = JsonConvert.DeserializeObject <Win32ContextMenu>((string)response["ContextMenu"]); if (contextMenu != null) { LoadMenuFlyoutItem(menuItemsList, contextMenu.Items, (string)response["Handle"], true, maxItems); } } } var totalFlyoutItems = baseItems.Count - currentBaseLayoutItemCount; if (totalFlyoutItems > 0 && !(baseItems[totalFlyoutItems].ItemType == ItemType.Separator)) { menuItemsList.Insert(totalFlyoutItems, new ContextMenuFlyoutItemViewModel() { ItemType = ItemType.Separator }); } return(menuItemsList); }
public static async Task <List <ContextMenuFlyoutItemViewModel> > GetBaseContextShellCommandsAsync(NamedPipeAsAppServiceConnection connection, CurrentInstanceViewModel currentInstanceViewModel, string workingDir, bool shiftPressed, bool showOpenMenu) { return(await ShellContextmenuHelper.GetShellContextmenuAsync(shiftPressed, showOpenMenu, connection, workingDir, new List <ListedItem>())); }
public static List <ContextMenuFlyoutItemViewModel> GetBaseContextCommandsWithoutShellItems(NamedPipeAsAppServiceConnection connection, CurrentInstanceViewModel currentInstanceViewModel, ItemViewModel itemViewModel, BaseLayoutCommandsViewModel commandsViewModel, bool shiftPressed, bool showOpenMenu) { var menuItemsList = GetBaseLayoutMenuItems(currentInstanceViewModel, itemViewModel, commandsViewModel); menuItemsList = Filter(items: menuItemsList, shiftPressed: shiftPressed, currentInstanceViewModel: currentInstanceViewModel, selectedItems: new List <ListedItem>(), removeOverflowMenu: false); return(menuItemsList); }