Sorry but I felt I need to do this after I added images to my dives - I
love this feature!!!
This patch set is not complete and needs more testing but I wanted to
throw this out for feedback. I keep on testing as I did not test this fully.

What it should do is to allow the user to point to a location where
pictures are being
copied to automatically if the users wishes to do this.
For example, while testing I created a path on my drop box, so when I add
pictures
to my dives they are automatically (when selected in the preferences)
copied to my dropbox
location.
Now I can open my could storage from any of my computers and see my
pictures :-) if the
computer(s) sync with DropBox.

Most likely there are bugs which I will remove if you guys find this
useful, if not, it was
a good lesson for me to learn more about the code.

Sorry Dirk, no idea how I could have made the first patch smaller.

This is NOT DONE YET, I basically want to know if I should continue. Lot's
of checking is
still needed.

-- 
Best regards,
Guido
From 6c064ab0e04e046d2407a62630fcc9e3c0bd7a24 Mon Sep 17 00:00:00 2001
From: Guido Lerch <[email protected]>
Date: Tue, 13 Oct 2015 00:20:05 +0200
Subject: [PATCH 1/2] Adding image management to preferences

Adding a feature where images can be managed by the application.
The user has to give a default path to the images, ideally something
accessible from several computers such as Box, DropBox or a NAS.

Signed-off-by: Guido Lerch <[email protected]>
---
 pref.h                |   2 +
 qt-ui/preferences.cpp |  21 +++++
 qt-ui/preferences.h   |   4 +
 qt-ui/preferences.ui  | 235 ++++++++++++++++++++++++++++++++++++++++++++++----
 qthelper.cpp          |   5 ++
 5 files changed, 249 insertions(+), 18 deletions(-)

diff --git a/pref.h b/pref.h
index 84975aa..2705a45 100644
--- a/pref.h
+++ b/pref.h
@@ -118,6 +118,8 @@ struct preferences {
        geocoding_prefs_t geocoding;
        enum deco_mode deco_mode;
        short conservatism_level;
+       bool manage_images;
+       char *image_location;
 };
 enum unit_system_values {
        METRIC,
diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index 6450c41..c47f364 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -250,6 +250,10 @@ void PreferencesDialog::setUiFromPrefs()
        ui.first_item->setCurrentIndex(prefs.geocoding.category[0]);
        ui.second_item->setCurrentIndex(prefs.geocoding.category[1]);
        ui.third_item->setCurrentIndex(prefs.geocoding.category[2]);
+
+       // Images
+       ui.manage_images->setChecked(prefs.manage_images);
+       ui.image_location->setText(prefs.image_location);
 }
 
 void PreferencesDialog::restorePrefs()
@@ -430,6 +434,12 @@ void PreferencesDialog::syncSettings()
        s.setValue("cat2", ui.third_item->currentIndex());
        s.endGroup();
 
+       s.beginGroup("images");
+       s.setValue("manage", ui.manage_images->isChecked());
+       s.setValue("location", ui.image_location->text());
+
+       s.endGroup();
+
        loadSettings();
        emit settingsChanged();
 }
@@ -557,3 +567,14 @@ void PreferencesDialog::on_cloudDefaultFile_toggled(bool 
toggle)
 {
        prefs.default_file_behavior = CLOUD_DEFAULT_FILE;
 }
+
+void PreferencesDialog::on_chooseImageLocation_clicked()
+{
+       QString oldDirectory = ui.image_location->text();
+       QString choosenDirectory = QFileDialog::getExistingDirectory(this, 
tr("Open Image location"), oldDirectory, QFileDialog::ShowDirsOnly | 
QFileDialog::DontResolveSymlinks);
+       if (!choosenDirectory.isEmpty())
+               ui.image_location->setText(choosenDirectory + "/");
+       QDir di(ui.image_location->text());
+       if (!di.exists())
+               di.mkpath(ui.image_location->text());
+}
diff --git a/qt-ui/preferences.h b/qt-ui/preferences.h
index 326b1f9..d1b45a5 100644
--- a/qt-ui/preferences.h
+++ b/qt-ui/preferences.h
@@ -41,6 +41,10 @@ slots:
        void facebookDisconnect();
        void cloudPinNeeded();
        void passwordUpdateSuccessfull();
+private slots:
+
+       void on_chooseImageLocation_clicked();
+
 private:
        explicit PreferencesDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
        void setUiFromPrefs();
diff --git a/qt-ui/preferences.ui b/qt-ui/preferences.ui
index de2d79b..8ec9cfe 100644
--- a/qt-ui/preferences.ui
+++ b/qt-ui/preferences.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>711</width>
+    <width>836</width>
     <height>662</height>
    </rect>
   </property>
@@ -19,7 +19,16 @@
    </iconset>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_2">
-   <property name="margin">
+   <property name="leftMargin">
+    <number>5</number>
+   </property>
+   <property name="topMargin">
+    <number>5</number>
+   </property>
+   <property name="rightMargin">
+    <number>5</number>
+   </property>
+   <property name="bottomMargin">
     <number>5</number>
    </property>
    <item>
@@ -164,7 +173,7 @@
         </sizepolicy>
        </property>
        <property name="currentIndex">
-        <number>4</number>
+        <number>0</number>
        </property>
        <widget class="QWidget" name="defaults_page">
         <property name="sizePolicy">
@@ -177,7 +186,16 @@
          <property name="spacing">
           <number>5</number>
          </property>
-         <property name="margin">
+         <property name="leftMargin">
+          <number>5</number>
+         </property>
+         <property name="topMargin">
+          <number>5</number>
+         </property>
+         <property name="rightMargin">
+          <number>5</number>
+         </property>
+         <property name="bottomMargin">
           <number>5</number>
          </property>
          <item>
@@ -186,7 +204,16 @@
             <string>Lists and tables</string>
            </property>
            <layout class="QHBoxLayout" name="horizontalLayout_11">
-            <property name="margin">
+            <property name="leftMargin">
+             <number>5</number>
+            </property>
+            <property name="topMargin">
+             <number>5</number>
+            </property>
+            <property name="rightMargin">
+             <number>5</number>
+            </property>
+            <property name="bottomMargin">
              <number>5</number>
             </property>
             <item>
@@ -224,7 +251,16 @@
             <property name="verticalSpacing">
              <number>5</number>
             </property>
-            <property name="margin">
+            <property name="leftMargin">
+             <number>5</number>
+            </property>
+            <property name="topMargin">
+             <number>5</number>
+            </property>
+            <property name="rightMargin">
+             <number>5</number>
+            </property>
+            <property name="bottomMargin">
              <number>5</number>
             </property>
             <item row="0" column="0">
@@ -328,7 +364,16 @@
             <property name="verticalSpacing">
              <number>5</number>
             </property>
-            <property name="margin">
+            <property name="leftMargin">
+             <number>5</number>
+            </property>
+            <property name="topMargin">
+             <number>5</number>
+            </property>
+            <property name="rightMargin">
+             <number>5</number>
+            </property>
+            <property name="bottomMargin">
              <number>5</number>
             </property>
             <item row="0" column="0">
@@ -354,7 +399,16 @@
             <string>Animations</string>
            </property>
            <layout class="QHBoxLayout" name="horizontalLayout_7">
-            <property name="margin">
+            <property name="leftMargin">
+             <number>5</number>
+            </property>
+            <property name="topMargin">
+             <number>5</number>
+            </property>
+            <property name="rightMargin">
+             <number>5</number>
+            </property>
+            <property name="bottomMargin">
              <number>5</number>
             </property>
             <item>
@@ -393,7 +447,16 @@
             <property name="spacing">
              <number>5</number>
             </property>
-            <property name="margin">
+            <property name="leftMargin">
+             <number>5</number>
+            </property>
+            <property name="topMargin">
+             <number>5</number>
+            </property>
+            <property name="rightMargin">
+             <number>5</number>
+            </property>
+            <property name="bottomMargin">
              <number>5</number>
             </property>
             <item>
@@ -407,6 +470,79 @@
           </widget>
          </item>
          <item>
+          <widget class="QGroupBox" name="groupBox_13">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize">
+            <size>
+             <width>0</width>
+             <height>100</height>
+            </size>
+           </property>
+           <property name="title">
+            <string>Images</string>
+           </property>
+           <widget class="QCheckBox" name="manage_images">
+            <property name="geometry">
+             <rect>
+              <x>10</x>
+              <y>20</y>
+              <width>201</width>
+              <height>20</height>
+             </rect>
+            </property>
+            <property name="toolTip">
+             <string>Manage my picture location for me by copying the images I 
add to a default location, ideally DropBox, Box or a local NAS.</string>
+            </property>
+            <property name="text">
+             <string>Manage my images for me.</string>
+            </property>
+           </widget>
+           <widget class="QLabel" name="label_31">
+            <property name="geometry">
+             <rect>
+              <x>10</x>
+              <y>50</y>
+              <width>59</width>
+              <height>16</height>
+             </rect>
+            </property>
+            <property name="text">
+             <string>Location</string>
+            </property>
+           </widget>
+           <widget class="QWidget" name="horizontalLayoutWidget">
+            <property name="geometry">
+             <rect>
+              <x>80</x>
+              <y>50</y>
+              <width>591</width>
+              <height>21</height>
+             </rect>
+            </property>
+            <layout class="QHBoxLayout" name="horizontalLayout_2">
+             <property name="sizeConstraint">
+              <enum>QLayout::SetMinimumSize</enum>
+             </property>
+             <item>
+              <widget class="QLineEdit" name="image_location"/>
+             </item>
+             <item>
+              <widget class="QToolButton" name="chooseImageLocation">
+               <property name="text">
+                <string>...</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </widget>
+          </widget>
+         </item>
+         <item>
           <spacer name="verticalSpacer_2">
            <property name="orientation">
             <enum>Qt::Vertical</enum>
@@ -432,7 +568,16 @@
          <property name="spacing">
           <number>5</number>
          </property>
-         <property name="margin">
+         <property name="leftMargin">
+          <number>5</number>
+         </property>
+         <property name="topMargin">
+          <number>5</number>
+         </property>
+         <property name="rightMargin">
+          <number>5</number>
+         </property>
+         <property name="bottomMargin">
           <number>5</number>
          </property>
          <item>
@@ -733,7 +878,16 @@
          <property name="spacing">
           <number>5</number>
          </property>
-         <property name="margin">
+         <property name="leftMargin">
+          <number>5</number>
+         </property>
+         <property name="topMargin">
+          <number>5</number>
+         </property>
+         <property name="rightMargin">
+          <number>5</number>
+         </property>
+         <property name="bottomMargin">
           <number>5</number>
          </property>
          <item>
@@ -1027,7 +1181,16 @@
          <property name="sizeConstraint">
           <enum>QLayout::SetNoConstraint</enum>
          </property>
-         <property name="margin">
+         <property name="leftMargin">
+          <number>5</number>
+         </property>
+         <property name="topMargin">
+          <number>5</number>
+         </property>
+         <property name="rightMargin">
+          <number>5</number>
+         </property>
+         <property name="bottomMargin">
           <number>5</number>
          </property>
          <item>
@@ -1111,7 +1274,16 @@
          <property name="spacing">
           <number>5</number>
          </property>
-         <property name="margin">
+         <property name="leftMargin">
+          <number>5</number>
+         </property>
+         <property name="topMargin">
+          <number>5</number>
+         </property>
+         <property name="rightMargin">
+          <number>5</number>
+         </property>
+         <property name="bottomMargin">
           <number>5</number>
          </property>
          <item>
@@ -1341,7 +1513,16 @@
             <property name="spacing">
              <number>5</number>
             </property>
-            <property name="margin">
+            <property name="leftMargin">
+             <number>5</number>
+            </property>
+            <property name="topMargin">
+             <number>5</number>
+            </property>
+            <property name="rightMargin">
+             <number>5</number>
+            </property>
+            <property name="bottomMargin">
              <number>5</number>
             </property>
             <item>
@@ -1390,7 +1571,16 @@
          <property name="spacing">
           <number>5</number>
          </property>
-         <property name="margin">
+         <property name="leftMargin">
+          <number>5</number>
+         </property>
+         <property name="topMargin">
+          <number>5</number>
+         </property>
+         <property name="rightMargin">
+          <number>5</number>
+         </property>
+         <property name="bottomMargin">
           <number>5</number>
          </property>
          <item>
@@ -1437,7 +1627,16 @@
          <property name="spacing">
           <number>5</number>
          </property>
-         <property name="margin">
+         <property name="leftMargin">
+          <number>5</number>
+         </property>
+         <property name="topMargin">
+          <number>5</number>
+         </property>
+         <property name="rightMargin">
+          <number>5</number>
+         </property>
+         <property name="bottomMargin">
           <number>5</number>
          </property>
          <item>
@@ -1870,14 +2069,14 @@
   </connection>
  </connections>
  <buttongroups>
+  <buttongroup name="buttonGroup"/>
+  <buttongroup name="defaultFileGroup"/>
   <buttongroup name="verticalSpeed"/>
   <buttongroup name="buttonGroup_2"/>
   <buttongroup name="buttonGroup_3"/>
   <buttongroup name="buttonGroup_4"/>
-  <buttongroup name="defaultFileGroup"/>
   <buttongroup name="buttonGroup_5"/>
   <buttongroup name="buttonGroup_6"/>
   <buttongroup name="buttonGroup_7"/>
-  <buttongroup name="buttonGroup"/>
  </buttongroups>
 </ui>
diff --git a/qthelper.cpp b/qthelper.cpp
index a963ad7..da85ffe 100644
--- a/qthelper.cpp
+++ b/qthelper.cpp
@@ -1536,6 +1536,11 @@ void loadPreferences()
        GET_ENUM("cat2", taxonomy_category, geocoding.category[2]);
        s.endGroup();
 
+       s.beginGroup("images");
+       GET_BOOL("manage", manage_images);
+       GET_TXT("location", image_location);
+       s.endGroup();
+
 }
 
 extern "C" bool isCloudUrl(const char *filename)
-- 
2.3.8 (Apple Git-58)

From e6f3c8bb2cc6474d1e60151153d236f8567c1298 Mon Sep 17 00:00:00 2001
From: Guido Lerch <[email protected]>
Date: Tue, 13 Oct 2015 00:24:45 +0200
Subject: [PATCH 2/2] Adding image management

Implementing that images are copied from their origin to the location
set in the preferences.
My motivation was that I added images to my files and then found that
I cannot see them in my other computer.
I know there is a function to find moved images but I found this implementation
a lot more intuitive, sorry.
I am not done but whanted to toss this over the wall for feedback.

Error checking, full testing is not done yet. I tried to implement this without
changing any existing functionality.

Signed-off-by: Guido Lerch <[email protected]>
---
 dive.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/dive.c b/dive.c
index 1810109..a9532ad 100644
--- a/dive.c
+++ b/dive.c
@@ -3297,6 +3297,13 @@ bool picture_check_valid(char *filename, int shift_time)
 
 void dive_create_picture(struct dive *dive, char *filename, int shift_time, 
bool match_all)
 {
+       char *new_filename;
+       if (prefs.manage_images) {
+               copy_image_and_overwrite(filename, prefs.image_location, 
get_file_name(filename));
+               new_filename = 
strdup(strcat(prefs.image_location,get_file_name(filename)));
+       } else {
+               new_filename = strdup(filename);
+       }
        timestamp_t timestamp = picture_get_timestamp(filename);
        if (!new_picture_for_dive(dive, filename))
                return;
@@ -3304,12 +3311,13 @@ void dive_create_picture(struct dive *dive, char 
*filename, int shift_time, bool
                return;
 
        struct picture *picture = alloc_picture();
-       picture->filename = strdup(filename);
+       picture->filename = strdup(new_filename);
        picture->offset.seconds = timestamp - dive->when + shift_time;
        picture_load_exif_data(picture);
 
        dive_add_picture(dive, picture);
        dive_set_geodata_from_picture(dive, picture);
+       free(new_filename);
 }
 
 void dive_add_picture(struct dive *dive, struct picture *newpic)
-- 
2.3.8 (Apple Git-58)

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to