| 
									
										
										
										
											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"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void showMessage(const char *errorString) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											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-06-04 13:29:50 +03:00
										 |  |  | QMLManager::QMLManager() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-07-10 10:47:26 +03:00
										 |  |  | 	//Initialize cloud credentials.
 | 
					
						
							|  |  |  | 	setCloudUserName(prefs.cloud_storage_email); | 
					
						
							|  |  |  | 	setCloudPassword(prefs.cloud_storage_password); | 
					
						
							| 
									
										
										
										
											2015-07-21 11:57:10 +03:00
										 |  |  | 	setSaveCloudPassword(prefs.save_password_local); | 
					
						
							| 
									
										
										
										
											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; | 
					
						
							|  |  |  | 	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-07-21 11:57:10 +03:00
										 |  |  | 	if (saveCloudPassword() != prefs.save_password_local) { | 
					
						
							|  |  |  | 		prefs.save_password_local = saveCloudPassword(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	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-07-10 10:47:26 +03:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-07-10 11:31:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | void QMLManager::loadDives() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2015-08-20 11:35:42 +03:00
										 |  |  | 	showMessage("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-07-12 17:39:13 -07:00
										 |  |  | 		showMessage(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()); | 
					
						
							|  |  |  | 		showMessage(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 { | 
					
						
							|  |  |  | 		showMessage(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()); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void QMLManager::saveChanges() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	showMessage("Saving dives."); | 
					
						
							|  |  |  | 	QString fileName; | 
					
						
							|  |  |  | 	if (getCloudURL(fileName)) { | 
					
						
							|  |  |  | 		showMessage(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())) { | 
					
						
							|  |  |  | 		showMessage(get_error_string()); | 
					
						
							| 
									
										
										
										
											2015-08-19 10:17:52 +03:00
										 |  |  | 		appendTextToLog(get_error_string()); | 
					
						
							| 
									
										
										
										
											2015-07-17 18:28:01 +03:00
										 |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	showMessage("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-08-16 11:57:18 +03:00
										 |  |  | 	showMessage("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-08-19 10:17:52 +03:00
										 |  |  | QString QMLManager::logText() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return m_logText; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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-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(); | 
					
						
							|  |  |  | } |