diff options
-rw-r--r-- | dive.h | 6 | ||||
-rw-r--r-- | load-git.c | 12 | ||||
-rw-r--r-- | parse-xml.c | 25 | ||||
-rw-r--r-- | qt-ui/preferences.cpp | 11 | ||||
-rw-r--r-- | qt-ui/preferences.ui | 27 | ||||
-rw-r--r-- | qt-ui/subsurfacewebservices.cpp | 39 | ||||
-rw-r--r-- | qt-ui/subsurfacewebservices.h | 11 | ||||
-rw-r--r-- | qt-ui/webservices.ui | 9 | ||||
-rw-r--r-- | save-git.c | 8 | ||||
-rw-r--r-- | save-xml.c | 5 |
10 files changed, 148 insertions, 5 deletions
@@ -887,6 +887,12 @@ extern double strtod_flags(const char *str, const char **ptr, unsigned int flags #define ascii_strtod(str, ptr) strtod_flags(str, ptr, STRTOD_ASCII) +extern short save_userid_local; +extern char* userid; + +extern void set_save_userid_local(short value); +extern void set_userid(char* user_id); + #ifdef __cplusplus } #endif diff --git a/load-git.c b/load-git.c index 4040c1677..f4467d178 100644 --- a/load-git.c +++ b/load-git.c @@ -572,6 +572,14 @@ static void parse_trip_notes(char *line, struct membuffer *str, void *_trip) static void parse_settings_autogroup(char *line, struct membuffer *str, void *_unused) { set_autogroup(1); } +static void parse_settings_userid(char *line, struct membuffer *str, void *_unused) +{ + if (line) { + set_save_userid_local(true); + set_userid(line); + } +} + /* * Our versioning is a joke right now, but this is more of an example of what we * *can* do some day. And if we do change the version, this warning will show if @@ -700,7 +708,7 @@ static void trip_parser(char *line, struct membuffer *str, void *_trip) static struct keyword_action settings_action[] = { #undef D #define D(x) { #x, parse_settings_ ## x } - D(autogroup), D(divecomputerid), D(subsurface), D(version), + D(autogroup), D(divecomputerid), D(subsurface), D(userid), D(version), }; static void settings_parser(char *line, struct membuffer *str, void *_unused) @@ -1158,6 +1166,8 @@ static int parse_settings_entry(git_repository *repo, const git_tree_entry *entr git_blob *blob = git_tree_entry_blob(repo, entry); if (!blob) return report_error("Unable to read settings file"); + set_save_userid_local(false); + set_userid(""); for_each_line(blob, settings_parser, NULL); git_blob_free(blob); return 0; diff --git a/parse-xml.c b/parse-xml.c index 483187a51..966e56726 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -112,6 +112,7 @@ static struct { } dc; } cur_settings; static bool in_settings = false; +static bool in_userid = false; static struct tm cur_tm; static int cur_cylinder_index, cur_ws_index; static int lastndl, laststoptime, laststopdepth, lastcns, lastpo2, lastindeco; @@ -858,6 +859,12 @@ static void try_to_fill_sample(struct sample *sample, const char *name, char *bu nonmatch("sample", name, buf); } +void try_to_fill_userid(const char *name, char *buf) +{ + if (save_userid_local) + set_userid(buf); +} + static const char *country, *city; static void divinglog_place(char *place, void *_location) @@ -1367,8 +1374,23 @@ static void divecomputer_end(void) cur_dc = NULL; } +static void userid_start(void) +{ + in_userid = true; + set_save_userid_local(true); //if the xml contains userid, keep saving it. +} + +static void userid_stop(void) +{ + in_userid = false; +} + static void entry(const char *name, char *buf) { + if (in_userid) { + try_to_fill_userid(name, buf); + return; + } if (in_settings) { try_to_fill_dc_settings(name, buf); try_to_match_autogroup(name, buf); @@ -1515,6 +1537,7 @@ static struct nesting { { "weightsystem", ws_start, ws_end }, { "divecomputer", divecomputer_start, divecomputer_end }, { "P", sample_start, sample_end }, + { "userid", userid_start, userid_stop}, /* Import type recognition */ { "Divinglog", DivingLog_importer }, @@ -1602,6 +1625,8 @@ void parse_xml_buffer(const char *url, const char *buffer, int size, report_error(translate("gettextFromC", "Failed to parse '%s'"), url); return; } + set_save_userid_local(false); + set_userid(""); reset_all(); dive_start(); doc = test_xslt_transforms(doc, params); diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp index 1e87662a1..b22991c5b 100644 --- a/qt-ui/preferences.cpp +++ b/qt-ui/preferences.cpp @@ -100,6 +100,10 @@ void PreferencesDialog::setUiFromPrefs() connect(ui.languageFilter, SIGNAL(textChanged(QString)), filterModel, SLOT(setFilterFixedString(QString))); QSettings s; + + ui.save_uid_local->setChecked(s.value("save_uid_local").toBool()); + ui.default_uid->setText(s.value("subsurface_webservice_uid").toString().toUpper()); + s.beginGroup("Language"); ui.languageSystemDefault->setChecked(s.value("UseSystemLanguage", true).toBool()); QAbstractItemModel *m = ui.languageView->model(); @@ -170,6 +174,9 @@ void PreferencesDialog::syncSettings() { QSettings s; + s.setValue("subsurface_webservice_uid", ui.default_uid->text().toUpper()); + set_save_userid_local(ui.save_uid_local->checkState()); + // Graph s.beginGroup("TecDetails"); @@ -235,6 +242,10 @@ void PreferencesDialog::loadSettings() QSettings s; QVariant v; + + ui.save_uid_local->setChecked(s.value("save_uid_local").toBool()); + ui.default_uid->setText(s.value("subsurface_webservice_uid").toString().toUpper()); + s.beginGroup("Units"); if (s.value("unit_system").toString() == "metric") { prefs.unit_system = METRIC; diff --git a/qt-ui/preferences.ui b/qt-ui/preferences.ui index 502cc2915..485577d33 100644 --- a/qt-ui/preferences.ui +++ b/qt-ui/preferences.ui @@ -265,6 +265,33 @@ </widget> </item> <item> + <widget class="QGroupBox" name="groupBox_8"> + <property name="title"> + <string>Subsurface Webservice</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_7"> + <item> + <widget class="QLabel" name="label_16"> + <property name="text"> + <string>Default User ID</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="default_uid"> + </widget> + </item> + <item> + <widget class="QCheckBox" name="save_uid_local"> + <property name="text"> + <string>Save User ID locally?</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> <spacer name="verticalSpacer_2"> <property name="orientation"> <enum>Qt::Vertical</enum> diff --git a/qt-ui/subsurfacewebservices.cpp b/qt-ui/subsurfacewebservices.cpp index d6d0debee..1b8eab129 100644 --- a/qt-ui/subsurfacewebservices.cpp +++ b/qt-ui/subsurfacewebservices.cpp @@ -312,12 +312,16 @@ void WebServices::resetState() SubsurfaceWebServices::SubsurfaceWebServices(QWidget *parent, Qt::WindowFlags f) : WebServices(parent, f) { QSettings s; - ui.userID->setText(s.value("subsurface_webservice_uid").toString().toUpper()); + if (!save_userid_local || !*userid) + ui.userID->setText(s.value("subsurface_webservice_uid").toString().toUpper()); + else + ui.userID->setText(userid); hidePassword(); hideUpload(); ui.progressBar->setFormat("Enter User ID and click Download"); ui.progressBar->setRange(0, 1); ui.progressBar->setValue(-1); + ui.saveUidLocal->setChecked(save_userid_local); } void SubsurfaceWebServices::buttonClicked(QAbstractButton *button) @@ -339,7 +343,20 @@ void SubsurfaceWebServices::buttonClicked(QAbstractButton *button) /* store last entered uid in config */ QSettings s; - s.setValue("subsurface_webservice_uid", ui.userID->text().toUpper()); + QString qDialogUid = ui.userID->text().toUpper(); + bool qSaveUid = ui.saveUidLocal->checkState(); + set_save_userid_local(qSaveUid); + if (qSaveUid) { + QString qSettingUid = s.value("subsurface_webservice_uid").toString(); + QString qFileUid = QString::fromStdString(userid); + bool s_eq_d = (qSettingUid == qDialogUid); + bool d_eq_f = (qDialogUid == qFileUid); + if (!d_eq_f || s_eq_d) + s.setValue("subsurface_webservice_uid", qDialogUid); + set_userid(qDialogUid.toLocal8Bit().data()); + } else { + s.setValue("subsurface_webservice_uid", qDialogUid); + } s.sync(); hide(); close(); @@ -626,6 +643,7 @@ DivelogsDeWebServices::DivelogsDeWebServices(QWidget *parent, Qt::WindowFlags f) QSettings s; ui.userID->setText(s.value("divelogde_user").toString()); ui.password->setText(s.value("divelogde_pass").toString()); + ui.saveUidLocal->hide(); hideUpload(); } @@ -883,3 +901,20 @@ void DivelogsDeWebServices::buttonClicked(QAbstractButton *button) break; } } + +#define MAX_USERID_SIZE 32 +short save_userid_local = false; +char *userid = NULL; +void set_save_userid_local(short value) +{ + QSettings s; + s.setValue("save_uid_local", value); + save_userid_local = value; +} + +void set_userid(char *rUserId) +{ + userid = (char *) malloc(MAX_USERID_SIZE); + if (userid && rUserId) + strcpy(userid, rUserId); +} diff --git a/qt-ui/subsurfacewebservices.h b/qt-ui/subsurfacewebservices.h index 175c99109..f3fbb5b63 100644 --- a/qt-ui/subsurfacewebservices.h +++ b/qt-ui/subsurfacewebservices.h @@ -98,4 +98,15 @@ private: bool uploadMode; }; +#ifdef __cplusplus +extern "C" { +#endif +extern short save_userid_local; +extern char *userid; +extern void set_save_userid_local(short value); +extern void set_userid(char *user_id); +#ifdef __cplusplus +} +#endif + #endif // SUBSURFACEWEBSERVICES_H diff --git a/qt-ui/webservices.ui b/qt-ui/webservices.ui index 295c25218..a55b9175d 100644 --- a/qt-ui/webservices.ui +++ b/qt-ui/webservices.ui @@ -45,7 +45,7 @@ </property> </widget> </item> - <item row="4" column="0" colspan="3"> + <item row="5" column="0" colspan="3"> <widget class="QDialogButtonBox" name="buttonBox"> <property name="orientation"> <enum>Qt::Horizontal</enum> @@ -79,6 +79,13 @@ </property> </widget> </item> + <item row="4" column="0" colspan="4"> + <widget class="QCheckBox" name="saveUidLocal"> + <property name="text"> + <string>Save User ID locally?</string> + </property> + </widget> + </item> <item row="1" column="0"> <widget class="QLabel" name="passLabel"> <property name="text"> diff --git a/save-git.c b/save-git.c index 634db6606..2e8b608f8 100644 --- a/save-git.c +++ b/save-git.c @@ -678,6 +678,13 @@ static struct dir *mktree(struct dir *dir, const char *fmt, ...) return subdir; } +static void save_userid(void *_b) +{ + struct membuffer *b = _b; + if (save_userid_local) + put_format(b, "userid %30s", userid); +} + static void save_one_device(void *_b, const char *model, uint32_t deviceid, const char *nickname, const char *serial, const char *firmware) { @@ -706,6 +713,7 @@ static void save_settings(git_repository *repo, struct dir *tree) struct membuffer b = { 0 }; put_format(&b, "version %d\n", VERSION); + save_userid(&b); call_for_each_dc(&b, save_one_device); cond_put_format(autogroup, &b, "autogroup\n"); diff --git a/save-xml.c b/save-xml.c index 61a9300bb..0aed92094 100644 --- a/save-xml.c +++ b/save-xml.c @@ -508,10 +508,13 @@ void save_dives_buffer(struct membuffer *b, const bool select_only) put_format(b, "<divelog program='subsurface' version='%d'>\n<settings>\n", VERSION); + if (save_userid_local) + put_format(b, " <userid>%s</userid>\n", userid); + /* save the dive computer nicknames, if any */ call_for_each_dc(b, save_one_device); if (autogroup) - put_format(b, "<autogroup state='1' />\n"); + put_format(b, " <autogroup state='1' />\n"); put_format(b, "</settings>\n<dives>\n"); for (trip = dive_trip_list; trip != NULL; trip = trip->next) |