package Ġorg . music p imp Ċ Ċ import Ġcom . squareup . mos hi . FromJson Ċ import Ġcom . squareup . mos hi . Json Class Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠEnum Adapter Ġ{ ĊĠĠĠ Ġ@ FromJson ĊĠĠĠ Ġfun Ġplayback Event ( e : ĠString ): ĠPlay back Event Ġ= ĠPlay back Event . parse ( e ) ĊĊĠĠĠ Ġ@ FromJson ĊĠĠĠ Ġfun Ġplay state ( e : ĠString ): ĠPlay state Ġ= ĠPlay state . parse ( e ) Ċ } Ċ Ċ enum Ġclass ĠPlay back Event ( val Ġcode : ĠString ) Ġ{ ĊĠĠĠ ĠWelcome (" welcome "), ĊĠĠĠ ĠPing (" ping "), ĊĠĠĠ ĠTime Updated (" time _ updated "), ĊĠĠĠ ĠTrack Changed (" track _ changed "), ĊĠĠĠ ĠPlay state Changed (" play state _ changed "), ĊĠĠĠ ĠPlaylist Modified (" playlist _ modified "), ĊĠĠĠ ĠPlaylist Index Changed (" playlist _ index _ changed "), ĊĠĠĠ ĠVolume Changed (" volume _ changed "), ĊĠĠĠ ĠM ute Toggle d (" mute _ toggle d "), ĊĠĠĠ ĠStatus (" status "), ĊĠĠĠ ĠOther (" other "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( s : ĠString ): ĠPlay back Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" time _ updated " Ġ-> ĠTime Updated ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" track _ changed " Ġ-> ĠTrack Changed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" play state _ changed " Ġ-> ĠPlay state Changed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" playlist _ modified " Ġ-> ĠPlaylist Modified ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" playlist _ index _ changed " Ġ-> ĠPlaylist Index Changed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" volume _ changed " Ġ-> ĠVolume Changed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mute _ toggle d " Ġ-> ĠM ute Toggle d ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġ-> ĠStatus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠOther ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠPlay state ( val Ġcode : ĠString ) Ġ{ ĊĠĠĠ ĠPlay ing (" Playing "), Ċ // ĠĠĠ ĠStarted (" Started "), ĊĠĠĠ ĠPause d (" Paused "), ĊĠĠĠ ĠSto pped (" Stopped "), ĊĠĠĠ ĠNo Media (" No Media "), ĊĠĠĠ ĠOther (" Other "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( s : ĠString ): ĠPlay state Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Playing " Ġ-> ĠPlay ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Started " Ġ-> ĠPlay ing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Paused " Ġ-> ĠPause d ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Stopped " Ġ-> ĠSto pped ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Media " Ġ-> ĠNo Media ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Closed " Ġ-> ĠNo Media ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠOther ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠServer Event ( val Ġevent : ĠPlay back Event ) Ċ Ċ interface ĠServer Message Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠStatus Message ( ĊĠĠĠ Ġval Ġindex : ĠInt , ĊĠĠĠ Ġval Ġvolume : ĠInt , ĊĠĠĠ Ġval Ġposition : ĠDuration , ĊĠĠĠ Ġval Ġstate : ĠPlay state , ĊĠĠĠ Ġval Ġplaylist : ĠList < Track >, ĊĠĠĠ Ġval Ġtrack : ĠTrack Ċ ) Ġ: ĠServer Message Ċ Ċ // ĠServer Ġmessages Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠPosition Message ( val Ġposition : ĠDuration ) Ġ: ĠServer Message Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠTrack Message ( val Ġtrack : ĠTrack ) Ġ: ĠServer Message Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠPlay state Message ( val Ġstate : ĠPlay state ) Ġ: ĠServer Message Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠPlaylist Modified Message ( val Ġplaylist : ĠList < Track >) Ġ: ĠServer Message Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠIndex Changed Message ( val Ġplaylist _ index : ĠInt ) Ġ: ĠServer Message Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠVolume Changed Message ( val Ġvolume : ĠInt ) Ġ: ĠServer Message Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠM ute Message ( val Ġmute : ĠBoolean ) Ġ: ĠServer Message Ċ Ċ data Ġclass ĠOther Message ( val Ġmessage : ĠString ) Ġ: ĠServer Message Ċ Ċ // ĠClient Ġcommands Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠTrack Command ( val Ġcmd : ĠString , Ġval Ġtrack : ĠTrack Id ) Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠValue Command ( val Ġcmd : ĠString , Ġval Ġvalue : ĠInt ) Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠItems Command ( val Ġcmd : ĠString , Ġval Ġtracks : ĠList < Track Id >, Ġval Ġfolders : ĠList < Folder Id >) Ċ Ċ @ Json Class ( generate Adapter Ġ= Ġtrue ) Ċ data Ġclass ĠSimple Command ( val Ġcmd : ĠString ) Ċ