Exemplo n.º 1
0
        private void OnButtonClicked(object sender, RoutedEventArgs e)
        {
            if (bWorking)
            {
                return;
            }

            try
            {
                EMButton button = (EMButton)sender;
                if (button.GetState() == EMButton.eState.INSTALL || button.GetState() == EMButton.eState.UPDATE)
                {
                    Extension extension = (Extension)button.Tag;
                    thread = new Thread(new ParameterizedThreadStart(RunInstall));
                    thread.Start(new Object[] { button, extension, true });
                }
                else if (button.GetState() == EMButton.eState.INSTALLED)
                {
                    Extension extension = (Extension)button.Tag;
                    thread = new Thread(new ParameterizedThreadStart(RunDisable));
                    thread.Start(new Object[] { button, extension });
                }
                else if (button.GetState() == EMButton.eState.DISABLED)
                {
                    Extension extension = (Extension)button.Tag;
                    thread = new Thread(new ParameterizedThreadStart(RunEnable));
                    thread.Start(new Object[] { button, extension });
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Exemplo n.º 2
0
        private void RunEnable(Object obj)
        {
            bWorking = true;
            EMButton  button    = (EMButton)((Object[])obj)[0];
            Extension extension = (Extension)((Object[])obj)[1];

            if (null != extension)
            {
                extension.Errors.Clear();
                extension.Valid = true;
                string file    = installationPath + "\\lib\\" + extension.Name;
                string command = "cd \"" + installationPath + "\\lib\"";
                command += " & move /Y \"" + file + "._dll\" \"" + file + ".dll\"";
                file     = installationPath + "\\lib\\" + extension.Name;
                command += " & move /Y \"" + file + "._xml\" \"" + file + ".xml\"";
                extension.UACcommand(command);
                if (CheckAccess())
                {
                    if (extension.Valid)
                    {
                        button.SetState(EMButton.eState.INSTALLED);
                        foreach (Extension extensionWeb in webExtension.extensions)
                        {
                            if (extension.Name == extensionWeb.Name && extension.SBVersion == SBVersion && extension.ExtVersion != extensionWeb.ExtVersion)
                            {
                                button.SetState(EMButton.eState.UPDATE);
                            }
                        }
                    }
                    GetButtonExtensionLists();
                    MakeButtons();
                    SetButtonExtensionLists();
                }
                else
                {
                    Dispatcher.Invoke(() =>
                    {
                        if (extension.Valid)
                        {
                            button.SetState(EMButton.eState.INSTALLED);
                            foreach (Extension extensionWeb in webExtension.extensions)
                            {
                                if (extension.Name == extensionWeb.Name && extension.SBVersion == SBVersion && extension.ExtVersion != extensionWeb.ExtVersion)
                                {
                                    button.SetState(EMButton.eState.UPDATE);
                                }
                            }
                        }
                        GetButtonExtensionLists();
                        MakeButtons();
                        SetButtonExtensionLists();
                    });
                }
            }
            bWorking = false;
        }
Exemplo n.º 3
0
        private EMButton AddButton(Extension extension, double left, double top)
        {
            EMButton button = new EMButton(extension);

            button.Click += new RoutedEventHandler(OnButtonClicked);
            canvas.Children.Add(button);
            canvas.Children.Add(button.bar);
            Canvas.SetLeft(button, left < 0 ? (canvas.ActualWidth - button.Width) / 2.0: left);
            Canvas.SetTop(button, top);
            Canvas.SetLeft(button.bar, (left < 0 ? (canvas.ActualWidth - button.Width) / 2.0 : left) - button.bar.Width);
            Canvas.SetTop(button.bar, top);
            foreach (MenuItem item in button.ContextMenu.Items)
            {
                item.Click += new RoutedEventHandler(OnMenuItemClicked);
            }
            return(button);
        }
Exemplo n.º 4
0
        private void OnMenuItemClicked(object sender, RoutedEventArgs e)
        {
            MenuItem  item      = (MenuItem)sender;
            EMButton  button    = (EMButton)item.Tag;
            Extension extension = (Extension)button.Tag;

            switch (item.Name)
            {
            case "Install":
                try
                {
                    if (!bWorking)
                    {
                        thread = new Thread(new ParameterizedThreadStart(RunInstall));
                        thread.Start(new Object[] { button, extension, true });
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                break;

            case "Uninstall":
                try
                {
                    if (!bWorking)
                    {
                        thread = new Thread(new ParameterizedThreadStart(RunInstall));
                        thread.Start(new Object[] { button, extension, false });
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                break;

            case "Disable":
                try
                {
                    if (bWorking)
                    {
                        return;
                    }
                    if (button.GetState() == EMButton.eState.INSTALLED || button.GetState() == EMButton.eState.UPDATE)
                    {
                        RunDisable(new Object[] { button, extension });
                    }
                    else if (button.GetState() == EMButton.eState.DISABLED)
                    {
                        RunEnable(new Object[] { button, extension });
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                break;

            case "SBVersion":
                break;

            case "ExtVersion":
                break;

            case "InstalledVersion":
                break;

            case "Description":
                break;

            case "Author":
                break;

            case "WebSite":
                try
                {
                    if (null != extension.smallBasicExtension)
                    {
                        Process.Start(extension.smallBasicExtension.WebSite);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                break;

            case "API":
                try
                {
                    if (null != extension.smallBasicExtension)
                    {
                        Process.Start(extension.smallBasicExtension.API);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                break;

            case "APIgenerated":
                try
                {
                    ShowAPI(extension);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                break;

            case "ChangeLog":
                try
                {
                    if (null != extension.smallBasicExtension)
                    {
                        Process.Start(extension.smallBasicExtension.ChangeLog);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                break;

            case "SaveZip":
                try
                {
                    if (bWorking)
                    {
                        return;
                    }
                    if (null != extension.smallBasicExtension)
                    {
                        thread = new Thread(new ParameterizedThreadStart(RunDownload));
                        thread.Start(new Object[] { button, extension });
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                break;
            }
        }
Exemplo n.º 5
0
        private void RunDownload(Object obj)
        {
            bWorking = true;
            EMButton  button    = (EMButton)((Object[])obj)[0];
            Extension extension = (Extension)((Object[])obj)[1];

            if (null != extension && extension.Source == eSource.WEB)
            {
                if (!extension.Downloaded)
                {
                    extension.Errors.Clear();
                    extension.Valid = true;
                    extension.DownloadZip();
                    extension.UnZip();
                    if (extension.smallBasicExtension.dllFiles.numFile == 0)
                    {
                        extension.Errors.Add("No dll files in download zip");
                    }
                    else
                    {
                        extension.Verify(extension.LocalUnZipPath + "\\" + extension.smallBasicExtension.dllFiles.Files[0].File);
                    }
                    extension.Validate();
                }
                if (extension.Valid)
                {
                    ZipFile zip  = ZipFile.Read(extension.LocalZip);
                    string  path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/" + extension.Name + "-" + extension.ExtVersion.ToString();
                    zip.ExtractAll(path, ExtractExistingFileAction.OverwriteSilently);
                    zip.Dispose();

                    string message = "Downloaded to " + path;
                    message += "\n\nDo you want to open this folder?";
                    if (MessageBox.Show(message, "Small Basic Extension Manager", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
                    {
                        Process.Start(path);
                    }
                }
                else
                {
                    string message = "";
                    foreach (string Error in extension.Errors)
                    {
                        message += Error + "\n";
                    }
                    message += "\nDo you want to continue anyway?";
                    if (MessageBox.Show(message, "Small Basic Extension Manager Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                    {
                        ZipFile zip  = ZipFile.Read(extension.LocalZip);
                        string  path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/" + extension.Name + "-" + extension.ExtVersion.ToString();
                        zip.ExtractAll(path, ExtractExistingFileAction.OverwriteSilently);
                        zip.Dispose();
                        extension.Valid = true; //We did it anyway
                    }
                    else
                    {
                        try
                        {
                            if (CheckAccess())
                            {
                                extension.Unload();
                            }
                            else
                            {
                                Dispatcher.Invoke(() => { extension.Unload(); });
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                }
            }
            bWorking = false;
        }
Exemplo n.º 6
0
        private void RunInstall(Object obj)
        {
            bWorking = true;
            EMButton  button    = (EMButton)((Object[])obj)[0];
            Extension extension = (Extension)((Object[])obj)[1];
            bool      bInstall  = (bool)((Object[])obj)[2];

            if (null != extension && extension.Source == eSource.WEB)
            {
                if (button.GetState() == EMButton.eState.DISABLED)
                {
                    MessageBox.Show("Enable before installing or uninstalling", "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    bWorking = false;
                    return;
                }
                extension.Errors.Clear();
                extension.Valid = true;
                if (bInstall)
                {
                    extension.DownloadZip();
                    extension.UnZip();
                    if (extension.smallBasicExtension.dllFiles.numFile == 0)
                    {
                        extension.Errors.Add("No dll files in download zip");
                    }
                    else
                    {
                        extension.Verify(extension.LocalUnZipPath + "\\" + extension.smallBasicExtension.dllFiles.Files[0].File);
                    }
                    extension.Validate();
                }
                if (extension.Valid)
                {
                    string command = "cd \"" + installationPath + "\\lib\"";
                    if (null != extension && extension.Valid)
                    {
                        for (int i = 0; i < extension.smallBasicExtension.dllFiles.numFile; i++)
                        {
                            string file    = extension.LocalUnZipPath + "\\" + extension.smallBasicExtension.dllFiles.Files[i].File;
                            string newFile = installationPath + "\\lib\\" + System.IO.Path.GetFileName(file);
                            command += " & del \"" + newFile + "\"";
                            if (bInstall)
                            {
                                command += " & copy /B/Y \"" + file + "\" \"" + newFile + "\"";
                            }
                        }
                        for (int i = 0; i < extension.smallBasicExtension.xmlFiles.numFile; i++)
                        {
                            string file    = extension.LocalUnZipPath + "\\" + extension.smallBasicExtension.xmlFiles.Files[i].File;
                            string newFile = installationPath + "\\lib\\" + System.IO.Path.GetFileName(file);
                            command += " & del \"" + newFile + "\"";
                            if (bInstall)
                            {
                                command += " & copy /B/Y \"" + file + "\" \"" + newFile + "\"";
                            }
                        }
                    }
                    extension.UACcommand(command);
                    if (null != extension && extension.Valid && bInstall)
                    {
                        for (int i = 0; i < extension.smallBasicExtension.dllFiles.numFile; i++)
                        {
                            string file = extension.LocalUnZipPath + "\\" + extension.smallBasicExtension.dllFiles.Files[i].File;
                            Zone   zone = Zone.CreateFromUrl(file);
                            if (File.Exists(file) && zone.SecurityZone != SecurityZone.MyComputer)
                            {
                                MessageBox.Show(extension.smallBasicExtension.dllFiles.Files[i].File + " is internet blocked", "Small Basic Extension Manager Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
                            }
                        }
                    }
                }
                if (bInstall && !extension.Valid)
                {
                    string message = "";
                    foreach (string Error in extension.Errors)
                    {
                        message += Error + "\n";
                    }
                    message += "\nDo you want to continue anyway?";
                    if (MessageBox.Show(message, "Small Basic Extension Manager Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                    {
                        ZipFile zip  = ZipFile.Read(extension.LocalZip);
                        string  path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/" + extension.Name + "-" + extension.ExtVersion.ToString();
                        zip.ExtractAll(path, ExtractExistingFileAction.OverwriteSilently);
                        zip.Dispose();
                        extension.Valid = true; //We did it anyway
                    }
                    else
                    {
                        try
                        {
                            if (CheckAccess())
                            {
                                extension.Unload();
                            }
                            else
                            {
                                Dispatcher.Invoke(() => { extension.Unload(); });
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                        }
                    }
                }
                if (extension.Valid)
                {
                    try
                    {
                        if (CheckAccess())
                        {
                            GetButtonExtensionLists();
                            MakeButtons();
                            SetButtonExtensionLists();
                        }
                        else
                        {
                            Dispatcher.Invoke(() =>
                            {
                                GetButtonExtensionLists();
                                MakeButtons();
                                SetButtonExtensionLists();
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            }
            else if (null != extension && extension.Source == eSource.LOCAL && !bInstall)
            {
                if (MessageBox.Show("This will remove a local extension that cannot be reinstalled from this Extension Manager\nOK to proceed?", "Uninstall Local Extension", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
                {
                    return;
                }
                string command = "cd \"" + installationPath + "\\lib\"";
                if (null != extension)
                {
                    string file = installationPath + "\\lib\\" + extension.Name + ".dll";
                    command += " & del \"" + file + "\"";
                    file     = installationPath + "\\lib\\" + extension.Name + ".xml";
                    command += " & del \"" + file + "\"";
                }
                extension.UACcommand(command);
                try
                {
                    if (!File.Exists(installationPath + "\\lib\\" + extension.Name + ".dll"))
                    {
                        if (CheckAccess())
                        {
                            GetButtonExtensionLists();
                            MakeButtons();
                            SetButtonExtensionLists();
                        }
                        else
                        {
                            Dispatcher.Invoke(() =>
                            {
                                GetButtonExtensionLists();
                                MakeButtons();
                                SetButtonExtensionLists();
                            });
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Small Basic Extension Manager Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
            bWorking = false;
        }
Exemplo n.º 7
0
        private void MakeButtons()
        {
            webExtension.Load(databasePath);
            localExtension.Load(installationPath);

            double top = 20;

            EMButtons.Clear();

            foreach (Extension extensionWeb in webExtension.extensions)
            {
                if (extensionWeb.SBVersion == SBVersion)
                {
                    EMButton.eState state = EMButton.eState.INSTALL;
                    foreach (Extension extensionLocal in localExtension.extensions)
                    {
                        extensionLocal.InstalledVersion = extensionLocal.ExtVersion;
                        // Web and local have the same name - assumed the same extension - we will ignore one of them
                        if (extensionLocal.Name == extensionWeb.Name)
                        {
                            state = EMButton.eState.UPDATE;
                            extensionWeb.InstalledVersion = extensionLocal.InstalledVersion;
                            // Ignore local (include web) if identical since web has access to download and descriptionn etc
                            if (extensionLocal.ExtVersion == extensionWeb.ExtVersion)
                            {
                                extensionLocal.SBVersion = null;
                                if (File.Exists(installationPath + "\\lib\\" + extensionLocal.Name + ".dll"))
                                {
                                    state = EMButton.eState.INSTALLED;
                                }
                                else
                                {
                                    state = EMButton.eState.DISABLED;
                                }
                            }
                            // Include local (ignore web) if web version is less than local installed
                            else if (IsVersionLess(extensionWeb.ExtVersion, extensionLocal.ExtVersion))
                            {
                                state = EMButton.eState.NONE;
                            }
                            // Ignore local (include web) if web version is greater than local installed
                            else
                            {
                                extensionLocal.SBVersion = null;
                                if (!File.Exists(installationPath + "\\lib\\" + extensionLocal.Name + ".dll"))
                                {
                                    state = EMButton.eState.DISABLED;
                                }
                                extensionLocal.SBVersion = null;
                            }
                            break;
                        }
                    }
                    if (state != EMButton.eState.NONE)
                    {
                        EMButton button = AddButton(extensionWeb, 50, top);
                        button.SetState(state);
                        EMButtons.Add(button);
                        top += 50;
                    }
                }
            }
            bool test = false; //Test to create the different types
            int  i    = 0;

            foreach (Extension extensionLocal in localExtension.extensions)
            {
                if (extensionLocal.SBVersion == SBVersion)
                {
                    EMButton button = AddButton(extensionLocal, 50, top);
                    button.SetState(EMButton.eState.INSTALLED);
                    if (!File.Exists(installationPath + "\\lib\\" + extensionLocal.Name + ".dll"))
                    {
                        button.SetState(EMButton.eState.DISABLED);
                    }
                    EMButtons.Add(button);
                    top += 50;
                }
                else if (test && null != extensionLocal.SBVersion)
                {
                    EMButton button = AddButton(extensionLocal, 50, top);
                    if (i == 0)
                    {
                        button.SetState(EMButton.eState.DISABLED);
                    }
                    else if (i == 1)
                    {
                        button.SetState(EMButton.eState.INSTALL);
                    }
                    else if (i == 2)
                    {
                        button.SetState(EMButton.eState.INSTALLED);
                    }
                    else
                    {
                        button.SetState(EMButton.eState.UPDATE);
                    }
                    i++;
                    EMButtons.Add(button);
                    top += 50;
                }
            }

            grid.Height = top;
        }