Added embedded browser form LoginView.xaml to overcome IE redirect bugs
authorPanagiotis Kanavos <pkanavos@gmail.com>
Wed, 14 Mar 2012 16:47:32 +0000 (18:47 +0200)
committerPanagiotis Kanavos <pkanavos@gmail.com>
Wed, 14 Mar 2012 16:47:32 +0000 (18:47 +0200)
16 files changed:
trunk/NetSparkle/NetSparkleForm.cs
trunk/Pithos.Client.WPF/Pithos.Client.WPF.csproj
trunk/Pithos.Client.WPF/PithosAccount.cs
trunk/Pithos.Client.WPF/Preferences/AddAccountViewModel.cs
trunk/Pithos.Client.WPF/Preferences/LoginView.xaml [new file with mode: 0644]
trunk/Pithos.Client.WPF/Preferences/LoginView.xaml.cs [new file with mode: 0644]
trunk/Pithos.Client.WPF/Preferences/PreferencesViewModel.cs
trunk/Pithos.Client.WPF/Properties/AssemblyInfo.cs
trunk/Pithos.Client.WPF/Properties/Settings.Designer.cs
trunk/Pithos.Client.WPF/Properties/Settings.settings
trunk/Pithos.Client.WPF/app.config
trunk/Pithos.Core/Agents/FileSystemWatcherAdapter.cs
trunk/Pithos.Installer/Greek.isl [new file with mode: 0644]
trunk/Pithos.Installer/rnotes.0.7.20308.html
trunk/Pithos.Installer/versioninfo.xml
trunk/Pithos.ShellExtensions/Pithos.ShellExtensions.csproj

index 3d0f42a..5e12654 100644 (file)
@@ -1,6 +1,7 @@
 using System;
 using System.Diagnostics;
 using System.Drawing;
+using System.Net;
 using System.Windows.Forms;
 
 namespace AppLimit.NetSparkle
@@ -35,7 +36,14 @@ namespace AppLimit.NetSparkle
             else
             {
                 if (item.ReleaseNotesLink != null && item.ReleaseNotesLink.Length > 0)
-                    NetSparkleBrowser.Navigate(item.ReleaseNotesLink);
+                {
+                    using (var client = new WebClient())
+                    {
+                        //Download the content instead of navigating to it, to bypass
+                        //the Content-Disposition header
+                        NetSparkleBrowser.DocumentText = client.DownloadString(item.ReleaseNotesLink);
+                    }
+                }
                 else
                     RemoveReleaseNotesControls();
             }
index 0923567..ab8bedf 100644 (file)
       <DependentUpon>GroupsView.xaml</DependentUpon>
     </Compile>
     <Compile Include="Preferences\GroupsViewModel.cs" />
+    <Compile Include="Preferences\LoginView.xaml.cs">
+      <DependentUpon>LoginView.xaml</DependentUpon>
+    </Compile>
     <Compile Include="Preferences\ProxyAccountView.xaml.cs">
       <DependentUpon>ProxyAccountView.xaml</DependentUpon>
     </Compile>
       <Generator>MSBuild:Compile</Generator>
       <SubType>Designer</SubType>
     </Page>
+    <Page Include="Preferences\LoginView.xaml">
+      <SubType>Designer</SubType>
+      <Generator>MSBuild:Compile</Generator>
+    </Page>
     <Page Include="Preferences\ProxyAccountView.xaml">
       <SubType>Designer</SubType>
       <Generator>MSBuild:Compile</Generator>
index 7da6f2b..4549b11 100644 (file)
@@ -45,6 +45,7 @@
 
 using System.IO;
 using System.Reflection;
+using Pithos.Client.WPF.Preferences;
 using Pithos.Network;
 using log4net;
 
@@ -75,35 +76,50 @@ namespace Pithos.Client.WPF
         /// </summary>
         /// <param name="loginUrl">URL to retrieve the account info from PITHOS. Must end with =</param>
         /// <returns>The credentials wrapped in a Task</returns>
-        public static Task<NetworkCredential> RetrieveCredentials(string loginUrl)
+        public static NetworkCredential RetrieveCredentials(string loginUrl,string accountName=null)
         {
             Contract.Requires(Uri.IsWellFormedUriString(loginUrl, UriKind.Absolute));
 
             if (!Uri.IsWellFormedUriString(loginUrl, UriKind.Absolute))
                 throw new ArgumentException("The pithosSite parameter must be a valid absolute URL", "loginUrl");
             
-            int port = GetFreePort();
+            //int port = GetFreePort();
             
             //TODO:Force logout here to take care of existing cookies
 
 
-            var listenerUrl = String.Format("http://127.0.0.1:{0}", port);
+            //var listenerUrl = String.Format("http://127.0.0.1:{0}", port);
+            var listenerUrl = "pithos://127.0.0.1";
 
             
 
-            var receiveCredentials = ListenForRedirectAsync(port);
+            //var receiveCredentials = ListenForRedirectAsync(port);
 
-            var logoutUrl = loginUrl.Replace("login", "im/logout");
-            var logoutProcess=Process.Start(logoutUrl);            
-            TaskEx.Delay(2000).Wait();
-            var uriBuilder=new UriBuilder(loginUrl);                       
-            uriBuilder.Query=String.Format("next={0}&force=", listenerUrl);
+            //var logoutUrl = loginUrl.Replace("login", "im/logout");
+            //var logoutProcess=Process.Start(logoutUrl);            
+            //TaskEx.Delay(2000).Wait();
+            var uriBuilder = new UriBuilder(loginUrl)
+                                 {
+                                     Query = String.Format("next={0}&force=", listenerUrl)
+                                 };
 
             var retrieveUri = uriBuilder.Uri;
+
+
+            var browser = new LoginView(retrieveUri,accountName);            
+            if (true == browser.ShowDialog())
+            {
+                return new NetworkCredential(browser.Account, browser.Token);
+            }
+            return null;
+
+/*
+
             Log.InfoFormat("[RETRIEVE] Open Browser at {0}", retrieveUri);
             Process.Start(retrieveUri.ToString());
 
             return receiveCredentials;
+*/
         }
 
 /*
index 18688b9..ddbf4b5 100644 (file)
@@ -199,14 +199,16 @@ namespace Pithos.Client.WPF.Preferences
         }
 
 
-        public async void RetrieveCredentials()
+        public void RetrieveCredentials()
         {
             SetBusy("Waiting for credentials.", "Please enter your credentials in the Pithos logon page");
             IsConfirmed = false;
 
             try
             {
-                var credentials = await PithosAccount.RetrieveCredentials(Settings.Default.PithosLoginUrl);
+                var credentials = PithosAccount.RetrieveCredentials(Settings.Default.PithosLoginUrl);
+                if (credentials == null)
+                    return;
                 AccountName = credentials.UserName;
                 Token = credentials.Password;
 
diff --git a/trunk/Pithos.Client.WPF/Preferences/LoginView.xaml b/trunk/Pithos.Client.WPF/Preferences/LoginView.xaml
new file mode 100644 (file)
index 0000000..0085e2e
--- /dev/null
@@ -0,0 +1,25 @@
+<Window x:Class="Pithos.Client.WPF.Preferences.LoginView"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        Title="Astakos Login" Height="800" Width="1024" Icon="/PithosPlus;component/Images/PithosTaskbar.png"
+        x:Name="TheView">
+    <Grid>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="Auto"/>
+            <RowDefinition/>
+        </Grid.RowDefinitions>
+        <Grid Margin="5" Grid.Row="0">
+            <Grid.ColumnDefinitions>                
+                <ColumnDefinition Width="Auto"/>
+                <ColumnDefinition Width="Auto"/>
+                <ColumnDefinition/>
+                <ColumnDefinition Width="Auto"/>
+            </Grid.ColumnDefinitions>
+            <Image Grid.Column="0" Width="16" Height="16" Source="/PithosPlus;component/Images/Tray.ico" />
+            <TextBlock Text="URL:" Grid.Column="1" Margin="5,0,5,0" VerticalAlignment="Center"/>
+            <TextBox Text="{Binding Path=Uri,ElementName=TheView}" Grid.Column="2" Margin="5,0,5,0" IsReadOnly="true"/>
+            <Button Content="Retry" Grid.Column="3"/>
+        </Grid>
+        <WebBrowser Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Name="LoginBrowser" VerticalAlignment="Stretch" Navigating="LoginBrowser_Navigating" />
+    </Grid>
+</Window>
diff --git a/trunk/Pithos.Client.WPF/Preferences/LoginView.xaml.cs b/trunk/Pithos.Client.WPF/Preferences/LoginView.xaml.cs
new file mode 100644 (file)
index 0000000..1f5f450
--- /dev/null
@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using Caliburn.Micro;
+
+
+namespace Pithos.Client.WPF.Preferences
+{
+    /// <summary>
+    /// Interaction logic for LoginView.xaml
+    /// </summary>
+    public partial class LoginView : Window,INotifyPropertyChanged
+    {
+        private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
+        private Uri _uri;
+        public Uri Uri
+        {
+            get
+            {
+                return _uri;
+            }
+            set
+            {
+                _uri = value;
+                RaisePropertyChanged(() => Uri);
+            }
+        }
+
+        private void RaisePropertyChanged(Expression<Func<Uri>> property)
+        {
+            if (PropertyChanged != null)
+            {
+                PropertyChanged(this, new PropertyChangedEventArgs(property.GetMemberInfo().Name));
+            }
+        }
+
+        public LoginView(Uri uri,string account=null)
+        {
+            InitializeComponent();
+            if (String.IsNullOrWhiteSpace(account))
+                this.Title = "Retrieve Pithos credentials";
+            else
+                this.Title = "Retrieve Pithos credentials for " + account;
+            Uri = uri;
+            LoginBrowser.Navigate(uri);
+        }
+
+
+        public string Token { get; set; }
+        public string Account { get; set; }
+
+
+        private void LoginBrowser_Navigating(object sender, System.Windows.Navigation.NavigatingCancelEventArgs e)
+        {
+            Log.Debug(e.ToString());
+
+            if (e.Uri.Scheme == "pithos")
+            {
+                Log.DebugFormat("Authentication response [{0}]",e.Uri);
+                e.Cancel = true;
+                var response = ParseResponse(e.Uri.Query);
+                Account = response["user"];
+                Token = response["token"];
+                Log.InfoFormat("Token received for [{0}]", Account);
+                DialogResult = true;
+                this.Close();
+            }
+        }
+
+        private static Dictionary<string, string> ParseResponse(string request)
+        {
+            //var parts = request.Split(' ');
+            var query = request.TrimStart('?');
+
+            var items = query.Split('&')
+                .Select(pair => pair.Split('='))
+                .ToDictionary(arr => arr[0].ToLower(), arr => Uri.UnescapeDataString(arr[1]));
+            return items;
+        }
+
+        public event PropertyChangedEventHandler PropertyChanged;
+    }
+}
index 8272c19..f4ce957 100644 (file)
@@ -227,14 +227,17 @@ namespace Pithos.Client.WPF.Preferences
             }
         }
 
-        public async Task RefreshApiKey()
+        public void RefreshApiKey()
         {
-            _events.Publish(new Notification { Title = "Authorization failed", Message = "Your API Key has probably expired. You will be directed to a page where you can renew it", Level = TraceLevel.Error });
+            //_events.Publish(new Notification { Title = "Authorization failed", Message = "Your API Key has probably expired. You will be directed to a page where you can renew it", Level = TraceLevel.Error });
 
             try
             {
 
-                var credentials = await PithosAccount.RetrieveCredentials(Settings.PithosLoginUrl);
+                var name = CurrentAccount != null ? CurrentAccount.AccountName : null;
+                var credentials = PithosAccount.RetrieveCredentials(Settings.PithosLoginUrl,name);
+                if (credentials==null)
+                    return;
                 //The server will return credentials for a different account, not just the current account
                 //We need to find the correct account first
                 var account = Accounts.First(act => act.AccountName == credentials.UserName);
@@ -394,9 +397,11 @@ namespace Pithos.Client.WPF.Preferences
             
        }
 
-        public async void AddPithosAccount()
+        public void AddPithosAccount()
        {
-            var credentials=await PithosAccount.RetrieveCredentials(Settings.PithosLoginUrl);
+            var credentials=PithosAccount.RetrieveCredentials(Settings.PithosLoginUrl);
+            if (credentials == null)
+                return;
             var account = Settings.Accounts.FirstOrDefault(act => act.AccountName == credentials.UserName);
             var accountVM = new AccountViewModel(account);
             if (account == null)
index bad699e..64f3f13 100644 (file)
@@ -56,7 +56,7 @@ using System.Windows;
 [assembly: AssemblyCopyright("Copyright © GRNet 2011-2012")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
-[assembly: AssemblyInformationalVersion("2012-03-12")]
+[assembly: AssemblyInformationalVersion("2012-03-14")]
 
 // Setting ComVisible to false makes the types in this assembly not visible 
 // to COM components.  If you need to access a type in this assembly from 
@@ -93,5 +93,5 @@ using System.Windows;
 // You can specify all the values or you can default the Build and Revision Numbers 
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.7.20307.0")]
-[assembly: AssemblyFileVersionAttribute("0.7.20307.0")]
+[assembly: AssemblyVersion("0.7.20309.0")]
+[assembly: AssemblyFileVersionAttribute("0.7.20309.0")]
index eb73862..9e37a00 100644 (file)
@@ -244,7 +244,7 @@ namespace Pithos.Client.WPF.Properties {
         
         [global::System.Configuration.ApplicationScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("https://plus.pithos.grnet.gr")]
+        [global::System.Configuration.DefaultSettingValueAttribute("https://pithos.okeanos.grnet.gr")]
         public string ProductionServer {
             get {
                 return ((string)(this["ProductionServer"]));
index 19ba6c0..62ecfbf 100644 (file)
@@ -60,7 +60,7 @@
       <Value Profile="(Default)">True</Value>
     </Setting>
     <Setting Name="ProductionServer" Type="System.String" Scope="Application">
-      <Value Profile="(Default)">https://plus.pithos.grnet.gr</Value>
+      <Value Profile="(Default)">https://pithos.okeanos.grnet.gr</Value>
     </Setting>
     <Setting Name="DevelopmentServer" Type="System.String" Scope="Application">
       <Value Profile="(Default)">https://pithos.dev.grnet.gr</Value>
index 226c730..4ef8b54 100644 (file)
     <value>https://pithos.dev.grnet.gr/im/feedback</value>
    </setting>
    <setting name="ProductionServer" serializeAs="String">
-    <value>https://plus.pithos.grnet.gr</value>
+    <value>https://pithos.okeanos.grnet.gr</value>
    </setting>
    <setting name="DevelopmentServer" serializeAs="String">
     <value>https://pithos.dev.grnet.gr</value>
index 6d8860e..faef74d 100644 (file)
@@ -39,6 +39,8 @@
  * -----------------------------------------------------------------------\r
  */\r
 #endregion\r
+\r
+using System.Diagnostics;\r
 using System.Diagnostics.Contracts;\r
 using System.IO;\r
 using System.Reflection;\r
@@ -84,6 +86,30 @@ namespace Pithos.Core.Agents
         }\r
 \r
         private string _cachedDeletedFullPath;\r
+        private string CachedDeletedFullPath\r
+        {\r
+            get { return _cachedDeletedFullPath; }\r
+            set\r
+            {\r
+                Debug.Assert(Path.IsPathRooted(CachedDeletedFullPath));\r
+                if (!Path.IsPathRooted(CachedDeletedFullPath))\r
+                    Log.WarnFormat("Storing a relative CachedDeletedFullPath: {0}",value);\r
+                _cachedDeletedFullPath = value;\r
+            }\r
+        }\r
+\r
+        /// <summary>\r
+        /// Clears any cached deleted file path\r
+        /// </summary>\r
+        /// <remarks>\r
+        /// This method was added to bypass the null checking in the property's setter\r
+        /// </remarks>\r
+        private void ClearCachedDeletedPath()\r
+        {\r
+            _cachedDeletedFullPath = null;\r
+        }\r
+\r
+\r
         private const int PropagateDelay = 10;\r
 \r
         private void OnDeleted(object sender, FileSystemEventArgs e)\r
@@ -115,16 +141,16 @@ namespace Pithos.Core.Agents
             //TODO: Moving a folder to the recycle bin results in a single delete event for the entire folder and its contents\r
             //      as this is actually a MOVE operation\r
             //Deleting by Shift+Delete results in a delete event for each file followed by the delete of the folder itself\r
-            _cachedDeletedFullPath = e.FullPath;\r
+            CachedDeletedFullPath = e.FullPath;\r
 \r
-            //TODO: This requires synchronization of the _cachedDeletedFullPath field\r
+            //TODO: This requires synchronization of the CachedDeletedFullPath field\r
             //TODO: This creates a new task for each file even though we can cancel any existing tasks if a new event arrives\r
             //Maybe, use a timer instead of a task\r
 \r
             TaskEx.Delay(PropagateDelay).ContinueWith(t =>\r
                                                           {\r
                                                               var myPath = e.FullPath;\r
-                                                              if (_cachedDeletedFullPath == myPath)\r
+                                                              if (CachedDeletedFullPath == myPath)\r
                                                                   PropagateCachedDeleted(sender);\r
                                                           });\r
         }\r
@@ -184,7 +210,7 @@ namespace Pithos.Core.Agents
             }\r
             finally\r
             {\r
-                _cachedDeletedFullPath = null;\r
+                ClearCachedDeletedPath();\r
             }\r
         }\r
 \r
@@ -225,10 +251,11 @@ namespace Pithos.Core.Agents
             finally\r
             {\r
                 //Finally, make sure the cached path is cleared\r
-                _cachedDeletedFullPath = null;\r
+                ClearCachedDeletedPath();\r
             }\r
         }\r
 \r
+\r
         private void RaiseCreatedForChildren(object sender, FileSystemEventArgs e)\r
         {\r
             Contract.Requires(sender!=null);\r
@@ -269,11 +296,11 @@ namespace Pithos.Core.Agents
             //instead of a sequence of independent actions\r
             //One way to detect this would be to request that the full paths are NOT the same\r
 \r
-            var oldName = Path.GetFileName(_cachedDeletedFullPath);\r
+            var oldName = Path.GetFileName(CachedDeletedFullPath);\r
             //NOTE: e.Name is a path relative to the watched path. We MUST call Path.GetFileName to get the actual path\r
             var newName = Path.GetFileName(e.Name);\r
             //If the last deleted filename is equal to the current and the action is create, we have a MOVE operation\r
-            var hasMoved = (_cachedDeletedFullPath != e.FullPath && oldName == newName);\r
+            var hasMoved = (CachedDeletedFullPath != e.FullPath && oldName == newName);\r
 \r
             if (!hasMoved)\r
                 return false;\r
@@ -285,7 +312,7 @@ namespace Pithos.Core.Agents
 \r
                 //If the actual action is a Move, raise a Move event instead of the actual event\r
                 var newDirectory = Path.GetDirectoryName(e.FullPath);\r
-                var oldDirectory = Path.GetDirectoryName(_cachedDeletedFullPath);\r
+                var oldDirectory = Path.GetDirectoryName(CachedDeletedFullPath);\r
 \r
                 if (Moved != null)\r
                 {\r
@@ -313,7 +340,7 @@ namespace Pithos.Core.Agents
             }\r
             finally\r
             {\r
-                _cachedDeletedFullPath = null;\r
+                ClearCachedDeletedPath();\r
             }\r
             return true;\r
         }\r
@@ -322,18 +349,18 @@ namespace Pithos.Core.Agents
         {\r
             if (sender == null)\r
                 throw new ArgumentNullException("sender");\r
-            Contract.Ensures(_cachedDeletedFullPath == null);\r
+            Contract.Ensures(CachedDeletedFullPath == null);\r
             Contract.EndContractBlock();\r
 \r
             //Nothing to handle if there is no cached deleted file\r
-            if (String.IsNullOrWhiteSpace(_cachedDeletedFullPath))\r
+            if (String.IsNullOrWhiteSpace(CachedDeletedFullPath))\r
                 return;\r
             \r
-            var deletedFileName = Path.GetFileName(_cachedDeletedFullPath);\r
-            var deletedFileDirectory = Path.GetDirectoryName(_cachedDeletedFullPath);\r
+            var deletedFileName = Path.GetFileName(CachedDeletedFullPath);\r
+            var deletedFileDirectory = Path.GetDirectoryName(CachedDeletedFullPath);\r
 \r
             if (Log.IsDebugEnabled)\r
-                Log.DebugFormat("Propagating delete for [{0}]", _cachedDeletedFullPath);\r
+                Log.DebugFormat("Propagating delete for [{0}]", CachedDeletedFullPath);\r
 \r
             //Only a single file Delete event is raised when moving a file to the Recycle Bin, as this is actually a MOVE operation\r
             //In this case we need to raise the proper events for all child objects of the deleted directory.\r
@@ -342,7 +369,7 @@ namespace Pithos.Core.Agents
             if (Deleted != null)            \r
                 Deleted(sender,new FileSystemEventArgs(WatcherChangeTypes.Deleted, deletedFileDirectory, deletedFileName));\r
 \r
-            _cachedDeletedFullPath = null;\r
+            ClearCachedDeletedPath();\r
         }\r
     }\r
 }\r
diff --git a/trunk/Pithos.Installer/Greek.isl b/trunk/Pithos.Installer/Greek.isl
new file mode 100644 (file)
index 0000000..e748dee
--- /dev/null
@@ -0,0 +1,323 @@
+; *** Inno Setup version 5.1.11+ Greek messages ***
+;
+; Note: When translating this text, do not add periods (.) to the end of
+; messages that didn't have them already, because on those messages Inno
+; Setup adds the periods automatically (appending a period would result in
+; two periods being displayed).
+;
+; Translated by Anastasis Chatzioglou
+;               http://anasto.go.to
+;               baldycom@hotmail.com
+;
+; 29th October 2011 [XhmikosR, my_nickname at yahoo dot com]:
+; various cleanup and minor updates
+;
+
+[LangOptions]
+; The following three entries are very important. Be sure to read and 
+; understand the '[LangOptions] section' topic in the help file.
+LanguageName=<0395><03BB><03BB><03B7><03BD><03B9><03BA><03AC>
+LanguageID=$408
+LanguageCodePage=1253
+; If the language you are translating to requires special font faces or
+; sizes, uncomment any of the following entries and change them accordingly.
+;DialogFontName=
+;DialogFontSize=8
+;WelcomeFontName=Verdana
+;WelcomeFontSize=12
+;TitleFontName=Arial
+;TitleFontSize=29
+;CopyrightFontName=Arial
+;CopyrightFontSize=8
+
+[Messages]
+
+; *** Application titles
+SetupAppTitle=ÅãêáôÜóôáóç
+SetupWindowTitle=ÅãêáôÜóôáóç - %1
+UninstallAppTitle=ÁðåãêáôÜóôáóç
+UninstallAppFullTitle=%1 ÁðåãêáôÜóôáóç
+
+; *** Misc. common
+InformationTitle=Ðëçñïöïñßåò
+ConfirmTitle=Åðéâåâáßùóç
+ErrorTitle=ÓöÜëìá
+
+; *** SetupLdr messages
+SetupLdrStartupMessage=Èá åêôåëåóôåß ç åãêáôÜóôáóç ôïõ %1. ÈÝëåôå íá óõíå÷ßóåôå;
+LdrCannotCreateTemp=ÓöÜëìá óôç äçìéïõñãßá ðñïóùñéíïý áñ÷åßïõ. Ç åãêáôÜóôáóç èá ôåñìáôéóôåß ôþñá.
+LdrCannotExecTemp=ÓöÜëìá óôçí åêôÝëåóç áñ÷åßïõ óôïí ðñïóùñéíü êáôÜëïãï. Ç åãêáôÜóôáóç ôåñìáôßæåôáé.
+
+; *** Startup error messages
+LastErrorMessage=%1.%n%nÓöÜëìá %2: %3
+SetupFileMissing=Äåí âñßóêåôáé ôï áñ÷åßï %1 óôïí êáôÜëïãï åãêáôÜóôáóçò. ºóùò ÷ñåéÜæåôáé íá ðñïìçèåõôåßôå Ýíá íÝï áíôßãñáöï ôïõ ðñïãñÜììáôïò.
+SetupFileCorrupt=Ôï áñ÷åßï åãêáôÜóôáóçò åßíáé êáôåóôñáììÝíï. ºóùò ÷ñåéÜæåôáé íá ðñïìçèåõôåßôå Ýíá íÝï áíôßãñáöï ôïõ ðñïãñÜììáôïò.
+SetupFileCorruptOrWrongVer=Ôï áñ÷åßï åãêáôÜóôáóçò åßíáé êáôåóôñáììÝíï ç åßíáé óå ëÜèïò Ýêäïóç. ºóùò ÷ñåéÜæåôáé íá ðñïìçèåõôåßôå Ýíá íÝï áíôßãñáöï ôïõ ðñïãñÜììáôïò.
+NotOnThisPlatform=Áõôü ôï ðñüãñáììá äåí ìðïñåß íá åêôåëåóôåß óå %1.
+OnlyOnThisPlatform=Áõôü ôï ðñüãñáììá åêôåëåßôáé ìüíï óå %1.
+OnlyOnTheseArchitectures=Áõôü ôï ðñüãñáììá ìðïñåß íá åãêáôáóôáèåß ìïíü óå Windows ó÷åäéáóìÝíá ãéá åðåîåñãáóôÝò ìå áñ÷éôåêôïíéêÞ:%n%n%1
+MissingWOW64APIs=Ç Ýêäïóç ôùí Windows ðïõ åêôåëåßôáé äåí äéáèÝôåé ëåéôïõñãéêüôçôá 64-bit. Ãéá íá äéïñèùèåß ôï ðñüâëçìá åãêáôÝóôçóå ôï Service Pack %1.
+WinVersionTooLowError=Áõôü ôï ðñüãñáììá áðáéôåß %1 Ýêäïóç ç íåüôåñç.
+WinVersionTooHighError=Áõôü ôï ðñüãñáììá äåí ìðïñåß íá åêôåëåóôåß óå %1 Ýêäïóç ç íåüôåñç.
+AdminPrivilegesRequired=ÐñÝðåé íá åßóôå ï Äéá÷åéñéóôÞò óõóôÞìáôïò ãéá íá åãêáôáóôÞóåôå áõôü ôï ðñüãñáììá.
+PowerUserPrivilegesRequired=ÐñÝðåé íá åßóôå ï Äéá÷åéñéóôÞò óõóôÞìáôïò Þ Power User ãéá íá åãêáôáóôÞóåôå áõôü ôï ðñüãñáììá.
+SetupAppRunningError=Ç åãêáôÜóôáóç åíôüðéóå üôé åêôåëåßôáé ç åöáñìïãÞ %1.%n%nÐáñáêáëþ êëåßóôå ôçí åöáñìïãÞ ôþñá êáé ðáôÞóôå ÅíôÜîåé ãéá íá óõíå÷ßóåôå, Þ ¢êõñï ãéá Ýîïäï.
+UninstallAppRunningError=Ç áðåãêáôÜóôáóç åíôüðéóå üôé åêôåëåßôáé ç åöáñìïãÞ %1.%n%nÐáñáêáëþ êëåßóôå ôçí åöáñìïãÞ ôþñá êáé ðáôÞóôå ÅíôÜîåé ãéá íá óõíå÷ßóåôå, Þ ¢êõñï ãéá Ýîïäï.
+
+; *** Misc. errors
+ErrorCreatingDir=Ç åãêáôÜóôáóç äåí ìðïñåß íá äçìéïõñãÞóåé ôïí êáôÜëïãï %1
+ErrorTooManyFilesInDir=Äåí ìðïñåß íá äçìéïõñãçèåß Ýíá áñ÷åßï óôïí êáôÜëïãï "%1" åðåéäÞ Þäç ðåñéÝ÷åé ðïëëÜ áñ÷åßá
+
+; *** Setup common messages
+ExitSetupTitle=ÔÝëïò ÅãêáôÜóôáóçò
+ExitSetupMessage=Ç åãêáôÜóôáóç äåí Ý÷åé ôåëåéþóåé. Áí ôç óôáìáôÞóåôå ôþñá, ôï ðñüãñáììá äåí èá åãêáôáóôáèåß.%n%nÌðïñåßôå íá åêôåëÝóåôå îáíÜ ôçí åãêáôÜóôáóç áñãüôåñá.%n%n¸îïäïò;
+AboutSetupMenuItem=&Ó÷åôéêÜ ìå ôçí ÅãêáôÜóôáóç...
+AboutSetupTitle=Ó÷åôéêÜ ìå ôçí ÅãêáôÜóôáóç
+AboutSetupMessage=%1 Ýêäïóç %2%n%3%n%n%1 ðñïóùðéêÞ óåëßäá%n%4
+AboutSetupNote=
+TranslatorNote=Anastasis Chatzioglou - baldycom@hotmail.com
+
+; *** Buttons
+ButtonBack=< &Ðßóù
+ButtonNext=&Åðüìåíï >
+ButtonInstall=&ÅãêáôÜóôáóç
+ButtonOK=Å&íôÜîåé
+ButtonCancel=&Áêõñï
+ButtonYes=Í&áé
+ButtonYesToAll=Íáé óå &Ïëá
+ButtonNo=Ï&÷é
+ButtonNoToAll=Ï÷é &óå ïëá
+ButtonFinish=&ÔÝëïò
+ButtonBrowse=&ÁíáæÞôçóç...
+ButtonWizardBrowse=&Åýñåóç...
+ButtonNewFolder=&Äçìéïõñãßá íÝïõ öáêÝëïõ
+
+; *** "Select Language" dialog messages
+SelectLanguageTitle=ÅðéëïãÞ ôçò ãëþóóáò åãêáôÜóôáóçò
+SelectLanguageLabel=ÅðéëïãÞ ôçò ãëþóóáò ãéá ÷ñÞóç êáôÜ ôçí äéÜñêåéá ôçò åãêáôÜóôáóçò:
+
+; *** Common wizard text
+ClickNext=ÐáôÞóôå Åðüìåíï ãéá íá óõíå÷ßóåôå Þ ¢êõñï ãéá íá ôåñìáôßóåôå ôçí åãêáôÜóôáóç.
+BeveledLabel=
+BrowseDialogTitle=Åýñåóç öáêÝëïõ
+BrowseDialogLabel=ÅðéëÝîôå öÜêåëï óôçí ëßóôá êáé ìåôÜ ðáôÞóôå OK.
+NewFolderName=ÍÝïò öÜêåëïò
+
+; *** "Welcome" wizard page
+WelcomeLabel1=Êáëùóïñßóáôå óôçí åãêáôÜóôáóç ôïõ [name]
+WelcomeLabel2=Èá ãßíåé åãêáôÜóôáóç ôïõ [name/ver] óôïí õðïëïãéóôÞ óáò.%n%nÐñéí óõíå÷ßóåôå óáò óõíéóôïýìå íá êëåßóåôå êÜèå Üëëç åöáñìïãÞ ðïõ ðéèáíüí åêôåëåßôå.
+
+; *** "Password" wizard page
+WizardPassword=ÅéóáãùãÞ Êùäéêïý
+PasswordLabel1=ÁõôÞ ç åãêáôÜóôáóç ÷ñåéÜæåôáé êùäéêü ãéá íá åêôåëåóôåß.
+PasswordLabel3=Ðáñáêáëþ äþóôå ôïí êùäéêü óáò êáé ðáôÞóôå Åðüìåíï ãéá íá óõíå÷ßóåôå.
+PasswordEditLabel=&Êùäéêüò:
+IncorrectPassword=Ï êùäéêüò ðïõ äþóáôå åßíáé ëÜèïò. ÐñïóðáèÞóôå îáíá.
+
+; *** "License Agreement" wizard page
+WizardLicense=Áäåéá ×ñÞóçò
+LicenseLabel=Ðáñáêáëþ äéáâÜóôå ðñïóåêôéêÜ ôéò ðáñáêÜôù ðëçñïöïñßåò ðñéí óõíå÷ßóåôå.
+LicenseLabel3=Ðáñáêáëþ äéáâÜóôå ðñïóåêôéêÜ ôéò ðáñáêÜôù ðëçñïöïñßåò ðñéí óõíå÷ßóåôå. ÐñÝðåé íá áðïäÝ÷åóôå ôïõò üñïõò ôçò ¢äåéáò ×ñÞóçò ðñéí íá óõíå÷ßóåôå ôçí åãêáôÜóôáóç.
+LicenseAccepted=&ÄÝ÷ïìáé ôïõò üñïõò ôçò ¢äåéáò ×ñÞóçò
+LicenseNotAccepted=Äåí &áðïäÝ÷ïìáé ôïõò üñïõò ôçò ¢äåéáò ×ñÞóçò
+
+; *** "Information" wizard pages
+WizardInfoBefore=Ðëçñïöïñßåò
+InfoBeforeLabel=Ðáñáêáëþ äéáâÜóôå ðñïóåêôéêÜ ôéò ðáñáêÜôù ðëçñïöïñßåò ðñéí óõíå÷ßóåôå.
+InfoBeforeClickLabel=Áí åßóôå Ýôïéìïé íá óõíå÷ßóåôå ðáôÞóôå Åðüìåíï.
+WizardInfoAfter=Ðëçñïöïñßåò
+InfoAfterLabel=Ðáñáêáëþ äéáâÜóôå ðñïóåêôéêÜ ôéò ðáñáêÜôù ðëçñïöïñßåò ðñéí óõíå÷ßóåôå.
+InfoAfterClickLabel=Áí åßóôå Ýôïéìïé íá óõíå÷ßóåôå ðáôÞóôå Åðüìåíï.
+
+; *** "User Information" wizard page
+WizardUserInfo=Ðëçñïöïñßåò ãéá ôïí ×ñÞóôç
+UserInfoDesc=Ðáñáêáëþ äþóôå ôéò ðëçñïöïñßåò.
+UserInfoName=&Ïíïìá ×ñÞóôç:
+UserInfoOrg=&Åôáéñåßá:
+UserInfoSerial=&Óåéñéáêü Áñéèìü:
+UserInfoNameRequired=ÐñÝðåé íá äþóåôå üíïìá.
+
+; *** "Select Destination Location" wizard page
+WizardSelectDir=ÅðéëÝîôå ôïí êáôÜëïãï ðïõ èá åãêáôáóôáèåß ôï ðñüãñáììá
+SelectDirDesc=Ðïý èá åãêáôáóôáèåß ôï [name];
+SelectDirLabel3=Ôï [name] èá åãêáôáóôáèåß óôïí áêüëïõèï öÜêåëï.
+SelectDirBrowseLabel=Ãéá óõíÝ÷åéá ðáôÞóôå Åðüìåíï. Áí èÝëåôå Üëëï öÜêåëï, ðáôÞóôå Åýñåóç.
+DiskSpaceMBLabel=Áõôü ôï ðñüãñáììá ÷ñåéÜæåôáé [mb] MB ÷þñï óôïí äßóêï.
+ToUNCPathname=Ç åãêáôÜóôáóç äåí ìðïñåß íá ãßíåé óå äßóêï äéêôýïõ. Áí èÝëåôå íá ãßíåé ç åãêáôÜóôáóç óå äßóêï äéêôýïõ ðñÝðåé íá ïñßóåôå áõôüí ôï äßóêï.
+InvalidPath=Äþóôå ôçí ðëÞñç äéáäñïìÞ.%nðáñÜäåéãìá:%n%nC:\APP
+InvalidDrive=Ï ôïðéêüò äßóêïò ç ï äßóêïò äéêôýïõ ðïõ åðéëÝîáôå äåí õðÜñ÷åé ç äåí åßíáé ðñïóâÜóéìïò. ÅðéëÝîôå Üëëïí.
+DiskSpaceWarningTitle=Äåí õðÜñ÷åé áñêåôüò ÷þñïò óôï äßóêï
+DiskSpaceWarning=Ç åãêáôÜóôáóç ÷ñåéÜæåôáé ôïõëÜ÷éóôïí %1 KB åëåýèåñï ÷þñï óôï äßóêï áëëÜ ï åðéëåãìÝíïò ïäçãüò äéáèÝôåé ìüíïí %2 KB.%n%nÈÝëåôå íá óõíå÷ßóåôå ïðùóäÞðïôå;
+DirNameTooLong=Ôï üíïìá ôïõ öáêÝëïõ åßíáé ðïëý ìåãÜëï.
+InvalidDirName=ËÜèïò üíïìá öáêÝëïõ.
+BadDirName32=Ïíüìáôá êáôáëüãùí äåí ìðïñïýí íá ðåñéÝ÷ïõí êÜðïéïí áðü ôïõò ðáñáêÜôù ÷áñáêôÞñåò:%n%n%1
+DirExistsTitle=Ï êáôÜëïãïò õðÜñ÷åé
+DirExists=Ï êáôÜëïãïò:%n%n%1%n%nõðÜñ÷åé Þäç. ÈÝëåôå íá ãßíåé ç åãêáôÜóôáóç óå áõôüí ôïí êáôÜëïãï;
+DirDoesntExistTitle=Ï êáôÜëïãïò äåí õðÜñ÷åé
+DirDoesntExist=Ï êáôÜëïãïò:%n%n%1%n%näåí õðÜñ÷åé. ÈÝëåôå íá äçìéïõñãçèåß;
+
+; *** "Select Components" wizard page
+WizardSelectComponents=ÅðéëïãÞ Óõóôáôéêþí
+SelectComponentsDesc=Ðïéá óõóôáôéêÜ èÝëåôå íá åãêáôáóôáèïýí;
+SelectComponentsLabel2=ÅðéëÝîôå ôá óõóôáôéêÜ ðïõ èÝëåôå íá åãêáôáóôÞóåôå êáé ðáôÞóôå Åðüìåíï ãéá óõíÝ÷åéá ôçò åãêáôÜóôáóçò.
+FullInstallation=ÐëÞñçò ÅãêáôÜóôáóç.
+; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)
+CompactInstallation=ÐåñéïñéóìÝíç ÅãêáôÜóôáóç
+CustomInstallation=ÐñïóáñìïóìÝíç ÅãêáôÜóôáóç
+NoUninstallWarningTitle=Ôá óõóôáôéêÜ õðÜñ÷ïõí
+NoUninstallWarning=Ç åãêáôÜóôáóç äéáðßóôùóå üôé ôá ðáñáêÜôù óõóôáôéêÜ åßíáé Þäç åãêáôåóôçìÝíá óôïí õðïëïãéóôÞ óáò:%n%n%1
+ComponentSize1=%1 KB
+ComponentSize2=%1 MB
+ComponentsDiskSpaceMBLabel=Ç óõãêåêñéìÝíç åðéëïãÞ áðáéôåß ôïõëÜ÷éóôïí [mb] MB åëåýèåñï ÷þñï óôïí äßóêï.
+
+; *** "Select Additional Tasks" wizard page
+WizardSelectTasks=ÅðéëïãÞ ÐåñáéôÝñù Åíåñãåéþí
+SelectTasksDesc=ÐïéÝò åðéðëÝïí åíÝñãåéåò èÝëåôå íá ãßíïõí;
+SelectTasksLabel2=ÅðéëÝîôå ôéò åðéðëÝïí åíÝñãåéåò ðïõ èÝëåôå íá ãßíïõí êáôÜ ôçí åãêáôÜóôáóç ôïõ [name] êáé ðáôÞóôå Åðüìåíï.
+
+; *** "Select Start Menu Folder" wizard page
+WizardSelectProgramGroup=ÅðéëïãÞ Êáôáëüãïõ Óôï Ìåíïý Åêêßíçóç
+SelectStartMenuFolderDesc=Ðïý èá ôïðïèåôçèïýí ïé óõíôïìåýóåéò ôïõ ðñïãñÜììáôïò;
+SelectStartMenuFolderLabel3=Ç åãêáôÜóôáóç èá äçìéïõñãÞóåé ôéò óõíôïìåýóåéò ôïõ ðñïãñÜììáôïò óôçí áêüëïõèç ïìÜäá.
+SelectStartMenuFolderBrowseLabel=Ãéá óõíÝ÷åéá, ðáôÞóôå Åðüìåíï. Áí èÝëåôå Üëëç ïìÜäá, ðáôÞóôå åýñåóç.
+MustEnterGroupName=ÐñÝðåé íá äþóåôå ôï üíïìá åíüò êáôáëüãïõ.
+GroupNameTooLong=Ôï üíïìá ôïõ group åéíáé ðïëý ìåãÜëï.
+InvalidGroupName=Ôï üíïìá ôïõ group äåí åßíáé óùóôü.
+BadGroupName=Ïíüìáôá êáôáëüãùí äåí ìðïñïýí íá ðåñéÝ÷ïõí êÜðïéïí áðü ôïõò ðáñáêÜôù ÷áñáêôÞñåò:%n%n%1
+NoProgramGroupCheck2=&×ùñßò äçìéïõñãßá êáôáëüãïõ óôï ìåíïý åêêßíçóç.
+
+; *** "Ready to Install" wizard page
+WizardReady=¸ôïéìïò ãéá åãêáôÜóôáóç
+ReadyLabel1=Ç åãêáôÜóôáóç ôïõ [name] åßíáé Ýôïéìç íá åêôåëåóôåß óôïí õðïëïãéóôÞ óáò.
+ReadyLabel2a=ÐáôÞóôå ÅãêáôÜóôáóç ãéá íá óõíå÷ßóåôå Þ Ðßóù áí èÝëåôå íá áëëÜîåôå êÜðïéåò ñõèìßóåéò.
+ReadyLabel2b=ÐáôÞóôå ÅãêáôÜóôáóç ãéá íá óõíå÷ßóåôå.
+ReadyMemoUserInfo=Ðëçñïöïñßåò ×ñÞóôç:
+ReadyMemoDir=ÊáôÜëïãïò ðñïïñéóìïý:
+ReadyMemoType=Åßäïò åãêáôÜóôáóçò:
+ReadyMemoComponents=ÅðéëåãìÝíá óõóôáôéêÜ:
+ReadyMemoGroup=ÊáôÜëïãïò óôï ìåíïý ÐñïãñÜììáôá:
+ReadyMemoTasks=ÅðéðëÝïí ÅíÝñãåéåò:
+
+; *** "Preparing to Install" wizard page
+WizardPreparing=Ðñïåôïéìáóßá ÅãêáôÜóôáóçò
+PreparingDesc=Ç åãêáôÜóôáóç ðñïåôïéìÜæåé ôï ðñüãñáììá [name] íá ôïðïèåôçèåß óôïí õðïëïãéóôÞ.
+PreviousInstallNotCompleted=The installation/removal of a previous program was not completed. You will need to restart your computer to complete that installation.%n%nAfter restarting your computer, run Setup again to complete the installation of [name].
+CannotContinue=Setup cannot continue. Please click Cancel to exit.
+
+; *** "Installing" wizard page
+WizardInstalling=Ðñüïäïò ÅãêáôÜóôáóçò
+InstallingLabel=Ðáñáêáëþ ðåñéìÝíåôå íá ïëïêëçñùèåß ç åãêáôÜóôáóç ôïõ [name] óôïí õðïëïãéóôÞ óáò.
+
+; *** "Setup Completed" wizard page
+FinishedHeadingLabel=Completing the [name] Setup Wizard
+FinishedLabelNoIcons=Ç åãêáôÜóôáóç ôïõ [name] óôïí õðïëïãéóôÞ óáò ôåëåßùóå ìå åðéôõ÷ßá.
+FinishedLabel=Ç åãêáôÜóôáóç ôïõ [name] óôïí õðïëïãéóôÞ óáò ôåëåßùóå ìå åðéôõ÷ßá. Ìðïñåßôå íá îåêéíÞóåôå ôï ðñüãñáììá åðéëÝãïíôáò ôï åéêïíßäéï ðïõ äçìéïõñãÞèçêå óôï ìåíïý åêêßíçóç.
+ClickFinish=ÐáôÞóôå ÔÝëïò ãéá íá ôåñìáôßóåôå ôï ðñüãñáììá åãêáôÜóôáóçò.
+FinishedRestartLabel=Ãéá íá ïëïêëçñùèåß ç åãêáôÜóôáóç ôïõ [name] ðñÝðåé íá ãßíåé åðáíåêêßíçóç ôïõ õðïëïãéóôÞ óáò. ÈÝëåôå íá ãßíåé ôþñá;
+FinishedRestartMessage=Ãéá íá ïëïêëçñùèåß ç åãêáôÜóôáóç ôïõ [name] ðñÝðåé íá ãßíåé åðáíåêêßíçóç ôïõ õðïëïãéóôÞ óáò.%n%nÈÝëåôå íá ãßíåé ôþñá;
+ShowReadmeCheck=Íáé, èÝëù íá äéáâÜóù ôéò ðëçñïöïñßåò ôïõ ðñïãñÜììáôïò
+YesRadio=&Íáé, íá ãßíåé åðáíåêêßíçóç ôþñá
+NoRadio=&Ï÷é, èá êÜíù åðáíåêêßíçóç áñãüôåñá
+; used for example as 'Run MyProg.exe'
+RunEntryExec=Íá åêôåëåóôåß ôï ðñüãñáììá %1
+; used for example as 'View Readme.txt'
+RunEntryShellExec=Íá åêôåëåóôåß ôï %1
+
+; *** "Setup Needs the Next Disk" stuff
+ChangeDiskTitle=ÔïðïèåôÞóôå ôçí åðüìåíç äéóêÝôôá
+SelectDiskLabel2=ÔïðïèåôÞóôå ôçí äéóêÝôôá %1 êáé ðáôÞóôå ÅíôÜîåé.
+PathLabel=&ÄéáäñïìÞ:
+FileNotInDir2=Ôï áñ÷åßï "%1" äåí âñßóêåôáé óôï "%2". ÔïðïèåôÞóôå ôç óùóôÞ äéóêÝôôá.
+SelectDirectoryLabel=Äþóôå ôçí ôïðïèåóßá ôçò åðüìåíçò äéóêÝôôáò.
+
+; *** Installation phase messages
+SetupAborted=Ç åãêáôÜóôáóç äåí ïëïêëçñþèçêå.%n%nÄéïñèþóôå ôï ðñüâëçìá êáé åêôåëÝóôå îáíÜ ôçí åãêáôÜóôáóç.
+EntryAbortRetryIgnore=ÐáôÞóôå Retry ãéá íá îáíáðñïóðáèÞóåôå, Ignore ãéá íá óõíå÷ßóåôå ç Abort ãéá íá ôåñìáôßóåôå ôçí åãêáôÜóôáóç.
+
+; *** Installation status messages
+StatusCreateDirs=Äçìéïõñãßá êáôáëüãùí...
+StatusExtractFiles=Áðïóõìðßåóç áñ÷åßùí...
+StatusCreateIcons=Äçìéïõñãßá åéêïíéäßùí...
+StatusCreateIniEntries=Êáôá÷þñçóç óôï ÉÍÉ áñ÷åßï óõóôÞìáôïò...
+StatusCreateRegistryEntries=Êáôá÷þñçóç óôï ìçôñþï óõóôÞìáôïò...
+StatusRegisterFiles=Êáôá÷þñçóç áñ÷åßùí
+StatusSavingUninstall=Ðëçñïöïñßåò áðåãêáôÜóôáóçò...
+StatusRunProgram=Ôåëåéþíïíôáò ôçí åãêáôÜóôáóç...
+StatusRollback=Rolling back changes...
+
+; *** Misc. errors
+ErrorInternal2=ÓöÜëìá %1
+ErrorFunctionFailedNoCode=%1 ÓöÜëìá
+ErrorFunctionFailed=%1 ÓöÜëìá, êùäéêüò %2
+ErrorFunctionFailedWithMessage=%1 ÓöÜëìá, êùäéêüò %2%n%3
+ErrorExecutingProgram=Äåí ìðïñåß íá åêôåëåóôåß ôï áñ÷åßï:%n%1
+
+; *** Registry errors
+ErrorRegOpenKey=Äåí ìðïñåß íá äéáâáóôåß ôï êëåéäß ìçôñþïõ óõóôÞìáôïò:%n%1\%2
+ErrorRegCreateKey=Äåí ìðïñåß íá äçìéïõñãçèåß ôï êëåéäß ìçôñþïõ óõóôÞìáôïò:%n%1\%2
+ErrorRegWriteKey=Äåí ìðïñåß íá ãßíåé êáôá÷þñçóç óôï êëåéäß ìçôñþïõ óõóôÞìáôïò:%n%1\%2
+
+; *** INI errors
+ErrorIniEntry=Äåí ìðïñåß íá ãßíåé êáôá÷þñçóç óôï ÉÍÉ áñ÷åßï óõóôÞìáôïò "%1".
+
+; *** File copying errors
+FileAbortRetryIgnore=ÐáôÞóôå Retry ãéá íá îáíáðñïóðáèÞóåôå, Ignore ãéá íá óõíå÷ßóåôå ç Abort ãéá íá ôåñìáôßóåôå ôçí åãêáôÜóôáóç.
+FileAbortRetryIgnore2=ÐáôÞóôå Retry ãéá íá îáíáðñïóðáèÞóåôå, Ignore ãéá íá óõíå÷ßóåôå ç Abort ãéá íá ôåñìáôßóåôå ôçí åãêáôÜóôáóç.
+SourceIsCorrupted=Ôï áñ÷åßï ðñïÝëåõóçò åßíáé êáôåóôñáììÝíï
+SourceDoesntExist=Ôï áñ÷åßï ðñïÝëåõóçò "%1" äåí õðÜñ÷åé
+ExistingFileReadOnly=Ôï áñ÷åßï åßíáé ìðáñêáñéóìÝíï ìüíï ãéá áíÜãíùóç.%n%nÐáôÞóôå Retry ãéá íá ôï îåìáñêÜñåôå êáé íá ðñïóðáèÞóåôå ðÜëé, Ignore ãéá íá ôï ðñïóðåñÜóåôå ç Abort ãéá íá ôåñìáôßóåôå ôçí åãêáôÜóôáóç.
+ErrorReadingExistingDest=ÐáñïõóéÜóôçêå óöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ áñ÷åßïõ:
+FileExists=Ôï áñ÷åßï õðÜñ÷åé.%n%nÈÝëåôå íá îáíáãñáöôåß;
+ExistingFileNewer=Åíá áñ÷åßï ðïõ âñÝèçêå óôïí õðïëïãéóôÞ óáò åßíáé íåüôåñçò Ýêäïóçò áðï åêåßíï ôçò åãêáôÜóôáóçò. Ðñïôåßíåôáé íá êñáôÞóåôå ôï õðÜñ÷ïí áñ÷åßï.%n%nÈÝëåôå íá êñáôÞóåôå ôï õðÜñ÷ïí áñ÷åßï;
+ErrorChangingAttr=ÐñïÝêõøå óöÜëìá óôçí ðñïóðÜèåéá íá áëëá÷ôïýí ôá ÷áñáêôçñéóôéêÜ ôïõ áñ÷åßïõ:
+ErrorCreatingTemp=ÐñïÝêõøå óöÜëìá óôçí ðñïóðÜèåéá íá äçìéïõñãçèåß Ýíá áñ÷åßï óôïí êáôÜëïãï ðñïïñéóìïý:
+ErrorReadingSource=ÐñïÝêõøå óöÜëìá óôçí ðñïóðÜèåéá áíÜãíùóçò ôïõ áñ÷åßïõ ðñïÝëåõóçò:
+ErrorCopying=ÐñïÝêõøå óöÜëìá óôçí ðñïóðÜèåéá íá áíôéãñáöåß ôï áñ÷åßï:
+ErrorReplacingExistingFile=ÐñïÝêõøå óöÜëìá óôçí ðñïóðÜèåéá íá áíôéêáôáóôáèåß ôï õðÜñ÷ïí áñ÷åßï:
+ErrorRestartReplace=ÐñïÝêõøå óöÜëìá óôçí ðñïóðÜèåéá íá ãßíåé åðáíåêêßíçóç êáé áíôéêáôÜóôáóç áñ÷åßïõ:
+ErrorRenamingTemp=ÐñïÝêõøå óöÜëìá óôçí ðñïóðÜèåéá ìåôïíïìáóßáò åíüò áñ÷åßïõ óôïí êáôÜëïãï ðñïïñéóìïý:
+ErrorRegisterServer=ÐñïÝêõøå óöÜëìá óôçí ðñïóðÜèåéá êáôá÷þñçóçò DLL/OCX: %1
+ErrorRegSvr32Failed=RegSvr32 failed with exit code %1
+ErrorRegisterTypeLib=Unable to register the type library: %1
+
+; *** Post-installation errors
+ErrorOpeningReadme=ÐñïÝêõøå óöÜëìá óôçí ðñïóðÜèåéá íá öïñôùèåß ôï áñ÷åßï ðëçñïöïñéþí.
+ErrorRestartingComputer=ÐñïÝêõøå óöÜëìá óôçí ðñïóðÜèåéá åðáíåêêßíçóçò ôïõ õðïëïãéóôÞ. Ðáñáêáëþ åðáíåêêéíÞóôå ôïí õðïëïãéóôÞ óáò.
+
+; *** Uninstaller messages
+UninstallNotFound=Ôï áñ÷åßï "%1" äåí âñÝèçêå. Ç áðåãêáôÜóôáóç äåí ìðïñåß íá ãßíåé
+UninstallOpenError=Ôï áñ÷åßï "%1" äåí ìðüñåóå íá öïñôùèåß. Ç áðåãêáôÜóôáóç äåí ìðïñåß íá ãßíåé
+UninstallUnsupportedVer=Ôï áñ÷åßï "%1" äåí áíáãíùñßæåôáé áðü áõôÞ ôçí Ýêäïóç ôçò åãêáôÜóôáóçò, Ç áðåãêáôÜóôáóç äåí ìðïñåß íá åêôåëåóôåß
+UninstallUnknownEntry=Ôï áñ÷åßï "%1" äåí áíáãíùñßæåôáé áðü áõôÞ ôçí Ýêäïóç ôçò åãêáôÜóôáóçò, Ç áðåãêáôÜóôáóç äåí ìðïñåß íá åêôåëåóôåß
+ConfirmUninstall=Åßóôå óßãïõñïé üôé èÝëåôå íá äéáãñÜøåôå ôï %1 êáé üëá ôá óõóôáôéêÜ ôïõ;
+UninstallOnlyOnWin64=ÁõôÞ ç åöáñìïãÞ ìðïñåß íá áðåãêáôáóôáèåß ìüíï óå 64-bit Windows.
+OnlyAdminCanUninstall=Ç áðåãêáôÜóôáóç ìðïñåß íá åêôåëåóôåß ìüíï áðü ôïí Äéá÷åéñéóôÞ óõóôÞìáôïò
+UninstallStatusLabel=Ðáñáêáëþ ðåñéìÝíåôå üóï ôï %1 äéáãñÜöåôå áðü ôïí õðïëïãéóôÞ óáò
+UninstalledAll=Ç áðåãêáôÜóôáóç ôïõ %1 Ýãéíå ìå åðéôõ÷ßá.
+UninstalledMost=Ç áðåãêáôÜóôáóç ôïõ %1 Ýãéíå ìå åðéôõ÷ßá.%n%nÊÜðïéá óõóôáôéêÜ ðïõ ðáñÝìåéíáí óôïí õðïëïãéóôÞ óáò èá ðñÝðåé íá ôá äéáãñÜøåôå åóåßò.
+UninstalledAndNeedsRestart=To complete the uninstallation of %1, your computer must be restarted.%n%nWould you like to restart now?
+UninstallDataCorrupted="%1" Áõôü ôï áñ÷åßï åßíáé êáôåóôñáììÝíï. Äåí ìðïñåß íá ãßíåé áðåãêáôÜóôáóç.
+
+; *** Uninstallation phase messages
+ConfirmDeleteSharedFileTitle=ÈÝëåôå íá äéáãñáöïýí ôá êïéíÜ áñ÷åßá;
+ConfirmDeleteSharedFile2=Ôá êïéíÜ áñ÷åßá äåí ÷ñçóéìïðïéïýíôáé áðü êÜðïéï ðñüãñáììá. ÈÝëåôå íá äéáãñáöïýí;%n%nÁí êÜðïéï ðñüãñáììá ôá ÷ñçóéìïðïéåß ßóùò äåí åêôåëåßôáé óùóôÜ áí ôá äéáãñÜøåôå. Áí äåí åßóôå óßãïõñïé áöÞóôå ôá óôï óýóôçìá óáò äåí ðñïêáëïýí êÜðïéï ðñüâëçìá.
+SharedFileNameLabel=Ïíïìá Áñ÷åßïõ:
+SharedFileLocationLabel=Ôïðïèåóßá:
+WizardUninstalling=Ðñüïäïò ÁðåãêáôÜóôáóçò:
+StatusUninstalling=ÁðåãêáôÜóôáóç ôïõ %1...
+
+; The custom messages below aren't used by Setup itself, but if you make
+; use of them in your scripts, you'll want to translate them.
+
+[CustomMessages]
+
+NameAndVersion=%1 Ýêäïóç %2
+AdditionalIcons=ÅðéðëÝïí åéêïíßäéá:
+CreateDesktopIcon=Äçìéïõñãßá åíüò &åéêïíéäßïõ óôçí åðéöÜíåéá åñãáóßáò
+CreateQuickLaunchIcon=Äçìéïõñãßá åíüò åéêïíéäßïõ óôç &ÃñÞãïñç Åêêßíçóç
+ProgramOnTheWeb=Ôï %1 óôï Internet
+UninstallProgram=ÁðåãêáôÜóôáóç ôïõ %1
+LaunchProgram=Åêêßíçóç ôïõ %1
+AssocFileExtension=%Áíôéóôïß÷éóç ôïõ %1 ìå ôçí %2 åðÝêôáóç áñ÷åßïõ
+AssocingFileExtension=Ãßíåôáé áíôéóôïß÷çóç ôïõ %1 ìå ôçí %2 åðÝêôáóç áñ÷åßïõ...
+
index 9d85b40..1f54d33 100644 (file)
@@ -1,8 +1,12 @@
-Pithos MS Client v. 0.7.20307
-======================
+<html>
+<body>
+<h2>Pithos MS Client v. 0.7.20308</h2>
 Release Date: March 12, 2012, 17:00
-Third  version with Autoupdate support (for the x64 msi's only)
-
+<br/>
 Includes:
-
-* Various fixes
\ No newline at end of file
+<br/>
+<ul>
+<li> Various fixes</li>
+</ul>
+</body>
+</html>
\ No newline at end of file
index 87af605..1ecd67e 100644 (file)
@@ -7,6 +7,17 @@
                <description></description>      \r
                <language>en</language>       \r
                <item>            \r
+                       <title>Version 0.7.20309</title>\r
+                       <sparkle:releaseNotesLink>https://code.grnet.gr/projects/pithos-ms-client/repository/revisions/master/raw/trunk/Pithos.Installer/rnotes.0.7.20309.html</sparkle:releaseNotesLink>\r
+                       <pubDate>Tue, 14 Mar 2012 19:00:00 +0200</pubDate>\r
+                       <enclosure \r
+                               url="https://code.grnet.gr/attachments/download/1010/PithosPlus_Setupv0.7.20309.0.exe"\r
+                               length="4343021" \r
+                               type="application/octet-stream"\r
+                               sparkle:version="0.7.20309" \r
+                       />\r
+               </item>\r
+               <item>            \r
                        <title>Version 0.7.20308</title>\r
                        <sparkle:releaseNotesLink>https://code.grnet.gr/projects/pithos-ms-client/repository/revisions/master/raw/trunk/Pithos.Installer/rnotes.0.7.20308.html</sparkle:releaseNotesLink>\r
                        <pubDate>Tue, 13 Mar 2012 18:30:00 +0200</pubDate>\r
index e324756..1cb0cb3 100644 (file)
@@ -23,7 +23,7 @@
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
-    <RegisterForComInterop>true</RegisterForComInterop>
+    <RegisterForComInterop>false</RegisterForComInterop>
     <CodeContractsEnableRuntimeChecking>False</CodeContractsEnableRuntimeChecking>
     <CodeContractsRuntimeOnlyPublicSurface>False</CodeContractsRuntimeOnlyPublicSurface>
     <CodeContractsRuntimeThrowOnFailure>True</CodeContractsRuntimeThrowOnFailure>