package Ġdev . n athan pb . dog o . utils ._ static Ċ Ċ import Ġcom . google . api . client . extensions . java 6 . auth . oauth 2 . Authorization Code Installed App Ċ import Ġcom . google . api . client . extensions . jetty . auth . oauth 2 . Local Server Receiver Ċ import Ġcom . google . api . client . googleapis . auth . oauth 2 . Google Authorization Code Flow Ċ import Ġcom . google . api . client . googleapis . auth . oauth 2 . Google Client Secrets Ċ import Ġcom . google . api . client . googleapis . jav an et . Google Net Http Transport Ċ import Ġcom . google . api . client . googleapis . media . Media Http Uploader Ċ import Ġcom . google . api . client . googleapis . media . Media Http Uploader Progress Listener Ċ import Ġcom . google . api . client . http . InputStream Content Ċ import Ġcom . google . api . client . json . jackson 2 . Jack son Factory Ċ import Ġcom . google . api . client . util . store . File DataStore Factory Ċ import Ġcom . google . api . services . drive . Drive Ċ import Ġcom . google . api . services . drive . Drive Scopes Ċ import Ġdev . n athan pb . dog o . core . D ogo Bot Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . util . concurrent . Executors Ċ Ċ class ĠDrive Utils Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGoogle ĠCredential ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġgoogle Credential Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Secrets Ġ= ĠGoogle Client Secrets . load ( Jack son Factory . getDefaultInstance (), ĠInputStreamReader ( File (" credentials . json "). inputStream ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBuild Ġflow Ġand Ġtrigger Ġuser Ġauthorization Ġrequest . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflow Ġ= ĠGoogle Authorization Code Flow . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGoogle Net Http Transport . new Trusted Transport (), ĠJack son Factory . getDefaultInstance (), Ġclient Secrets , ĠlistOf ( Drive Scopes . DRIVE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setData Store Factory ( File DataStore Factory ( File (". dynamic / tokens "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set AccessType (" offline ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= ĠLocal Server Receiver . Builder (). set Port ( 8 8 8 8 ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuthorization Code Installed App ( flow , Ġreceiver ). authorize (" user ") ĊĠĠĠĠĠĠĠ Ġ} () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDrive ĠService ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġgoogle Drive Ġ= ĠDrive . Builder ( Google Net Http Transport . new Trusted Transport (), ĠJack son Factory . getDefaultInstance (), Ġgoogle Credential ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġapplication Name Ġ= Ġ" pro jeto - test e " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThread Ġto Ġupload Ġheap / thread Ġdump s Ġto ĠGoogle ĠDrive . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġdump Uploader Thread Ġ= ĠExec utors . new Single Thread Executor () ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠUp loads Ġa Ġfile Ġto ĠGoogle ĠDrive . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġupload Ġis Ġdone Ġin Ġa Ġseparated Ġthread . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param [ file ] Ġthe Ġfile ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġto Drive ( file : ĠFile , ĠparentId : ĠString ? Ġ= Ġnull ): Ġcom . google . api . services . drive . model . File Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! file . exists () Ġ|| Ġfile . isDirectory Ġ&& Ġfile . length () Ġ> Ġ 0 ) Ġthrow ĠException (" Invalid ĠFile ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Content Ġ= ĠInputStream Content (" text / plain ", Ġfile . inputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Metadata Ġ= Ġcom . google . api . services . drive . model . File (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġfile . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠparentId ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparents Ġ= ĠlistOf ( parentId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDrive Utils . google Drive . files (). create ( file Metadata , Ġmedia Content ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Http Uploader . is Direct Upload Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Http Uploader . chunk Size Ġ= ĠMedia Http Uploader . MIN IMUM _ CHUNK _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Http Uploader . progress Listener Ġ= Ġobject : ĠMedia Http Uploader Progress Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprogress Changed ( uploader : ĠMedia Http Uploader ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( uploader ?. upload State ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Http Uploader . Upload State . INIT I ATION _ STARTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdev . n athan pb . dog o . core . D ogo Bot . logger . info (" Starting Ġupload Ġfor Ġ${ file . name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Http Uploader . Upload State . INIT I ATION _ COMPLETE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdev . n athan pb . dog o . core . D ogo Bot . logger . info (" Upload Ġfor Ġ${ file . name } Ġstarted !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Http Uploader . Upload State . MEDIA _ IN _ PROGRESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdev . n athan pb . dog o . core . D ogo Bot . logger . info (" Upload Ġfor Ġ${ file . name }: Ġ${ uploader . progress }% ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Http Uploader . Upload State . MEDIA _ COMPLETE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdev . n athan pb . dog o . core . D ogo Bot . logger . info (" Upload Ġfor Ġ${ file . name } Ġis Ġdone !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Http Uploader . Upload State . NOT _ STARTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdev . n athan pb . dog o . core . D ogo Bot . logger . info (" Upload Ġfor Ġ${ file . name }: ĠNOT _ STARTED ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields Ġ= Ġ" id , Ġweb Content Link , ĠwebView Link , Ġparents " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġa Ġdirectory . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param [ dir Name ] Ġthe Ġdirectory Ġname ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param [ parentId ] Ġthe Ġdirectory Ġparent ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġmkdir ( dir Name : ĠString , ĠparentId : ĠString ? Ġ= Ġnull ): Ġcom . google . api . services . drive . model . File Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDrive Utils . google Drive . files (). create ( com . google . api . services . drive . model . File (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġdir Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmimeType Ġ= Ġ" application / vnd . google - apps . folder " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠparentId ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparents Ġ= ĠlistOf ( parentId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGets Ġa Ġdirectory Ġor Ġa Ġlist Ġof Ġdirectories ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param [ dir Name ] Ġthe Ġname Ġto Ġquery . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param [ parentId ] Ġthe Ġid Ġof Ġthe Ġparent Ġdirectory . ĠNull Ġmeans Ġ' root '. ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Dir ( dir Name : ĠString , ĠparentId : ĠString ? Ġ= Ġnull ): ĠList < com . google . api . services . drive . model . File > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" Ġname Ġ= Ġ'$ dir Name ' Ġ Ġand ĠmimeType Ġ= Ġ' application / vnd . google - apps . folder ' Ġ Ġand Ġ'${ parentId Ġ?: Ġ" root "} ' Ġin Ġparents " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < com . google . api . services . drive . model . File >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpage Token : ĠString ? ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Token Ġ= ĠDrive Utils . google Drive . files (). list (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġq Ġ= Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspaces Ġ= Ġ" drive " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfields Ġ= Ġ" next PageToken , Ġfiles ( id , Ġname , Ġcreated Time )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Token Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. execute (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . addAll ( files ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. next PageToken ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( page Token Ġ!= Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }