2015-06-04 13:29:50 +03:00
|
|
|
#include "qmlmanager.h"
|
2015-06-04 13:36:36 +03:00
|
|
|
#include <QUrl>
|
2015-07-10 10:47:26 +03:00
|
|
|
#include <QSettings>
|
2015-07-12 17:39:13 -07:00
|
|
|
#include <QDebug>
|
2015-06-04 13:29:50 +03:00
|
|
|
|
2015-06-11 09:56:18 +03:00
|
|
|
#include "qt-models/divelistmodel.h"
|
|
|
|
#include "divelist.h"
|
2015-07-10 10:47:26 +03:00
|
|
|
#include "pref.h"
|
2015-07-10 11:31:24 +03:00
|
|
|
#include "qthelper.h"
|
2015-07-12 17:39:13 -07:00
|
|
|
#include "qt-gui.h"
|
|
|
|
|
2015-11-11 11:16:59 -08:00
|
|
|
void qmlUiShowMessage(const char *errorString)
|
2015-07-12 17:39:13 -07:00
|
|
|
{
|
2015-07-27 09:14:06 -07:00
|
|
|
if (qqWindowObject && !qqWindowObject->setProperty("messageText", QVariant(errorString)))
|
2015-07-12 17:39:13 -07:00
|
|
|
qDebug() << "couldn't set property messageText to" << errorString;
|
|
|
|
}
|
2015-06-09 22:20:44 +03:00
|
|
|
|
2015-11-11 15:19:09 -08:00
|
|
|
QMLManager::QMLManager() :
|
|
|
|
m_locationServiceEnabled(false)
|
2015-06-04 13:29:50 +03:00
|
|
|
{
|
2015-11-11 12:32:54 -08:00
|
|
|
// create location manager service
|
2015-11-18 18:10:58 -08:00
|
|
|
locationProvider = new GpsLocation(&qmlUiShowMessage, this);
|
2015-11-11 12:32:54 -08:00
|
|
|
|
|
|
|
// Initialize cloud credentials.
|
2015-07-10 10:47:26 +03:00
|
|
|
setCloudUserName(prefs.cloud_storage_email);
|
|
|
|
setCloudPassword(prefs.cloud_storage_password);
|
2015-07-21 11:57:10 +03:00
|
|
|
setSaveCloudPassword(prefs.save_password_local);
|
2015-11-18 13:14:19 -08:00
|
|
|
// if the cloud credentials are valid, we should get the GPS Webservice ID as well
|
|
|
|
if (!same_string(prefs.cloud_storage_email, "") &&
|
|
|
|
!same_string(prefs.cloud_storage_password, "") &&
|
|
|
|
same_string(prefs.userid, ""))
|
|
|
|
locationProvider->getUserid(prefs.cloud_storage_email, prefs.cloud_storage_password);
|
|
|
|
|
2015-11-14 09:10:06 -08:00
|
|
|
setDistanceThreshold(prefs.distance_threshold);
|
|
|
|
setTimeThreshold(prefs.time_threshold / 60);
|
2015-07-27 09:15:04 -07:00
|
|
|
if (!same_string(prefs.cloud_storage_email, "") && !same_string(prefs.cloud_storage_password, ""))
|
|
|
|
loadDives();
|
2015-06-04 13:29:50 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
QMLManager::~QMLManager()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2015-07-10 10:47:26 +03:00
|
|
|
void QMLManager::savePreferences()
|
|
|
|
{
|
|
|
|
QSettings s;
|
2015-11-18 13:14:19 -08:00
|
|
|
bool cloudCredentialsChanged = false;
|
2015-11-14 09:10:06 -08:00
|
|
|
s.beginGroup("LocationService");
|
|
|
|
s.setValue("time_threshold", timeThreshold() * 60);
|
|
|
|
prefs.time_threshold = timeThreshold() * 60;
|
|
|
|
s.setValue("distance_threshold", distanceThreshold());
|
|
|
|
prefs.distance_threshold = distanceThreshold();
|
|
|
|
s.endGroup();
|
2015-07-10 10:47:26 +03:00
|
|
|
s.beginGroup("CloudStorage");
|
|
|
|
s.setValue("email", cloudUserName());
|
2015-07-21 11:57:10 +03:00
|
|
|
s.setValue("save_password_local", saveCloudPassword());
|
|
|
|
if (saveCloudPassword())
|
|
|
|
s.setValue("password", cloudPassword());
|
2015-07-10 10:47:26 +03:00
|
|
|
s.sync();
|
2015-07-12 17:39:13 -07:00
|
|
|
if (!same_string(prefs.cloud_storage_email, qPrintable(cloudUserName()))) {
|
|
|
|
free(prefs.cloud_storage_email);
|
|
|
|
prefs.cloud_storage_email = strdup(qPrintable(cloudUserName()));
|
2015-11-18 13:14:19 -08:00
|
|
|
cloudCredentialsChanged = true;
|
2015-07-12 17:39:13 -07:00
|
|
|
}
|
2015-11-18 13:12:34 -08:00
|
|
|
if (saveCloudPassword() != prefs.save_password_local)
|
2015-07-21 11:57:10 +03:00
|
|
|
prefs.save_password_local = saveCloudPassword();
|
2015-11-18 13:14:19 -08:00
|
|
|
|
|
|
|
cloudCredentialsChanged |= !same_string(prefs.cloud_storage_password, qPrintable(cloudPassword()));
|
|
|
|
|
2015-07-21 11:57:10 +03:00
|
|
|
if (saveCloudPassword()) {
|
|
|
|
if (!same_string(prefs.cloud_storage_password, qPrintable(cloudPassword()))) {
|
|
|
|
free(prefs.cloud_storage_password);
|
|
|
|
prefs.cloud_storage_password = strdup(qPrintable(cloudPassword()));
|
|
|
|
}
|
2015-07-12 17:39:13 -07:00
|
|
|
}
|
2015-11-18 13:14:19 -08:00
|
|
|
// if the cloud credentials are valid, we should get the GPS Webservice ID as well
|
|
|
|
if (!same_string(prefs.cloud_storage_email, "") &&
|
|
|
|
!same_string(prefs.cloud_storage_password, "")) {
|
|
|
|
if (same_string(prefs.userid, "") || cloudCredentialsChanged) {
|
|
|
|
QString userid = locationProvider->getUserid(prefs.cloud_storage_email, prefs.cloud_storage_password);
|
|
|
|
if (!userid.isEmpty()) {
|
|
|
|
// overwrite the existing userid
|
|
|
|
free(prefs.userid);
|
|
|
|
prefs.userid = strdup(qPrintable(userid));
|
|
|
|
s.setValue("subsurface_webservice_uid", prefs.userid);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-07-10 10:47:26 +03:00
|
|
|
}
|
2015-07-10 11:31:24 +03:00
|
|
|
|
|
|
|
void QMLManager::loadDives()
|
|
|
|
{
|
2015-11-11 11:16:59 -08:00
|
|
|
qmlUiShowMessage("Loading dives...");
|
2015-08-20 12:08:59 +03:00
|
|
|
appendTextToLog("Loading dives...");
|
2015-07-10 11:31:24 +03:00
|
|
|
QString url;
|
|
|
|
if (getCloudURL(url)) {
|
2015-11-11 11:16:59 -08:00
|
|
|
qmlUiShowMessage(get_error_string());
|
2015-08-19 10:17:52 +03:00
|
|
|
appendTextToLog(get_error_string());
|
2015-07-10 11:31:24 +03:00
|
|
|
return;
|
|
|
|
}
|
2015-07-24 13:18:30 -07:00
|
|
|
clear_dive_file_data();
|
2015-07-10 11:31:24 +03:00
|
|
|
|
|
|
|
QByteArray fileNamePrt = QFile::encodeName(url);
|
|
|
|
int error = parse_file(fileNamePrt.data());
|
|
|
|
if (!error) {
|
2015-07-12 17:39:13 -07:00
|
|
|
report_error("filename is now %s", fileNamePrt.data());
|
2015-11-11 11:16:59 -08:00
|
|
|
qmlUiShowMessage(get_error_string());
|
2015-08-19 10:17:52 +03:00
|
|
|
appendTextToLog(get_error_string());
|
2015-07-10 11:31:24 +03:00
|
|
|
set_filename(fileNamePrt.data(), true);
|
2015-08-20 12:08:59 +03:00
|
|
|
appendTextToLog(fileNamePrt.data());
|
2015-07-12 17:39:13 -07:00
|
|
|
} else {
|
2015-11-11 11:16:59 -08:00
|
|
|
qmlUiShowMessage(get_error_string());
|
2015-08-20 12:08:59 +03:00
|
|
|
appendTextToLog(get_error_string());
|
2015-07-10 11:31:24 +03:00
|
|
|
}
|
|
|
|
process_dives(false, false);
|
2015-07-24 13:18:30 -07:00
|
|
|
|
2015-07-10 11:31:24 +03:00
|
|
|
int i;
|
|
|
|
struct dive *d;
|
|
|
|
|
2015-07-24 13:18:30 -07:00
|
|
|
for_each_dive(i, d) {
|
|
|
|
DiveListModel::instance()->addDive(d);
|
|
|
|
}
|
2015-07-17 18:28:01 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
void QMLManager::commitChanges(QString diveId, QString suit, QString buddy, QString diveMaster, QString notes)
|
|
|
|
{
|
|
|
|
struct dive *d = get_dive_by_uniq_id(diveId.toInt());
|
|
|
|
bool diveChanged = false;
|
|
|
|
|
|
|
|
if (d->suit != suit.toUtf8().data()) {
|
|
|
|
diveChanged = true;
|
|
|
|
free(d->suit);
|
|
|
|
d->suit = strdup(suit.toUtf8().data());
|
|
|
|
}
|
|
|
|
if (d->buddy != buddy.toUtf8().data()) {
|
|
|
|
diveChanged = true;
|
|
|
|
free(d->buddy);
|
|
|
|
d->buddy = strdup(buddy.toUtf8().data());
|
|
|
|
}
|
|
|
|
if (d->divemaster != diveMaster.toUtf8().data()) {
|
|
|
|
diveChanged = true;
|
|
|
|
free(d->divemaster);
|
|
|
|
d->divemaster = strdup(diveMaster.toUtf8().data());
|
|
|
|
}
|
|
|
|
if (d->notes != notes.toUtf8().data()) {
|
|
|
|
diveChanged = true;
|
|
|
|
free(d->notes);
|
|
|
|
d->notes = strdup(notes.toUtf8().data());
|
|
|
|
}
|
2015-11-18 19:26:07 -08:00
|
|
|
if (diveChanged)
|
|
|
|
mark_divelist_changed(true);
|
2015-07-17 18:28:01 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
void QMLManager::saveChanges()
|
|
|
|
{
|
2015-11-11 11:16:59 -08:00
|
|
|
qmlUiShowMessage("Saving dives.");
|
2015-07-17 18:28:01 +03:00
|
|
|
QString fileName;
|
|
|
|
if (getCloudURL(fileName)) {
|
2015-11-11 11:16:59 -08:00
|
|
|
qmlUiShowMessage(get_error_string());
|
2015-08-19 10:17:52 +03:00
|
|
|
appendTextToLog(get_error_string());
|
2015-07-17 18:28:01 +03:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (save_dives(fileName.toUtf8().data())) {
|
2015-11-11 11:16:59 -08:00
|
|
|
qmlUiShowMessage(get_error_string());
|
2015-08-19 10:17:52 +03:00
|
|
|
appendTextToLog(get_error_string());
|
2015-07-17 18:28:01 +03:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2015-11-11 11:16:59 -08:00
|
|
|
qmlUiShowMessage("Dives saved.");
|
2015-08-19 10:17:52 +03:00
|
|
|
appendTextToLog("Dive saved.");
|
2015-07-17 18:28:01 +03:00
|
|
|
set_filename(fileName.toUtf8().data(), true);
|
|
|
|
mark_divelist_changed(false);
|
2015-07-10 11:31:24 +03:00
|
|
|
}
|
2015-08-10 08:35:47 +03:00
|
|
|
|
|
|
|
void QMLManager::addDive()
|
|
|
|
{
|
2015-11-11 11:16:59 -08:00
|
|
|
qmlUiShowMessage("Adding new dive.");
|
2015-08-19 10:17:52 +03:00
|
|
|
appendTextToLog("Adding new dive.");
|
2015-08-16 11:57:18 +03:00
|
|
|
DiveListModel::instance()->startAddDive();
|
2015-08-10 08:35:47 +03:00
|
|
|
}
|
|
|
|
|
2015-11-12 20:23:00 -08:00
|
|
|
void QMLManager::applyGpsData()
|
|
|
|
{
|
|
|
|
locationProvider->applyLocations();
|
|
|
|
}
|
|
|
|
|
2015-11-13 17:21:43 -08:00
|
|
|
void QMLManager::sendGpsData()
|
|
|
|
{
|
|
|
|
locationProvider->uploadToServer();
|
|
|
|
}
|
|
|
|
|
2015-11-13 17:20:45 -08:00
|
|
|
void QMLManager::clearGpsData()
|
|
|
|
{
|
|
|
|
locationProvider->clearGpsData();
|
|
|
|
}
|
|
|
|
|
2015-08-19 10:17:52 +03:00
|
|
|
QString QMLManager::logText() const
|
|
|
|
{
|
2015-11-13 09:17:13 -08:00
|
|
|
QString logText = m_logText + QString("\nNumer of GPS fixes: %1").arg(locationProvider->getGpsNum());
|
|
|
|
return logText;
|
2015-08-19 10:17:52 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
void QMLManager::setLogText(const QString &logText)
|
|
|
|
{
|
|
|
|
m_logText = logText;
|
2015-08-20 12:08:59 +03:00
|
|
|
emit logTextChanged();
|
2015-08-19 10:17:52 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
void QMLManager::appendTextToLog(const QString &newText)
|
|
|
|
{
|
|
|
|
m_logText += "\n" + newText;
|
2015-08-20 12:08:59 +03:00
|
|
|
emit logTextChanged();
|
2015-08-19 10:17:52 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2015-07-21 11:57:10 +03:00
|
|
|
bool QMLManager::saveCloudPassword() const
|
|
|
|
{
|
|
|
|
return m_saveCloudPassword;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QMLManager::setSaveCloudPassword(bool saveCloudPassword)
|
|
|
|
{
|
|
|
|
m_saveCloudPassword = saveCloudPassword;
|
|
|
|
}
|
|
|
|
|
2015-11-11 12:34:56 -08:00
|
|
|
bool QMLManager::locationServiceEnabled() const
|
|
|
|
{
|
|
|
|
return m_locationServiceEnabled;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QMLManager::setLocationServiceEnabled(bool locationServiceEnabled)
|
|
|
|
{
|
|
|
|
m_locationServiceEnabled = locationServiceEnabled;
|
|
|
|
locationProvider->serviceEnable(m_locationServiceEnabled);
|
|
|
|
}
|
2015-07-10 11:31:24 +03:00
|
|
|
|
2015-07-10 10:47:26 +03:00
|
|
|
QString QMLManager::cloudPassword() const
|
|
|
|
{
|
|
|
|
return m_cloudPassword;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QMLManager::setCloudPassword(const QString &cloudPassword)
|
|
|
|
{
|
|
|
|
m_cloudPassword = cloudPassword;
|
|
|
|
emit cloudPasswordChanged();
|
|
|
|
}
|
|
|
|
|
|
|
|
QString QMLManager::cloudUserName() const
|
|
|
|
{
|
|
|
|
return m_cloudUserName;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QMLManager::setCloudUserName(const QString &cloudUserName)
|
|
|
|
{
|
|
|
|
m_cloudUserName = cloudUserName;
|
|
|
|
emit cloudUserNameChanged();
|
|
|
|
}
|
2015-11-13 17:14:22 -08:00
|
|
|
|
2015-11-14 09:10:06 -08:00
|
|
|
int QMLManager::distanceThreshold() const
|
|
|
|
{
|
|
|
|
return m_distanceThreshold;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QMLManager::setDistanceThreshold(int distance)
|
|
|
|
{
|
|
|
|
m_distanceThreshold = distance;
|
|
|
|
emit distanceThresholdChanged();
|
|
|
|
}
|
|
|
|
|
|
|
|
int QMLManager::timeThreshold() const
|
|
|
|
{
|
|
|
|
return m_timeThreshold;
|
|
|
|
}
|
|
|
|
|
|
|
|
void QMLManager::setTimeThreshold(int time)
|
|
|
|
{
|
|
|
|
m_timeThreshold = time;
|
|
|
|
emit timeThresholdChanged();
|
|
|
|
}
|