Index: extensions/PiwigoLib/Piwigo.sln
===================================================================
--- extensions/PiwigoLib/Piwigo.sln	(revision 12250)
+++ extensions/PiwigoLib/Piwigo.sln	(revision 12256)
@@ -9,4 +9,6 @@
 EndProject
 Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "PiwigoWPFSetup", "PiwigoWPFSetup\PiwigoWPFSetup.vdproj", "{A76EEC3F-427C-432A-8060-40096DF8AA4A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PiwigoUpload", "PiwigoUpload\PiwigoUpload.csproj", "{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}"
 EndProject
 Global
@@ -56,4 +58,14 @@
 		{A76EEC3F-427C-432A-8060-40096DF8AA4A}.Release|Mixed Platforms.ActiveCfg = Release
 		{A76EEC3F-427C-432A-8060-40096DF8AA4A}.Release|x86.ActiveCfg = Release
+		{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}.Release|x86.ActiveCfg = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: extensions/PiwigoLib/PiwigoUpload/DTO/ModelManager.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/DTO/ModelManager.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/DTO/ModelManager.cs	(revision 12256)
@@ -0,0 +1,38 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using System.ComponentModel;
+using Com.Piwigo.Lib.DTO;
+
+namespace Com.Piwigo.Uploader.DTO
+{
+    public sealed class ModelManager
+    {
+         static readonly ModelManagerBase _instance = new ModelManagerBase();
+
+        // Explicit static constructor to tell C# compiler
+        // not to mark type as beforefieldinit
+        static ModelManager()
+        {
+        }
+
+        public static ModelManagerBase Instance
+        {
+            get
+            {
+                return _instance;
+            }
+        }
+
+        public class ModelManagerBase 
+        {
+            public PwgSession sess { get; set; }
+            public SelectedPwgCategoryList lstCat { get; set; }
+            public Boolean isConnected { get; set; }
+            public String directoryName { get; set; }
+            public Uri serveurName { get; set; }
+            public String userName { get; set; }
+            public String password { get; set; }
+        }
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/DTO/SelectedList.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/DTO/SelectedList.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/DTO/SelectedList.cs	(revision 12256)
@@ -0,0 +1,23 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Com.Piwigo.Lib.DTO;
+
+namespace Com.Piwigo.Uploader.DTO
+{
+    public class SelectedListItem<T>
+    {
+        public String ShowedValue { get;set;}
+        public object Id          { get;set;}
+        public Boolean isSelected { get;set;}
+        public T Data             { get;set;}
+    }
+
+    public class SelectedPwgCategoryList : List<SelectedListItem<PwgCategory>>
+    {        
+    }
+
+
+
+}
Index: extensions/PiwigoLib/PiwigoUpload/Helper/MainAppHelper.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Helper/MainAppHelper.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Helper/MainAppHelper.cs	(revision 12256)
@@ -0,0 +1,48 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using System.IO;
+
+namespace Com.Piwigo.Uploader.Helper
+{
+    internal static class MainAppHelper
+    {
+        internal static void showdErrorMessageBox(ApplicationException aEx)
+        {
+            System.Windows.Forms.MessageBox.Show(aEx.Message, "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
+        }
+
+
+        #region thumb
+        internal static string MakeThumb(FileInfo fi, String ext, int size)
+        {
+            // create an image object, using the filename we just retrieved
+            System.Drawing.Image image = System.Drawing.Image.FromFile(fi.FullName);
+
+            // create the actual thumbnail image
+            System.Drawing.Image thumbnailImage = image.GetThumbnailImage(size, size, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero);
+
+            // make a memory stream to work with the image bytes
+            FileStream imageStream = new FileStream(ext, FileMode.OpenOrCreate);
+
+            // put the image into the memory stream
+            thumbnailImage.Save(imageStream, System.Drawing.Imaging.ImageFormat.Jpeg);
+
+            imageStream.Close();
+            return ext;
+        }
+
+        /// <summary>
+        /// Required, but not used
+        /// </summary>
+        /// <returns>true</returns>
+        internal static bool ThumbnailCallback()
+        {
+            return true;
+        }
+
+        #endregion thumb
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/Helper/SelectedListHelper.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Helper/SelectedListHelper.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Helper/SelectedListHelper.cs	(revision 12256)
@@ -0,0 +1,22 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Com.Piwigo.Uploader.DTO;
+using Com.Piwigo.Lib.DTO;
+
+namespace Com.Piwigo.Uploader.Helper
+{
+    class SelectedListHelper
+    {
+        public SelectedPwgCategoryList BuildSelectedList(List<PwgCategory> lstItems)
+        {
+            SelectedPwgCategoryList ret = new SelectedPwgCategoryList();
+            foreach (PwgCategory item in lstItems )
+            {
+                ret.Add(new SelectedListItem<PwgCategory>());
+            }
+            return ret;
+        }
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/MainForm.Designer.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/MainForm.Designer.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/MainForm.Designer.cs	(revision 12256)
@@ -0,0 +1,227 @@
+﻿using System;
+namespace Com.Piwigo.Uploader
+{
+    partial class MainForm
+    {
+        /// <summary>
+        /// Variable nécessaire au concepteur.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Nettoyage des ressources utilisées.
+        /// </summary>
+        /// <param name="disposing">true si les ressources managées doivent être supprimées ; sinon, false.</param>
+        protected override void Dispose(Boolean disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Code généré par le Concepteur Windows Form
+
+        /// <summary>
+        /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
+        /// le contenu de cette méthode avec l'éditeur de code.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Node2");
+            System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Node1", new System.Windows.Forms.TreeNode[] {
+            treeNode1});
+            System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Root Category", new System.Windows.Forms.TreeNode[] {
+            treeNode2});
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+            this.button1 = new System.Windows.Forms.Button();
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.treeView1 = new System.Windows.Forms.TreeView();
+            this.imageListTV = new System.Windows.Forms.ImageList(this.components);
+            this.cbxLstCatTo = new System.Windows.Forms.ComboBox();
+            this.label4 = new System.Windows.Forms.Label();
+            this.button2 = new System.Windows.Forms.Button();
+            this.tbPassword = new System.Windows.Forms.TextBox();
+            this.tbServer = new System.Windows.Forms.TextBox();
+            this.tbUser = new System.Windows.Forms.TextBox();
+            this.pwgCategoryListBindingSource = new System.Windows.Forms.BindingSource(this.components);
+            ((System.ComponentModel.ISupportInitialize)(this.pwgCategoryListBindingSource)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // button1
+            // 
+            this.button1.Location = new System.Drawing.Point(273, 63);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(138, 23);
+            this.button1.TabIndex = 40;
+            this.button1.Text = "Telecharger";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.Connect_Click);
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(12, 40);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(29, 13);
+            this.label1.TabIndex = 20;
+            this.label1.Text = "User";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(217, 40);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(53, 13);
+            this.label2.TabIndex = 30;
+            this.label2.Text = "Password";
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(12, 14);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(38, 13);
+            this.label3.TabIndex = 10;
+            this.label3.Text = "Server";
+            // 
+            // treeView1
+            // 
+            this.treeView1.ImageIndex = 0;
+            this.treeView1.ImageList = this.imageListTV;
+            this.treeView1.Location = new System.Drawing.Point(15, 103);
+            this.treeView1.Name = "treeView1";
+            treeNode1.Name = "Node2";
+            treeNode1.SelectedImageIndex = 2;
+            treeNode1.Text = "Node2";
+            treeNode2.ImageIndex = 1;
+            treeNode2.Name = "Node1";
+            treeNode2.Text = "Node1";
+            treeNode3.Name = "RootCategory";
+            treeNode3.Text = "Root Category";
+            treeNode3.ToolTipText = "Root";
+            this.treeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
+            treeNode3});
+            this.treeView1.SelectedImageIndex = 0;
+            this.treeView1.Size = new System.Drawing.Size(396, 202);
+            this.treeView1.TabIndex = 41;
+            // 
+            // imageListTV
+            // 
+            this.imageListTV.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListTV.ImageStream")));
+            this.imageListTV.TransparentColor = System.Drawing.Color.Transparent;
+            this.imageListTV.Images.SetKeyName(0, "folder_html.png");
+            this.imageListTV.Images.SetKeyName(1, "folder_images.png");
+            this.imageListTV.Images.SetKeyName(2, "image.png");
+            // 
+            // cbxLstCatTo
+            // 
+            this.cbxLstCatTo.DataSource = this.pwgCategoryListBindingSource;
+            this.cbxLstCatTo.DisplayMember = "Name";
+            this.cbxLstCatTo.FormattingEnabled = true;
+            this.cbxLstCatTo.Location = new System.Drawing.Point(47, 311);
+            this.cbxLstCatTo.Name = "cbxLstCatTo";
+            this.cbxLstCatTo.Size = new System.Drawing.Size(223, 21);
+            this.cbxLstCatTo.TabIndex = 42;
+            this.cbxLstCatTo.ValueMember = "Id";
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(12, 319);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(22, 13);
+            this.label4.TabIndex = 43;
+            this.label4.Text = "to :";
+            // 
+            // button2
+            // 
+            this.button2.Location = new System.Drawing.Point(273, 314);
+            this.button2.Name = "button2";
+            this.button2.Size = new System.Drawing.Size(138, 23);
+            this.button2.TabIndex = 44;
+            this.button2.Text = "Telecharger";
+            this.button2.UseVisualStyleBackColor = true;
+            this.button2.Click += new System.EventHandler(this.Telecharger_Click);
+            // 
+            // tbPassword
+            // 
+            this.tbPassword.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::Com.Piwigo.Uploader.Properties.Settings.Default, "pwdData", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
+            this.tbPassword.Location = new System.Drawing.Point(273, 37);
+            this.tbPassword.Name = "tbPassword";
+            this.tbPassword.PasswordChar = '*';
+            this.tbPassword.Size = new System.Drawing.Size(138, 20);
+            this.tbPassword.TabIndex = 31;
+            this.tbPassword.Text = global::Com.Piwigo.Uploader.Properties.Settings.Default.pwdData;
+            // 
+            // tbServer
+            // 
+            this.tbServer.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::Com.Piwigo.Uploader.Properties.Settings.Default, "serverUrlData", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
+            this.tbServer.Location = new System.Drawing.Point(68, 11);
+            this.tbServer.Name = "tbServer";
+            this.tbServer.Size = new System.Drawing.Size(343, 20);
+            this.tbServer.TabIndex = 11;
+            this.tbServer.Text = global::Com.Piwigo.Uploader.Properties.Settings.Default.serverUrlData;
+            // 
+            // tbUser
+            // 
+            this.tbUser.DataBindings.Add(new System.Windows.Forms.Binding("Text", global::Com.Piwigo.Uploader.Properties.Settings.Default, "userData", true, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
+            this.tbUser.Location = new System.Drawing.Point(68, 37);
+            this.tbUser.Name = "tbUser";
+            this.tbUser.Size = new System.Drawing.Size(138, 20);
+            this.tbUser.TabIndex = 21;
+            this.tbUser.Text = global::Com.Piwigo.Uploader.Properties.Settings.Default.userData;
+            // 
+            // pwgCategoryListBindingSource
+            // 
+            this.pwgCategoryListBindingSource.AllowNew = false;
+            this.pwgCategoryListBindingSource.DataSource = typeof(Com.Piwigo.Uploader.DTO.PwgCategoryList);
+            // 
+            // MainForm
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(423, 346);
+            this.Controls.Add(this.button2);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.cbxLstCatTo);
+            this.Controls.Add(this.treeView1);
+            this.Controls.Add(this.tbPassword);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.tbServer);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.tbUser);
+            this.Controls.Add(this.button1);
+            this.Name = "MainForm";
+            this.Text = " Piwigo Uploader";
+            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
+            this.Load += new System.EventHandler(this.Form1_Load);
+            ((System.ComponentModel.ISupportInitialize)(this.pwgCategoryListBindingSource)).EndInit();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button button1;
+        private System.Windows.Forms.TextBox tbUser;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox tbServer;
+        private System.Windows.Forms.TextBox tbPassword;
+        private System.Windows.Forms.TreeView treeView1;
+        private System.Windows.Forms.ImageList imageListTV;
+        private System.Windows.Forms.ComboBox cbxLstCatTo;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.BindingSource pwgCategoryListBindingSource;
+    }
+}
+
Index: extensions/PiwigoLib/PiwigoUpload/MainForm.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/MainForm.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/MainForm.cs	(revision 12256)
@@ -0,0 +1,132 @@
+﻿using System;
+using System.Windows.Forms;
+
+using Com.Piwigo.Lib.DTO;
+using System.Collections.Generic;
+using Com.Piwigo.Uploader.DTO;
+using Com.Piwigo.Uploader.Service;
+using Com.Piwigo.Uploader.Helper;
+
+using System.IO;
+
+namespace Com.Piwigo.Uploader
+{
+    public partial class MainForm : Form
+    {
+        public MainForm()
+        {
+            InitializeComponent();
+        }
+
+        private void Form1_Load(object sender, EventArgs e)
+        {
+            string[] args = Environment.GetCommandLineArgs();
+
+            foreach (string arg in args)
+            {
+                if (Directory.Exists(arg))
+                {
+                    try
+                    {
+                        ModelManager.Instance.directoryName = arg;
+                        ServiceFactory.GetByType<LoadFromDirectory>().runService();
+                    }
+                    catch (ApplicationException aex)
+                    {
+                        MainAppHelper.showdErrorMessageBox(aex);
+                    }
+                }                    
+            }
+        }
+
+
+        private void Connect_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                String strUri= tbServer.Text.Replace("\\","/");
+                if (!strUri.EndsWith("/ws.php"))
+                {
+                    if (!strUri.EndsWith("/"))
+                    {
+                        strUri += "/";
+                    }
+                    strUri += "ws.php";
+                }
+
+                Uri uriServeur;
+                if (Uri.TryCreate(strUri, UriKind.Absolute,out uriServeur))
+                {
+                    ModelManager.Instance.serveurName = uriServeur;
+                    ModelManager.Instance.userName = tbUser.Text;
+                    ModelManager.Instance.password = tbPassword.Text;
+
+                    ServiceFactory.GetByType<Connect>().runService();
+                }
+
+            }
+            catch (ApplicationException aex)
+            {
+                MainAppHelper.showdErrorMessageBox(aex);
+            }
+        }
+
+        private void Telecharger_Click(object sender, EventArgs e)
+        {
+            try
+            {
+
+                Int32 newid = 0;
+                String msg = String.Empty;
+                Boolean rc;
+                // rc = PwgServiceProvider.Instance.PwgCategoriesService.AddCategory("test_cat", 1, ref  newid, ref msg);
+                //List<PwgCategory> lstCat = PwgServiceProvider.Instance.PwgCategoriesService.GetAdminListOfCategory(); 
+                //Console.WriteLine(String.Format("newid : {0} message : {1}", newid,msg));
+                //rc = PwgServiceProvider.Instance.PwgCategoriesService.UpdateCategoryInfo(newid, "test2", "rename cat");
+                //Boolean rc = PwgServiceProvider.Instance.PwgCategoriesService.DeleteCategory(newid, sess.SecurityToken, PwgCategoryPhotoDeletionModeEnum.None);
+                //rc = PwgServiceProvider.Instance.PwgCategoriesService.MoveCategory(new List<Int32>() { newid }, PwgCategory.RootCategoryId, sess.SecurityToken);
+
+                //lstCat = PwgServiceProvider.Instance.PwgCategoriesService.GetAdminListOfCategory(); 
+
+                //FileInfo fiBig = new FileInfo("C:\\Users\\bayral\\Downloads\\49133_1636405570_2648232_n.jpg");
+                //FileInfo fiThumb = new FileInfo(MakeThumb(fiBig, "C:\\Users\\bayral\\Downloads\\49133_1636405570_2648232_n_thum.jpg", 64));
+                //FileInfo fiLow = new FileInfo(MakeThumb(fiBig, "C:\\Users\\bayral\\Downloads\\49133_1636405570_2648232_n_low.jpg", 256));
+
+                //FileInfo fiBig = new FileInfo("C:\\temp\\Oryx.jpg");
+                //FileInfo fiThumb = new FileInfo(MakeThumb(fiBig, "C:\\temp\\Oryx_thumb.jpg", 64));
+                //FileInfo fiLow = new FileInfo(MakeThumb(fiBig, "C:\\temp\\Oryx_low.jpg", 256));
+
+                //PwgImageAdded imgAdd = PwgServiceProvider.Instance.PwgImagesService.addImageByMultiPartForm(fiBig, null, 1, "benoit", "byarl", "test upload", 0, new List<PwgTag>() { new PwgTag() { Name = "Benoit" }, new PwgTag() { Name = "Noé" } });
+                //rc = PwgServiceProvider.Instance.PwgImagesService.addImage(fiBig, fiLow, fiThumb, "Benoit", "bayral", DateTime.Now, "demo", new List<string>() { "1" }, new List<string>() { "Benoit" }, PwgConfidentLevelEnum.All);
+                //rc = PwgServiceProvider.Instance.PwgImagesService.DeleteImage(319, sess.SecurityToken);
+
+                //PwgImageInfo info = PwgServiceProvider.Instance.PwgImagesService.getImageInfo(imgAdd.Id, null, null);
+
+                //PwgImageRate imgRate = PwgServiceProvider.Instance.PwgImagesService.RateImage(1, 5);
+
+
+            }
+            catch (ApplicationException aex)
+            {
+                MainAppHelper.showdErrorMessageBox(aex);
+            }
+        }
+
+        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            try
+            {
+                ServiceFactory.GetByType<Disconnect>().runService();
+            }
+            catch (ApplicationException aex)
+            {
+                MainAppHelper.showdErrorMessageBox(aex);
+            }
+        }
+
+        private void modelManagerBindingSource_CurrentChanged(object sender, EventArgs e)
+        {
+
+        }        
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/MainForm.resx
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/MainForm.resx	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/MainForm.resx	(revision 12256)
@@ -0,0 +1,266 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="imageListTV.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="imageListTV.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAm
+        HwAAAk1TRnQBSQFMAgEBAwEAAUgBAAFIAQABFgEAARYBAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFY
+        AwABFgMAAQEBAAEgBQABQAEeHgADBAEGAxMBGgMeASsDJAE1AyQBNgMjATMDGwEmAw0BERQAAwcBCQML
+        AQ8DAAEBDAADaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHj
+        A2gB4wNoAeMEAAM7AWQCPwE+AWwDBQEHxAADBgEIAxwBJwMvAUkDPAFmA0QBewNEAXsDTAGTA0kBiAM2
+        AVgDHQEqAwgBCwwAAx8BLQFIAkcBgwMlATcDAAEBCAADaAHjAfsC+QH/AfsC+QH/AfsC+QH/AfsC+QH/
+        AfsC+QH/AfsC+QH/AfsC+QH/AfsC+QH/AfsC+QH/AfsC+QH/AfsC+QH/AfsC+QH/AfsC+QH/A2gB4wQA
+        AzoBYQNYAbsDQAFwAwsBD7wAAwgBCwMqAUADQQFyAlIBUQGhAV0CWwHLAXwBdgFsAekBvwGmAZAB+gHt
+        AcoBpQH/AdMBrAGOAf8BuAGSAXMB/wFjAWABXwHfA1EBnAM1AVYDHAEnAw0BEQMeASsCUgFQAaQCUQFP
+        AZwDIwEzCAADaAHjAfsC+QH/ATkBXwFaAf8BbwKaAf8BZwGSAZYB/wFLAXUBbwH/AUgBaAFbAf8BOAFO
+        AUgB/wE/AU8BSAH/AYoBpwGfAf8BYQGPAYMB/wEsAUwBRQH/ATkBSgFGAf8B+wL5Af8DrwH/AzgBXgJH
+        AUYBgANWAbEDSgGNA0ABcQMMARAEAANoAeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNo
+        AeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeNcAAMTARoDPgFr
+        AlkBVwHCAe8BuwGFAf8B+QHbAbMB/wH7AeUBwgH/AfwB1wGoAf8B9QHIAZYB/wH1AckBnAH/AeEBrwGG
+        Af8ByAGbAYMB/wHIAbABqAH/AdoB2AHXAf8DgAHrA1MBqANOAZcCWAFWAbwDVAGuA04BlAMnATsDBQEH
+        A2gB4wH7AvkB/wFMATYBLwH/AR8BEgEWAf8BKQETAQkB/wFIAS4BNgH/AWoBbQGFAf8BRwE+AUQB/wEt
+        ARkBKAH/ASMBGgErAf8BXgFHAWsB/wE2ASgBMQH/AVQBRAFZAf8B+wL5Af8DrAH/AeQB5wHpAf8BtwGq
+        AZ8B/QGGAXwBbwHuAWABXgFdAdACWQFWAb4CSQFIAYgDIAEuA2gB4wHvAu4B/wHvAu4B/wHvAu4B/wHv
+        Au4B/wHvAu4B/wHvAu4B/wHvAu4B/wHvAu4B/wHvAu4B/wHvAu4B/wHvAu4B/wHvAu4B/wHvAu4B/wHv
+        Au4B/wHvAu4B/wHvAu4B/wHvAu4B/wHvAu4B/wHvAu4B/wHvAu4B/wNoAeNcAAMMARACWQFXAb8B9AG1
+        AW8B/wHbAZcBVgH/AdMBiQFDAf8B3QGbAVsB/wHiAaYBagH/Ad4BowFoAf8B8gHeAc0B/wHrAb8BmgH/
+        AeMBqAFtAf8B1AGvAZgB/wHvAfIB9QH/AvMB8gH/AfMB9QH5Af8BxQHAAbcB/wGuAYsBYAH/AYEBcgFh
+        Ae4BbQFlAWEB4gFdAlsByAM6AWEDaAHjAfsC+QL/AfEBvgH/AZMBkgGmAf8BVwFcAYAB/wFNAUcBRQH/
+        ASIBLwE3Af8DAAH/ARgBDgEAAf8BZgFeAVUB/wFKAUUBagH/AU8BUAGJAf8BNwE8AWIB/wH7AvkB/wOq
+        Af8B1QHXAdkB/wG/Aa8BnAH/AecByAGnAf8B3AG0AYkB/wHcAbQBiQH/AdoBrgGAAf8DTgGYA2gB4wHv
+        Au4B/wMAAf8BAAEaAQAB/wEAARABAAH/AQABEQECAf8BAAEUAQwB/wEAAREBDQH/AQABDgEAAf8BAAEl
+        ASQB/wEAATEBIwH/AQABJwEHAf8BAAEfAQQB/wEAATABGgH/AQABBgEAAf8BAAEYAQAB/wEAARoBAAH/
+        AQACKQH/AQABNAEfAf8DAAH/Ae8C7gH/A2gB41wAAzEBTgHhAY4BQAH/AcUBaAEsAf8BywGFAUcB/wHe
+        AaYBbQH/AeQBqQFrAf8B4QGdAVYB/wHgAaIBYwH/AfAB1wHCAf8B0wGYAWMB/wHLAYIBQwH/AeEBqwGB
+        Af8B8wHrAeIB/wHtAe4B7wH/Ad8B4gHkAf8BrwGpAaIB/wGxAYoBXwH/AdsBrgGBAf8B3QG2AYwB/wHe
+        AbgBjQH/A1IBqQNoAeMB+wL5Av8B1wGdAv8B4AGjAf8BZwFoAZUB/wFrAYcBuwH/AYgBXAFaAv8B2QGV
+        Av8B9gG8Av8B+wG5Av8B1gGZAf8BtgGaAW0B/wFDATsBMQH/AfsC+QH/A6wB/wHWAdgB2wH/Ab4BrQGb
+        Af8B6AHJAacB/wHeAbUBhwH/Ad0BtAGHAf8B3QG1AYgB/wNQAZsDaAHjAe8C7gH/AQsBRgE3Af8BTQGD
+        AW8B/wE5AYgBcwH/AU4BkgGPAf8BVgGWAZMB/wFHAY4BigH/AToBhgGCAf8BMQFyAWQB/wEqAVoBSQH/
+        ARMBPAEpAf8BGwFEATgB/wEtAUsBOAH/AZwBzwHNAf8BNwFnAVYB/wFJAYUBdgH/AT0BWQFeAf8BOAFc
+        AVAB/wEAATkBIAH/Ae8C7gH/A2gB41wAAWMCYAHUAa8BSAEJAf8BwwFpATAB/wHVAZABTAH/AesBwgGb
+        Af8B9QHZAb0B/wHpAbMBgAH/AeEBngFaAf8B3QGbAVkB/wHNAYABOwH/AbsBXgEjAf8BwAFqATUB/wHu
+        AcoBqgH/Ae8B9AH3Af8B4QHkAeYB/wGzAa8BpAH/AbYBkQFmAf8B3QGvAYIB/wHfAbUBhgH/AeABuAGL
+        Af8DUQGgA2gB4wH7AvkB/wH4AbsBhwL/AcoBhwH/AfYBwAGRAf8BPgFKAXQB/wHgAaABaAL/AeMBogL/
+        AcIBjQH/Af0BvgGMAv8BzQGVAv8B4AGfAv8B3gGYAf8B+wL5Af8DrQH/AdYB2QHbAf8BvgGuAZsB/wHp
+        AcsBqQH/AeEBuAGLAf8B4AG4AYoB/wHgAbgBigH/A1ABmwNoAeMB7wLuAf8BPwEbASIB/wEkAQEBDgH/
+        AVICOQH/AYQBbgF0Af8BrwGdAaEB/wGFAWMBcQH/AXYBYgFnAf8BkAFyAYYB/wGVAYsBjQH/AaoBkQGm
+        Af8BUgE9AUsB/wGfAYQBkQH/AYMBgAF2Af8BXwFKAWAB/wFLAUYBRwH/ARcBCwEBAf8BmQF2AYsB/wEd
+        AQABHgH/Ae8C7gH/A2gB41wAAb8BYgEkAf8BrAFDAQUB/wHGAWoBKAH/AdcBkwFQAf8B3QGjAWYB/wHf
+        AaUBagH/AecBuQGSAf8B9wHlAdUB/wHgAasBcwH/AdABigFDAf8BwQFlASYB/wGsAUQBAwH/AdIBlgFj
+        Af8B8AH3AfsB/wHfAeEB5QH/AbsBtAGxAf8BxAGoAYYB/wHkAbkBigH/AeIBuQGKAf8B4gG7AY0B/wNR
+        AaADaAHjAfsC+QH/AfABsgFwAf8B8AGwAW8C/wG6AXAC/wG9AXIC/wG9AYEB/wHxAa8BbwH/AfIBswF0
+        Af8B7wG0AXUB/wHyAbQBdQH/AfMBtAF2Af8B9gGyAXEB/wH7AvkB/wOuAf8B1gHaAd4B/wG+AbEBnwH/
+        AesBzwGtAf8B4wG7AYwB/wHjAbsBjgH/AeIBuwGNAf8DUAGbA2gB4wHvAu4B/wHdAboBlgH/AbEBnQGK
+        Af8BNwEzASUB/wMAAf8DAAH/AwAB/wEfARkBGgH/AVIBUQFoAf8BNQFSAVwB/wEgAScBJAH/ARoBHAER
+        Af8BIAEZASQB/wE0AS0BQAH/AWEBTgFzAf8BKgEtATIB/wFMAUQBXgH/AUUBTwFjAf8BEwEiATkB/wHv
+        Au4B/wNoAeNcAAGtAUUBCAH/AdEBnQFuAf8B3gGuAYYB/wHKAXMBNQH/AdQBkQFRAf8BzwGBATYB/wHd
+        AaUBbgX/AeIBtQGRAf8ByQF0ATMB/wHLAYIBQAH/AbIBTAELAf8BvgFtATwB/wHpAfMB+gH/AdsB3gHf
+        Af8BxgG/AbIB/wHZAcMBpwH/Ae0BywGkAf8B5AG8AY0B/wHlAb8BkAH/A1EBoANoAeMB+wL5Af8B6gGk
+        AWIB/wHqAaQBZAH/AekBowFjAf8B8AGoAWUB/wHqAaQBZAH/AeoBpAFmAf8B6gGmAWQB/wHsAakBaAH/
+        AewBpwFpAf8B7QGrAWgB/wHsAaUBYgH/AfsC+QH/A68B/wHZAdgB1QH/AckBtQGcAf8B8QHbAcMB/wHo
+        AcUBnAH/AeUBvgGPAf8B5QG/AZEB/wNQAZsDaAHjAe8C7gH/AfEBxQGaAv8B4gG8Av8B+AHIAf8CmQGx
+        Af8BhgGPAbIB/wFtAWkBbwH/AUEBOQE4Af8BFgEKAQAB/wE9AVsBYAH/ARABBQEOAf8DAAH/AwAB/wFR
+        AVQBhgH/AUYBPgFkAf8BcwFuAZgB/wFrAWIBjAH/AVoBTwFoAf8BAAEZARAB/wHvAu4B/wNoAeNcAAGo
+        AToBAAH/AdYBpAGAAf8B8wHkAdcB/wHZAaIBcAH/AcgBcAExAf8BxgFqASgB/wHSAY4BUAH/Ac8BiQFK
+        Af8B0gGUAVkB/wHKAYABOwH/AcMBZwEoAf8BvAFfASQB/wG5AWQBMgH/AfAB/AH+Af8BxwHGAcUB/wHO
+        Ab8BqwH/AfEB1wG3Af8B7gHUAbQB/wHqAckBoAH/AekBwgGTAf8DUQGgA2gB4wH7AvkB/wHgAZcBWwH/
+        AeEBlwFZAf8B3wGXAVsB/wHfAZcBWgH/Ad8BlwFcAf8B3wGZAV0B/wHgAZgBXAH/AeEBmQFeAf8B4gGa
+        AV0B/wHkAZ0BXwH/AeABlQFZAf8B+wL5Af8DsQH/AcIBugGuAf8B8wHgAcgB/wHuAdMBsQH/Ae4B1AG1
+        Af8B6gHIAZ4B/wHoAcEBkgH/A1ABmwNoAeMB7wLuAf8B/AHCAYcB/wH6Ac4BoAL/AdgBogL/AdgBogH/
+        AXQBiQGrAf8BcAFkAYkB/wKjAb0B/wGJAZIBqQH/ATkBIgEhAf8BXAFEATEB/wGLAV0BQgL/AdgBpgH/
+        Ad8BuAGLAf8BaQFaAVYB/wFLAU0BXwH/AS8BNAFTAf8BNAFAAVsB/wMAAf8B7wLuAf8DaAHjXAABrAE9
+        AQAB/wGyAUsBCAH/AcQBawEuAf8BygGDAUMB/wHPAYwBUQH/AewB0wHBAf8B+AHtAeQB/wHLAYMBQgH/
+        AcIBZgEmAf8BzwGMAVEB/wG/AWIBJAH/AasBPQEAAf8BvQFqATgB/wHzA/8BxAHCAb4B/wHQAb8BqwH/
+        AfUB3AG+Af8B8AHWAbcB/wHwAdcBuAH/AewByAGcAf8DUQGgA2gB4wH7AvkB/wH7AvkB/wH7AvkB/wH7
+        AvkB/wH7AvkB/wH7AvkB/wH7AvkB/wH7AvkB/wH7AvkB/wH7AvkB/wH7AvkB/wH7AvkB/wH7AvgB/wOs
+        Af8BzAHCAbYB/wH1AeQB0AH/AfAB1gG3Af8B8AHYAboB/wHvAdYBtgH/AeoBxgGYAf8DUAGbA2gB4wHv
+        Au4C/wG5AXAB/wH+AcgBlgH/AfsBxQGUAv8B2gGYAf8B4gG2AY8B/wFPAVYBigH/AXQBbQGQAf8BXgFv
+        AaIB/wG5AW4BTgP/AcQC/wHxAbcC/wHeAagC/wHkAacC/wHxAawC/wHWAZUB/wGsAYgBUgH/AWEBTwEz
+        Af8DAAH/Ae8C7gH/A2gB41wAAlsBWAHGAaMBLgEAAf8ByQGEAUcB/wHOAYwBVAH/AcwBiAFNAf8B7gHX
+        AcYB/wH4AfAB6gH/AdoBqwGHAf8B1AGeAWwB/wHOAZEBWgH/AeABuwGgAf8BygGKAVYB/wHaAa8BkAH/
+        Ae8B9gH8Af8BxQHDAcAB/wHVAcUBsAH/AfgB4gHFAf8B8gHaAbsB/wHyAd0BwwH/AfIB1QGxAf8DUQGg
+        A2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHjA7QB/wO0Af8DtAH/A7QB/wO0Af8DswH/A6kB/wOYAf8DoAH/
+        AcwBwwG3Af8B+AHpAdUB/wHyAdsBvQH/AfIB2wG+Af8B8gHdAcIB/wHwAdIBrAH/A1ABmwNoAeMB7wLu
+        Af8B/gGvAWIB/wH5AcABjAH/AfkBvwGMAf8B+QG9AYkC/wHVAYwB/wHIAaUBkAH/AVEBZgGkAf8BMQEh
+        AToC/wHAAXUC/wHLAZQB/wH7Ab4BiwH/Af0BvwGLAf8B/QHBAYwB/wH+AcIBjgL/Ac0BlwL/AeQBpgL/
+        Ae8BrwL/Ac4BgQH/Ae8C7gH/A2gB41wAAy0BRgGJAUwBMQH3AcoBiQFSAf8B3AGxAZQB/wHiAb0BogH/
+        Ad8BtwGYAf8B2AGlAXYB/wHZAagBhAH/Ad0BswGTAf8B2QGqAYgB/wHWAaUBggH/AdUBowGAAf8C+wH6
+        Af8B7QHwAfIB/wHGAcMBwQH/AdcBxwG0Af8B/QHoAc0B/wH1AeABwgH/AfQB4AHFAf8B9AHfAcIB/wNR
+        AaAYAAMzAVID9QH/A/0B/wP8Af8D/QH/A/0B/wP9Af8D5gH/AeEB4gHlAf8BygHBAbYB/wH6AewB2QH/
+        AfcB4QHEAf8B9AHfAcIB/wH0AeABxQH/AfMB3AG9Af8DUAGbA2gB4wHvAu4B/wH3AaMBVAH/AfUBtwGD
+        Af8B9gG2AYAB/wHzAbgBgAH/AfUBtgGBAv8ByQGBAf8BwAGcAXQB/wHQAZ8BcgL/AcgBiwH/AfUBtwGB
+        Af8B9AG4AYMB/wH2AboBhAH/AfYBugGFAf8B9QG7AYcB/wH4AbwBhQH/AfkBuQGGAf8B+gG9AYgC/wGx
+        AWIB/wHvAu4B/wNoAeNcAAMDAQQDRAF6AYYBWQE4AfUB6QHQAb0B/wH6AfUB8wH/Ae0B1wHGAf8B6wHS
+        AcAB/wHtAdYBxQH/AekBzAG2Af8B0QGZAWsB/wG7AWIBLAH/Ae8B3QHPAf8B/AH+Av8B7AHvAfAB/wHH
+        AcUBwQH/AdUBxwG0Av8B7QHTAf8B+QHlAcoB/wH2AeQByQH/AfcB5QHLAf8DUQGgGAADMwFSA/YB/wP+
+        Af8D/QH/A/0B/wP+Af8D/gH/A+gB/wHjAeQB5wH/AcsBwgG2Af8B/AHwAd4B/wH8AeoB0AH/AfwB6gHQ
+        Af8B9wHmAc0B/wH3AeYBzQH/A1ABmwNoAeMB7wLuAf8B8AGaAUcB/wHwAa8BbQH/AfABrgFtAf8B7gGu
+        AWwB/wHwAbABbgH/Ae4BrgFuAv8BuwFuAv8BuwFxAf8B7gGuAW8B/wHwAa8BbgH/AfABsQFwAf8B8AGw
+        AXEB/wHwAbIBcQH/AfEBsQFzAf8B8gGzAXUB/wHyAbQBcwH/AfYBtgGBAf8B9gGiAVEB/wHvAu4B/wNo
+        AeNkAAM+AWsCXAFaAc0BsgGeAYEB+gHnAc8BvAH/AfQB3AHJAf8B5gHGAa8B/wHZAasBjAH/AcwBkQFh
+        Af8B5wHJAbUF/wP7Af8B7AHwAfEB/wHJAcQBwAH/AdgBygG3Av8B7wHXAf8B/QHsAdAB/wH5AekB0AH/
+        AfkB6AHQAf8DUQGgGAADMwFSA/cF/wP+Af8D/gH/A/4B/wP+Af8D6AH/AeMB5AHpAf8BywHCAbgB/wH9
+        AfIB4QH/Af4B7QHTAf8B/gHuAdUB/wH7AesB0wH/AfgB6QHRAf8DUAGbA2gB4wHvAu4B/wHsAZABOwH/
+        AesBpwFoAf8B6wGnAWMB/wHsAaYBZQH/AesBpgFkAf8B7AGmAWQB/wHoAaUBZAH/AeoBpQFmAf8B7AGo
+        AWUB/wHpAacBZwH/AesBpwFmAf8B7QGoAWcB/wHsAaoBagH/Ae4BrAFoAf8B7QGtAWkB/wHwAa4BawH/
+        AfABsAFtAf8B8AGYAUQB/wHvAu4B/wNoAeNoAAMUARsCPwE+AWwDTAGSA1MBqAGBAXIBaAHwAeABvQGk
+        Af8B+AHzAe8J/wP7Af8B7AHuAfAB/wHJAcUBwwH/AdgBywG6Av8B8wHbAv8B7wHVAf8B/gHuAdcB/wH7
+        AesB1QH/A1EBoBgAAzMBUgP4Bf8D/gH/A/4B/wP+Af8D/gH/A+oB/wHnAegB6gH/Ac8BxAG6Af8B/gHz
+        AeMC/wHvAdgC/wHwAdoB/wH+Ae8B2QH/AfoB6wHWAf8DUAGbA2gB4wHvAu4B/wHkAYQBNQH/AeYBnwFg
+        Af8B5wGeAV8B/wHlAZ4BXwH/AeUBngFfAf8B5QGeAV8B/wHlAZ4BYQH/AeUBngFgAf8B5QGdAWAB/wHl
+        AZ8BYQH/AecBnwFhAf8B5gGgAWMB/wHnAaEBYwH/AecBogFjAf8B6AGjAWUB/wHpAaQBZAH/AewBpgFn
+        Af8B6gGNAToB/wHvAu4B/wNoAeN0AAMNAREDYgHWCP8D/gX/A/sB/wHuAe8B8QH/AcgBxAHAAf8B2AHL
+        AboC/wH2AeAC/wHwAdwC/wHxAdwB/wH8Ae4B2wH/A1EBoBgAAzMBUgP4Bf8D/gH/A/4B/wP+Af8D/gH/
+        AvEB8gH/AeYB5wHqAf8BzQHBAbYB/wH+AfMB4wL/AfIB3gL/AfIB3wL/AfIB3wH/AfoB7gHcAf8DUAGb
+        A2gB4wHvAu4B/wHcAXMBLgH/AeIBmQFdAf8B4AGYAV0B/wHgAZgBWwH/AeEBmAFaAf8B3wGYAV0B/wHf
+        AZgBXAH/Ad8BmAFcAf8B3wGYAV0B/wHhAZkBXwH/AeABmQFfAf8B4AGYAVwB/wHhAZkBXgH/AeIBmwFd
+        Af8B5AGcAV8B/wHkAZ0BYAH/AeYBnwFjAf8B4wGDATYB/wHvAu4B/wNoAeN0AAMcAScDZgHaBP8D/gH/
+        A/4B/wP+Af8D/QH/AfcB+QH8Af8B2gHVAdMB/wHmAdcBxgL/AfcB5AL/AfQB4QL/AfQB4wH/Af0B8gHg
+        Af8DUQGgGAADMwFSA/kF/wP+Af8D/gH/A/4B/wP+Af8D/QH/AfEB8wH3Af8B4QHTAcMB/wH+AfEB4AL/
+        AfQB3gL/AfUB4wL/AfUB5QH/AfsB8QHgAf8DUAGbA2gB4wHvAu4B/wHOAUgBAAH/AdUBbAElAf8B1QFr
+        ASQB/wHTAWkBIgH/AdMBaQElAf8B1AFpASIB/wHSAWkBIgH/AdIBaQEiAf8B0gFpASQB/wHUAWsBJQH/
+        AdMBawElAf8B0wFqAScB/wHUAWwBJgH/AdYBbQEmAf8B1QFuASgB/wHZAXABKQH/AdgBcgEsAf8B1AFT
+        AQAB/wHvAu4B/wNoAeN0AAMdASkDaAHdCP8D/gn/Af4D/wH2AfIB7gH/AfQB5QHUAv8B9QHgAv8B+AHl
+        Av8B9gHoAf8B/QH0AeYB/wNRAaAYAAMzAVMD+wn/A/4R/wHvAeMB1wH/AfcB5AHHAv8B9AHdAv8B8wHi
+        Av8B9gHnAf8B+wHzAeUB/wNQAZsDaAHjAe8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/
+        Ae8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/
+        Ae8C7gH/Ae8C7gH/Ae8C7gH/Ae8C7gH/A2gB43QAAxABFQNgAc8a/wH+Af8B+wH0Ae0B/wH6AewB2gH/
+        Af4B8wHfAv8B+gHpAf8B/QH3AesB/wNRAaAYAAMhATADegHoA/4Z/wL+Af0B/wH5Ae4B4wH/AfgB6QHU
+        Af8B/gHwAdwC/wH4AekB/wH7AfQB6AH/A1ABmwNoAeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHj
+        A2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeMDaAHjA2gB4wNoAeN3AAEB
+        AxwBJwMxAU4DOAFeA0ABcANMAZIDWAG7A2gB3AOHAewBuwK+AfgB/AH6AfgB/wH8AfQB6AH/Af0B8gHg
+        Av8B+QHrAf8DUQGgHAADDwEUAyEBMAMqAUADMwFSA0IBdQNRAZ8DWwHGAWgCZgHbA3sB6AGtAq4B9gH7
+        AfgB9gH/AfoB7wHlAf8B/AHwAd8B/wH9AfcB6wH/A1ABmtsAAQEDAgEDAwUBBwMJBAwBEAMSARkDGgEk
+        AyYBOAM3AVoDSAGEA1YBtANDAXc4AAMDAQQDCwEPAxMBGgMkATUDNwFbA0kBhwNWAbQDQQFysAABQgFN
+        AT4HAAE+AwABKAMAAVgDAAEWAwABAQEAAQEFAAEIAQEWAAP/AQAB4AEfARwBAAEEAX8C/wHAAwABwAEH
+        AQwBAAEEAT8C/wHAAwABgAEAAQwCAAEQBgABgAsAAYALAAGACwABgAsAAYALAAGACwABgAsAAYALAAGA
+        CwABgAEAAQMB8AgAAYABAAEDAfAIAAHgAQABAwHwCAAB8AEAAQMB8AgAAf4BAAEDAfAIAAH+AQABAwHw
+        CAAB/gEAAQMB8AgAAf4BAAEDAfAIAAH+AQABAwH4AQABDwL/AcADAAH/AcABAwH/AfABDwL/AcADAAs=
+</value>
+  </data>
+  <metadata name="pwgCategoryListBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>135, 17</value>
+  </metadata>
+</root>
Index: extensions/PiwigoLib/PiwigoUpload/PiwigoUpload.csproj
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/PiwigoUpload.csproj	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/PiwigoUpload.csproj	(revision 12256)
@@ -0,0 +1,160 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{CDE32E6E-52FF-41C6-ACEB-A8D2F7DDC0E2}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Com.Piwigo.Uploader</RootNamespace>
+    <AssemblyName>PiwigoUpload</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject>Com.Piwigo.Uploader.Program</StartupObject>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="DTO\ModelManager.cs" />
+    <Compile Include="DTO\SelectedList.cs" />
+    <Compile Include="Helper\SelectedListHelper.cs" />
+    <Compile Include="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainForm.Designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Helper\MainAppHelper.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Service\Disconnect.cs" />
+    <Compile Include="Service\ServiceFactory.cs" />
+    <EmbeddedResource Include="MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="app.config" />
+    <None Include="Properties\DataSources\Com.Piwigo.Uploader.DTO.PwgCategoryList.datasource" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="Service\Connect.cs" />
+    <Compile Include="Service\IService.cs" />
+    <Compile Include="Service\LoadFromDirectory.cs" />
+    <Compile Include="Settings.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\PiwigoLib\PiwigoLib.csproj">
+      <Project>{64C068C5-DBFE-4712-9081-B9100698F35C}</Project>
+      <Name>PiwigoLib</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Pics\folder_html.png" />
+    <Content Include="Pics\folder_images.png" />
+    <Content Include="Pics\image.png" />
+  </ItemGroup>
+  <ItemGroup />
+  <ItemGroup>
+    <BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
+      <Visible>False</Visible>
+      <ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: extensions/PiwigoLib/PiwigoUpload/PiwigoUpload.csproj.user
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/PiwigoUpload.csproj.user	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/PiwigoUpload.csproj.user	(revision 12256)
@@ -0,0 +1,13 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <PublishUrlHistory>publish\</PublishUrlHistory>
+    <InstallUrlHistory />
+    <SupportUrlHistory />
+    <UpdateUrlHistory />
+    <BootstrapperUrlHistory />
+    <ErrorReportUrlHistory />
+    <FallbackCulture>en-US</FallbackCulture>
+    <VerifyUploadedFiles>false</VerifyUploadedFiles>
+  </PropertyGroup>
+</Project>
Index: extensions/PiwigoLib/PiwigoUpload/Program.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Program.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Program.cs	(revision 12256)
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace Com.Piwigo.Uploader
+{
+    static class Program
+    {
+        /// <summary>
+        /// PoInt32 d'entrée principal de l'application.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new MainForm());
+        }
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/Properties/AssemblyInfo.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Properties/AssemblyInfo.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Properties/AssemblyInfo.cs	(revision 12256)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Les informations générales relatives à un assembly dépendent de 
+// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations
+// associées à un assembly.
+[assembly: AssemblyTitle("PiwigoUpload")]
+[assembly: AssemblyDescription("Upload your content to piwigo")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Piwigo.com")]
+[assembly: AssemblyProduct("PiwigoUpload")]
+[assembly: AssemblyCopyright("Copyright ©  2009")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly 
+// aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de 
+// COM, affectez la valeur true à l'attribut ComVisible sur ce type.
+[assembly: ComVisible(false)]
+
+// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM
+[assembly: Guid("858586e2-b217-49eb-bee3-7a70e25995b5")]
+
+// Les informations de version pour un assembly se composent des quatre valeurs suivantes :
+//
+//      Version principale
+//      Version secondaire 
+//      Numéro de build
+//      Révision
+//
+// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut 
+// en utilisant '*', comme indiqué ci-dessous :
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
Index: extensions/PiwigoLib/PiwigoUpload/Properties/DataSources/Com.Piwigo.Uploader.DTO.PwgCategoryList.datasource
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Properties/DataSources/Com.Piwigo.Uploader.DTO.PwgCategoryList.datasource	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Properties/DataSources/Com.Piwigo.Uploader.DTO.PwgCategoryList.datasource	(revision 12256)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="PwgCategoryList" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>Com.Piwigo.Uploader.DTO.PwgCategoryList, PiwigoUpload, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: extensions/PiwigoLib/PiwigoUpload/Properties/Resources.Designer.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Properties/Resources.Designer.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Properties/Resources.Designer.cs	(revision 12256)
@@ -0,0 +1,63 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.237
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Com.Piwigo.Uploader.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Com.Piwigo.Uploader.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/Properties/Resources.resx
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Properties/Resources.resx	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Properties/Resources.resx	(revision 12256)
@@ -0,0 +1,117 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long String</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded String representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:String" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:String" />
+              <xsd:attribute name="type" type="xsd:String" />
+              <xsd:attribute name="mimetype" type="xsd:String" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:String" />
+              <xsd:attribute name="name" type="xsd:String" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:String" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:String" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:String" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:String" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:String" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:String" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:String" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: extensions/PiwigoLib/PiwigoUpload/Properties/Settings.Designer.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Properties/Settings.Designer.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Properties/Settings.Designer.cs	(revision 12256)
@@ -0,0 +1,62 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.237
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Com.Piwigo.Uploader.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
+        public string userData {
+            get {
+                return ((string)(this["userData"]));
+            }
+            set {
+                this["userData"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
+        public string pwdData {
+            get {
+                return ((string)(this["pwdData"]));
+            }
+            set {
+                this["pwdData"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
+        public string serverUrlData {
+            get {
+                return ((string)(this["serverUrlData"]));
+            }
+            set {
+                this["serverUrlData"] = value;
+            }
+        }
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/Properties/Settings.settings
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Properties/Settings.settings	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Properties/Settings.settings	(revision 12256)
@@ -0,0 +1,15 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Com.Piwigo.Uploader.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="userData" Type="System.String" Scope="User">
+      <Value Profile="(Default)" />
+    </Setting>
+    <Setting Name="pwdData" Type="System.String" Scope="User">
+      <Value Profile="(Default)" />
+    </Setting>
+    <Setting Name="serverUrlData" Type="System.String" Scope="User">
+      <Value Profile="(Default)" />
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: extensions/PiwigoLib/PiwigoUpload/Service/Connect.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Service/Connect.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Service/Connect.cs	(revision 12256)
@@ -0,0 +1,43 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using Com.Piwigo.Lib.IService;
+using Com.Piwigo.Lib.DTO;
+
+using Com.Piwigo.Uploader.DTO;
+
+namespace Com.Piwigo.Uploader.Service
+{
+    public class Connect: IService 
+    {          
+        public void runService()
+        {
+            PwgServiceProvider.Instance.PwgSetupService.Setup("UploadToPiwigo", null, ModelManager.Instance.serveurName);
+
+            System.Diagnostics.Debug.WriteLine(ModelManager.Instance.serveurName.AbsoluteUri);
+
+            try
+            {
+                ModelManager.Instance.sess = PwgServiceProvider.Instance.PwgSessionService.Login( ModelManager.Instance.userName,  ModelManager.Instance.password);
+                System.Diagnostics.Debug.WriteLine("user : " + ModelManager.Instance.sess.UserName + " " + ModelManager.Instance.sess.Status);
+
+                if (ModelManager.Instance.sess.Status == PwgSessionStatusEnum.WebMaster)
+                {
+                    ModelManager.Instance.lstCat = PwgServiceProvider.Instance.PwgCategoriesService.GetAdminListOfCategory();
+                }
+                else
+                {
+                    ModelManager.Instance.lstCat = PwgServiceProvider.Instance.PwgCategoriesService.GetListOfCategory(PwgCategory.RootCategoryId, true, false);
+                }
+
+            }
+            catch (PwgServiceException ex)
+            {
+                System.Diagnostics.Debug.WriteLine(ex.Message);
+                throw new ApplicationException ("Erreur " + ex.NumeroErr + " " + ex.MessageErr);
+            }
+        }
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/Service/Disconnect.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Service/Disconnect.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Service/Disconnect.cs	(revision 12256)
@@ -0,0 +1,29 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using Com.Piwigo.Lib.IService;
+using Com.Piwigo.Lib.DTO;
+
+using Com.Piwigo.Uploader.DTO;
+
+namespace Com.Piwigo.Uploader.Service
+{
+    public class Disconnect: IService 
+    {          
+        public void runService()
+        {
+            try
+            {
+                ModelManager.Instance.sess = PwgServiceProvider.Instance.PwgSessionService.Logout();
+                System.Diagnostics.Debug.WriteLine("user : " + ModelManager.Instance.sess.UserName + " " + ModelManager.Instance.sess.Status);
+            }
+            catch (PwgServiceException ex)
+            {
+                System.Diagnostics.Debug.WriteLine(ex.Message);
+                throw new ApplicationException("Erreur " + ex.NumeroErr + " " + ex.MessageErr);
+            }
+        }
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/Service/IService.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Service/IService.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Service/IService.cs	(revision 12256)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Com.Piwigo.Uploader.Service
+{
+    public interface IService
+    {
+        void runService();
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/Service/LoadFromDirectory.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Service/LoadFromDirectory.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Service/LoadFromDirectory.cs	(revision 12256)
@@ -0,0 +1,15 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Com.Piwigo.Uploader.Service
+{
+    public class LoadFromDirectory : IService 
+    {
+        public void runService()
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/Service/ServiceFactory.cs
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/Service/ServiceFactory.cs	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/Service/ServiceFactory.cs	(revision 12256)
@@ -0,0 +1,71 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Com.Piwigo.Uploader.Service
+{
+    static class ServiceFactory
+    {
+        public static IService GetByType<T>()
+        {
+            IService objICom;
+
+            switch (typeof(T).Name)
+            {
+                case "Connect":
+                    objICom = aConnect;
+                    break;
+                case "Disconnect":
+                    objICom = aDisconnect;
+                    break;
+                case "LoadFromDirectory":
+                    objICom = aLoadFromDirectory;
+                    break;
+                default:
+                    throw new ArgumentException("ServiceFactory GetByType : IService Type unknow.", "Type");
+            }
+
+            return objICom;
+        }
+
+        private static IService _aConnect;
+        private static IService aConnect
+        {
+            get
+            {
+                if (_aConnect == null)
+                {
+                    _aConnect = new Connect();
+                }
+                return _aConnect;
+            }
+        }
+
+        private static IService _aDisconnect;
+        private static IService aDisconnect
+        {
+            get
+            {
+                if (_aDisconnect == null)
+                {
+                    _aDisconnect = new Disconnect();
+                }
+                return _aDisconnect;
+            }
+        }
+
+        private static IService _aLoadFromDirectory;
+        private static IService aLoadFromDirectory
+        {
+            get
+            {
+                if (_aLoadFromDirectory == null)
+                {
+                    _aLoadFromDirectory = new LoadFromDirectory();
+                }
+                return _aLoadFromDirectory;
+            }
+        }
+    }
+}
Index: extensions/PiwigoLib/PiwigoUpload/app.config
===================================================================
--- extensions/PiwigoLib/PiwigoUpload/app.config	(revision 12256)
+++ extensions/PiwigoLib/PiwigoUpload/app.config	(revision 12256)
@@ -0,0 +1,35 @@
+﻿<?xml version="1.0"?>
+<configuration>
+    <configSections>
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+            <section name="Com.Piwigo.Uploader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
+        </sectionGroup>
+    </configSections>
+    <userSettings>
+      <Com.Piwigo.Uploader.Properties.Settings>
+            <setting name="userData" serializeAs="String">
+                <value/>
+            </setting>
+            <setting name="PwdData" serializeAs="String">
+                <value/>
+            </setting>
+        </Com.Piwigo.Uploader.Properties.Settings>
+    </userSettings>
+  <system.net>
+    <!-- proxy config if need, but normaly wu used the system setting ie internet explorer setting
+    <defaultProxy> 
+      <proxy
+          usesystemdefault = "false"
+          proxyaddress = "http://proxyserver:80"
+          bypassonlocal = "true"
+          />
+      <bypasslist>
+        <add address="http://[a-z]+\.contoso\.com/" />
+      </bypasslist>
+    </defaultProxy>-->
+    <settings>
+      <servicePointManager expect100Continue="false"/>
+      <!-- usefull when you obtain a error just like this : The remote server returned an error: (417) Expectation Failed.-->
+    </settings>
+  </system.net>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>
