diff options
-rw-r--r-- | core/dive.h | 1 | ||||
-rw-r--r-- | core/file.c | 6 | ||||
-rw-r--r-- | core/git-access.h | 1 | ||||
-rw-r--r-- | mobile-widgets/qmlmanager.cpp | 16 |
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(); |