Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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)))
Esempio n. 5
0
        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);
        }
Esempio n. 7
0
        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);
        }