void print_files() { const char *branch = 0; const char *remote = 0; const char *filename, *local_git; filename = cloud_url(); is_git_repository(filename, &branch, &remote, true); printf("\nFile locations:\n\n"); if (branch && remote) { local_git = get_local_dir(remote, branch); printf("Local git storage: %s\n", local_git); } else { printf("Unable to get local git directory\n"); } char *tmp = cloud_url(); printf("Cloud URL: %s\n", tmp); free(tmp); tmp = hashfile_name_string(); printf("Image hashes: %s\n", tmp); free(tmp); tmp = picturedir_string(); printf("Local picture directory: %s\n\n", tmp); free(tmp); }
void print_files() { const char *branch = 0; const char *remote = 0; const char *filename, *local_git; printf("\nFile locations:\n\n"); if (!empty_string(prefs.cloud_storage_email) && !empty_string(prefs.cloud_storage_password)) { filename = cloud_url(); is_git_repository(filename, &branch, &remote, true); } else { /* strdup so the free below works in either case */ filename = strdup("No valid cloud credentials set.\n"); } if (branch && remote) { local_git = get_local_dir(remote, branch); printf("Local git storage: %s\n", local_git); } else { printf("Unable to get local git directory\n"); } printf("Cloud URL: %s\n", filename); free((void *)filename); char *tmp = hashfile_name_string(); printf("Image filename table: %s\n", tmp); free(tmp); tmp = picturedir_string(); printf("Local picture directory: %s\n\n", tmp); free(tmp); }
int save_dives_logic(const char *filename, const bool select_only) { struct membuffer buf = { 0 }; FILE *f; void *git; const char *branch; int error; git = is_git_repository(filename, &branch); if (git) return git_save_dives(git, branch, select_only); try_to_backup(filename); save_dives_buffer(&buf, select_only); error = -1; f = subsurface_fopen(filename, "w"); if (f) { flush_buffer(&buf, f); error = fclose(f); } if (error) report_error("Save failed (%s)", strerror(errno)); free_buffer(&buf); return error; }
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) { /* opening the cloud storage repository failed for some reason, * so we don't know if there is additional data in the remote */ free(current_sha); return 1; } /* if this is a git repository, do we already have this exact state loaded ? * get the SHA and compare with what we currently have */ if (git && git != dummy_git_repository) { const char *sha = get_sha(git, branch); if (!same_string(sha, "") && same_string(sha, current_sha)) { fprintf(stderr, "already have loaded SHA %s - don't load again\n", sha); free(current_sha); return 0; } } free(current_sha); return 1; }
int parse_file(const char *filename) { struct git_repository *git; const char *branch; struct memblock mem; char *fmt; int ret; git = is_git_repository(filename, &branch, NULL); if (prefs.cloud_git_url && strstr(filename, prefs.cloud_git_url) && git == dummy_git_repository) /* opening the cloud storage repository failed for some reason * give up here and don't send errors about git repositories */ return 0; if (git && !git_load_dives(git, branch)) return 0; if (readfile(filename, &mem) < 0) { /* we don't want to display an error if this was the default file or the cloud storage */ if ((prefs.default_filename && !strcmp(filename, prefs.default_filename)) || isCloudUrl(filename)) return 0; return report_error(translate("gettextFromC", "Failed to read '%s'"), filename); } fmt = strrchr(filename, '.'); if (fmt && (!strcasecmp(fmt + 1, "DB") || !strcasecmp(fmt + 1, "BAK") || !strcasecmp(fmt + 1, "SQL"))) { if (!try_to_open_db(filename, &mem)) { free(mem.buffer); return 0; } } /* Divesoft Freedom */ if (fmt && (!strcasecmp(fmt + 1, "DLF"))) { if (!parse_dlf_buffer(mem.buffer, mem.size)) { free(mem.buffer); return 0; } return -1; } /* DataTrak/Wlog */ if (fmt && !strcasecmp(fmt + 1, "LOG")) { datatrak_import(filename, &dive_table); return 0; } /* OSTCtools */ if (fmt && (!strcasecmp(fmt + 1, "DIVE"))) { ostctools_import(filename, &dive_table); return 0; } ret = parse_file_buffer(filename, &mem); free(mem.buffer); return ret; }
int parse_file(const char *filename) { struct git_repository *git; const char *branch = NULL; char *current_sha = copy_string(saved_git_id); struct memblock mem; char *fmt; int ret; git = is_git_repository(filename, &branch, NULL, false); if (prefs.cloud_git_url && strstr(filename, prefs.cloud_git_url) && git == dummy_git_repository) { /* opening the cloud storage repository failed for some reason * give up here and don't send errors about git repositories */ free(current_sha); return -1; } /* if this is a git repository, do we already have this exact state loaded ? * get the SHA and compare with what we currently have */ if (git && git != dummy_git_repository) { const char *sha = get_sha(git, branch); if (!same_string(sha, "") && same_string(sha, current_sha) && !unsaved_changes()) { fprintf(stderr, "already have loaded SHA %s - don't load again\n", sha); free(current_sha); return 0; } } free(current_sha); if (git) return git_load_dives(git, branch); if ((ret = readfile(filename, &mem)) < 0) { /* we don't want to display an error if this was the default file or the cloud storage */ if ((prefs.default_filename && !strcmp(filename, prefs.default_filename)) || isCloudUrl(filename)) return 0; return report_error(translate("gettextFromC", "Failed to read '%s'"), filename); } else if (ret == 0) { return report_error(translate("gettextFromC", "Empty file '%s'"), filename); } fmt = strrchr(filename, '.'); if (fmt && (!strcasecmp(fmt + 1, "DB") || !strcasecmp(fmt + 1, "BAK") || !strcasecmp(fmt + 1, "SQL"))) { if (!try_to_open_db(filename, &mem)) { free(mem.buffer); return 0; } } /* Divesoft Freedom */ if (fmt && (!strcasecmp(fmt + 1, "DLF"))) { if (!parse_dlf_buffer(mem.buffer, mem.size)) { free(mem.buffer); return 0; } return -1; } /* DataTrak/Wlog */ if (fmt && !strcasecmp(fmt + 1, "LOG")) { datatrak_import(filename, &dive_table); return 0; } /* OSTCtools */ if (fmt && (!strcasecmp(fmt + 1, "DIVE"))) { ostctools_import(filename, &dive_table); return 0; } ret = parse_file_buffer(filename, &mem); free(mem.buffer); return ret; }