Break irida-miseq-uploader into logical parts
The projects is really tangled together with threads everywhere... UI tied to logic, parsing tied to uploading, etc.
This is a work in progress list of how logically separated parts could look.
Part 1. Uploader
Handles sending files to Irida.
Contains a handful (at most) of accessible functions that Interfaces (Part 3) will use to send data, see what data is already uploaded, or other functions that need to speak with the Irida API.
When uploading data it would accept a list of file paths to upload and what project/sample they will be uploaded to.
Part 2. Parsers
A Parser talks to the file system
A different parser will need to be written for each sequencer (much of the code would be reusable, only directory scanning/validation is sequencer specific)
A parser would be responsible to scanning a given directory, validating the files/dirs align to the sequencer spec.
Functions it would have include: Validation, Generating file lists with associated samples/projects, Determining if a directory has already been uploaded, partially uploaded or not uploaded.
Part 3. Interfaces
An interface is what a user would use to upload files. This is the only part the user ever sees.
It talks to the uploader and Parsers, displays the information to the user, who then decides to upload or not.
Can have separate interfaces for command line and GUI