Skip to content

Commit

Permalink
fixed issue where user would be presented with a useless blank messag…
Browse files Browse the repository at this point in the history
…ebox during a failure to load a session file.

related to issue #628

I still don't know WHY it sometimes fails, but at least now we'll get a reason when it happens, and hopefully it will be one which the user can address.
  • Loading branch information
eteran committed Apr 10, 2018
1 parent 239222a commit 28fb720
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 32 deletions.
66 changes: 34 additions & 32 deletions src/session/SessionManager.cpp
Expand Up @@ -43,45 +43,45 @@ SessionManager& SessionManager::instance() {
bool SessionManager::load_session(const QString &session_file, SessionError& session_error) {

QFile file(session_file);
if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QByteArray json = file.readAll();
QJsonParseError error;
auto doc = QJsonDocument::fromJson(json, &error);
if(error.error != QJsonParseError::NoError) {
session_error.err = SessionError::UnknownError;
session_error.setErrorMessage(QString("An error occured while loading session JSON file. %1").arg(error.errorString()));

return false;
}

if(!doc.isObject()) {
session_error.err = SessionError::NotAnObject;
session_error.setErrorMessage("Session file is invalid. Not an object.");
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
session_error.err = SessionError::InvalidSessionFile;
session_error.setErrorMessage(tr("Failed to open session file. %1").arg(file.errorString()));
return false;
}

return false;
}
QByteArray json = file.readAll();
QJsonParseError error;
auto doc = QJsonDocument::fromJson(json, &error);
if(error.error != QJsonParseError::NoError) {
session_error.err = SessionError::UnknownError;
session_error.setErrorMessage(tr("An error occured while loading session JSON file. %1").arg(error.errorString()));
return false;
}

QJsonObject object = doc.object();
session_data = object.toVariantMap();
if(!doc.isObject()) {
session_error.err = SessionError::NotAnObject;
session_error.setErrorMessage(tr("Session file is invalid. Not an object."));
return false;
}

QString id = session_data["id"].toString();
QString ts = session_data["timestamp"].toString();
int version = session_data["version"].toInt();
QJsonObject object = doc.object();
session_data = object.toVariantMap();

Q_UNUSED(ts);
QString id = session_data["id"].toString();
QString ts = session_data["timestamp"].toString();
int version = session_data["version"].toInt();

if(id != SessionFileIdString || version > SessionFileVersion) {
session_error.err = SessionError::InvalidSessionFile;
session_error.setErrorMessage("Session file is invalid.");
Q_UNUSED(ts);

return false;
}
if(id != SessionFileIdString || version > SessionFileVersion) {
session_error.err = SessionError::InvalidSessionFile;
session_error.setErrorMessage(tr("Session file is invalid."));
return false;
}

qDebug("Loading session file");
load_plugin_data(); //First, load the plugin-data
return true;
}
return false;
qDebug("Loading session file");
load_plugin_data(); //First, load the plugin-data
return true;
}

//------------------------------------------------------------------------------
Expand Down Expand Up @@ -128,6 +128,7 @@ void SessionManager::save_session(const QString &session_file) {
file.write(json);
}
}

void SessionManager::load_plugin_data() {

qDebug("Loading plugin-data");
Expand Down Expand Up @@ -157,6 +158,7 @@ void SessionManager::load_plugin_data() {
void SessionManager::get_comments(QVariantList &data) {
data = session_data["comments"].toList();
}

/**
* Adds a comment to the session_data
* @param Comment & (struct in Types.h)
Expand Down
3 changes: 3 additions & 0 deletions src/session/SessionManager.h
Expand Up @@ -24,8 +24,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.

#include <QString>
#include <QVariant>
#include <QCoreApplication>

class SessionManager {
Q_DECLARE_TR_FUNCTIONS(SessionManager)

public:
static SessionManager &instance();
bool load_session(const QString &, SessionError&);
Expand Down

0 comments on commit 28fb720

Please sign in to comment.