void QMLManager::saveChangesLocal() { if (unsaved_changes()) { git_storage_update_progress(true, "saving dives locally"); // reset the timers if (!loadFromCloud()) { // this seems silly, but you need a common ancestor in the repository in // order to be able to merge che changes later appendTextToLog("Don't save dives without loading from the cloud, first."); return; } if (alreadySaving) { appendTextToLog("save operation already in progress, can't save locally"); return; } alreadySaving = true; bool glo = prefs.git_local_only; prefs.git_local_only = true; if (save_dives(existing_filename)) { appendTextToLog(get_error_string()); setAccessingCloud(-1); prefs.git_local_only = glo; alreadySaving = false; return; } prefs.git_local_only = glo; mark_divelist_changed(false); git_storage_update_progress(false, "done with local save"); alreadySaving = false; } else { appendTextToLog("local save requested with no unsaved changes"); } }
void TestParse::testParseHUDC() { char *params[37]; int pnr = 0; params[pnr++] = strdup("timeField"); params[pnr++] = intdup(0); params[pnr++] = strdup("depthField"); params[pnr++] = intdup(1); params[pnr++] = strdup("tempField"); params[pnr++] = intdup(5); params[pnr++] = strdup("po2Field"); params[pnr++] = intdup(-1); params[pnr++] = strdup("o2sensor1Field"); params[pnr++] = intdup(-1); params[pnr++] = strdup("o2sensor2Field"); params[pnr++] = intdup(-1); params[pnr++] = strdup("o2sensor3Field"); params[pnr++] = intdup(-1); params[pnr++] = strdup("cnsField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("ndlField"); params[pnr++] = intdup(2); params[pnr++] = strdup("ttsField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("stopdepthField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("pressureField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("setpointField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("separatorIndex"); params[pnr++] = intdup(2); params[pnr++] = strdup("units"); params[pnr++] = intdup(0); params[pnr++] = strdup("hw"); params[pnr++] = strdup("\"DC text\""); params[pnr++] = NULL; QCOMPARE(parse_csv_file(SUBSURFACE_TEST_DATA "/dives/TestDiveSeabearHUDC.csv", params, pnr - 1, "csv"), 0); QCOMPARE(dive_table.nr, 1); /* * CSV import uses time and date stamps relative to current * time, thus we need to use a static (random) timestamp */ if (dive_table.nr > 0) { struct dive *dive = dive_table.dives[dive_table.nr - 1]; dive->when = 1255152761; dive->dc.when = 1255152761; } QCOMPARE(save_dives("./testhudcout.ssrf"), 0); FILE_COMPARE("./testhudcout.ssrf", SUBSURFACE_TEST_DATA "/dives/TestDiveSeabearHUDC.xml"); }
void TestParse::parseDL7() { char *params[51]; int pnr = 0; params[pnr++] = strdup("dateField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("datefmt"); params[pnr++] = intdup(0); params[pnr++] = strdup("starttimeField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("numberField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("timeField"); params[pnr++] = intdup(1); params[pnr++] = strdup("depthField"); params[pnr++] = intdup(2); params[pnr++] = strdup("tempField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("po2Field"); params[pnr++] = intdup(-1); params[pnr++] = strdup("o2sensor1Field"); params[pnr++] = intdup(-1); params[pnr++] = strdup("o2sensor2Field"); params[pnr++] = intdup(-1); params[pnr++] = strdup("o2sensor3Field"); params[pnr++] = intdup(-1); params[pnr++] = strdup("cnsField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("ndlField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("ttsField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("stopdepthField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("pressureField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("setpointField"); params[pnr++] = intdup(-1); params[pnr++] = strdup("separatorIndex"); params[pnr++] = intdup(3); params[pnr++] = strdup("units"); params[pnr++] = intdup(0); params[pnr++] = strdup("hw"); params[pnr++] = strdup("DL7"); params[pnr++] = 0; clear_dive_file_data(); QCOMPARE(parse_csv_file(SUBSURFACE_TEST_DATA "/dives/DL7.zxu", params, pnr - 1, "DL7"), 0); QCOMPARE(dive_table.nr, 3); QCOMPARE(save_dives("./testdl7out.ssrf"), 0); FILE_COMPARE("./testdl7out.ssrf", SUBSURFACE_TEST_DATA "/dives/DL7.xml"); clear_dive_file_data(); }
void TestParse::testParseDM5() { QCOMPARE(sqlite3_open(SUBSURFACE_TEST_DATA "/dives/TestDiveDM5.db", &_sqlite3_handle), 0); QCOMPARE(parse_dm5_buffer(_sqlite3_handle, 0, 0, 0, &dive_table), 0); QCOMPARE(save_dives("./testdm5out.ssrf"), 0); FILE_COMPARE("./testdm5out.ssrf", SUBSURFACE_TEST_DATA "/dives/TestDiveDM5.xml"); }
void TestParse::testParseMerge() { /* * check that we correctly merge mixed cylinder dives */ QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/ostc.xml", &dive_table), 0); QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/vyper.xml", &dive_table), 0); QCOMPARE(save_dives("./testmerge.ssrf"), 0); FILE_COMPARE("./testmerge.ssrf", SUBSURFACE_TEST_DATA "/dives/mergedVyperOstc.xml"); }
void TestParse::testParseCompareOutput() { QCOMPARE(save_dives("./testout.ssrf"), 0); QFile org(SUBSURFACE_SOURCE "/dives/test40-42.xml"); org.open(QFile::ReadOnly); QFile out("./testout.ssrf"); out.open(QFile::ReadOnly); QTextStream orgS(&org); QTextStream outS(&out); QString readin = orgS.readAll(); QString written = outS.readAll(); QCOMPARE(readin, written); }
void TestParse::testParseCompareNewFormatOutput() { QCOMPARE(save_dives("./testsbnewout.ssrf"), 0); QFile org(SUBSURFACE_SOURCE "/dives/TestDiveSeabearNewFormat.xml"); org.open(QFile::ReadOnly); QFile out("./testsbnewout.ssrf"); out.open(QFile::ReadOnly); QTextStream orgS(&org); QTextStream outS(&out); QString readin = orgS.readAll(); QString written = outS.readAll(); QCOMPARE(readin, written); clear_dive_file_data(); }
void MainWindow::file_save_as(void) { QString filename; const char *default_filename; if (existing_filename) default_filename = existing_filename; else default_filename = prefs.default_filename; filename = QFileDialog::getSaveFileName(this, tr("Save File as"), default_filename, tr("Subsurface XML files (*.ssrf *.xml *.XML)")); if (!filename.isNull() && !filename.isEmpty()) { save_dives(filename.toUtf8().data()); set_filename(filename.toUtf8().data(), TRUE); mark_divelist_changed(FALSE); } }
void MainWindow::file_save(void) { const char *current_default; if (!existing_filename) return file_save_as(); current_default = prefs.default_filename; if (strcmp(existing_filename, current_default) == 0) { /* if we are using the default filename the directory * that we are creating the file in may not exist */ QDir current_def_dir = QFileInfo(current_default).absoluteDir(); if (!current_def_dir.exists()) current_def_dir.mkpath(current_def_dir.absolutePath()); } save_dives(existing_filename); mark_divelist_changed(FALSE); }
void TestParse::testParse() { QCOMPARE(parseCSV(0, SUBSURFACE_TEST_DATA "/dives/test41.csv"), 0); fprintf(stderr, "number of dives %d \n", dive_table.nr); QCOMPARE(parseDivingLog(), 0); fprintf(stderr, "number of dives %d \n", dive_table.nr); QCOMPARE(parseV2NoQuestion(), 0); fprintf(stderr, "number of dives %d \n", dive_table.nr); QCOMPARE(parseV3(), 0); fprintf(stderr, "number of dives %d \n", dive_table.nr); QCOMPARE(save_dives("./testout.ssrf"), 0); FILE_COMPARE("./testout.ssrf", SUBSURFACE_TEST_DATA "/dives/test40-42.xml"); }
void QMLManager::saveChangesLocal() { if (unsaved_changes()) { git_storage_update_progress(true, "saving dives locally"); // reset the timers if (credentialStatus() == NOCLOUD) { if (same_string(existing_filename, "")) { char *filename = NOCLOUD_LOCALSTORAGE; if (git_create_local_repo(filename)) appendTextToLog(get_error_string()); set_filename(filename, true); GeneralSettingsObjectWrapper s(this); s.setDefaultFilename(filename); s.setDefaultFileBehavior(LOCAL_DEFAULT_FILE); qDebug() << "setting default file to" << filename; } } else if (!loadFromCloud()) { // this seems silly, but you need a common ancestor in the repository in // order to be able to merge che changes later appendTextToLog("Don't save dives without loading from the cloud, first."); return; } if (alreadySaving) { appendTextToLog("save operation already in progress, can't save locally"); return; } alreadySaving = true; bool glo = prefs.git_local_only; prefs.git_local_only = true; if (save_dives(existing_filename)) { appendTextToLog(get_error_string()); set_filename(NULL, true); setAccessingCloud(-1); prefs.git_local_only = glo; alreadySaving = false; return; } prefs.git_local_only = glo; mark_divelist_changed(false); git_storage_update_progress(false, "done with local save"); alreadySaving = false; } else { appendTextToLog("local save requested with no unsaved changes"); } }
void MainWindow::on_actionCloudstoragesave_triggered() { QString filename; if (getCloudURL(filename)) { getNotificationWidget()->showNotification(get_error_string(), KMessageWidget::Error); return; } qDebug() << filename; if (information()->isEditing()) information()->acceptChanges(); if (save_dives(filename.toUtf8().data())) { getNotificationWidget()->showNotification(get_error_string(), KMessageWidget::Error); return; } getNotificationWidget()->showNotification(get_error_string(), KMessageWidget::Error); set_filename(filename.toUtf8().data(), true); setTitle(MWTF_FILENAME); mark_divelist_changed(false); }
void TestParse::testParseDLD() { struct memblock mem; QString filename = SUBSURFACE_TEST_DATA "/dives/TestDiveDivelogsDE.DLD"; QVERIFY(readfile(filename.toLatin1().data(), &mem) > 0); QVERIFY(try_to_open_zip(filename.toLatin1().data(), &dive_table) > 0); fprintf(stderr, "number of dives from DLD: %d \n", dive_table.nr); // Compare output /* * DC is not cleared from previous tests with the * clear_dive_file_data(), so we do have an additional DC nick * name field on the log. */ QCOMPARE(save_dives("./testdldout.ssrf"), 0); FILE_COMPARE("./testdldout.ssrf", SUBSURFACE_TEST_DATA "/dives/TestDiveDivelogsDE.xml") }
static void file_save(GtkWidget *w, gpointer data) { GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new("Save File", GTK_WINDOW(main_window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); if (!existing_filename) { gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), "Untitled document"); } else gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), existing_filename); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); save_dives(filename); g_free(filename); } gtk_widget_destroy(dialog); }
void TestParse::testParseNewFormat() { QDir dir; QStringList filter; QStringList files; /* * Set the directory location and file filter for H3 CSV files. */ dir = QString::fromLatin1(SUBSURFACE_TEST_DATA "/dives"); filter << "TestDiveSeabearH3*.csv"; filter << "TestDiveSeabearT1*.csv"; files = dir.entryList(filter, QDir::Files); /* * Parse all files found matching the filter. */ for (int i = 0; i < files.size(); ++i) { QCOMPARE(parse_seabear_log(QString::fromLatin1(SUBSURFACE_TEST_DATA "/dives/") .append(files.at(i)) .toLatin1() .data()), 0); QCOMPARE(dive_table.nr, i + 1); } fprintf(stderr, "number of dives %d \n", dive_table.nr); QCOMPARE(save_dives("./testsbnewout.ssrf"), 0); // Currently the CSV parse fails FILE_COMPARE("./testsbnewout.ssrf", SUBSURFACE_TEST_DATA "/dives/TestDiveSeabearNewFormat.xml"); }