← Back to team overview

syncany-team team mailing list archive

[Merge] lp:~isak-karlsson/syncany/syncany-remote-watch-interval into lp:syncany

 

isakkarlsson has proposed merging lp:~isak-karlsson/syncany/syncany-remote-watch-interval into lp:syncany.

Requested reviews:
  Syncany Team (syncany-team)

For more details, see:
https://code.launchpad.net/~isak-karlsson/syncany/syncany-remote-watch-interval/+merge/64850

Added the ability to change the remote checking inverval.
-- 
https://code.launchpad.net/~isak-karlsson/syncany/syncany-remote-watch-interval/+merge/64850
Your team Syncany Team is requested to review the proposed merge of lp:~isak-karlsson/syncany/syncany-remote-watch-interval into lp:syncany.
=== modified file 'syncany/bin/native.py'
--- syncany/bin/native.py	2011-06-11 12:47:02 +0000
+++ syncany/bin/native.py	2011-06-16 14:58:24 +0000
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python2
 #
 # Syncany Linux Native Functions
 # Copyright (C) 2011 Philipp C. Heckel <philipp.heckel@xxxxxxxxx> 

=== modified file 'syncany/src/org/syncany/config/Profile.java'
--- syncany/src/org/syncany/config/Profile.java	2011-05-23 16:50:04 +0000
+++ syncany/src/org/syncany/config/Profile.java	2011-06-16 14:58:24 +0000
@@ -149,6 +149,8 @@
             // Repo
             repository = new Repository();
             repository.load(node.findChildByName("repository"));
+            
+            remoteWatcher.load(node.findChildByName("watcher"));
                         
             // Folders
             folders = new Folders(this);
@@ -175,5 +177,8 @@
 
         // Folders
         folders.save(node.findOrCreateChildByXpath("folders", "folders"));
+        
+        // Watcher
+        remoteWatcher.save(node.findOrCreateChildByXpath("watcher", "watcher"));
     }      
 }

=== modified file 'syncany/src/org/syncany/gui/settings/ProfilePanel.form'
--- syncany/src/org/syncany/gui/settings/ProfilePanel.form	2011-05-23 16:50:04 +0000
+++ syncany/src/org/syncany/gui/settings/ProfilePanel.form	2011-06-16 14:58:24 +0000
@@ -28,8 +28,8 @@
                   <Component id="cbActive" alignment="0" min="-2" max="-2" attributes="0"/>
                   <Group type="102" alignment="0" attributes="0">
                       <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace max="-2" attributes="0"/>
-                      <Component id="txtProfileName" pref="344" max="32767" attributes="0"/>
+                      <EmptySpace min="-2" pref="62" max="-2" attributes="0"/>
+                      <Component id="txtProfileName" pref="294" max="32767" attributes="0"/>
                   </Group>
               </Group>
               <EmptySpace max="-2" attributes="0"/>

=== modified file 'syncany/src/org/syncany/gui/settings/ProfilePanel.java'
--- syncany/src/org/syncany/gui/settings/ProfilePanel.java	2011-06-05 21:26:56 +0000
+++ syncany/src/org/syncany/gui/settings/ProfilePanel.java	2011-06-16 14:58:24 +0000
@@ -69,65 +69,65 @@
      * always regenerated by the Form Editor.
      */
     @SuppressWarnings("unchecked")
-        // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-        private void initComponents() {
-
-                jLabel1 = new javax.swing.JLabel();
-                txtProfileName = new javax.swing.JTextField();
-                cbActive = new javax.swing.JCheckBox();
-                jLabel2 = new javax.swing.JLabel();
-
-                setBorder(null);
-
-                jLabel1.setLabelFor(txtProfileName);
-                jLabel1.setText(resourceBundle.getString("profp_name"));
-                jLabel1.setName("jLabel1"); // NOI18N
-
-                txtProfileName.setName("txtProfileName"); // NOI18N
-
-                cbActive.setText(resourceBundle.getString("profp_activate"));
-                cbActive.setName("cbActive"); // NOI18N
-
-                jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() | java.awt.Font.BOLD));
-                jLabel2.setText(resourceBundle.getString("profp_settings"));
-                jLabel2.setName("jLabel2"); // NOI18N
-
-                javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
-                this.setLayout(layout);
-                layout.setHorizontalGroup(
-                        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                        .addGroup(layout.createSequentialGroup()
-                                .addContainerGap()
-                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                        .addComponent(jLabel2)
-                                        .addComponent(cbActive)
-                                        .addGroup(layout.createSequentialGroup()
-                                                .addComponent(jLabel1)
-                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                                .addComponent(txtProfileName, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)))
-                                .addContainerGap())
-                );
-                layout.setVerticalGroup(
-                        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                        .addGroup(layout.createSequentialGroup()
-                                .addGap(10, 10, 10)
-                                .addComponent(jLabel2)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                                .addComponent(cbActive)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                                        .addComponent(txtProfileName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                        .addComponent(jLabel1))
-                                .addContainerGap(213, Short.MAX_VALUE))
-                );
-        }// </editor-fold>//GEN-END:initComponents
-
-
-        // Variables declaration - do not modify//GEN-BEGIN:variables
-        private javax.swing.JCheckBox cbActive;
-        private javax.swing.JLabel jLabel1;
-        private javax.swing.JLabel jLabel2;
-        private javax.swing.JTextField txtProfileName;
-        // End of variables declaration//GEN-END:variables
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jLabel1 = new javax.swing.JLabel();
+        txtProfileName = new javax.swing.JTextField();
+        cbActive = new javax.swing.JCheckBox();
+        jLabel2 = new javax.swing.JLabel();
+
+        setBorder(null);
+
+        jLabel1.setLabelFor(txtProfileName);
+        jLabel1.setText("Profile Name:");
+        jLabel1.setName("jLabel1"); // NOI18N
+
+        txtProfileName.setName("txtProfileName"); // NOI18N
+
+        cbActive.setText("Activate Profile");
+        cbActive.setName("cbActive"); // NOI18N
+
+        jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() | java.awt.Font.BOLD));
+        jLabel2.setText("Profile Settings");
+        jLabel2.setName("jLabel2"); // NOI18N
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jLabel2)
+                    .addComponent(cbActive)
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(jLabel1)
+                        .addGap(62, 62, 62)
+                        .addComponent(txtProfileName, javax.swing.GroupLayout.DEFAULT_SIZE, 294, Short.MAX_VALUE)))
+                .addContainerGap())
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addGap(10, 10, 10)
+                .addComponent(jLabel2)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(cbActive)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(txtProfileName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel1))
+                .addContainerGap(213, Short.MAX_VALUE))
+        );
+    }// </editor-fold>//GEN-END:initComponents
+
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JCheckBox cbActive;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JTextField txtProfileName;
+    // End of variables declaration//GEN-END:variables
 
 }

=== modified file 'syncany/src/org/syncany/gui/settings/RepositoryPanel.form'
--- syncany/src/org/syncany/gui/settings/RepositoryPanel.form	2011-05-23 16:50:04 +0000
+++ syncany/src/org/syncany/gui/settings/RepositoryPanel.form	2011-06-16 14:58:24 +0000
@@ -23,22 +23,29 @@
                       <EmptySpace pref="2" max="-2" attributes="0"/>
                       <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
                   </Group>
+                  <Component id="scrConnection" alignment="0" min="-2" pref="499" max="-2" attributes="0"/>
+                  <Component id="lblConnection" alignment="0" min="-2" max="-2" attributes="0"/>
+                  <Group type="102" alignment="0" attributes="0">
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
+                          <Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                      <EmptySpace min="-2" pref="50" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
+                          <Component id="jspRemoteInterval" max="32767" attributes="1"/>
+                          <Component id="lblEncryption" alignment="0" max="32767" attributes="1"/>
+                      </Group>
+                      <EmptySpace max="-2" attributes="0"/>
+                      <Component id="jLabel5" min="-2" max="-2" attributes="0"/>
+                  </Group>
                   <Group type="102" alignment="0" attributes="0">
                       <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace min="12" pref="12" max="12" attributes="0"/>
-                      <Component id="lblStorageType" min="-2" max="-2" attributes="0"/>
-                  </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <EmptySpace min="-2" pref="120" max="-2" attributes="0"/>
-                      <Component id="lblStorageDescription" min="-2" max="-2" attributes="0"/>
-                  </Group>
-                  <Group type="102" alignment="0" attributes="0">
-                      <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
-                      <EmptySpace min="50" pref="50" max="50" attributes="0"/>
-                      <Component id="lblEncryption" min="-2" max="-2" attributes="0"/>
-                  </Group>
-                  <Component id="lblConnection" alignment="0" min="-2" max="-2" attributes="0"/>
-                  <Component id="scrConnection" alignment="0" min="-2" pref="499" max="-2" attributes="0"/>
+                      <EmptySpace min="-2" pref="30" max="-2" attributes="0"/>
+                      <Group type="103" groupAlignment="0" attributes="0">
+                          <Component id="lblStorageType" min="-2" max="-2" attributes="0"/>
+                          <Component id="lblStorageDescription" alignment="0" min="-2" max="-2" attributes="0"/>
+                      </Group>
+                  </Group>
               </Group>
               <EmptySpace max="32767" attributes="0"/>
           </Group>
@@ -50,20 +57,26 @@
               <EmptySpace max="-2" attributes="0"/>
               <Component id="jLabel1" min="-2" max="-2" attributes="0"/>
               <EmptySpace type="unrelated" max="-2" attributes="0"/>
-              <Group type="103" groupAlignment="0" attributes="0">
-                  <Component id="jLabel3" min="-2" max="-2" attributes="0"/>
-                  <Component id="lblStorageType" min="-2" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="lblStorageType" alignment="3" min="-2" max="-2" attributes="0"/>
               </Group>
-              <EmptySpace min="5" pref="5" max="5" attributes="0"/>
+              <EmptySpace min="-2" pref="2" max="-2" attributes="0"/>
               <Component id="lblStorageDescription" min="-2" max="-2" attributes="0"/>
-              <EmptySpace min="-2" pref="15" max="-2" attributes="0"/>
+              <EmptySpace type="separate" max="-2" attributes="0"/>
               <Group type="103" groupAlignment="0" attributes="0">
                   <Component id="jLabel4" min="-2" max="-2" attributes="0"/>
                   <Component id="lblEncryption" min="-2" max="-2" attributes="0"/>
               </Group>
-              <EmptySpace min="-2" pref="30" max="-2" attributes="0"/>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
+              <Group type="103" groupAlignment="3" attributes="0">
+                  <Component id="jspRemoteInterval" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/>
+                  <Component id="jLabel5" alignment="3" min="-2" max="-2" attributes="0"/>
+              </Group>
+              <EmptySpace pref="28" max="32767" attributes="0"/>
               <Component id="lblConnection" min="-2" max="-2" attributes="0"/>
-              <EmptySpace pref="12" max="32767" attributes="0"/>
+              <EmptySpace type="unrelated" max="-2" attributes="0"/>
               <Component id="scrConnection" min="-2" pref="237" max="-2" attributes="0"/>
               <EmptySpace max="-2" attributes="0"/>
           </Group>
@@ -140,5 +153,22 @@
         <Property name="name" type="java.lang.String" value="lblStorageDescription" noResource="true"/>
       </Properties>
     </Component>
+    <Component class="javax.swing.JSpinner" name="jspRemoteInterval">
+      <Properties>
+        <Property name="name" type="java.lang.String" value="jspRemoteInterval" noResource="true"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel2">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="Watch Interval"/>
+        <Property name="name" type="java.lang.String" value="lblWatchInterval" noResource="true"/>
+      </Properties>
+    </Component>
+    <Component class="javax.swing.JLabel" name="jLabel5">
+      <Properties>
+        <Property name="text" type="java.lang.String" value="ms"/>
+        <Property name="name" type="java.lang.String" value="lblMiliSeconds" noResource="true"/>
+      </Properties>
+    </Component>
   </SubComponents>
 </Form>

=== modified file 'syncany/src/org/syncany/gui/settings/RepositoryPanel.java'
--- syncany/src/org/syncany/gui/settings/RepositoryPanel.java	2011-06-05 21:26:56 +0000
+++ syncany/src/org/syncany/gui/settings/RepositoryPanel.java	2011-06-16 14:58:24 +0000
@@ -21,7 +21,6 @@
  *
  * Created on Mar 27, 2011, 12:51:42 AM
  */
-
 package org.syncany.gui.settings;
 
 import java.util.ResourceBundle;
@@ -37,146 +36,169 @@
  * @author Philipp C. Heckel <philipp.heckel@xxxxxxxxx>
  */
 public class RepositoryPanel extends SettingsPanel {
+
     private Profile profile;
     private ConfigPanel pnlConnection;
     private ResourceBundle resourceBundle;
 
     /** Creates new form ProxyPanel */
     public RepositoryPanel(Profile profile) {
-    	resourceBundle = Config.getInstance().getResourceBundle();
-    	initComponents();
+        resourceBundle = Config.getInstance().getResourceBundle();
+        initComponents();
 
         this.profile = profile;
         this.pnlConnection = profile.getRepository().getConnection().createConfigPanel();
 
         scrConnection.setViewportView(pnlConnection);
-    //scrConnection.getViewport().setViewPosition(new Point(0, 0));
-	
+        //scrConnection.getViewport().setViewPosition(new Point(0, 0));
+
     }
-    
+
     @Override
-    public void load() {	
-    Repository repo = profile.getRepository();
-    Connection connection = repo.getConnection();
-		
-    lblStorageType.setText(connection.getPluginInfo().getName() + ", " + resourceBundle.getString("reposp_version") + "  " + repo.getConnection().getPluginInfo().getVersionStr());
-    lblStorageDescription.setText(connection.getPluginInfo().getDescripton());
-    lblEncryption.setText(repo.getEncryption().getCipherStr() + ", " + repo.getEncryption().getKeylength() + " bit");
-	
-    lblConnection.setText(connection.getPluginInfo().getName()+ resourceBundle.getString("reposp_connection_details"));
+    public void load() {
+        Repository repo = profile.getRepository();
+        Connection connection = repo.getConnection();
+
+        lblStorageType.setText(connection.getPluginInfo().getName() + ", " + resourceBundle.getString("reposp_version") + "  " + repo.getConnection().getPluginInfo().getVersionStr());
+        lblStorageDescription.setText(connection.getPluginInfo().getDescripton());
+        lblEncryption.setText(repo.getEncryption().getCipherStr() + ", " + repo.getEncryption().getKeylength() + " bit");
+
+        lblConnection.setText(connection.getPluginInfo().getName() + resourceBundle.getString("reposp_connection_details"));
         pnlConnection.load();
+        jspRemoteInterval.setValue(profile.getRemoteWatcher().getInterval());
     }
 
     @Override
     public void save() {
         // TODO
         pnlConnection.save();
+        profile.getRemoteWatcher().setInterval((Integer) jspRemoteInterval.getValue());
     }
 
-
     /** This method is called from within the constructor to
      * initialize the form.
      * WARNING: Do NOT modify this code. The content of this method is
      * always regenerated by the Form Editor.
      */
     @SuppressWarnings("unchecked")
-        // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
-        private void initComponents() {
-
-                jLabel1 = new javax.swing.JLabel();
-                lblConnection = new javax.swing.JLabel();
-                scrConnection = new javax.swing.JScrollPane();
-                jLabel3 = new javax.swing.JLabel();
-                jLabel4 = new javax.swing.JLabel();
-                lblStorageType = new javax.swing.JLabel();
-                lblEncryption = new javax.swing.JLabel();
-                lblStorageDescription = new javax.swing.JLabel();
-
-                jLabel1.setFont(jLabel1.getFont().deriveFont(jLabel1.getFont().getStyle() | java.awt.Font.BOLD));
-                jLabel1.setText(resourceBundle.getString("reposp_remote_storage"));
-                jLabel1.setName("jLabel1"); // NOI18N
-
-                lblConnection.setFont(lblConnection.getFont().deriveFont(lblConnection.getFont().getStyle() | java.awt.Font.BOLD));
-                lblConnection.setText(resourceBundle.getString("reposp_connection"));
-                lblConnection.setName("lblConnection"); // NOI18N
-
-                scrConnection.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
-                scrConnection.setViewportBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
-                scrConnection.setName("scrConnection"); // NOI18N
-
-                jLabel3.setText(resourceBundle.getString("reposp_connection_type"));
-                jLabel3.setName("jLabel3"); // NOI18N
-
-                jLabel4.setText(resourceBundle.getString("reposp_encryption"));
-                jLabel4.setName("jLabel4"); // NOI18N
-
-                lblStorageType.setText(resourceBundle.getString("reposp_temp_type"));
-                lblStorageType.setName("lblStorageType"); // NOI18N
-
-                lblEncryption.setText(resourceBundle.getString("reposp_temp_encryption"));
-                lblEncryption.setName("lblEncryption"); // NOI18N
-
-                lblStorageDescription.setText(resourceBundle.getString("reposp_temp_description"));
-                lblStorageDescription.setName("lblStorageDescription"); // NOI18N
-
-                javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
-                this.setLayout(layout);
-                layout.setHorizontalGroup(
-                        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                        .addGroup(layout.createSequentialGroup()
-                                .addContainerGap()
-                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                        .addGroup(layout.createSequentialGroup()
-                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                                .addComponent(jLabel1))
-                                        .addGroup(layout.createSequentialGroup()
-                                                .addComponent(jLabel3)
-                                                .addGap(12, 12, 12)
-                                                .addComponent(lblStorageType))
-                                        .addGroup(layout.createSequentialGroup()
-                                                .addGap(120, 120, 120)
-                                                .addComponent(lblStorageDescription))
-                                        .addGroup(layout.createSequentialGroup()
-                                                .addComponent(jLabel4)
-                                                .addGap(50, 50, 50)
-                                                .addComponent(lblEncryption))
-                                        .addComponent(lblConnection)
-                                        .addComponent(scrConnection, javax.swing.GroupLayout.PREFERRED_SIZE, 499, javax.swing.GroupLayout.PREFERRED_SIZE))
-                                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-                );
-                layout.setVerticalGroup(
-                        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                        .addGroup(layout.createSequentialGroup()
-                                .addContainerGap()
-                                .addComponent(jLabel1)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
-                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                        .addComponent(jLabel3)
-                                        .addComponent(lblStorageType))
-                                .addGap(5, 5, 5)
-                                .addComponent(lblStorageDescription)
-                                .addGap(15, 15, 15)
-                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                        .addComponent(jLabel4)
-                                        .addComponent(lblEncryption))
-                                .addGap(30, 30, 30)
-                                .addComponent(lblConnection)
-                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 12, Short.MAX_VALUE)
-                                .addComponent(scrConnection, javax.swing.GroupLayout.PREFERRED_SIZE, 237, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                .addContainerGap())
-                );
-        }// </editor-fold>//GEN-END:initComponents
-
-
-        // Variables declaration - do not modify//GEN-BEGIN:variables
-        private javax.swing.JLabel jLabel1;
-        private javax.swing.JLabel jLabel3;
-        private javax.swing.JLabel jLabel4;
-        private javax.swing.JLabel lblConnection;
-        private javax.swing.JLabel lblEncryption;
-        private javax.swing.JLabel lblStorageDescription;
-        private javax.swing.JLabel lblStorageType;
-        private javax.swing.JScrollPane scrConnection;
-        // End of variables declaration//GEN-END:variables
-
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jLabel1 = new javax.swing.JLabel();
+        lblConnection = new javax.swing.JLabel();
+        scrConnection = new javax.swing.JScrollPane();
+        jLabel3 = new javax.swing.JLabel();
+        jLabel4 = new javax.swing.JLabel();
+        lblStorageType = new javax.swing.JLabel();
+        lblEncryption = new javax.swing.JLabel();
+        lblStorageDescription = new javax.swing.JLabel();
+        jspRemoteInterval = new javax.swing.JSpinner();
+        jLabel2 = new javax.swing.JLabel();
+        jLabel5 = new javax.swing.JLabel();
+
+        jLabel1.setFont(jLabel1.getFont().deriveFont(jLabel1.getFont().getStyle() | java.awt.Font.BOLD));
+        jLabel1.setText("Remote Storage");
+        jLabel1.setName("jLabel1"); // NOI18N
+
+        lblConnection.setFont(lblConnection.getFont().deriveFont(lblConnection.getFont().getStyle() | java.awt.Font.BOLD));
+        lblConnection.setText("(xyz) Connection");
+        lblConnection.setName("lblConnection"); // NOI18N
+
+        scrConnection.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
+        scrConnection.setViewportBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
+        scrConnection.setName("scrConnection"); // NOI18N
+
+        jLabel3.setText("Connection Type:");
+        jLabel3.setName("jLabel3"); // NOI18N
+
+        jLabel4.setText("Encryption:");
+        jLabel4.setName("jLabel4"); // NOI18N
+
+        lblStorageType.setText("(type)");
+        lblStorageType.setName("lblStorageType"); // NOI18N
+
+        lblEncryption.setText("(encryption)");
+        lblEncryption.setName("lblEncryption"); // NOI18N
+
+        lblStorageDescription.setText("(description)");
+        lblStorageDescription.setName("lblStorageDescription"); // NOI18N
+
+        jspRemoteInterval.setName("jspRemoteInterval"); // NOI18N
+
+        jLabel2.setText("Watch Interval");
+        jLabel2.setName("lblWatchInterval"); // NOI18N
+
+        jLabel5.setText("ms");
+        jLabel5.setName("lblMiliSeconds"); // NOI18N
+
+        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+        this.setLayout(layout);
+        layout.setHorizontalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addGroup(layout.createSequentialGroup()
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 2, javax.swing.GroupLayout.PREFERRED_SIZE)
+                        .addComponent(jLabel1))
+                    .addComponent(scrConnection, javax.swing.GroupLayout.PREFERRED_SIZE, 499, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(lblConnection)
+                    .addGroup(layout.createSequentialGroup()
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(jLabel4)
+                            .addComponent(jLabel2))
+                        .addGap(50, 50, 50)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                            .addComponent(jspRemoteInterval)
+                            .addComponent(lblEncryption, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                        .addComponent(jLabel5))
+                    .addGroup(layout.createSequentialGroup()
+                        .addComponent(jLabel3)
+                        .addGap(30, 30, 30)
+                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                            .addComponent(lblStorageType)
+                            .addComponent(lblStorageDescription))))
+                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+        );
+        layout.setVerticalGroup(
+            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+            .addGroup(layout.createSequentialGroup()
+                .addContainerGap()
+                .addComponent(jLabel1)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jLabel3)
+                    .addComponent(lblStorageType))
+                .addGap(2, 2, 2)
+                .addComponent(lblStorageDescription)
+                .addGap(18, 18, 18)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                    .addComponent(jLabel4)
+                    .addComponent(lblEncryption))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                    .addComponent(jspRemoteInterval, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                    .addComponent(jLabel2)
+                    .addComponent(jLabel5))
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 28, Short.MAX_VALUE)
+                .addComponent(lblConnection)
+                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+                .addComponent(scrConnection, javax.swing.GroupLayout.PREFERRED_SIZE, 237, javax.swing.GroupLayout.PREFERRED_SIZE)
+                .addContainerGap())
+        );
+    }// </editor-fold>//GEN-END:initComponents
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JLabel jLabel3;
+    private javax.swing.JLabel jLabel4;
+    private javax.swing.JLabel jLabel5;
+    private javax.swing.JSpinner jspRemoteInterval;
+    private javax.swing.JLabel lblConnection;
+    private javax.swing.JLabel lblEncryption;
+    private javax.swing.JLabel lblStorageDescription;
+    private javax.swing.JLabel lblStorageType;
+    private javax.swing.JScrollPane scrConnection;
+    // End of variables declaration//GEN-END:variables
 }

=== modified file 'syncany/src/org/syncany/watch/remote/RemoteWatcher.java'
--- syncany/src/org/syncany/watch/remote/RemoteWatcher.java	2011-05-23 16:50:04 +0000
+++ syncany/src/org/syncany/watch/remote/RemoteWatcher.java	2011-06-16 14:58:24 +0000
@@ -19,11 +19,13 @@
 
 import java.util.Map.Entry;
 import org.syncany.config.Config;
+import org.syncany.config.ConfigNode;
 import org.syncany.config.Profile;
 import org.syncany.connection.plugins.TransferManager;
 import org.syncany.db.CloneClient;
 import org.syncany.db.CloneFile;
 import org.syncany.db.DatabaseHelper;
+import org.syncany.exceptions.ConfigException;
 import org.syncany.exceptions.RemoteFileNotFoundException;
 import org.syncany.repository.files.RemoteFile;
 import org.syncany.exceptions.StorageException;
@@ -63,42 +65,33 @@
  *
  * @author Philipp C. Heckel <philipp.heckel@xxxxxxxxx>
  */
-public class RemoteWatcher {
+public class RemoteWatcher implements org.syncany.config.Configurable {
+
     private static final Logger logger = Logger.getLogger(RemoteWatcher.class.getSimpleName());
-    
-    private static final int INTERVAL = 10000;
+    private static final int DEFAULT_INTERVAL = 10000;
     private static final boolean DEBUG_GZIP_AND_ENCRYPT_UPDATE_FILES = false;
-
     private Config config;
-    private DatabaseHelper db;    
-    
-    private Profile profile;   
-    
+    private DatabaseHelper db;
+    private int interval = DEFAULT_INTERVAL;
+    private Profile profile;
     private ChangeManager changeManager;
     private Timer timer;
-
     private Map<String, RemoteFile> remoteFileList;
     private StructuredFileList fileList;
     private UpdateList updateList;
     private TransferManager transfer;
-    
     // TODO this should be in the DB cached somewhere.
     private Long lastFileVersionCount;
-        
     // TODO this should be in the DB cached somewhere.
     private Date lastRepoFileUpdate;
-    
     // TODO this should be in the DB cached somewhere.
     private Date lastUpdateFileDate;
-    
     // TODO this should be in the DB cached somewhere.
     private Date lastLocalProfileFileUpdate;
-    
     // TODO this should be in the DB cached somewhere.
     private Date lastLocalImageFileUpdate;
 
-
-    public RemoteWatcher(Profile profile) {       
+    public RemoteWatcher(Profile profile) {
         this.profile = profile;
 
         this.changeManager = new ChangeManager(profile);
@@ -108,27 +101,34 @@
         // cp. start()
         this.config = null;
         this.db = null;
-        
+
         // cp. doUpdateCheck()
         this.remoteFileList = null;
         this.updateList = null;
         this.transfer = null;
     }
 
-    public synchronized void start() {        
+    public synchronized void setInterval(int interval) {
+        if (interval >= 1000) {
+            this.interval = interval;
+        }
+        startUpdateCheck();
+    }
+
+    public int getInterval() {
+        return this.interval;
+    }
+
+    public synchronized void start() {
         // Dependencies
         if (config == null) {
             config = Config.getInstance();
             db = DatabaseHelper.getInstance();
         }
-        
+
         // Reset connection
         reset();
-        
-        timer = new Timer("RemoteWatcher");
-        timer.scheduleAtFixedRate(new TimerTask() {
-            @Override public void run() { doUpdateCheck(); } }, 0, INTERVAL);
-
+        startUpdateCheck();
         changeManager.start();
     }
 
@@ -143,8 +143,27 @@
         timer = null;
     }
 
+    private void startUpdateCheck() {
+        logger.log(Level.INFO, "Staring remote watcher...");
+        if (timer != null) {
+            try {
+                timer.cancel();
+            } catch (IllegalStateException ex) {
+                logger.log(Level.SEVERE, ex.getMessage());
+            }
+        }
+        timer = new Timer("RemoteWatcher");
+        timer.scheduleAtFixedRate(new TimerTask() {
+            @Override
+            public void run() {
+                logger.log(Level.INFO, "Do Update Check Interval = " + interval);
+                doUpdateCheck();
+            }
+        }, 0, interval);
+    }
+
     private void reset() {
-        
+
         transfer = profile.getRepository().getConnection().createTransferManager();
         updateList = new UpdateList(profile);
     }
@@ -158,10 +177,10 @@
 
         try {
             updateFileList();
-            
+
             updateRepository();
             commitRepository();
-            
+
             // 1. download update files
             downloadUpdates();
 
@@ -170,112 +189,108 @@
 
             // 4. Create and upload local updates ///////
             commitLocalUpdateFile();
-            
+
             // Profiles 
             commitLocalProfile();
             updateRemoteProfiles();
 
             // Images
-            commitLocalImage();           
+            commitLocalImage();
             updateRemoteImages();
 
             // 5. Delete old updates (only mine!) ///////
             deleteOldUpdateFiles();
             deleteOldProfileFiles();
             deleteOldImageFiles();
-        }
-        catch (StorageException ex) {
+        } catch (StorageException ex) {
             logger.log(Level.WARNING, "Update check failed. Trying again in a couple of seconds.", ex);
-        }
-        finally {
+        } finally {
             if (logger.isLoggable(Level.INFO)) {
                 logger.info("DONE WITH PERIODIC UPDATE CHECK ...");
             }
 
-            try { transfer.disconnect(); }
-            catch (StorageException ex) { /* Fressen! */ }
+            try {
+                transfer.disconnect();
+            } catch (StorageException ex) { /* Fressen! */ }
         }
-    
+
     }
 
     private void updateFileList() throws StorageException {
         remoteFileList = transfer.list();
         fileList = new StructuredFileList(profile.getRepository(), remoteFileList);
     }
-    
-    
+
     private void updateRepository() throws StorageException {
         RepositoryFile repoFile = fileList.getNewestRepositoryFile();
-        
+
         if (repoFile == null) {
             throw new StorageException("Unable to find repository-* file.");
         }
-        
+
         // Are we already up-to-date?
         if (lastRepoFileUpdate != null && !repoFile.getLastUpdate().after(lastRepoFileUpdate)) {
             return;
         }
-        
+
         // Do download and read it!
-        try {            
+        try {
             profile.getRepository().update(transfer, fileList);
             lastRepoFileUpdate = repoFile.getLastUpdate();
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             throw new StorageException(e);
         }
-    }   
-    
+    }
+
     private void commitRepository() throws StorageException {
         RepositoryFile repoFile = fileList.getNewestRepositoryFile();
-        
+
         if (repoFile == null) {
             throw new StorageException("Unable to find repository-* file.");
         }
-        
+
         // Are we already up-to-date?
         if (!profile.getRepository().isChanged()) {
             if (logger.isLoggable(Level.INFO)) {
                 logger.info("repository has not changed locally. No need to upload.");
             }
-            
+
             return;
         }
-        
+
         // Upload
         if (logger.isLoggable(Level.INFO)) {
             logger.info("Uploading changed repository file ...");
         }
- 
-        try {      
+
+        try {
             profile.getRepository().commit(transfer, fileList, false);
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
             throw new StorageException(e);
         }
-    }       
+    }
 
     private void downloadUpdates() throws StorageException {
         if (logger.isLoggable(Level.INFO)) {
             logger.info("2. Downloading update lists ...");
         }
-        
+
         // Find newest client update files
         Collection<UpdateFile> newestUpdateFiles = fileList.getRemoteUpdateFiles().values();
-        
+
         for (UpdateFile updateFile : newestUpdateFiles) {
             // Get client from DB (or create it!)
-            CloneClient client = db.getClient(profile, updateFile.getMachineName(), true);            
-            
+            CloneClient client = db.getClient(profile, updateFile.getMachineName(), true);
+
             // Ignore if we are up-to-date
             if (client.getLastUpdate() != null && !updateFile.getLastUpdate().after(client.getLastUpdate())) {
                 if (logger.isLoggable(Level.INFO)) {
                     logger.log(Level.INFO, "   - Client ''{0}'' is up-to-date", updateFile.getMachineName());
                 }
-                
+
                 continue;
             }
-            
+
             try {
                 // Download update file
                 if (logger.isLoggable(Level.INFO)) {
@@ -295,12 +310,11 @@
 
                 // Add to update manager
                 updateList.addRemoteUpdateFile(client, updateFile);
-            }
-            catch (Exception ex) {
+            } catch (Exception ex) {
                 if (logger.isLoggable(Level.WARNING)) {
                     logger.log(Level.WARNING, "Reading update file of client {0} failed. Skipping update check.", client.getMachineName());
                 }
-                
+
                 throw new StorageException(ex);
             }
         }
@@ -317,15 +331,15 @@
 
         // TODO should the changes be synchronous?
         // TODO because setting the clients' lastUpdate value assumes that the change mgr doesnt crash
-        
+
         // Update last-updated date of clients
         if (logger.isLoggable(Level.INFO)) {
             logger.info("3b. Updating client DB entries ...");
         }
 
         for (Map.Entry<CloneClient, UpdateFile> e : updateList.getRemoteUpdateFiles().entrySet()) {
-            CloneClient client = e.getKey(); 
-            UpdateFile updateFile  = e.getValue();
+            CloneClient client = e.getKey();
+            UpdateFile updateFile = e.getValue();
 
             client.setLastUpdate(updateFile.getLastUpdate());
             client.merge();
@@ -350,25 +364,24 @@
         lastUpdateFileDate = new Date();
         lastFileVersionCount = fileVersionCount;
 
-        File localUpdateFile = null;	
+        File localUpdateFile = null;
         UpdateFile remoteUpdateFile = new UpdateFile(profile.getRepository(), config.getMachineName(), lastUpdateFileDate);
 
         try {
             // Make temp. update file
-            localUpdateFile = config.getCache().createTempFile("update-"+config.getMachineName());
-            logger.info("4. Writing local changes to '"+localUpdateFile+"' ...");
+            localUpdateFile = config.getCache().createTempFile("update-" + config.getMachineName());
+            logger.info("4. Writing local changes to '" + localUpdateFile + "' ...");
 
             List<CloneFile> updatedFiles = db.getHistory(profile);
             remoteUpdateFile.setVersions(updatedFiles);
             remoteUpdateFile.write(localUpdateFile, DEBUG_GZIP_AND_ENCRYPT_UPDATE_FILES);
 
             // Upload
-            logger.info("  - Uploading file to temp. file '"+remoteUpdateFile.getName()+"' ...");
+            logger.info("  - Uploading file to temp. file '" + remoteUpdateFile.getName() + "' ...");
             transfer.upload(localUpdateFile, remoteUpdateFile);
 
             localUpdateFile.delete();
-        }
-        catch (IOException ex) {
+        } catch (IOException ex) {
             if (localUpdateFile != null) {
                 localUpdateFile.delete();
             }
@@ -376,18 +389,18 @@
             logger.log(Level.SEVERE, null, ex);
         }
     }
-    
+
     // Upload new local profile (if changed)
-    private void commitLocalProfile() throws StorageException {        
+    private void commitLocalProfile() throws StorageException {
         ProfileFile localNewestProfileFile = fileList.getNewestProfileFile();
-        
+
         // Skip if no update needed
-        if (!(localNewestProfileFile == null || lastLocalProfileFileUpdate == null ||
-                localNewestProfileFile.getLastUpdate().after(lastLocalProfileFileUpdate))) {
-            
+        if (!(localNewestProfileFile == null || lastLocalProfileFileUpdate == null
+                || localNewestProfileFile.getLastUpdate().after(lastLocalProfileFileUpdate))) {
+
             return;
         }
-        
+
         Date newDate = new Date();
         ProfileFile localProfileFile = new ProfileFile(profile.getRepository(), config.getMachineName(), newDate);
 
@@ -408,13 +421,12 @@
 
             // Update 
             lastLocalProfileFileUpdate = newDate;
-        }
-        catch (IOException e) {
+        } catch (IOException e) {
             logger.log(Level.SEVERE, "ERROR while uploading local profile.", e);
             // TODO do something
         }
     }
-    
+
     private void updateRemoteProfiles() throws RemoteFileNotFoundException, StorageException {
         /// Download new user profiles
         Collection<ProfileFile> remoteProfileFiles = fileList.getRemoteProfileFiles().values();
@@ -426,7 +438,7 @@
             if (client.getLastProfileUpdate() != null && !f.getLastUpdate().after(client.getLastProfileUpdate())) {
                 continue;
             }
-            
+
             if (logger.isLoggable(Level.INFO)) {
                 logger.log(Level.INFO, "Downloading profile of client ''{0}'' ...", client.getMachineName());
             }
@@ -440,68 +452,67 @@
                 client.setLastProfileUpdate(new Date());
                 client.setUserName(f.getUserName());
                 client.merge();
-            }
-            catch (IOException e) {
+            } catch (IOException e) {
                 logger.log(Level.SEVERE, "ERROR while downloading remote profile of " + client.getMachineName() + ".", e);
                 // TODO do something
-            }            
+            }
         }
     }
-    
+
     private void commitLocalImage() throws RemoteFileNotFoundException, StorageException {
         // Upload local image (if updated)
         ImageFile localNewestImageFile = fileList.getNewestImageFile();
-        
+
         // Skip if no update needed
-        if (!(localNewestImageFile == null || lastLocalImageFileUpdate == null ||
-                localNewestImageFile.getLastUpdate().after(lastLocalImageFileUpdate))) {
-            
+        if (!(localNewestImageFile == null || lastLocalImageFileUpdate == null
+                || localNewestImageFile.getLastUpdate().after(lastLocalImageFileUpdate))) {
+
             return;
         }
-        
+
         return;
         /*
         Date newDate = new Date();
         ImageFile localImageFile = new ImageFile(profile.getRepository(), config.getMachineName(), newDate);
         
         if (lastLocalImageFileUpdate == null || localNewestImageFile == null || localNewestImageFile.getLastUpdate().after(lastLocalImageFileUpdate)) {
-            // If 'No Image' is selected, OR (!) if the local image file is not there
-            if (config.getUserImageType() == Config.UserImageType.None
-                    || config.getUserImageFile() == null || !config.getUserImageFile().exists()) {
-
-                if (localNewestImageFile != null) {
-                    transfer.delete(localNewestImageFile);
-                }
-
-                lastLocalImageFileUpdate = new Date();
-            } else {
-                try {
-                    File originalImageFile = null;
-
-                    if (config.getUserImageType() == Config.UserImageType.System) {
-                        originalImageFile = config.getCache().createTempFile("image-" + config.getMachineName());
-                        Image image = ImageUtil.getScaledImage(config.getUserImage(), Constants.PROFILE_IMAGE_MAX_WIDTH, Constants.PROFILE_IMAGE_MAX_HEIGHT);
-                        ImageIO.write(ImageUtil.toBufferedImage(image), "png", originalImageFile);
-                    }
-                    else if (config.getUserImageType() == Config.UserImageType.Other) {
-                        originalImageFile = config.getUserImageFile();
-                    }
-
-                    // TODO encrypt
-
-                    Date newDate = new Date();
-                    transfer.upload(originalImageFile, new ImageFile(profile.getRepository(), config.getMachineName(), newDate));
-
-                    // Update cached value
-                    lastLocalImageFileUpdate = newDate;
-                } catch (IOException e) {
-                    // TODO do something
-                    logger.log(Level.WARNING, "Error while uploading local image.", e);
-                }
-            }
+        // If 'No Image' is selected, OR (!) if the local image file is not there
+        if (config.getUserImageType() == Config.UserImageType.None
+        || config.getUserImageFile() == null || !config.getUserImageFile().exists()) {
+        
+        if (localNewestImageFile != null) {
+        transfer.delete(localNewestImageFile);
+        }
+        
+        lastLocalImageFileUpdate = new Date();
+        } else {
+        try {
+        File originalImageFile = null;
+        
+        if (config.getUserImageType() == Config.UserImageType.System) {
+        originalImageFile = config.getCache().createTempFile("image-" + config.getMachineName());
+        Image image = ImageUtil.getScaledImage(config.getUserImage(), Constants.PROFILE_IMAGE_MAX_WIDTH, Constants.PROFILE_IMAGE_MAX_HEIGHT);
+        ImageIO.write(ImageUtil.toBufferedImage(image), "png", originalImageFile);
+        }
+        else if (config.getUserImageType() == Config.UserImageType.Other) {
+        originalImageFile = config.getUserImageFile();
+        }
+        
+        // TODO encrypt
+        
+        Date newDate = new Date();
+        transfer.upload(originalImageFile, new ImageFile(profile.getRepository(), config.getMachineName(), newDate));
+        
+        // Update cached value
+        lastLocalImageFileUpdate = newDate;
+        } catch (IOException e) {
+        // TODO do something
+        logger.log(Level.WARNING, "Error while uploading local image.", e);
+        }
+        }
         }*/
     }
-    
+
     private void updateRemoteImages() {
         // Download new user images (if changed)
         Map<String, ImageFile> remoteImageFiles = fileList.getRemoteImageFiles();
@@ -513,11 +524,11 @@
             if (client.getLastImageUpdate() != null && !f.getLastUpdate().after(client.getLastImageUpdate())) {
                 continue;
             }
-            
+
             if (logger.isLoggable(Level.INFO)) {
                 logger.log(Level.INFO, "Downloading image of client ''{0}'' ...", client.getMachineName());
             }
-            
+
             // Download 
             try {
                 File tempRemoteImage = config.getCache().createTempFile(f.getName());
@@ -530,8 +541,7 @@
                 // Apply and persist
                 client.setLastImageUpdate(new Date());
                 client.merge();
-            }
-            catch (Exception e) {
+            } catch (Exception e) {
                 if (logger.isLoggable(Level.SEVERE)) {
                     logger.log(Level.SEVERE, "ERROR while downloading remote image of " + client.getMachineName() + ".", e);
                 }
@@ -541,47 +551,60 @@
 
     private void deleteOldUpdateFiles() {
         TreeMap<Long, UpdateFile> localUpdatesMap = fileList.getLocalUpdateFiles();
-        
+
         while (localUpdatesMap.size() > 1) {
-            Entry<Long, UpdateFile> firstEntry = localUpdatesMap.pollFirstEntry();            
+            Entry<Long, UpdateFile> firstEntry = localUpdatesMap.pollFirstEntry();
 
             try {
-                transfer.delete(firstEntry.getValue());            
-            }
-            catch (Exception e) {
+                transfer.delete(firstEntry.getValue());
+            } catch (Exception e) {
                 logger.log(Level.WARNING, "Could not delete old update file", e);
             }
         }
     }
-    
+
     private void deleteOldProfileFiles() {
         TreeMap<Long, ProfileFile> localUpdatesMap = fileList.getLocalProfileFiles();
-        
+
         while (localUpdatesMap.size() > 1) {
-            Entry<Long, ProfileFile> firstEntry = localUpdatesMap.pollFirstEntry();            
+            Entry<Long, ProfileFile> firstEntry = localUpdatesMap.pollFirstEntry();
 
             try {
-                transfer.delete(firstEntry.getValue());            
-            }
-            catch (Exception e) {
+                transfer.delete(firstEntry.getValue());
+            } catch (Exception e) {
                 logger.log(Level.WARNING, "Could not delete old profile file", e);
             }
         }
     }
-  
+
     private void deleteOldImageFiles() {
         TreeMap<Long, ImageFile> localUpdatesMap = fileList.getLocalImageFiles();
-        
+
         while (localUpdatesMap.size() > 1) {
-            Entry<Long, ImageFile> firstEntry = localUpdatesMap.pollFirstEntry();            
+            Entry<Long, ImageFile> firstEntry = localUpdatesMap.pollFirstEntry();
 
             try {
-                transfer.delete(firstEntry.getValue());            
-            }
-            catch (Exception e) {
+                transfer.delete(firstEntry.getValue());
+            } catch (Exception e) {
                 logger.log(Level.WARNING, "Could not delete old image file", e);
             }
         }
     }
 
+    @Override
+    public void load(ConfigNode node) throws ConfigException {
+        if (node != null) {
+            ConfigNode remote = node.findChildByName("remote");
+            Integer inter = remote.getInteger("interval");
+            if (inter != null) {
+                interval = inter;
+            }
+        }
+    }
+
+    @Override
+    public void save(ConfigNode node) {
+        ConfigNode remote = node.findOrCreateChildByXpath("remote", "remote");
+        remote.setProperty("interval", interval);
+    }
 }


Follow ups