{"action":"created","issue":{"url":"https://api.github.com/repos/Byron/google-apis-rs/issues/83","labels_url":"https://api.github.com/repos/Byron/google-apis-rs/issues/83/labels{/name}","comments_url":"https://api.github.com/repos/Byron/google-apis-rs/issues/83/comments","events_url":"https://api.github.com/repos/Byron/google-apis-rs/issues/83/events","html_url":"https://github.com/Byron/google-apis-rs/issues/83","id":70708635,"number":83,"title":"Prove that `yup` is reality","user":{"login":"Byron","id":63622,"avatar_url":"https://avatars.githubusercontent.com/u/63622?v=3","gravatar_id":"","url":"https://api.github.com/users/Byron","html_url":"https://github.com/Byron","followers_url":"https://api.github.com/users/Byron/followers","following_url":"https://api.github.com/users/Byron/following{/other_user}","gists_url":"https://api.github.com/users/Byron/gists{/gist_id}","starred_url":"https://api.github.com/users/Byron/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Byron/subscriptions","organizations_url":"https://api.github.com/users/Byron/orgs","repos_url":"https://api.github.com/users/Byron/repos","events_url":"https://api.github.com/users/Byron/events{/privacy}","received_events_url":"https://api.github.com/users/Byron/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/Byron/google-apis-rs/milestones/3","html_url":"https://github.com/Byron/google-apis-rs/milestones/v0.3%20-%20advanced%20commandline%20tools","labels_url":"https://api.github.com/repos/Byron/google-apis-rs/milestones/3/labels","id":1017825,"number":3,"title":"v0.3 - advanced commandline tools","description":"Implement the commandline tools as a queue, which keeps track of jobs that are performed and are still to be performed. There can be one or more processes to operate on the queued tasks, possibly even as a daemon.\r\n\r\nPersistence is implemented via sqlite as it supports fast and safe concurrent access to the same dataset.\r\n\r\nOne of the goals is to have a fully-generated and capable resilient youtube uploader, among other things, like access to google drive.","creator":{"login":"Byron","id":63622,"avatar_url":"https://avatars.githubusercontent.com/u/63622?v=3","gravatar_id":"","url":"https://api.github.com/users/Byron","html_url":"https://github.com/Byron","followers_url":"https://api.github.com/users/Byron/followers","following_url":"https://api.github.com/users/Byron/following{/other_user}","gists_url":"https://api.github.com/users/Byron/gists{/gist_id}","starred_url":"https://api.github.com/users/Byron/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Byron/subscriptions","organizations_url":"https://api.github.com/users/Byron/orgs","repos_url":"https://api.github.com/users/Byron/repos","events_url":"https://api.github.com/users/Byron/events{/privacy}","received_events_url":"https://api.github.com/users/Byron/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":17,"state":"open","created_at":"2015-03-12T06:32:02Z","updated_at":"2015-05-08T19:47:44Z","due_on":"2015-05-09T22:00:00Z","closed_at":null},"comments":6,"created_at":"2015-04-24T14:47:37Z","updated_at":"2015-05-09T13:47:29Z","closed_at":null,"body":"Excerpt from previous standalone `yup` program:\r\n\r\n**yup** is a error-resistant youtube uploader, offering additional options to interact with your youtube account. Thanks to resumable uploads, you will not have to worry about failed uploads ever again.\r\n\r\n### Mission Statement\r\n\r\n**yup**'s primary purpose is to make youtube uploads fully resumable and painless. To do that, it must provide at least the following features:\r\n\r\n* resume uploads on network failure due to\r\n * general interruption\r\n * IP-change\r\n * program shutdown or reboot\r\n* state of the art command-line interface\r\n* persistence through sqlite, but abstracted enough allow other storage backends.\r\n* UI/user interaction is completely separated from the actual functionality to ease adding graphical front-ends.\r\n\r\nAdditionally, it shall provide information about currently running and schedule uploads. It must be possible to interact with running uploads by canceling them, or by resuming them in another yup invocation.\r\n\r\nAll crates and items will be implemented to allow usage by others. Next to the API documentation, there will be sufficient end-user documentation to inform potential users quickly.\r\n\r\nBesides that, the command must be self-documenting and provide understandable messages for user interaction.\r\n\r\nIt should be possible to merge in templates which are added to the respective video fields.\r\n\r\n#### Interaction Examples\r\n\r\n```bash\r\n$ yup add -title \"My Video\" -description \"my holiday video\" -tags \"holiday,video\" myfile.mov\r\n-> scheduled \"My Video\" for upload - use 'yup publish' to perform upload\r\n$ yup publish\r\n-> cannot upload without authentication - use 'yup auth' to link to your youtube account\r\n$ yup auth\r\n-> [...instruction to get device authentication going... yup polls for auth tokens]\r\n$ yup publish \r\n-> [... provides progress messages of the current upload, and uploads to come]\r\n# Ctrl+C\r\n-> yup interrupted - use 'yup publish' to resume\r\n$ yup publish &\r\n# [no printing if in background mode]\r\n$ yup status\r\n-> [prints information about current queue and progress. Background processes will poll for new jobs\r\n->  and quit if there is nothing left to do]\r\n```\r\n\r\n### Non-Goals\r\n\r\n* Windows compatibility\r\n * It's alright to use `ncurses` to improve the shell experience\r\n * It's find to have a windows release only with a GUI front-end, if at all\r\n\r\n### Implementation Details\r\n\r\n**yup** uses *oauth2.0* to gain access to the users youtube account, following the [device flow](https://developers.google.com/youtube/v3/guides/authentication#devices). Once access is granted, uploads may happen until permissions are revoked.\r\n\r\nA custom oauth2.0 library will need to be implemented to support device-based authorization. [**hyper**](https://crates.io/crates/hyper) is used to perform any https requests, whereas [**docopts**](https://crates.io/crates/docopt) helps with the commandline interface.\r\nFor persistence, [**rusqlite**](https://crates.io/crates/rusqlite) is used.\r\n\r\nFor template support, yaml will be used."},"comment":{"url":"https://api.github.com/repos/Byron/google-apis-rs/issues/comments/100488485","html_url":"https://github.com/Byron/google-apis-rs/issues/83#issuecomment-100488485","issue_url":"https://api.github.com/repos/Byron/google-apis-rs/issues/83","id":100488485,"user":{"login":"Byron","id":63622,"avatar_url":"https://avatars.githubusercontent.com/u/63622?v=3","gravatar_id":"","url":"https://api.github.com/users/Byron","html_url":"https://github.com/Byron","followers_url":"https://api.github.com/users/Byron/followers","following_url":"https://api.github.com/users/Byron/following{/other_user}","gists_url":"https://api.github.com/users/Byron/gists{/gist_id}","starred_url":"https://api.github.com/users/Byron/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Byron/subscriptions","organizations_url":"https://api.github.com/users/Byron/orgs","repos_url":"https://api.github.com/users/Byron/repos","events_url":"https://api.github.com/users/Byron/events{/privacy}","received_events_url":"https://api.github.com/users/Byron/received_events","type":"User","site_admin":false},"created_at":"2015-05-09T13:47:29Z","updated_at":"2015-05-09T13:47:29Z","body":"You can watch the development stream [on youtube](https://youtu.be/OIy5lXRDaI8)\n \t\t\n[\\![thumb](https://i.ytimg.com/s_vi/OIy5lXRDaI8/mqdefault.jpg?sqp=CNyeuKoF&rs=AOn4CLAUtF-6hkKLiagTh6b4ha89rl6oJg)](https://youtu.be/OIy5lXRDaI8)"}}