Fix issue of saving/loading file with special characters

This commit is contained in:
DreamSourceLab 2020-05-07 13:10:21 +08:00
parent e9b7d9aa5d
commit 26d695837e
9 changed files with 34 additions and 33 deletions

View File

@ -131,8 +131,7 @@ int main(int argc, char *argv[])
dir.cd(QApplication::applicationName()) &&
dir.cd("res")) {
QString res_dir = dir.absolutePath() + "/";
QByteArray str_tmp = res_dir.toLocal8Bit();
strcpy(DS_RES_PATH, str_tmp.data());
strcpy(DS_RES_PATH, res_dir.toUtf8().data());
} else {
qDebug() << "ERROR: config files don't exist.";
return 1;

View File

@ -47,7 +47,7 @@ QString File::format_device_title() const
File* File::create(QString name)
{
if (sr_session_load(name.toLocal8Bit().data()) == SR_OK) {
if (sr_session_load(name.toUtf8().data()) == SR_OK) {
GSList *devlist = NULL;
sr_session_dev_list(&devlist);
sr_session_destroy();
@ -76,7 +76,7 @@ QJsonArray File::get_decoders()
QJsonArray dec_array;
QJsonParseError error;
archive = zip_open(_path.toLocal8Bit().data(), 0, &ret);
archive = zip_open(_path.toUtf8().data(), 0, &ret);
if (archive) {
/* read "decoders" */
if (zip_stat(archive, "decoders", 0, &zs) != -1) {
@ -108,7 +108,7 @@ QJsonDocument File::get_session()
QJsonDocument sessionDoc;
QJsonParseError error;
archive = zip_open(_path.toLocal8Bit().data(), 0, &ret);
archive = zip_open(_path.toUtf8().data(), 0, &ret);
if (archive) {
/* read "decoders" */
if (zip_stat(archive, "session", 0, &zs) != -1) {

View File

@ -87,7 +87,7 @@ sr_input_format* InputFile::determine_input_file_format(const QString filename)
/* Otherwise, try to find an input module that can handle this file. */
for (i = 0; inputs[i]; i++) {
if (inputs[i]->format_match(filename.toLocal8Bit().data()))
if (inputs[i]->format_match(filename.toUtf8().data()))
break;
}
@ -112,7 +112,7 @@ sr_input* InputFile::load_input_file_format(const QString filename,
throw tr("Failed to load file");
}
if (stat(filename.toLocal8Bit().data(), &st) == -1)
if (stat(filename.toUtf8().data(), &st) == -1)
throw tr("Failed to load file");
/* Initialize the input module. */
@ -123,7 +123,7 @@ sr_input* InputFile::load_input_file_format(const QString filename,
in->format = format;
in->param = NULL;
if (in->format->init &&
in->format->init(in, filename.toLocal8Bit().data()) != SR_OK) {
in->format->init(in, filename.toUtf8().data()) != SR_OK) {
throw tr("Failed to load file");
}
@ -139,7 +139,7 @@ void InputFile::run()
assert(_input);
assert(_input->format);
assert(_input->format->loadfile);
_input->format->loadfile(_input, _path.toLocal8Bit().data());
_input->format->loadfile(_input, _path.toUtf8().data());
}
} // device

View File

@ -39,7 +39,7 @@ void SessionFile::use(SigSession *owner)
{
assert(!_sdi);
if (sr_session_load(_path.toLocal8Bit().data()) != SR_OK)
if (sr_session_load(_path.toUtf8().data()) != SR_OK)
throw tr("Failed to open file.\n");
GSList *devlist = NULL;

View File

@ -478,7 +478,7 @@ void MainWindow::reload()
void MainWindow::load_file(QString file_name)
{
try {
if (strncmp(_session.get_device()->name().toLocal8Bit(), "virtual", 7))
if (strncmp(_session.get_device()->name().toUtf8(), "virtual", 7))
session_save();
_session.set_file(file_name);
} catch(QString e) {
@ -540,7 +540,7 @@ void MainWindow::device_detach()
session_save();
_view->hide_calibration();
if (_session.get_device()->dev_inst()->mode != DSO &&
strncmp(_session.get_device()->name().toLocal8Bit(), "virtual", 7)) {
strncmp(_session.get_device()->name().toUtf8(), "virtual", 7)) {
const boost::shared_ptr<data::Snapshot> logic_snapshot(_session.get_snapshot(SR_CHANNEL_LOGIC));
assert(logic_snapshot);
const boost::shared_ptr<data::Snapshot> analog_snapshot(_session.get_snapshot(SR_CHANNEL_ANALOG));
@ -744,7 +744,7 @@ void MainWindow::session_save()
QString file_name = dir.absolutePath() + "/" +
driver_name + mode_name +
lang_name + ".dsc";
if (strncmp(driver_name.toLocal8Bit(), "virtual", 7) &&
if (strncmp(driver_name.toUtf8(), "virtual", 7) &&
!file_name.isEmpty()) {
store_session(file_name);
}
@ -932,7 +932,7 @@ bool MainWindow::load_session_json(QJsonDocument json, bool file_dev)
// check device and mode
const sr_dev_inst *const sdi = _session.get_device()->dev_inst();
if ((!file_dev && strcmp(sdi->driver->name, sessionObj["Device"].toString().toLocal8Bit()) != 0) ||
if ((!file_dev && strcmp(sdi->driver->name, sessionObj["Device"].toString().toUtf8()) != 0) ||
sdi->mode != sessionObj["DeviceMode"].toDouble()) {
dialogs::DSMessageBox msg(this);
msg.mBox()->setText(tr("Session Error"));
@ -1065,7 +1065,7 @@ bool MainWindow::load_session_json(QJsonDocument json, bool file_dev)
if ((s->get_index() == obj["index"].toDouble()) &&
(s->get_type() == obj["type"].toDouble())) {
s->set_colour(QColor(obj["colour"].toString()));
s->set_name(g_strdup(obj["name"].toString().toStdString().c_str()));
s->set_name(g_strdup(obj["name"].toString().toUtf8().data()));
boost::shared_ptr<view::LogicSignal> logicSig;
if ((logicSig = dynamic_pointer_cast<view::LogicSignal>(s))) {
@ -1095,6 +1095,7 @@ bool MainWindow::load_session_json(QJsonDocument json, bool file_dev)
// update UI settings
_sampling_bar->update_sample_rate_selector();
_trigger_widget->device_updated();
_view->header_updated();
// load trigger settings
if (sessionObj.contains("trigger")) {

View File

@ -182,12 +182,12 @@ bool StoreSession::save_start(QString session_file)
if (meta_file == NULL) {
_error = tr("Generate temp file failed.");
} else {
int ret = sr_session_save_init(_file_name.toLocal8Bit().data(),
meta_file.toLocal8Bit().data(),
decoders_file.toLocal8Bit().data(),
session_file.toLocal8Bit().data());
int ret = sr_session_save_init(_file_name.toUtf8().data(),
meta_file.toUtf8().data(),
decoders_file.toUtf8().data(),
session_file.toUtf8().data());
if (ret != SR_OK) {
_error = tr("Failed to create zip file. Please check write permission of this path.");
_error = tr("Failed to create zip file. Initialization error.");
} else {
_thread = boost::thread(&StoreSession::save_proc, this, snapshot);
return !_has_error;
@ -196,7 +196,7 @@ bool StoreSession::save_start(QString session_file)
}
QFile::remove(_file_name);
_error.clear();
//_error.clear();
return false;
}
@ -239,7 +239,7 @@ void StoreSession::save_proc(shared_ptr<data::Snapshot> snapshot)
memset(buf, sample ? 0xff : 0x0, size);
}
}
ret = sr_session_append(_file_name.toLocal8Bit().data(), buf, size,
ret = sr_session_append(_file_name.toUtf8().data(), buf, size,
i, ch_index, ch_type, File_Version);
if (ret != SR_OK) {
if (!_has_error) {
@ -285,13 +285,13 @@ void StoreSession::save_proc(shared_ptr<data::Snapshot> snapshot)
memcpy(tmp, buf, buf_end-buf);
memcpy(tmp+(buf_end-buf), buf_start, buf+size-buf_end);
}
ret = sr_session_append(_file_name.toLocal8Bit().data(), tmp, size,
ret = sr_session_append(_file_name.toUtf8().data(), tmp, size,
i, 0, ch_type, File_Version);
buf += (size - _unit_count);
if (tmp)
free(tmp);
} else {
ret = sr_session_append(_file_name.toLocal8Bit().data(), buf, size,
ret = sr_session_append(_file_name.toUtf8().data(), buf, size,
i, 0, ch_type, File_Version);
buf += size;
}
@ -342,7 +342,7 @@ QString StoreSession::meta_gen(boost::shared_ptr<data::Snapshot> snapshot)
}
const sr_dev_inst *sdi = _session.get_device()->dev_inst();
meta = fopen(metafile.toLocal8Bit().data(), "wb");
meta = fopen(metafile.toUtf8().data(), "wb");
if (meta == NULL) {
qDebug() << "Failed to create temp meta file.";
return NULL;
@ -572,7 +572,7 @@ bool StoreSession::export_start()
while(*supportedModules){
if(*supportedModules == NULL)
break;
if(!strcmp((*supportedModules)->id, _suffix.toLocal8Bit().data())){
if(!strcmp((*supportedModules)->id, _suffix.toUtf8().data())){
_outModule = *supportedModules;
break;
}
@ -613,7 +613,7 @@ void StoreSession::export_proc(shared_ptr<data::Snapshot> snapshot)
}
GHashTable *params = g_hash_table_new(g_str_hash, g_str_equal);
GVariant* filenameGVariant = g_variant_new_bytestring(_file_name.toLocal8Bit().data());
GVariant* filenameGVariant = g_variant_new_bytestring(_file_name.toUtf8().data());
g_hash_table_insert(params, (char*)"filename", filenameGVariant);
GVariant* typeGVariant = g_variant_new_int16(channel_type);
g_hash_table_insert(params, (char*)"type", typeGVariant);
@ -999,7 +999,7 @@ void StoreSession::load_decoders(dock::ProtocolDock *widget, QJsonArray dec_arra
else if (g_variant_type_equal(type, G_VARIANT_TYPE_UINT64))
new_value = g_variant_new_uint64(options_obj[opt->id].toInt());
} else if (g_variant_is_of_type(opt->def, G_VARIANT_TYPE("s"))) {
new_value = g_variant_new_string(options_obj[opt->id].toString().toLocal8Bit().data());
new_value = g_variant_new_string(options_obj[opt->id].toString().toUtf8().data());
}
if (new_value != NULL)

View File

@ -287,7 +287,7 @@ bool DsoSignal::load_settings()
} else {
_bits = DefaultBits;
qDebug("Warning: config_get SR_CONF_UNIT_BITS failed, set to %d(default).", DefaultBits);
if (strncmp(_dev_inst->name().toLocal8Bit(), "virtual", 7))
if (strncmp(_dev_inst->name().toUtf8().data(), "virtual", 7))
return false;
}
gvar = _dev_inst->get_config(NULL, NULL, SR_CONF_REF_MIN);
@ -361,7 +361,7 @@ bool DsoSignal::load_settings()
g_variant_unref(gvar);
} else {
qDebug() << "ERROR: config_get SR_CONF_TRIGGER_VALUE failed.";
if (strncmp(_dev_inst->name().toLocal8Bit(), "virtual", 7))
if (strncmp(_dev_inst->name().toUtf8().data(), "virtual", 7))
return false;
}

View File

@ -57,7 +57,7 @@ void Signal::set_name(QString name)
{
Trace::set_name(name);
g_free(_probe->name);
_probe->name = g_strdup(name.toLocal8Bit().data());
_probe->name = g_strdup(name.toUtf8().data());
}
boost::shared_ptr<device::DevInst> Signal::get_device() const

View File

@ -305,6 +305,9 @@ public slots:
void set_trig_time();
bool trig_time_setted();
//
void header_updated();
private slots:
void h_scroll_value_changed(int value);
@ -314,8 +317,6 @@ private slots:
void on_traces_moved();
void header_updated();
void receive_trigger(quint64 trig_pos);
void set_trig_pos(int percent);