aboutsummaryrefslogtreecommitdiff
path: root/loopertrx.py
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2017-08-30 17:51:35 +0200
committerReiner Herrmann <reiner@reiner-h.de>2017-08-30 17:51:35 +0200
commit4092a230b6c56e63e4a5b2a9181dde91f54ae5aa (patch)
treeab6e67fb1449e78addf23d589887f2183629df90 /loopertrx.py
parent158b860444781013aa288e5f03db392983bac272 (diff)
Catch more exceptions
Diffstat (limited to 'loopertrx.py')
-rwxr-xr-xloopertrx.py100
1 files changed, 63 insertions, 37 deletions
diff --git a/loopertrx.py b/loopertrx.py
index 569d5c5..743864e 100755
--- a/loopertrx.py
+++ b/loopertrx.py
@@ -123,38 +123,51 @@ class USBLooper():
if size == 0:
self.ui.alert("No data available.")
- with open(filename, 'wb') as outfile:
- self.write_wav_header(outfile, size)
- self.ui.init_progress(size, "Receiving")
- while size > 0:
- bufsize = (size >= 65536) and 65536 or size
- # data needs to be transferred in multiples of 1k blocks
- padding = (1024 - (bufsize % 1024)) % 1024
-
- buf = self.get_data(bufsize + padding)
- self.ui.update_progress(bufsize)
- outfile.write(buf[:bufsize])
- size -= bufsize
- self.ui.end_progress()
+ try:
+ outfile = open(filename, 'wb')
+ except PermissionError as e:
+ self.ui.alert(e)
+ return
+
+ self.write_wav_header(outfile, size)
+ self.ui.init_progress(size, "Receiving")
+ while size > 0:
+ bufsize = (size >= 65536) and 65536 or size
+ # data needs to be transferred in multiples of 1k blocks
+ padding = (1024 - (bufsize % 1024)) % 1024
+
+ buf = self.get_data(bufsize + padding)
+ self.ui.update_progress(bufsize)
+ outfile.write(buf[:bufsize])
+ size -= bufsize
+ outfile.close()
+ self.ui.end_progress()
def transmit_file(self, filename):
- with open(filename, 'rb') as infile:
- content = infile.read()
- tag = self.random_tag()
- # skip first 44 bytes for now; we assume valid file. TODO: validate
- content = content[44:]
- content_size = len(content)
- self.ui.init_progress(content_size, "Transmitting")
- while len(content) > 0:
- buf = content[:65536]
- padsize = (1024 - (len(buf) % 1024)) % 1024
- buf += b'\x00' * padsize
-
- self.send_data(buf, tag)
- self.ui.update_progress(len(buf))
- content = content[65536:]
- self.submit_data_len(content_size, tag)
- self.ui.end_progress()
+ try:
+ infile = open(filename, 'rb')
+ except PermissionError as e:
+ self.ui.alert(e)
+ return
+
+ content = infile.read()
+ infile.close()
+ tag = self.random_tag()
+ # skip first 44 bytes for now; we assume valid file. TODO: validate
+ content = content[44:]
+ content_size = len(content)
+
+ self.ui.init_progress(content_size, "Transmitting")
+ while len(content) > 0:
+ buf = content[:65536]
+ padsize = (1024 - (len(buf) % 1024)) % 1024
+ buf += b'\x00' * padsize
+
+ self.send_data(buf, tag)
+ self.ui.update_progress(len(buf))
+ content = content[65536:]
+ self.submit_data_len(content_size, tag)
+ self.ui.end_progress()
class Gui(Frame):
@@ -185,13 +198,23 @@ class Gui(Frame):
def download(self):
fname = filedialog.asksaveasfilename(filetypes=[('WAVE audio', '.wav')], defaultextension='.wav')
- if fname:
+ if not fname:
+ return
+
+ try:
self.dev.receive_file(fname)
+ except usb.core.USBError as e:
+ self.alert(e)
def upload(self):
fname = filedialog.askopenfilename(filetypes=[('WAVE audio', '.wav')], defaultextension='.wav')
- if fname:
+ if not fname:
+ return
+
+ try:
self.dev.transmit_file(fname)
+ except usb.core.USBError as e:
+ self.alert(e)
def init_progress(self, max_amount, msg=None):
self.progress['maximum'] = max_amount
@@ -241,7 +264,7 @@ def main():
try:
dev = USBLooper(ui)
- except FileNotFoundError as e:
+ except (FileNotFoundError, usb.core.USBError) as e:
ui.alert(e)
sys.exit(1)
@@ -250,10 +273,13 @@ def main():
ui.set_device(dev)
ui.mainloop()
else:
- if args.action == 'rx':
- dev.receive_file(args.filename)
- elif args.action == 'tx':
- dev.transmit_file(args.filename)
+ try:
+ if args.action == 'rx':
+ dev.receive_file(args.filename)
+ elif args.action == 'tx':
+ dev.transmit_file(args.filename)
+ except usb.core.USBError as e:
+ ui.alert(e)
if __name__ == "__main__":