Changeset 11922


Ignore:
Timestamp:
08/08/11 18:57:56 (9 years ago)
Author:
bayral
Message:

Async image thumbail retriving

Location:
extensions/PiwigoLib
Files:
2 added
1 deleted
14 edited

Legend:

Unmodified
Added
Removed
  • extensions/PiwigoLib/PiwigoLib/Service/PwgSessionService.cs

    r11911 r11922  
    4444                    { 
    4545                        ConvertProxyResponseToDTO(response, ref PwgSession); 
    46                         PwgSession.IsConnected = true; 
    4746                    } 
    4847                } catch (PwgProxyException ex) 
     
    6463        { 
    6564            PwgSession = null; 
     65            Boolean isConnected = false; 
    6666            try 
    6767            { 
    6868                PwgSessionProxyResponse response = PwgSessionProxy.pwg_session_login(UserName, Password); 
    6969 
    70                 if (response.Retour != PwgBaseProxyReponseRetourEnum.Ok ) 
     70                if (response.Retour != PwgBaseProxyReponseRetourEnum.Ok) 
    7171                { 
     72 
    7273                    if (response.Erreur != null) 
    7374                    { 
    74                         throw new PwgServiceException("Login, the server has return the error.",  
    75                             response.Erreur.Code,  
     75                        throw new PwgServiceException("Login, the server has return the error.", 
     76                            response.Erreur.Code, 
    7677                            response.Erreur.Message); 
    7778                    } 
     
    8182                    } 
    8283                } 
     84                else 
     85                { 
     86                    isConnected = true; 
     87                } 
    8388            } 
    8489            catch (PwgProxyException ex) 
     
    8792            } 
    8893 
    89             return GetPwgSession(); 
     94            PwgSession sess= GetPwgSession(); 
     95            sess.IsConnected = isConnected; 
     96            return sess; 
    9097        } 
    9198 
     
    93100        { 
    94101            PwgSession = null; 
     102            Boolean isConnected = false; 
    95103            try 
    96104            { 
     
    116124            } 
    117125 
    118             return GetPwgSession(); 
     126            PwgSession sess = GetPwgSession(); 
     127            sess.IsConnected = isConnected; 
     128            return sess; 
    119129        } 
    120130        /// <summary> 
  • extensions/PiwigoLib/PiwigoWpf/App.xaml

    r11911 r11922  
    99        <ObjectDataProvider x:Name="SessionODP" x:Key="Session" ObjectType="{x:Type piwigo:PwgSessionWPF}" /> 
    1010        <ObjectDataProvider x:Name="CategoriesODP" x:Key="Categories" ObjectType="{x:Type piwigo:PwgCategoryListWPF}"/> <!--IsAsynchronous="True"--> 
    11  
     11        <!--IsAsynchronous="True"--> 
    1212        <ResourceDictionary  x:Key="VisualStyleApp" Source="VisualStyleApp.xaml"/> 
    1313    </Application.Resources> 
  • extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdConnect.cs

    r11911 r11922  
    1010namespace Com.Piwigo.Wpf.Command 
    1111{ 
    12     public sealed class PwgCmdConnect : PwgCmdBase 
     12    public sealed class PwgCmdConnect : AsyncCommand 
    1313    { 
    14         public override void Execute(object parameter) 
     14        public override string Text { get { return "Connect to server"; } } 
     15 
     16        protected override void OnExecute(object parameter) 
    1517        { 
    1618            try { 
    17                 IsRunning = true; 
    1819                Uri uriServer = new Uri(PwgModelManager.Instance.Session.ServeurName); 
    19  
     20                SendUiInfo("Setting up server..."); 
    2021                PwgServiceProvider.Instance.PwgSetupService.Setup(null, null, uriServer); 
    2122                PwgSessionWPF sesWPF = PwgModelManager.Instance.Session; 
    22                  
     23                SendUiInfo("Connecting to server..."); 
    2324                PwgSession sess = null; 
    2425                if (String.IsNullOrWhiteSpace(sesWPF.UserName) && String.IsNullOrWhiteSpace(sesWPF.Password)) 
     
    3233                } 
    3334 
     35                SendUiInfo("Retriving list of Category from server..."); 
    3436                PwgSessionWPFHelper.AddPwgSessionInfoToPwgSessionWPF(sess, ref sesWPF); 
    3537 
     
    3941                PwgCategoryListWPFHelper.ConvertPwgCategoryListToPwgCategoryListWPF(lstCat, ref lstCatWPF); 
    4042 
     43                SendUiInfo("Setting up cache data ..."); 
    4144                ImageCacheManager.Instance.SetCurrentServer(uriServer.AbsoluteUri); 
     45             
    4246 
    43                 IsRunning = false; 
    4447            } 
    4548            catch (PwgServiceException ex) 
    4649            { 
    47                 Console.WriteLine("Erreur " + ex.NumeroErr + " " + ex.MessageErr); 
    48                 Console.WriteLine(ex.Message); 
     50                SendUiInfo("Error " + ex.NumeroErr + " " + ex.MessageErr); 
    4951            } 
    50  
     52            
    5153        } 
    5254    } 
  • extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdDisconnect.cs

    r11911 r11922  
    1010namespace Com.Piwigo.Wpf.Command 
    1111{ 
    12     public sealed class PwgCmdDisconnect : PwgCmdBase 
     12    public sealed class PwgCmdDisconnect : AsyncCommand 
    1313    { 
    14         public override void Execute(object parameter) 
     14        public override string Text { get { return "Disconnect from server"; } } 
     15 
     16        protected override void OnExecute(object parameter) 
    1517        { 
    1618            try { 
    17                 IsRunning = true; 
    1819                PwgSessionWPF sesWPF = PwgModelManager.Instance.Session; 
    1920                 
     21                SendUiInfo("Logging out ..."); 
     22 
    2023                PwgSession sess = null; 
    2124                sess = PwgServiceProvider.Instance.PwgSessionService.Logout(); 
    2225 
    2326                PwgSessionWPFHelper.AddPwgSessionInfoToPwgSessionWPF(sess, ref sesWPF); 
    24                  
     27 
     28                SendUiInfo("Removing Image and Category ..."); 
     29                if (PwgModelManager.Instance.ImageList != null) 
     30                { 
     31                    PwgModelManager.Instance.ImageList.Clear(); 
     32                } 
     33 
    2534                if (PwgModelManager.Instance.CategoryList != null) 
    2635                { 
     
    2837                } 
    2938 
     39                SendUiInfo("Unset cache data ..."); 
    3040                ImageCacheManager.Instance.UnsetCurrentServer(); 
    31  
    32                 IsRunning = false; 
    3341            } 
    3442            catch (PwgServiceException ex) 
    3543            { 
    36                 Console.WriteLine("Erreur " + ex.NumeroErr + " " + ex.MessageErr); 
    37                 Console.WriteLine(ex.Message); 
     44                SendUiInfo("Error " + ex.NumeroErr + " " + ex.MessageErr); 
    3845            } 
    39  
    4046        } 
    4147    } 
  • extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdGetImageforCategory.cs

    r11911 r11922  
    1010namespace Com.Piwigo.Wpf.Command 
    1111{ 
    12     public sealed class PwgCmdGetImageforCategory : PwgCmdBase 
     12    public sealed class PwgCmdGetImageforCategory : AsyncCommand 
    1313    { 
    14         public override void Execute(object parameter) 
     14        public override string Text { get { return "Get images for a category"; } } 
     15 
     16        protected override void OnExecute(object parameter) 
    1517        { 
    1618            PwgCategoryWPF catParam; 
     
    1921            Int32 acount = 0; 
    2022 
    21             try { 
     23            try 
     24            { 
    2225                Uri uriServer = new Uri(PwgModelManager.Instance.Session.ServeurName); 
    2326                if (parameter is PwgCategoryWPF) 
    2427                { 
     28                    PwgImageListWPF lstImgWPF = PwgModelManager.Instance.ImageList; 
     29                    SendUiInfo("Removing image..."); 
     30                    if (lstImgWPF != null) 
     31                    { 
     32                        lstImgWPF.Clear(); 
     33                    } 
     34 
    2535                    catParam = (PwgCategoryWPF)parameter; 
     36                    SendUiInfo("Setting up cache data..."); 
    2637                    ImageCacheManager.Instance.SetCurrentCategory(catParam.Id.ToString()); 
    2738 
     39                    SendUiInfo("Retriving images list from server..."); 
    2840                    List<PwgImage> lstImg = PwgServiceProvider.Instance.PwgCategoriesService.GetListOfImagesFormCategory(catParam.Id, false, null, null, null, null, null, null, null, null, null, null, null, null, null, true, ref aPage, ref aPerPage, ref  acount); 
    29                     PwgImageListWPF lstImgWPF = PwgModelManager.Instance.ImageList; 
    30  
     41                     
    3142                    PwgImageListWPFHelper.ConvertPwgImageListToPwgImageListWPF(lstImg, ref lstImgWPF); 
    3243                } 
    33                
    3444            } 
    3545            catch (PwgServiceException ex) 
    3646            { 
    37                 Console.WriteLine("Erreur " + ex.NumeroErr + " " + ex.MessageErr); 
    38                 Console.WriteLine(ex.Message); 
     47                SendUiInfo("Error " + ex.NumeroErr + " " + ex.MessageErr); 
    3948            } 
    40  
    4149        } 
    4250    } 
  • extensions/PiwigoLib/PiwigoWpf/Command/PwgCmdProvider.cs

    r11911 r11922  
    99    public static class PwgCmdProvider 
    1010    { 
    11         public static PwgCmdBase GetByType<T>() 
     11        public static AsyncCommand GetByType<T>() 
    1212        { 
    13             PwgCmdBase objICom; 
     13            AsyncCommand objICom; 
    1414 
    1515            switch (typeof(T).Name) 
     
    3232        } 
    3333 
    34         public static PwgCmdBase _pwgCmdConnect; 
    35         public static PwgCmdBase PwgCmdConnect 
     34        public static AsyncCommand _pwgCmdConnect; 
     35        public static AsyncCommand PwgCmdConnect 
    3636        { 
    3737            get 
     
    4545        } 
    4646 
    47         public static PwgCmdBase _pwgCmdDisconnect; 
    48         public static PwgCmdBase PwgCmdDisconnect 
     47        public static AsyncCommand _pwgCmdDisconnect; 
     48        public static AsyncCommand PwgCmdDisconnect 
    4949        { 
    5050            get 
     
    5858        } 
    5959 
    60         public static PwgCmdBase _pwgCmdGetImageforCategory; 
    61         public static PwgCmdBase PwgCmdGetImageforCategory 
     60        public static AsyncCommand _pwgCmdGetImageforCategory; 
     61        public static AsyncCommand PwgCmdGetImageforCategory 
    6262        { 
    6363            get 
  • extensions/PiwigoLib/PiwigoWpf/DTO/PwgImageWPF.cs

    r7150 r11922  
    1212    public class PwgImageWPF : INotifyPropertyChanged 
    1313    { 
     14        private String _imgSource; 
     15        public String ImgSource 
     16        { 
     17            set { _imgSource = value; OnPropertyChanged("ImgSource"); } 
     18            get 
     19            { 
     20                if (_imgSource == null) 
     21                { 
     22                    _imgSource = Com.Piwigo.Wpf.Service.ImageCacheManager.Instance.GetImageFilename(this); 
     23                } 
     24                return _imgSource; 
     25            } 
     26        } 
     27         
     28 
    1429        private Int32 _id; 
    1530        public  Int32 Id 
  • extensions/PiwigoLib/PiwigoWpf/DTO/PwgModelManager.cs

    r11905 r11922  
    2727        public class PwgModelManagerBase 
    2828        { 
     29            private AsyncObservableCollection<String> _lstMsgInfo = new AsyncObservableCollection<String>(); 
     30            public AsyncObservableCollection<String> lstMsgInfo 
     31            { 
     32                set { _lstMsgInfo = value; OnPropertyChanged("lstMsgInfo"); } 
     33                get { return _lstMsgInfo; } 
     34            } 
     35 
     36            private Boolean _booCmdRunning = false; 
     37            public Boolean booCmdRunning 
     38            { 
     39                set { _booCmdRunning = value; OnPropertyChanged("booCmdRunning"); } 
     40                get { return _booCmdRunning; } 
     41            } 
     42 
    2943            private PwgImageListWPF _imageList; 
    3044            public PwgImageListWPF ImageList 
     
    4963 
    5064            public event PropertyChangedEventHandler PropertyChanged; 
    51             private void OnPropertyChanged(String info) 
     65            internal void OnPropertyChanged(String info) 
    5266            { 
    5367                if (PropertyChanged != null) 
  • extensions/PiwigoLib/PiwigoWpf/Helper/AppHelper.cs

    r11911 r11922  
    5252        } 
    5353 
    54         static public void ExecuteCommand<T>(object parameter) where T:  PwgCmdBase 
     54        static public void ExecuteCommand<T>(object parameter) where T : AsyncCommand 
    5555        { 
    56             PwgCmdBase cmd = PwgCmdProvider.GetByType<T>(); 
     56            AsyncCommand cmd = PwgCmdProvider.GetByType<T>(); 
    5757            if (cmd.CanExecute(parameter)) 
    5858            { 
  • extensions/PiwigoLib/PiwigoWpf/Helper/ImageUrlCachedConverter.cs

    r11904 r11922  
    2121         public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    2222        { 
    23             String src; 
     23            String src = string.Empty; 
    2424            if (value == null) return null; 
    2525            PwgImageWPF someObj = value as PwgImageWPF; 
    2626 
    27             src = ImageCacheManager.Instance.GetImageFilename(someObj); 
     27            //src = ImageCacheManager.Instance.GetImageFilename(someObj); 
    2828 
    2929            return src; 
  • extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml

    r11911 r11922  
    77        xmlns:pwgcmd="clr-namespace:Com.Piwigo.Wpf.Command" 
    88        xmlns:pwgsrv="clr-namespace:Com.Piwigo.Wpf.Service" 
     9        xmlns:pwghlp="clr-namespace:Com.Piwigo.Wpf.Helper" 
    910        Title="PiwigoWpf" 
    1011        WindowState="Maximized" 
    1112        MinHeight="600" MinWidth="800"> 
    1213    <Window.Resources> 
    13         <ObjectDataProvider x:Key="listCat" IsAsynchronous="True" /> 
    14         <ObjectDataProvider x:Key="listImg" IsAsynchronous="True" /> 
    15  
    16               <!-- DATA TEMPLATES --> 
     14        <pwghlp:AdvBooltoVisibilityConverter x:Key="AdvBooltoVisibilityConverter"  Collapse="False" Reverse="False" /> 
     15        <pwghlp:AdvBooltoVisibilityConverter x:Key="AdvBooltoVisibilityConverterReversal"  Collapse="False" Reverse="True" /> 
     16               <!-- DATA TEMPLATES --> 
    1717 
    1818        <DataTemplate DataType="{x:Type pwgdto:PwgImageWPF}"> 
     
    2121                <Image ToolTip="{Binding File}" > 
    2222                    <Image.Source> 
    23                         <PriorityBinding> 
    24                             <Binding IsAsync="True" Converter="{x:Static pwgsrv:ImageCacheManager.ImageUrlCachedConverter}"/> 
    25                             <Binding Source="pack://application:,,,/Pictures/Globe.png" /> 
    26                     </PriorityBinding> 
     23                        <Binding Path="ImgSource" /> <!--Converter="{x:Static pwgsrv:ImageCacheManager.ImageUrlCachedConverter}"--> 
    2724                    </Image.Source> 
    2825                </Image> 
     
    197194    <DockPanel Name="mainDockPanel"  Margin="5"> 
    198195        <StackPanel Name="headerStackPanel" DockPanel.Dock="Top" Orientation="Vertical"> 
    199             <Image Name="ImgPiwigoLogo" MinHeight="50" MinWidth="50" 
     196            <StackPanel Name="headerStackPanelLogo" Orientation="Horizontal" > 
     197                <Image Name="ImgPiwigoLogo" MinHeight="50" MinWidth="50" 
    200198                   Source="pack://application:,,,/Pictures/PiwigoLogo.png"  
    201199                   ToolTip="www.piwigo.org" Stretch="None" HorizontalAlignment="Left" /> 
     200                <Image Name="ImgGlobe"  
     201                   Visibility="{Binding Source={x:Static pwgdto:PwgModelManager.Instance}, Path=booCmdRunning, Converter={StaticResource AdvBooltoVisibilityConverterReversal}}" 
     202                   Source="pack://application:,,,/Pictures/Globe.png"  
     203                   ToolTip="www.piwigo.org" Stretch="None" HorizontalAlignment="Right"/> 
     204            </StackPanel> 
    202205            <StackPanel Name="connectStackPanel" Orientation="Horizontal" VerticalAlignment="Center"  Margin="5" 
    203206                        DataContext="{Binding Source={StaticResource Session}}"> 
     
    210213                <TextBox Height="23" Name="TbUrl" Width="300" Text="{Binding Path=ServeurName, Mode=TwoWay}"/> 
    211214                <CheckBox Margin="2" VerticalAlignment="Center" IsChecked="{Binding Path=SaveSetting, Mode=TwoWay}">Save settings</CheckBox> 
    212                 <Button Margin="2" Command="{x:Static pwgcmd:PwgCmdProvider.PwgCmdConnect}" Visibility="{pwgui:SwitchBinding IsConnected, Hidden, Visible}">Conect</Button> 
    213                 <Button Margin="2" Command="{x:Static pwgcmd:PwgCmdProvider.PwgCmdDisconnect}" Visibility="{pwgui:SwitchBinding IsConnected, Visible, Hidden}">Disconect</Button> 
     215                <Button Margin="2" Command="{x:Static pwgcmd:PwgCmdProvider.PwgCmdConnect}" Visibility="{Binding Path=IsConnected, Converter={StaticResource AdvBooltoVisibilityConverterReversal}}">Conect</Button> 
     216                <Button Margin="2" Command="{x:Static pwgcmd:PwgCmdProvider.PwgCmdDisconnect}" Visibility="{Binding Path=IsConnected, Converter={StaticResource AdvBooltoVisibilityConverter}}">Disconect</Button> 
    214217            </StackPanel> 
    215            <ProgressBar IsIndeterminate="True" />           
    216218        </StackPanel> 
     219        <ListView Name="listViewLogUiInfo"  DockPanel.Dock="Bottom"  
     220                  DataContext="{Binding Source={x:Static pwgdto:PwgModelManager.Instance}, Path=lstMsgInfo}"  
     221                  ItemsSource="{Binding }" /> 
    217222 
    218223        <ListView Name="listViewCategory"  DockPanel.Dock="Left" MinWidth="100"  
     
    221226                  DataContext="{Binding Source={StaticResource Categories}}"  
    222227                  ItemsSource="{Binding }" MouseDoubleClick="listViewCategory_MouseDoubleClick" /> 
     228         
    223229        <ListView Name="listViewImage"  DockPanel.Dock="Right"  MinWidth="500" 
    224230                  Style="{DynamicResource PhotoListStyle}" 
  • extensions/PiwigoLib/PiwigoWpf/MainWindow.xaml.cs

    r11904 r11922  
    2525        { 
    2626            InitializeComponent(); 
     27            PwgCmdEvents.CmdRunningChanged += new PwgCmdEvents.CmdRunningChangedHandler(PwgCmdEventsConsumer.PwgCmdEvents_CmdRunningChanged); 
     28            PwgCmdEvents.CmdSendUiInfo += new PwgCmdEvents.CmdSendUiInfoHandler(PwgCmdEventsConsumer.PwgCmdEvents_CmdSendUiInfo); 
    2729        } 
    28  
     30         
    2931        private void listViewCategory_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
    3032        { 
  • extensions/PiwigoLib/PiwigoWpf/PiwigoWpf.csproj

    r11920 r11922  
    7878    </ApplicationDefinition> 
    7979    <Compile Include="Command\PwgCmdDisconnect.cs" /> 
     80    <Compile Include="Command\PwgCmdEventsConsumer.cs" /> 
    8081    <Compile Include="Command\PwgCmdGetImageforCategory.cs" /> 
    8182    <Compile Include="Command\PwgCmdProvider.cs" /> 
    8283    <Compile Include="Command\PwgCmdConnect.cs" /> 
    83     <Compile Include="Command\PwgCmdBase.cs" /> 
     84    <Compile Include="Command\AsyncCommand.cs" /> 
     85    <Compile Include="Command\PwgCommandEvents.cs" /> 
    8486    <Compile Include="DTO\Helper\PwgImageListWPFHelper.cs" /> 
    8587    <Compile Include="DTO\Helper\PwgImageWPFHelper.cs" /> 
     
    8890    <Compile Include="DTO\Helper\PwgSessionWPFHelper.cs" /> 
    8991    <Compile Include="DTO\PwgModelManager.cs" /> 
     92    <Compile Include="Helper\AdvBooltoVisibilityConverter.cs" /> 
    9093    <Compile Include="Helper\AppHelper.cs" /> 
    9194    <Compile Include="DTO\AsyncObservableCollection.cs" /> 
  • extensions/PiwigoLib/PiwigoWpf/Services/ImageCacheManager.cs

    r11911 r11922  
    3939        static ImageCacheManager() 
    4040        { 
     41            Int32 a, b; 
     42            ThreadPool.GetMaxThreads(out a, out b); 
     43            if (a>20) a = 20; 
     44            ThreadPool.SetMaxThreads(a, b); 
    4145        } 
    4246 
     
    211215            public String GetImageFilename(PwgImageWPF aImageWPF) 
    212216                { 
    213                     String retValue = String.Empty; 
     217                    String retImgSrc = String.Empty; 
    214218                    if (aImageWPF == null) 
    215219                    { 
    216                         return retValue; 
     220                        return retImgSrc; 
    217221                    } 
    218222 
     
    223227                        if (!File.Exists(localFile)) 
    224228                        { 
     229                            retImgSrc = GetDefaultImage(); 
     230 
    225231                            ThreadPool.QueueUserWorkItem((WaitCallback)delegate 
    226232                            { 
     
    240246                                image.Save(localFile); 
    241247 
     248                                aImageWPF.ImgSource = localFile;  
    242249                            }); 
    243  
    244                             retValue = localFile; 
    245                         } 
     250                        } 
     251                        else 
     252                        { 
     253                            retImgSrc = localFile;  
     254                        } 
     255                        return retImgSrc; 
    246256                    } 
    247257                    else 
     
    249259                        throw new ApplicationException("Current category not set before using image cache."); 
    250260                    } 
    251                     return retValue; 
    252261                } 
    253262 
Note: See TracChangeset for help on using the changeset viewer.