Просмотр исходного кода

Show lack of database connection when none is desired.

Neal Wilson 7 лет назад
Родитель
Сommit
11a12e269a
2 измененных файлов: 101 добавлений и 63 удалений
  1. 76
    61
      config/Windows/navigation.xml
  2. 25
    2
      src/typica.w

+ 76
- 61
config/Windows/navigation.xml Просмотреть файл

@@ -286,72 +286,87 @@
286 286
 			query.exec("CREATE OR REPLACE FUNCTION log_use() RETURNS trigger AS $$ DECLARE i integer := array_lower(NEW.unroasted_id, 1); u integer := array_upper(NEW.unroasted_id, 1); BEGIN IF NEW.transaction_type = 'ROAST' THEN WHILE i <= u LOOP INSERT INTO use (time, item, quantity) VALUES(NEW.time, NEW.unroasted_id[i], NEW.unroasted_quantity[i]); i := i + 1; END LOOP; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql");
287 287
 			query.exec("UPDATE TypicaFeatures SET version = 4 WHERE feature = 'base-features'");
288 288
 		};
289
-                var DBUpdateReminders = function() {
290
-                    var query = new QSqlQuery;
291
-                    query.exec("CREATE TABLE IF NOT EXISTS reminders (id bigserial PRIMARY KEY NOT NULL, reminder text NOT NULL)");
292
-                    query.exec("UPDATE TypicaFeatures SET version = 5 WHERE feature = 'base-features'");
293
-                    query = query.invalidate();
294
-                };
289
+        var DBUpdateReminders = function() {
290
+            var query = new QSqlQuery;
291
+            query.exec("CREATE TABLE IF NOT EXISTS reminders (id bigserial PRIMARY KEY NOT NULL, reminder text NOT NULL)");
292
+            query.exec("UPDATE TypicaFeatures SET version = 5 WHERE feature = 'base-features'");
293
+            query = query.invalidate();
294
+        };
295 295
 		var DBUpdateSpecification = function() {
296
-                    var query = new QSqlQuery;
297
-                    query.exec("CREATE TABLE IF NOT EXISTS roasting_specification (\"time\" timestamp without time zone NOT NULL, item bigint NOT NULL, loss numeric, tolerance numeric, notes text)");
298
-                    query.exec("UPDATE TypicaFeatures SET version = 6 WHERE feature = 'base-features'");
299
-                    query = query.invalidate();
300
-                };
301
-                
302
-		query = new QSqlQuery();
303
-		/* A table keeps track of database versioning information. This table is created
304
-		   if required. */
305
-		query.exec("CREATE TABLE IF NOT EXISTS TypicaFeatures (feature TEXT PRIMARY KEY, enabled boolean, version bigint)");
306
-		/* At the moment everything we're interested in is covered in the base-features
307
-		   row, but this can be extended later if needed. Each row encodes if certain
308
-		database structures exist and what version of those structures exist. */
309
-		query.exec("SELECT feature, enabled, version FROM TypicaFeatures WHERE feature = 'base-features'");
310
-		if(query.next())
311
-		{
312
-                    if(query.value(2) < 1)
313
-                    {
314
-                            DBCreateBase();
315
-                    }
316
-                    if(query.value(2) < 2)
317
-                    {
318
-                            DBUpdateMultiUser();
319
-                            DBUpdateHistory();
320
-                    }
321
-                    if(query.value(2) < 3)
322
-                    {
323
-                            DBUpdateNotifications();
324
-                    }
325
-                    if(query.value(2) < 4)
326
-                    {
327
-                            DBUpdateTriggers();
328
-                    }
329
-                    if(query.value(2) < 5)
330
-                    {
331
-                        DBUpdateReminders();
332
-                    }
333
-                    if(query.value(2) < 6)
334
-                    {
335
-                        DBUpdateSpecification();
336
-                    }
337
-		}
338
-		else
339
-		{
340
-			DBCreateBase();
341
-		}
342
-		query.exec("SELECT feature, enabled, version FROM TypicaFeatures WHERE feature = 'sample-roasting'");
343
-		if(query.next())
344
-		{
345
-			if(query.value(2) < 1)
296
+            var query = new QSqlQuery;
297
+            query.exec("CREATE TABLE IF NOT EXISTS roasting_specification (\"time\" timestamp without time zone NOT NULL, item bigint NOT NULL, loss numeric, tolerance numeric, notes text)");
298
+            query.exec("UPDATE TypicaFeatures SET version = 6 WHERE feature = 'base-features'");
299
+            query = query.invalidate();
300
+        };
301
+		
302
+		/* Updates for Typica version 1.8 */
303
+		var DBUpdate18 = function() {
304
+			var query = new QSqlQuery;
305
+			/* Create a table for Typica users login data */
306
+			query.exec("CREATE TABLE IF NOT EXISTS typica_users(name TEXT PRIMARY KEY NOT NULL, password TEXT, active boolean NOT NULL, auto_login boolean NOT NULL)");
307
+			/* Update session user logging to only use the database user when a Typica user is not explicitly provided. This maintains compatibility for mixed version use. */
308
+			query.exec("CREATE OR REPLACE FUNCTION log_session_user() RETURNS trigger AS $$ BEGIN IF NEW.person IS NULL THEN NEW.person := session_user; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql");
309
+			
310
+			/* Uncomment before release */
311
+			// query.exec("UPDATE TypicaFeatures SET version = 7 WHERE feature = 'base-features'");
312
+			query = query.invalidate();
313
+		};
314
+		if(Application.databaseConnected()) {
315
+			query = new QSqlQuery();
316
+			/* A table keeps track of database versioning information. This
317
+			   table is created
318
+			   if required. */
319
+			query.exec("CREATE TABLE IF NOT EXISTS TypicaFeatures (feature TEXT PRIMARY KEY, enabled boolean, version bigint)");
320
+			query.exec("SELECT feature, enabled, version FROM TypicaFeatures WHERE feature = 'sample-roasting'");
321
+			if(query.next())
322
+			{
323
+				if(query.value(2) < 1)
324
+				{
325
+					DBCreateSampleRoasting();
326
+				}
327
+			}
328
+			else
346 329
 			{
347 330
 				DBCreateSampleRoasting();
348 331
 			}
332
+			query.exec("SELECT feature, enabled, version FROM TypicaFeatures WHERE feature = 'base-features'");
333
+			if(query.next())
334
+			{
335
+				if(query.value(2) < 1)
336
+				{
337
+				        DBCreateBase();
338
+				}
339
+				if(query.value(2) < 2)
340
+				{
341
+			        DBUpdateMultiUser();
342
+			        DBUpdateHistory();
343
+				}
344
+				if(query.value(2) < 3)
345
+				{
346
+			        DBUpdateNotifications();
347
+				}
348
+				if(query.value(2) < 4)
349
+				{
350
+			        DBUpdateTriggers();
351
+				}
352
+				if(query.value(2) < 5)
353
+				{
354
+				    DBUpdateReminders();
355
+				}
356
+				if(query.value(2) < 6)
357
+				{
358
+					DBUpdateSpecification();
359
+				}
360
+				if(query.value(2) < 7) {
361
+					DBUpdate18();
362
+				}
363
+			}
364
+			else
365
+			{
366
+				DBCreateBase();
367
+			}
368
+			query = query.invalidate();
349 369
 		}
350
-		else
351
-		{
352
-			DBCreateSampleRoasting();
353
-		}
354
-		query = query.invalidate();
355 370
         ]]>
356 371
     </program>
357 372
 </window>

+ 25
- 2
src/typica.w Просмотреть файл

@@ -1079,7 +1079,10 @@ class ScriptQMainWindow : public QMainWindow@/
1079 1079
 ScriptQMainWindow::ScriptQMainWindow()@+: QMainWindow(NULL),
1080 1080
     cprompt(tr("Closing this window may result in loss of data. Continue?"))@/
1081 1081
 {
1082
-    /* Nothing needs to be done here. */
1082
+    if(!AppInstance->databaseConnected())
1083
+    {
1084
+	    statusBar()->addWidget(new QLabel(tr("Not connected to database")));
1085
+    }
1083 1086
 }
1084 1087
 
1085 1088
 void ScriptQMainWindow::saveSizeAndPosition(const QString &key)
@@ -12822,19 +12825,23 @@ class Application : public QApplication@/
12822 12825
         QDomDocument* configuration();
12823 12826
         @<Device configuration members@>@;
12824 12827
         QSqlDatabase database();
12828
+        Q_INVOKABLE bool databaseConnected();
12825 12829
         QScriptEngine *engine;@/
12826 12830
     @[public slots@]:@/
12831
+	    void setDatabaseConnected(bool status);
12827 12832
         @<Extended Application slots@>@;
12828 12833
     private:@/
12829 12834
         @<Application private data members@>@;
12830 12835
         QDomDocument conf;
12836
+        bool connectionStatus;
12831 12837
 };
12832 12838
 
12833 12839
 @ The constructor for this class handles a few things that had previously been
12834 12840
 handled in |main()|.
12835 12841
 
12836 12842
 @<Application Implementation@>=
12837
-Application::Application(int &argc, char **argv) : QApplication(argc, argv)@/
12843
+Application::Application(int &argc, char **argv) : QApplication(argc, argv),
12844
+	connectionStatus(false)@/
12838 12845
 {
12839 12846
     @<Allow use of the default QSettings constructor@>@;
12840 12847
     @<Load translation objects@>@;
@@ -12902,6 +12909,20 @@ QSqlDatabase Application::database()
12902 12909
     return QSqlDatabase::cloneDatabase(connection, QString(connectionName));
12903 12910
 }
12904 12911
 
12912
+@ Starting with version 1.8 there are methods for determining if a connection
12913
+to the database was successfully established when Typica was opened.
12914
+
12915
+@<Application Implementation@>=
12916
+void Application::setDatabaseConnected(bool status)
12917
+{
12918
+	connectionStatus = status;
12919
+}
12920
+
12921
+bool Application::databaseConnected()
12922
+{
12923
+	return connectionStatus;
12924
+}
12925
+
12905 12926
 @** Table editor for ordered arrays with SQL relations.
12906 12927
 
12907 12928
 \noindent A database in use at Wilson's Coffee \char'046~Tea stores information
@@ -13786,6 +13807,7 @@ void SqlConnectionSetup::testConnection()
13786 13807
         settings.setValue("database/user", user->text());
13787 13808
         settings.setValue("database/password", password->text());
13788 13809
         database.close();
13810
+        AppInstance->setDatabaseConnected(true);
13789 13811
         accept();
13790 13812
     }
13791 13813
     else
@@ -13825,6 +13847,7 @@ if(!database.open())
13825 13847
 else
13826 13848
 {
13827 13849
     database.close();
13850
+    AppInstance->setDatabaseConnected(true);
13828 13851
 }
13829 13852
 
13830 13853
 @** Viewing a record of batches.

Загрузка…
Отмена
Сохранить