diff options
Diffstat (limited to 'src/fetch-file.vala')
-rw-r--r-- | src/fetch-file.vala | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/fetch-file.vala b/src/fetch-file.vala new file mode 100644 index 0000000..55bfdc3 --- /dev/null +++ b/src/fetch-file.vala @@ -0,0 +1,65 @@ +public class FetchFile : Object +{ + /* public variables */ + public string uri {get; construct;} + + /* private variables */ + private DataInputStream stream; + private File? file; + private ByteArray data; + + /* public signals */ + public signal void failed (); + public signal void completed (ByteArray data); + + public FetchFile (string uri) + { + Object (uri: uri); + } + + construct + { + this.file = File.new_for_uri(this.uri); + this.data = new ByteArray (); + } + + public async void fetch_data () + { + //grab our data from our uri + try { + this.stream = new DataInputStream(this.file.read(null)); + this.stream.set_byte_order (DataStreamByteOrder.LITTLE_ENDIAN); + } catch (GLib.Error e) { + this.failed (); + } + this.read_something_async (); + } + + private async void read_something_async () + { + ssize_t size = 1024; + uint8[] buffer = new uint8[size]; + + ssize_t bufsize = 1; + do { + try { + bufsize = yield this.stream.read_async (buffer, size, GLib.Priority.DEFAULT, null); + if (bufsize < 1) { break;} + + if (bufsize != size) + { + uint8[] cpybuf = new uint8[bufsize]; + Memory.copy (cpybuf, buffer, bufsize); + this.data.append (cpybuf); + } + else + { + this.data.append (buffer); + } + } catch (Error e) { + this.failed (); + } + } while (bufsize > 0); + this.completed (this.data); + } +} |