Changeset 8417


Ignore:
Timestamp:
Oct 18, 2019, 6:44:25 PM (2 years ago)
Author:
kopal
Message:
  • CrypToolStore:

CrypToolStore now also allows to view and download "resources" in the CrypToolStoreEditor

Location:
trunk/CrypToolStore
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypToolStore/CrypToolStore.csproj

    r8396 r8417  
    165165  </ItemGroup>
    166166  <ItemGroup>
     167    <Resource Include="icon_resource.png" />
    167168    <Content Include="updateavailable.png" />
    168169  </ItemGroup>
  • trunk/CrypToolStore/CrypToolStorePresentation.xaml

    r7968 r8417  
    5050                <Label Grid.Row="0" Height="25" Width="100" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20,0,5,0" Content="{Loc Search}"/>
    5151                <TextBox Grid.Row="0" Height="25" Width="Auto" VerticalAlignment="Top" Margin="100,0,5,0" Name="Filter" TextChanged="Filter_TextChanged" VerticalContentAlignment="Center"/>
    52                 <Border Grid.Row="0" Background="#FFEBEFF6" Margin="3,30,0,5">
     52                <CheckBox Name="ShowResources" Grid.Row="0" VerticalAlignment="Top" Margin="100,30,0,0" Checked="ShowResources_Checked" Unchecked="ShowResources_Unchecked" VerticalContentAlignment="Center"><Label Content="{Loc ShowResources}" VerticalAlignment="Center"/></CheckBox>
     53                <Border Grid.Row="0" Background="#FFEBEFF6" Margin="3,60,0,5">
    5354                    <ListView Name="PluginListView" Height="Auto" Width="Auto" MinWidth="700" BorderBrush="#FFEBEFF6" Background="#FFEBEFF6"  Margin="8,5,5,5"
    5455                              ScrollViewer.HorizontalScrollBarVisibility="Hidden"
     
    6465                                        <Setter Property="BorderBrush" Value="LightSeaGreen"/>
    6566                                        <Setter Property="BorderThickness" Value="2"/>
    66                                         <Setter Property="Background" Value="#FFC8DCF5"/>
     67                                        <Setter Property="Background" Value="{Binding Path=BackgroundColor}"/>
    6768                                        <Setter Property="Margin" Value="15,5"/>
    6869                                    </Style>
  • trunk/CrypToolStore/CrypToolStorePresentation.xaml.cs

    r8109 r8417  
    11/*
    2    Copyright 2018 Nils Kopal <Nils.Kopal<AT>Uni-Kassel.de>
     2   Copyright 2019 Nils Kopal <kopal<AT>cryptool.de>
    33
    44   Licensed under the Apache License, Version 2.0 (the "License");
     
    150150                client.Connect();
    151151
    152                 //get list of published plugins
    153                 DataModificationOrRequestResult result = client.GetPublishedPluginList(publishState);
     152                //get list of published plugins and resources
     153                DataModificationOrRequestResult result_plugins = client.GetPublishedPluginList(publishState);
     154                DataModificationOrRequestResult result_resources = client.GetPublishedResourceList(publishState);
    154155
    155156                //Disconnect from CrypToolStoreServer
     
    157158
    158159                //Display result or in case of error an error message
    159                 if (result.Success)
    160                 {
    161                     List<PluginAndSource> pluginsAndSources = ((List<PluginAndSource>)result.DataObject);
     160                if (result_plugins.Success && result_resources.Success)
     161                {
     162                    List<PluginAndSource> pluginsAndSources = ((List<PluginAndSource>)result_plugins.DataObject);
     163                    List<ResourceAndResourceData> resourcesAndData = ((List<ResourceAndResourceData>)result_resources.DataObject);
    162164
    163165                    //add elements to observed list to show them in the UI
     
    170172                            {
    171173                                PluginWrapper wrapper = new PluginWrapper(pluginAndSource);
    172                                 CheckIfAlreadyInstalled(wrapper);                               
     174                                CheckIfAlreadyInstalledPlugin(wrapper);                               
    173175                                Plugins.Add(wrapper);
     176                            }
     177
     178                            if (ShowResources.IsChecked == true)
     179                            {
     180                                foreach (ResourceAndResourceData pluginAndSource in resourcesAndData)
     181                                {
     182                                    ResourceWrapper wrapper = new ResourceWrapper(pluginAndSource);
     183                                    CheckIfAlreadyInstalledResource(wrapper);
     184                                    Plugins.Add(wrapper);
     185                                }
    174186                            }
    175187
     
    202214                else
    203215                {
    204                     _crypToolStoreEditor.GuiLogMessage(String.Format(Properties.Resources.CrypToolStorePresentation_UpdateStorePluginList_Error_occured_during_retrieval_of_current_list_of_plugins_from_CrypToolStore___0_, result.Message), NotificationLevel.Error);
     216                    _crypToolStoreEditor.GuiLogMessage(String.Format(Properties.Resources.CrypToolStorePresentation_UpdateStorePluginList_Error_occured_during_retrieval_of_current_list_of_plugins_from_CrypToolStore___0_, result_plugins.Message), NotificationLevel.Error);
    205217                }
    206218            }
     
    279291        /// </summary>
    280292        /// <param name="plugin"></param>
    281         private void CheckIfAlreadyInstalled(PluginWrapper plugin)
    282         {
    283             string xmlfilename = System.IO.Path.Combine(GetPluginsFolder(plugin), String.Format("install-{0}-{1}.xml", plugin.PluginId, plugin.PluginVersion));
     293        private void CheckIfAlreadyInstalledPlugin(PluginWrapper plugin)
     294        {
     295            string xmlfilename = System.IO.Path.Combine(GetPluginsFolder(), String.Format("install-{0}-{1}.xml", plugin.PluginId, plugin.PluginVersion));
    284296            if (Directory.Exists(GetPluginFolder(plugin)) || File.Exists(xmlfilename))
    285297            {
     
    319331
    320332        /// <summary>
     333        /// Checks, if a resource is already installed
     334        /// </summary>
     335        /// <param name="resource"></param>
     336        private void CheckIfAlreadyInstalledResource(ResourceWrapper resource)
     337        {
     338            if (Directory.Exists(GetResourceFolder(resource)))
     339            {               
     340                resource.IsInstalled = true;
     341            }
     342            else
     343            {
     344                resource.IsInstalled = false;
     345            }
     346        }
     347
     348        /// <summary>
    321349        /// Returns the absolute path to the plugin folder
    322350        /// </summary>
     
    325353        private string GetPluginFolder(PluginWrapper plugin)
    326354        {           
    327             return System.IO.Path.Combine(GetPluginsFolder(plugin), "plugin-" + plugin.PluginId);
    328         }
    329 
    330         /// <summary>
    331         /// Returns the absolute path to the plugins folder
     355            return System.IO.Path.Combine(GetPluginsFolder(), "plugin-" + plugin.PluginId);
     356        }
     357
     358        /// <summary>
     359        /// Returns the absolute path to the resource folder
    332360        /// </summary>
    333361        /// <param name="plugin"></param>
    334362        /// <returns></returns>
    335         private string GetPluginsFolder(PluginWrapper plugin)
     363        private string GetResourceFolder(ResourceWrapper resource)
     364        {
     365            return System.IO.Path.Combine(GetResourcesFolder(), "resource-" + resource.PluginId + "-" + resource.PluginVersion);
     366        }
     367
     368        /// <summary>
     369        /// Returns the absolute path to the plugins folder
     370        /// </summary>
     371        private string GetPluginsFolder()
    336372        {
    337373            //Translate the Ct2BuildType to a folder name for CrypToolStore plugins               
    338             string crypToolStoreSubFolder = "";
     374            string crypToolStoreSubFolder;
    339375            switch (AssemblyHelper.BuildType)
    340376            {
     
    362398
    363399        /// <summary>
     400        /// Returns the absolute path to the resources folder
     401        /// </summary>
     402        public string GetResourcesFolder()
     403        {
     404            //Translate the Ct2BuildType to a folder name for CrypToolStore plugins               
     405            string crypToolStoreSubFolder;
     406            switch (AssemblyHelper.BuildType)
     407            {
     408                case Ct2BuildType.Developer:
     409                    crypToolStoreSubFolder = "Developer";
     410                    break;
     411                case Ct2BuildType.Nightly:
     412                    crypToolStoreSubFolder = "Nightly";
     413                    break;
     414                case Ct2BuildType.Beta:
     415                    crypToolStoreSubFolder = "Beta";
     416                    break;
     417                case Ct2BuildType.Stable:
     418                    crypToolStoreSubFolder = "Release";
     419                    break;
     420                default: //if no known version is given, we assume developer
     421                    crypToolStoreSubFolder = "Developer";
     422                    break;
     423            }
     424            string crypToolStorePluginFolder = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), PluginManager.CrypToolStoreDirectory);
     425            crypToolStorePluginFolder = System.IO.Path.Combine(crypToolStorePluginFolder, crypToolStoreSubFolder);
     426            crypToolStorePluginFolder = System.IO.Path.Combine(crypToolStorePluginFolder, "resources");
     427            return crypToolStorePluginFolder;
     428        }
     429
     430        /// <summary>
    364431        /// User clicked InstallButton
    365432        /// </summary>
     
    375442            if (result == MessageBoxResult.Yes)
    376443            {
    377                
    378                 Task.Run(() => InstallPlugin());
     444                if (SelectedPlugin is ResourceWrapper)
     445                {
     446                    Task.Run(() =>
     447                    {
     448                        try
     449                        {
     450                            InstallResource();
     451                        }
     452                        catch (Exception ex)
     453                        {
     454                            string message = String.Format(Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_while_downloading_and_installing___0_, ex.Message);
     455                            _crypToolStoreEditor.GuiLogMessage(message, NotificationLevel.Error);
     456                            _context.Send(callback => MessageBox.Show(_windowToBlockForMessageBoxes, message, Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_, MessageBoxButton.OK), null);
     457                        }
     458                    });
     459                }
     460                else if (SelectedPlugin is PluginWrapper)
     461                {
     462                    Task.Run(() =>
     463                    {
     464                        try
     465                        {
     466                            InstallPlugin();
     467                        }
     468                        catch (Exception ex)
     469                        {
     470                            string message = String.Format(Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_while_downloading_and_installing___0_, ex.Message);
     471                            _crypToolStoreEditor.GuiLogMessage(message, NotificationLevel.Error);
     472                            _context.Send(callback => MessageBox.Show(_windowToBlockForMessageBoxes, message, Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_, MessageBoxButton.OK), null);
     473                        }
     474                    });
     475                }
    379476            }
    380477        }     
     
    386483        {
    387484            bool errorOccured = false;
    388             string assemblyfilename = System.IO.Path.Combine(GetPluginsFolder(SelectedPlugin), String.Format("assembly-{0}-{1}.zip", SelectedPlugin.PluginId, SelectedPlugin.PluginVersion));
    389             string xmlfilename = System.IO.Path.Combine(GetPluginsFolder(SelectedPlugin), String.Format("install-{0}-{1}.xml", SelectedPlugin.PluginId, SelectedPlugin.PluginVersion));
     485            string assemblyfilename = System.IO.Path.Combine(GetPluginsFolder(), String.Format("assembly-{0}-{1}.zip", SelectedPlugin.PluginId, SelectedPlugin.PluginVersion));
     486            string xmlfilename = System.IO.Path.Combine(GetPluginsFolder(), String.Format("install-{0}-{1}.xml", SelectedPlugin.PluginId, SelectedPlugin.PluginVersion));
    390487
    391488            //Step 0: delete files before download
     
    574671
    575672        /// <summary>
     673        /// Installs the resource in an own thread
     674        /// </summary>
     675        private void InstallResource()
     676        {
     677            bool errorOccured = false;
     678            string resourceFileName = System.IO.Path.Combine(GetResourceFolder((ResourceWrapper)SelectedPlugin), String.Format("resource-{0}-{1}.bin", SelectedPlugin.PluginId, SelectedPlugin.PluginVersion));
     679
     680            //Step 0: create folder
     681            if (Directory.Exists(GetResourceFolder((ResourceWrapper)SelectedPlugin)))
     682            {
     683                Directory.Delete(GetResourceFolder((ResourceWrapper)SelectedPlugin), true);
     684            }
     685            Directory.CreateDirectory(GetResourceFolder((ResourceWrapper)SelectedPlugin));
     686
     687            //Step 1: Lock everything in the UI, thus, the user can not do anything while downloading
     688            _context.Send(callback =>
     689            {
     690                try
     691                {
     692                    PluginListView.IsEnabled = false;
     693                    InstallButton.IsEnabled = false;
     694                    DeleteButton.IsEnabled = false;
     695                    Filter.IsEnabled = false;
     696
     697                    InstallationProgressBar.Visibility = Visibility.Visible;
     698                    InstallationProgressText.Visibility = Visibility.Visible;
     699                }
     700                catch (Exception ex)
     701                {
     702                    _crypToolStoreEditor.GuiLogMessage(String.Format(Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_while_locking_of_everything___0_, ex.Message), NotificationLevel.Error);
     703                }
     704            }, null);
     705
     706            //Step 2: download resource file
     707            try
     708            {
     709                //Download resource file
     710                CrypToolStoreClient client = new CrypToolStoreClient();
     711                client.ServerCertificate = new X509Certificate2(Properties.Resources.CTStoreTLS);
     712                client.ServerAddress = Cryptool.CrypToolStore.Constants.ServerAddress;
     713                client.ServerPort = Cryptool.CrypToolStore.Constants.ServerPort;
     714                client.UploadDownloadProgressChanged += client_UploadDownloadProgressChanged;
     715
     716                //Translate the Ct2BuildType to PublishState
     717                PublishState publishState;
     718                switch (AssemblyHelper.BuildType)
     719                {
     720                    case Ct2BuildType.Developer:
     721                        publishState = PublishState.DEVELOPER;
     722                        break;
     723                    case Ct2BuildType.Nightly:
     724                        publishState = PublishState.NIGHTLY;
     725                        break;
     726                    case Ct2BuildType.Beta:
     727                        publishState = PublishState.BETA;
     728                        break;
     729                    case Ct2BuildType.Stable:
     730                        publishState = PublishState.RELEASE;
     731                        break;
     732                    default: //if no known version is given, we assume release
     733                        publishState = PublishState.RELEASE;
     734                        break;
     735                }
     736
     737                //Connect to CrypToolStoreServer
     738                client.Connect();
     739
     740                //get list of published resources
     741                DataModificationOrRequestResult result = client.GetPublishedResource(SelectedPlugin.PluginId, publishState);
     742                if (result.Success == false)
     743                {
     744                    client.Disconnect();
     745                    string message = String.Format(Properties.Resources.CrypToolStorePresentation_InstallPlugin_Could_not_download_from_CrypToolStore_Server__Message_was___0_, result.Message);
     746                    _crypToolStoreEditor.GuiLogMessage(message, NotificationLevel.Error);
     747                    _context.Send(callback => MessageBox.Show(_windowToBlockForMessageBoxes, message, Properties.Resources.CrypToolStorePresentation_InstallPlugin_Error_during_download_, MessageBoxButton.OK), null);
     748                }
     749
     750                ResourceAndResourceData resourceAndResourceData = (ResourceAndResourceData)result.DataObject;
     751                bool stop = false;
     752                result = client.DownloadResourceDataFile(resourceAndResourceData.ResourceData, resourceFileName, ref stop);
     753                client.Disconnect();
     754                if (result.Success == false)
     755                {
     756                    client.Disconnect();
     757                    string message = String.Format(Properties.Resources.CrypToolStorePresentation_InstallPlugin_Could_not_download_from_CrypToolStore_Server__Message_was___0_, result.Message);
     758                    _crypToolStoreEditor.GuiLogMessage(message, NotificationLevel.Error);
     759                    _context.Send(callback => MessageBox.Show(_windowToBlockForMessageBoxes, message, Properties.Resources.CrypToolStorePresentation_InstallPlugin_Error_during_download_, MessageBoxButton.OK), null);
     760                    errorOccured = true;
     761                    return;
     762                }
     763             
     764                //Step 3: Notify user
     765                _context.Send(callback =>
     766                {
     767                    //set progress bar to 100%
     768                    InstallationProgressBar.Maximum = 1;
     769                    InstallationProgressBar.Value = 1;
     770                    InstallationProgressText.Content = "100 %";
     771                    //show messagebox
     772                    MessageBox.Show(_windowToBlockForMessageBoxes, String.Format(Properties.Resources.CrypToolStorePresentation_ResourceSuccessfullyInstalled, SelectedPlugin.Name), Properties.Resources.CrypToolStorePresentation_ResourceSuccessfullyInstalled, MessageBoxButton.OK);
     773                }, null);
     774            }
     775            catch (Exception ex)
     776            {
     777                string message = String.Format(Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_while_downloading_and_installing___0_, ex.Message);
     778                _crypToolStoreEditor.GuiLogMessage(message, NotificationLevel.Error);
     779                _context.Send(callback => MessageBox.Show(_windowToBlockForMessageBoxes, message, Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_, MessageBoxButton.OK), null);
     780                errorOccured = true;
     781            }
     782            finally
     783            {
     784                try
     785                {
     786                    //if something went wrong, we delete the folder
     787                    if (errorOccured)
     788                    {
     789                        if (Directory.Exists(GetResourceFolder((ResourceWrapper)SelectedPlugin)))
     790                        {
     791                            Directory.Delete(GetResourceFolder((ResourceWrapper)SelectedPlugin), true);
     792                        }                                 
     793                    }
     794                }
     795                catch (Exception)
     796                {
     797                    //wtf?
     798                }
     799
     800                //Step 5: Unlock everything in the UI
     801                _context.Send(callback =>
     802                {
     803                    try
     804                    {
     805                        PluginListView.IsEnabled = true;
     806                        InstallButton.IsEnabled = true;
     807                        DeleteButton.IsEnabled = true;
     808                        Filter.IsEnabled = true;
     809
     810                        InstallationProgressBar.Visibility = Visibility.Collapsed;
     811                        InstallationProgressText.Visibility = Visibility.Collapsed;
     812                    }
     813                    catch (Exception ex)
     814                    {
     815                        _crypToolStoreEditor.GuiLogMessage(String.Format(Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_while_unlocking_of_everything___0_, ex.Message), NotificationLevel.Error);
     816                    }
     817                }, null);
     818
     819                //Step 6: Update StorePluginListTask
     820                Task updateStorePluginListTask = new Task(UpdateStorePluginList);
     821                updateStorePluginListTask.Start();
     822            }
     823        }
     824
     825        /// <summary>
    576826        /// Updates the download progress bar
    577827        /// </summary>
     
    607857            try
    608858            {
    609                 MessageBoxResult result = MessageBox.Show(_windowToBlockForMessageBoxes,String.Format(Properties.Resources.CrypToolStorePresentation_DeleteButton_Click_Do_you_really_want_to_uninstall___0___from_CrypTool_Store_, SelectedPlugin.Name), Properties.Resources.CrypToolStorePresentation_DeleteButton_Click_Unistallation_, MessageBoxButton.YesNo);               
     859                MessageBoxResult result = MessageBox.Show(_windowToBlockForMessageBoxes,String.Format(Properties.Resources.CrypToolStorePresentation_DeleteButton_Click_Do_you_really_want_to_uninstall___0___from_CrypTool_Store_, SelectedPlugin.Name), Properties.Resources.CrypToolStorePresentation_DeleteButton_Click_Unistallation_, MessageBoxButton.YesNo);
    610860                if (result == MessageBoxResult.Yes)
    611861                {
    612                     string assemblyfilename = System.IO.Path.Combine(GetPluginsFolder(SelectedPlugin), String.Format("assembly-{0}-{1}.zip", SelectedPlugin.PluginId, SelectedPlugin.PluginVersion));
    613                     string xmlfilename = System.IO.Path.Combine(GetPluginsFolder(SelectedPlugin), String.Format("install-{0}-{1}.xml", SelectedPlugin.PluginId, SelectedPlugin.PluginVersion));
    614 
    615                     //Step 0: delete files before creating new xml file
    616                     try
    617                     {
    618                         if (File.Exists(assemblyfilename))
    619                         {
    620                             File.Delete(assemblyfilename);
    621                         }
    622                         if (File.Exists(xmlfilename))
    623                         {
    624                             File.Delete(xmlfilename);
    625                         }
     862                    if (SelectedPlugin is ResourceWrapper)
     863                    {
     864                        DeleteResource();
    626865                    }
    627                     catch (Exception ex)
    628                     {
    629                         _crypToolStoreEditor.GuiLogMessage(String.Format(Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_while_deleting_old_installation_files___0_, ex.Message), NotificationLevel.Error);
    630                         return;
     866                    else if(SelectedPlugin is PluginWrapper)
     867                    {
     868                        DeletePlugin();
    631869                    }
    632 
    633                     using (StreamWriter xmlfile = new StreamWriter(xmlfilename))
    634                     {
    635                         string type = "deletion";
    636                         xmlfile.WriteLine(String.Format("<installation type=\"{0}\">", type));
    637                         xmlfile.WriteLine("  <plugin>");
    638                         xmlfile.WriteLine(String.Format("    <name>{0}</name>", SelectedPlugin.Name));
    639                         xmlfile.WriteLine(String.Format("    <id>{0}</id>", SelectedPlugin.PluginId));
    640                         xmlfile.WriteLine(String.Format("    <version>{0}</version>", SelectedPlugin.PluginVersion));
    641                         xmlfile.WriteLine("  </plugin>");
    642                         xmlfile.WriteLine("</installation>");
    643                     }
    644 
    645                     MessageBox.Show(_windowToBlockForMessageBoxes,String.Format(Properties.Resources.CrypToolStorePresentation_DeleteButton_Click___0___has_been_marked_for_uninstallation__You_need_to_restart_CrypTool_2_to_complete_installation_, SelectedPlugin.Name), "Marked for uninstallation.", MessageBoxButton.OK);
    646 
    647                     PendingChanges = true;
    648                     OnStaticPropertyChanged("PendingChanges");
    649 
    650                     //update StorePluginList
    651                     Task updateStorePluginListTask = new Task(UpdateStorePluginList);
    652                     updateStorePluginListTask.Start();
    653870                }
    654871            }
     
    660877            }
    661878        }
     879
     880        /// <summary>
     881        /// Deletes a plugin
     882        /// </summary>
     883        private void DeletePlugin()
     884        {
     885            string assemblyfilename = System.IO.Path.Combine(GetPluginsFolder(), String.Format("assembly-{0}-{1}.zip", SelectedPlugin.PluginId, SelectedPlugin.PluginVersion));
     886            string xmlfilename = System.IO.Path.Combine(GetPluginsFolder(), String.Format("install-{0}-{1}.xml", SelectedPlugin.PluginId, SelectedPlugin.PluginVersion));
     887
     888            try
     889            {
     890                if (File.Exists(assemblyfilename))
     891                {
     892                    File.Delete(assemblyfilename);
     893                }
     894                if (File.Exists(xmlfilename))
     895                {
     896                    File.Delete(xmlfilename);
     897                }
     898            }
     899            catch (Exception ex)
     900            {
     901                _crypToolStoreEditor.GuiLogMessage(String.Format(Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_while_deleting_old_installation_files___0_, ex.Message), NotificationLevel.Error);
     902                return;
     903            }
     904
     905            using (StreamWriter xmlfile = new StreamWriter(xmlfilename))
     906            {
     907                string type = "deletion";
     908                xmlfile.WriteLine(String.Format("<installation type=\"{0}\">", type));
     909                xmlfile.WriteLine("  <plugin>");
     910                xmlfile.WriteLine(String.Format("    <name>{0}</name>", SelectedPlugin.Name));
     911                xmlfile.WriteLine(String.Format("    <id>{0}</id>", SelectedPlugin.PluginId));
     912                xmlfile.WriteLine(String.Format("    <version>{0}</version>", SelectedPlugin.PluginVersion));
     913                xmlfile.WriteLine("  </plugin>");
     914                xmlfile.WriteLine("</installation>");
     915            }
     916
     917            MessageBox.Show(_windowToBlockForMessageBoxes, String.Format(Properties.Resources.CrypToolStorePresentation_DeleteButton_Click___0___has_been_marked_for_uninstallation__You_need_to_restart_CrypTool_2_to_complete_installation_, SelectedPlugin.Name), "Marked for uninstallation.", MessageBoxButton.OK);
     918
     919            PendingChanges = true;
     920            OnStaticPropertyChanged("PendingChanges");
     921
     922            //update StorePluginList
     923            Task updateStorePluginListTask = new Task(UpdateStorePluginList);
     924            updateStorePluginListTask.Start();
     925        }
     926
     927        /// <summary>
     928        /// Deletes a resource
     929        /// </summary>
     930        private void DeleteResource()
     931        {         
     932            try
     933            {
     934                string resourceDirectory = GetResourceFolder((ResourceWrapper)SelectedPlugin);
     935                if (Directory.Exists(resourceDirectory))
     936                {
     937                    Directory.Delete(resourceDirectory, true);
     938                }
     939            }
     940            catch (Exception ex)
     941            {
     942                _crypToolStoreEditor.GuiLogMessage(String.Format(Properties.Resources.CrypToolStorePresentation_InstallPlugin_Exception_occured_while_deleting_old_installation_files___0_, ex.Message), NotificationLevel.Error);
     943                return;
     944            }
     945
     946            //update StorePluginList
     947            Task updateStorePluginListTask = new Task(UpdateStorePluginList);
     948            updateStorePluginListTask.Start();
     949        }
     950
    662951
    663952        /// <summary>
     
    696985
    697986        public event PropertyChangedEventHandler PropertyChanged;
    698         public static event PropertyChangedEventHandler StaticPropertyChanged;       
     987        public static event PropertyChangedEventHandler StaticPropertyChanged;
     988
     989        private void ShowResources_Checked(object sender, RoutedEventArgs e)
     990        {
     991            //update StorePluginList
     992            Task updateStorePluginListTask = new Task(UpdateStorePluginList);
     993            updateStorePluginListTask.Start();
     994        }
     995
     996        private void ShowResources_Unchecked(object sender, RoutedEventArgs e)
     997        {
     998            //update StorePluginList
     999            Task updateStorePluginListTask = new Task(UpdateStorePluginList);
     1000            updateStorePluginListTask.Start();
     1001        }
    6991002    }
    7001003
  • trunk/CrypToolStore/DownloadResourceDataFile.xaml.cs

    r8189 r8417  
    6464
    6565        /// <summary>
    66         /// Tries to download a zip
     66        /// Tries to download a resource
    6767        /// </summary>
    6868        /// <param name="sender"></param>
     
    9090
    9191        /// <summary>
    92         /// Downloads the selected zip file
     92        /// Downloads the selected file
    9393        /// stops, if the window is closed
    9494        /// </summary>
     
    173173            catch (Exception ex)
    174174            {
    175                 MessageBox.Show(String.Format("Exception during download of resource zip file: {0}", ex.Message), "Exception");
     175                MessageBox.Show(String.Format("Exception during download of resource file: {0}", ex.Message), "Exception");
    176176
    177177                try
  • trunk/CrypToolStore/PluginWrapper.cs

    r8109 r8417  
    1717using System.Drawing.Imaging;
    1818using System.IO;
     19using System.Windows.Media;
    1920using System.Windows.Media.Imaging;
    2021
    2122namespace Cryptool.CrypToolStore
    2223{
     24   
    2325    /// <summary>
    2426    /// This class wraps a PluginAndData object, offering comfort functions, thus, it can be easier shown in the UI
    2527    /// </summary>
    26     public class PluginWrapper
     28    public class PluginWrapper 
    2729    {
    28         public int PluginId { get; set; }
    29         public int PluginVersion { get; set; }
    3030        public string Name { get; set; }
    3131        public string ShortDescription { get; set; }
     32        public int PluginId { get; set; }
     33        public int PluginVersion { get; set; }               
    3234        public string LongDescription { get; set; }
    3335        public string Authornames { get; set; }
     
    3840        public bool UpdateAvailable { get; set; }
    3941        public string FileSize { get; set; }
    40         private byte[] IconData { get; set; }
     42        private byte[] IconData { get; set; }       
     43        public Brush BackgroundColor { get; set; }
    4144
    42         public PublishState PublishState { get; set; }
     45        public PluginWrapper()
     46        {
     47
     48        }
    4349
    4450        /// <summary>
     
    6268            IconData = plugin.Icon;
    6369            FileSize = CrypToolStoreLib.Tools.Tools.FormatFileSizeString(pluginAndSource.FileSize);
     70           
     71            Color color = Color.FromArgb(0xFF, 0xC8, 0xDC, 0xF5);
     72            BackgroundColor = new SolidColorBrush(color);
    6473        }
    6574
     
    7382            {
    7483                byte[] data;
    75                 if (IconData == null || IconData.Length == 0)
     84                if(this is ResourceWrapper)
     85                {
     86                    //this is a resource, thus, we use the icon_resource
     87                    MemoryStream stream = new MemoryStream();
     88                    Properties.Resources.icon_resource.Save(stream, ImageFormat.Png);
     89                    stream.Position = 0;
     90                    data = stream.ToArray();
     91                    stream.Close();
     92                }
     93                else if (IconData == null || IconData.Length == 0)
    7694                {
    7795                    //we have no icon, thus, we display the default icon
     
    142160        }
    143161    }
     162
     163    /// <summary>
     164    /// This class wraps a ResourceAndResourceData object, offering comfort functions, thus, it can be easier shown in the UI
     165    /// Actually, we "misuse" the PluginWrapper by using it as a ResourceWrapper, thus, some of the namings are not 100% correct
     166    /// e.g. PluginId is the ResourceId
     167    /// </summary>
     168    public class ResourceWrapper : PluginWrapper
     169    {     
     170        public ResourceWrapper(ResourceAndResourceData resourceAndResource)
     171        {
     172            Resource resource = resourceAndResource.Resource;
     173            ResourceData resourceData = resourceAndResource.ResourceData;
     174            PluginId = resource.Id;
     175            PluginVersion = resourceData.ResourceVersion;
     176            Name = resource.Name;
     177            ShortDescription = resource.Description;
     178            LongDescription = string.Empty;
     179            //todo: add filesize to protocol
     180            //FileSize = CrypToolStoreLib.Tools.Tools.FormatFileSizeString(resourceAndResource.FileSize);
     181            Color color = Color.FromArgb(0xFF, 0xEB, 0xEF, 0xF6);
     182            BackgroundColor = new SolidColorBrush(color);
     183        }
     184    }
     185
    144186}
  • trunk/CrypToolStore/Properties/Resources.Designer.cs

    r8089 r8417  
    2020    // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
    2121    // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
    22     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
     22    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
    2323    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    2424    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
     
    274274       
    275275        /// <summary>
     276        ///   Sucht eine lokalisierte Zeichenfolge, die Resource {0} successfully installed. ähnelt.
     277        /// </summary>
     278        internal static string CrypToolStorePresentation_ResourceSuccessfullyInstalled {
     279            get {
     280                return ResourceManager.GetString("CrypToolStorePresentation_ResourceSuccessfullyInstalled", resourceCulture);
     281            }
     282        }
     283       
     284        /// <summary>
    276285        ///   Sucht eine lokalisierte Zeichenfolge, die Exception during restart. ähnelt.
    277286        /// </summary>
     
    362371       
    363372        /// <summary>
     373        ///   Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
     374        /// </summary>
     375        internal static System.Drawing.Bitmap icon_resource {
     376            get {
     377                object obj = ResourceManager.GetObject("icon_resource", resourceCulture);
     378                return ((System.Drawing.Bitmap)(obj));
     379            }
     380        }
     381       
     382        /// <summary>
    364383        ///   Sucht eine lokalisierte Zeichenfolge, die Install ähnelt.
    365384        /// </summary>
     
    421440            get {
    422441                return ResourceManager.GetString("Search", resourceCulture);
     442            }
     443        }
     444       
     445        /// <summary>
     446        ///   Sucht eine lokalisierte Zeichenfolge, die Show resources ähnelt.
     447        /// </summary>
     448        internal static string ShowResources {
     449            get {
     450                return ResourceManager.GetString("ShowResources", resourceCulture);
    423451            }
    424452        }
  • trunk/CrypToolStore/Properties/Resources.de.resx

    r8089 r8417  
    130130    <value>Willkommen im CrypTool Store!</value>
    131131  </data>
    132   <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    133132  <data name="Search" xml:space="preserve">
    134133    <value>Suche:</value>
     
    143142    <value>Autoren-Institut(e):</value>
    144143  </data>
     144  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    145145  <data name="download" type="System.Resources.ResXFileRef, System.Windows.Forms">
    146146    <value>..\download.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
     
    242242    <value>Dateigröße:</value>
    243243  </data>
     244  <data name="CrypToolStorePresentation_ResourceSuccessfullyInstalled" xml:space="preserve">
     245    <value>Resource {0} erfolgreich installiert.</value>
     246  </data>
     247  <data name="ShowResources" xml:space="preserve">
     248    <value>Zeige Resourcen</value>
     249  </data>
    244250</root>
  • trunk/CrypToolStore/Properties/Resources.resx

    r8089 r8417  
    248248    <value>..\ctstoretls.crt;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    249249  </data>
     250  <data name="icon_resource" type="System.Resources.ResXFileRef, System.Windows.Forms">
     251    <value>..\icon_resource.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
     252  </data>
     253  <data name="CrypToolStorePresentation_ResourceSuccessfullyInstalled" xml:space="preserve">
     254    <value>Resource {0} successfully installed.</value>
     255  </data>
     256  <data name="ShowResources" xml:space="preserve">
     257    <value>Show resources</value>
     258  </data>
    250259</root>
  • trunk/CrypToolStore/Properties/Resources.ru.resx

    r8089 r8417  
    130130    <value>Добро пожаловать в магазин CrypTool!</value>
    131131  </data>
    132   <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    133132  <data name="Search" xml:space="preserve">
    134133    <value>Поиск:</value>
     
    143142    <value>Авторские институты:</value>
    144143  </data>
     144  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    145145  <data name="download" type="System.Resources.ResXFileRef, System.Windows.Forms">
    146146    <value>..\download.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
     
    239239    <value>Размер файла:</value>
    240240  </data>
     241  <data name="CrypToolStorePresentation_ResourceSuccessfullyInstalled" xml:space="preserve">
     242    <value>Ресурс {0} успешно установлен.</value>
     243  </data>
     244  <data name="ShowResources" xml:space="preserve">
     245    <value>Показать ресурсы</value>
     246  </data>
    241247</root>
Note: See TracChangeset for help on using the changeset viewer.