← Back to team overview

syncany-team team mailing list archive

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

 

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
>


Follow ups

References