void ExportObjectDialog::saveAllEntries() { QDir save_in_dir(wsApp->lastOpenDir()); QString save_in_path; // // We want the user to be able to specify a directory in which // to drop files for all the objects, not a file name. // // XXX - what we *really* want is something that asks the user // for an existing directory *but* lets them create a new // directory in the process. That's what we get on macOS, // as the native dialog is used, and it supports that; does // that also work on Windows and with Qt's own dialog? // save_in_path = WiresharkFileDialog::getExistingDirectory(this, wsApp->windowTitleString(tr("Save All Objects In" UTF8_HORIZONTAL_ELLIPSIS)), save_in_dir.canonicalPath(), QFileDialog::ShowDirsOnly); if (save_in_path.length() < 1 || save_in_path.length() > EXPORT_OBJECT_MAXFILELEN) return; if (!model_.saveAllEntries(save_in_path)) { QMessageBox::warning( this, tr("Object Export"), tr("Some files could not be saved."), QMessageBox::Ok ); } }
void ExportObjectDialog::saveAllEntries() { int i; QTreeWidgetItem *item; QDir save_in_dir(wsApp->lastOpenDir()); QString save_in_path; bool all_saved = true; // // We want the user to be able to specify a directory in which // to drop files for all the objects, not a file name. // // XXX - what we *really* want is something that asks the user // for an existing directory *but* lets them create a new // directory in the process. That's what we get on OS X, // as the native dialog is used, and it supports that; does // that also work on Windows and with Qt's own dialog? // save_in_path = QFileDialog::getExistingDirectory(this, wsApp->windowTitleString(tr("Save All Objects In" UTF8_HORIZONTAL_ELLIPSIS)), save_in_dir.canonicalPath(), QFileDialog::ShowDirsOnly); if (save_in_path.length() < 1 || save_in_path.length() > MAXFILELEN) return; for (i = 0; (item = eo_ui_->objectTree->topLevelItem(i)) != NULL; i++) { int count = 0; gchar *save_as_fullpath = NULL; export_object_entry_t *entry = item->data(0, Qt::UserRole).value<export_object_entry_t *>(); if (!entry) continue; do { GString *safe_filename; g_free(save_as_fullpath); if (entry->filename) safe_filename = eo_massage_str(entry->filename, MAXFILELEN - save_in_path.length(), count); else { char generic_name[256]; const char *ext; ext = ct2ext(entry->content_type); g_snprintf(generic_name, sizeof(generic_name), "object%u%s%s", entry->pkt_num, ext ? "." : "", ext ? ext : ""); safe_filename = eo_massage_str(generic_name, MAXFILELEN - save_in_path.length(), count); } save_as_fullpath = g_build_filename(save_in_path.toUtf8().constData(), safe_filename->str, NULL); g_string_free(safe_filename, TRUE); } while (g_file_test(save_as_fullpath, G_FILE_TEST_EXISTS) && ++count < 1000); if (!eo_save_entry(save_as_fullpath, entry, FALSE)) all_saved = false; g_free(save_as_fullpath); save_as_fullpath = NULL; } if (!all_saved) { QMessageBox::warning( this, tr("Object Export"), tr("Some files could not be saved."), QMessageBox::Ok ); } }