summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/dive.h1
-rw-r--r--core/file.c6
-rw-r--r--core/git-access.h1
-rw-r--r--mobile-widgets/qmlmanager.cpp16
4 files changed, 18 insertions, 6 deletions
diff --git a/core/dive.h b/core/dive.h
index be721348c..82cda6719 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -675,7 +675,6 @@ extern int parse_cobalt_buffer(sqlite3 *handle, const char *url, const char *buf
extern int parse_divinglog_buffer(sqlite3 *handle, const char *url, const char *buf, int size, struct dive_table *table);
extern int parse_dlf_buffer(unsigned char *buffer, size_t size);
-extern int check_git_sha(const char *filename);
extern int parse_file(const char *filename);
extern int parse_csv_file(const char *filename, char **params, int pnr, const char *csvtemplate);
extern int parse_seabear_csv_file(const char *filename, char **params, int pnr, const char *csvtemplate);
diff --git a/core/file.c b/core/file.c
index 685fa82a7..52c93a719 100644
--- a/core/file.c
+++ b/core/file.c
@@ -435,13 +435,17 @@ static int parse_file_buffer(const char *filename, struct memblock *mem)
return parse_xml_buffer(filename, mem->buffer, mem->size, &dive_table, NULL);
}
-int check_git_sha(const char *filename)
+int check_git_sha(const char *filename, struct git_repository **git_p, const char **branch_p)
{
struct git_repository *git;
const char *branch = NULL;
char *current_sha = strdup(saved_git_id);
git = is_git_repository(filename, &branch, NULL, false);
+ if (git_p)
+ *git_p = git;
+ if (branch_p)
+ *branch_p = branch;
if (prefs.cloud_git_url &&
strstr(filename, prefs.cloud_git_url)
&& git == dummy_git_repository) {
diff --git a/core/git-access.h b/core/git-access.h
index 3a0c5160a..6dbc22488 100644
--- a/core/git-access.h
+++ b/core/git-access.h
@@ -15,6 +15,7 @@ struct git_oid;
struct git_repository;
#define dummy_git_repository ((git_repository *)3ul) /* Random bogus pointer, not NULL */
extern struct git_repository *is_git_repository(const char *filename, const char **branchp, const char **remote, bool dry_run);
+extern int check_git_sha(const char *filename, git_repository **git_p, const char **branch_p);
extern int sync_with_remote(struct git_repository *repo, const char *remote, const char *branch, enum remote_transport rt);
extern int git_save_dives(struct git_repository *, const char *, const char *remote, bool select_only);
extern int git_load_dives(struct git_repository *, const char *);
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index 9b9c15ef2..1f6b1342d 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -352,7 +352,10 @@ void QMLManager::loadDivesWithValidCredentials()
return;
}
QByteArray fileNamePrt = QFile::encodeName(url);
- if (check_git_sha(fileNamePrt.data()) == 0) {
+ git_repository *git;
+ const char *branch;
+ int error;
+ if (check_git_sha(fileNamePrt.data(), &git, &branch) == 0) {
qDebug() << "local cache was current, no need to modify dive list";
appendTextToLog("Cloud sync shows local cache was current");
setLoadFromCloud(true);
@@ -360,8 +363,14 @@ void QMLManager::loadDivesWithValidCredentials()
return;
}
appendTextToLog("Cloud sync brought newer data, reloading the dive list");
-
- int error = parse_file(fileNamePrt.data());
+ clear_dive_file_data();
+ if (git != dummy_git_repository) {
+ appendTextToLog(QString("have repository and branch %1").arg(branch));
+ error = git_load_dives(git, branch);
+ } else {
+ appendTextToLog(QString("didn't receive valid git repo, try again"));
+ error = parse_file(fileNamePrt.data());
+ }
setAccessingCloud(-1);
if (!error) {
report_error("filename is now %s", fileNamePrt.data());
@@ -379,7 +388,6 @@ void QMLManager::loadDivesWithValidCredentials()
if (informational_prefs.unit_system == IMPERIAL)
informational_prefs.units = IMPERIAL_units;
prefs.units = informational_prefs.units;
- clear_dive_file_data();
DiveListModel::instance()->clear();
process_dives(false, false);
DiveListModel::instance()->addAllDives();