Adding image management
Guido Lerch
guido.lerch at gmail.com
Mon Oct 12 15:36:25 PDT 2015
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.subsurface-divelog.org/pipermail/subsurface/attachments/20151013/d8539d0a/attachment-0001.html>
-------------- next part --------------
From 6c064ab0e04e046d2407a62630fcc9e3c0bd7a24 Mon Sep 17 00:00:00 2001
From: Guido Lerch <guido.lerch at gmail.com>
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 <guido.lerch at gmail.com>
---
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)
-------------- next part --------------
From e6f3c8bb2cc6474d1e60151153d236f8567c1298 Mon Sep 17 00:00:00 2001
From: Guido Lerch <guido.lerch at gmail.com>
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 <guido.lerch at gmail.com>
---
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)
More information about the subsurface
mailing list