summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Reichel <sre@ring0.de>2013-03-27 00:06:53 +0100
committerSebastian Reichel <sre@ring0.de>2013-03-27 00:06:53 +0100
commitd6bdcc8895e38e8b4a61dd6e550103bce44e71b3 (patch)
tree9354480352fd5db323edb10f2595d3e28c6fa108
parent52ea2214a6bb2b6e07def04cffd1bc2553d64077 (diff)
downloadserial-barcode-scanner-d6bdcc8895e38e8b4a61dd6e550103bce44e71b3.tar.bz2
handle errors
-rw-r--r--src/curses-ui/main.vala18
-rw-r--r--src/pdf-invoice/pdf-invoice.vala8
-rw-r--r--src/scanner-session/scannersession.vala19
-rw-r--r--src/web/Makefile2
-rw-r--r--src/web/csv.vala2
-rw-r--r--src/web/web.vala93
-rw-r--r--src/web/websession.vala10
7 files changed, 137 insertions, 15 deletions
diff --git a/src/curses-ui/main.vala b/src/curses-ui/main.vala
index 1d79c43..b70ecbc 100644
--- a/src/curses-ui/main.vala
+++ b/src/curses-ui/main.vala
@@ -14,24 +14,36 @@
*/
public MainLoop loop;
+public AudioPlayer audio;
+
+private static void play(string file) {
+ try {
+ audio.play_system(file);
+ } catch(IOError e) { }
+}
public static int main(string[] args) {
+
/* handle unix signals */
Unix.signal_add(Posix.SIGTERM, handle_signals);
Unix.signal_add(Posix.SIGINT, handle_signals);
- AudioPlayer audio = Bus.get_proxy_sync(BusType.SESSION, "io.mainframe.shopsystem.AudioPlayer", "/io/mainframe/shopsystem/audio");
+ try {
+ audio = Bus.get_proxy_sync(BusType.SESSION, "io.mainframe.shopsystem.AudioPlayer", "/io/mainframe/shopsystem/audio");
+ } catch(IOError e) {
+ error("IOError: %s\n", e.message);
+ }
var ui = new CursesUI();
ui.log("KtT Shop System has been started");
- audio.play_system("startup.ogg");
+ play("startup.ogg");
/* run mainloop */
loop.run();
ui.log("Stopping Shop System");
- audio.play_system("shutdown.ogg");
+ play("shutdown.ogg");
/* we need to run the mainloop to play audio */
audio.end_of_stream.connect(() => { loop.quit(); });
diff --git a/src/pdf-invoice/pdf-invoice.vala b/src/pdf-invoice/pdf-invoice.vala
index 095dcc6..8a6242d 100644
--- a/src/pdf-invoice/pdf-invoice.vala
+++ b/src/pdf-invoice/pdf-invoice.vala
@@ -52,8 +52,12 @@ public class InvoicePDF {
}
private void render_svg(Cairo.Context ctx, string file) {
- var svg = new Rsvg.Handle.from_file(file);
- svg.render_cairo(ctx);
+ try {
+ var svg = new Rsvg.Handle.from_file(file);
+ svg.render_cairo(ctx);
+ } catch(Error e) {
+ error("Could not load SVG: %s\n", e.message);
+ }
}
private void draw_footer(Cairo.Context ctx) {
diff --git a/src/scanner-session/scannersession.vala b/src/scanner-session/scannersession.vala
index 6926ba9..5d87cc8 100644
--- a/src/scanner-session/scannersession.vala
+++ b/src/scanner-session/scannersession.vala
@@ -23,13 +23,17 @@ public class ScannerSessionImplementation {
private Database db;
private AudioPlayer audio;
+ private SerialDevice dev;
public signal void msg(MessageType type, string message);
public ScannerSessionImplementation() {
try {
db = Bus.get_proxy_sync(BusType.SESSION, "io.mainframe.shopsystem.Database", "/io/mainframe/shopsystem/database");
+ dev = Bus.get_proxy_sync(BusType.SESSION, "io.mainframe.shopsystem.SerialDevice", "/io/mainframe/shopsystem/device");
audio = Bus.get_proxy_sync(BusType.SESSION, "io.mainframe.shopsystem.AudioPlayer", "/io/mainframe/shopsystem/audio");
+
+ dev.received_barcode.connect(handle_barcode);
} catch(IOError e) {
error("IOError: %s\n", e.message);
}
@@ -46,7 +50,7 @@ public class ScannerSessionImplementation {
logged_in = false;
}
- private bool login(int user) {
+ private bool login(int user) throws IOError {
this.user = user;
try {
this.name = db.get_username(user);
@@ -60,7 +64,18 @@ public class ScannerSessionImplementation {
return true;
}
- private bool interpret(string scannerdata) {
+ private void handle_barcode(string scannerdata) {
+ try {
+ if(interpret(scannerdata))
+ dev.blink(1000);
+ } catch(IOError e) {
+ send_message(MessageType.ERROR, "IOError: %s", e.message);
+ } catch(DatabaseError e) {
+ send_message(MessageType.ERROR, "DatabaseError: %s", e.message);
+ }
+ }
+
+ private bool interpret(string scannerdata) throws DatabaseError, IOError {
if(scannerdata.has_prefix("USER ")) {
string str_id = scannerdata.substring(5);
int32 id = int.parse(str_id);
diff --git a/src/web/Makefile b/src/web/Makefile
index cc9d77e..de305d9 100644
--- a/src/web/Makefile
+++ b/src/web/Makefile
@@ -1,7 +1,7 @@
all: web
web: main.vala web.vala websession.vala csv.vala template.vala ../database/db-interface.vala ../pgp/pgp-interface.vala ../price.vapi
- valac -o $@ --vapidir=../../vapi --pkg gee-1.0 --pkg gio-2.0 --pkg libsoup-2.4 --pkg posix --pkg libarchive --pkg gpgme $^
+ valac -o $@ --vapidir=../../vapi --enable-experimental --pkg gee-1.0 --pkg gio-2.0 --pkg libsoup-2.4 --pkg posix $^
clean:
rm -rf web
diff --git a/src/web/csv.vala b/src/web/csv.vala
index 4e32a0a..f9622b8 100644
--- a/src/web/csv.vala
+++ b/src/web/csv.vala
@@ -16,7 +16,7 @@
public class CSVMemberFile {
private UserInfo[] members;
- public Gee.List<int> missing_unblocked_members() {
+ public Gee.List<int> missing_unblocked_members() throws DatabaseError, IOError {
var result = new Gee.ArrayList<int>();
var dbusers = db.get_member_ids();
diff --git a/src/web/web.vala b/src/web/web.vala
index 1c0d9b7..3e58fe6 100644
--- a/src/web/web.vala
+++ b/src/web/web.vala
@@ -26,6 +26,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -40,6 +46,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -98,6 +110,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -145,6 +163,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -243,6 +267,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -291,6 +321,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -403,6 +439,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -455,6 +497,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -519,6 +567,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -562,6 +616,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -614,6 +674,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -655,6 +721,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
@@ -787,6 +859,12 @@ public class WebServer {
return;
}
+ void handler_400(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) {
+ string result = "Internal Server Error\n";
+ msg.set_status(400);
+ msg.set_response("text/plain", Soup.MemoryUse.COPY, result.data);
+ }
+
void handler_404(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) {
string result = "Page not Found\n";
msg.set_status(404);
@@ -804,7 +882,14 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
- } }
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ }
+ }
void handler_todo(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) {
try {
@@ -816,6 +901,12 @@ public class WebServer {
} catch(TemplateError e) {
stderr.printf(e.message+"\n");
handler_404(server, msg, path, query, client);
+ } catch(DatabaseError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
+ } catch(IOError e) {
+ stderr.printf(e.message+"\n");
+ handler_400(server, msg, path, query, client);
}
}
diff --git a/src/web/websession.vala b/src/web/websession.vala
index 5c562c6..1dc6319 100644
--- a/src/web/websession.vala
+++ b/src/web/websession.vala
@@ -67,14 +67,14 @@ public class WebSession {
return result;
}
- private void setup_auth(int user) {
+ private void setup_auth(int user) throws DatabaseError, IOError {
var auth = db.get_user_auth(user);
this.disabled = auth.disabled;
this.superuser = auth.superuser;
this.logged_in = true;
}
- public void logout() {
+ public void logout() throws DatabaseError, IOError {
if(logged_in) {
db.set_sessionid(user, "");
superuser = false;
@@ -82,7 +82,7 @@ public class WebSession {
}
}
- public WebSession(Soup.Server server, Soup.Message msg, string path, GLib.HashTable<string,string>? query, Soup.ClientContext client) {
+ public WebSession(Soup.Server server, Soup.Message msg, string path, GLib.HashTable<string,string>? query, Soup.ClientContext client) throws DatabaseError, IOError {
var cookies = Soup.cookies_from_request(msg);
/* Check for existing session */
@@ -95,7 +95,7 @@ public class WebSession {
name = db.get_username(user);
setup_auth(user);
return;
- } catch(WebSessionError e) {
+ } catch(DatabaseError e) {
/* invalid session, ignore */
}
}
@@ -128,7 +128,7 @@ public class WebSession {
user = userid;
try {
name = db.get_username(user);
- } catch(WebSessionError e) {
+ } catch(DatabaseError e) {
name = "Unknown User";
}