← Back to team overview

syncany-team team mailing list archive

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

 

I'll review this tonight and then merge it :-D

On Thu, Jun 16, 2011 at 4:58 PM, isakkarlsson <isak.karlsson@xxxxxxxxx> wrote:
> 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);
> +    }
>  }
>
>
> --
> Mailing list: https://launchpad.net/~syncany-team
> Post to     : syncany-team@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~syncany-team
> More help   : https://help.launchpad.net/ListHelp
>
>



--

Follow ups

References