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<[email protected]> 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<[email protected]> >> >> === 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<[email protected]> >> */ >> 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<[email protected]> >> */ >> -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 : [email protected] >> 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 : [email protected] Unsubscribe : https://launchpad.net/~syncany-team More help : https://help.launchpad.net/ListHelp

