← Back to team overview

syncany-team team mailing list archive

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

 

Hi,

Sounds like a plan. When will the thesis (on the algorithm) be publised? 
Sounds like an interesting read.

Regards

On 06/17/2011 09:27 PM, Philipp C. Heckel wrote:
> Hi Isak,
>
> Just so you know; I reviewed the code and it looks good. However, I
> did not yet merge it into the trunk, but I already merged it in my
> local version. It'll be in the branch with the new sync algorithm (not
> yet published).
>
> Cheers,
> Philipp
>
> On Thu, Jun 16, 2011 at 8:12 PM, isakkarlsson<isak.karlsson@xxxxxxxxx>  wrote:
>> I've fixed it now.
>>
>> On 06/16/2011 07:31 PM, Philipp C. Heckel wrote:
>>> While you're at it: I noticed that due to your chanes in the GUI, the
>>> internationalization stuff (resourceBundle...) has been kicked out. It
>>> was in the Netbeans-do-not-change block, so the editor must have
>>> overwritten it.
>>>
>>> Could you by any chance try to make it work again? Maybe just
>>> overwrite the values in the constructor of the frame:
>>> lblXYZ.setText(resourceBundle...)
>>>
>>> On Thu, Jun 16, 2011 at 7:16 PM, isakkarlsson<isak.karlsson@xxxxxxxxx>    wrote:
>>>> I'll fix the native.py script first..
>>>>
>>>> On 06/16/2011 05:13 PM, Philipp C. Heckel wrote:
>>>>> 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
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>
>>>> --
>>>> 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.
>>>>
>>>> --
>>>> 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
>>>>
>>>
>>
>> --
>> 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.
>>
>> --
>> 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
>>
>

-- 
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.


Follow ups

References