Created
November 13, 2017 21:34
-
-
Save pavlo/865d927b1df8aba4eed45282e47fd46c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.github.pavlo.bibi.tmp; | |
import com.amazon.speech.json.SpeechletRequestEnvelope; | |
import com.amazon.speech.speechlet.*; | |
import com.amazon.speech.speechlet.interfaces.audioplayer.AudioItem; | |
import com.amazon.speech.speechlet.interfaces.audioplayer.AudioPlayer; | |
import com.amazon.speech.speechlet.interfaces.audioplayer.PlayBehavior; | |
import com.amazon.speech.speechlet.interfaces.audioplayer.Stream; | |
import com.amazon.speech.speechlet.interfaces.audioplayer.directive.PlayDirective; | |
import com.amazon.speech.speechlet.interfaces.audioplayer.request.*; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
import java.util.ArrayList; | |
import java.util.List; | |
public class LongTokensSpeechletWorks implements SpeechletV2, AudioPlayer { | |
private static final Logger log = LoggerFactory.getLogger(LongTokensSpeechletWorks.class); | |
private static final List<File> playlist; | |
static { | |
playlist = new ArrayList<>(); | |
playlist.add(new File("1qYO-7ndpgWA2bpKcDkvUon3Kc_QRA44g", | |
"1ZCpF50D4MEse2nu2nmhCrU9UvC1O7sbV", | |
"https://drive.google.com/uc?id=1ZCpF50D4MEse2nu2nmhCrU9UvC1O7sbV&export=download")); | |
playlist.add(new File("1qYO-7ndpgWA2bpKcDkvUon3Kc_QRA44g", | |
"1zogD436vP5o7McjFM8ZV4lHGf1rkkZ1c", | |
"https://drive.google.com/uc?id=1zogD436vP5o7McjFM8ZV4lHGf1rkkZ1c&export=download")); | |
playlist.add(new File("1qYO-7ndpgWA2bpKcDkvUon3Kc_QRA44g", | |
"1XHFb9rWI4svZvXJTQKD8dMT_Xfb3bh44", | |
"https://drive.google.com/uc?id=1XHFb9rWI4svZvXJTQKD8dMT_Xfb3bh44&export=download")); | |
} | |
@Override | |
public SpeechletResponse onIntent(SpeechletRequestEnvelope<IntentRequest> requestEnvelope) { | |
log.debug("Entered `onIntent`"); | |
int index = 0; | |
File file = playlist.get(index); | |
Stream stream = new Stream(); | |
stream.setToken(file.getToken()); | |
stream.setUrl(file.getUrl()); | |
stream.setOffsetInMilliseconds(0L); | |
AudioItem audioItem = new AudioItem(); | |
audioItem.setStream(stream); | |
PlayDirective playDirective = new PlayDirective(); | |
playDirective.setAudioItem(audioItem); | |
playDirective.setPlayBehavior(PlayBehavior.REPLACE_ALL); | |
List<Directive> directives = new ArrayList<>(); | |
directives.add(playDirective); | |
SpeechletResponse result = new SpeechletResponse(); | |
result.setDirectives(directives); | |
log.debug("Finished `onIntent`"); | |
return result; | |
} | |
@Override | |
public SpeechletResponse onPlaybackNearlyFinished(SpeechletRequestEnvelope<PlaybackNearlyFinishedRequest> requestEnvelope) { | |
log.debug("Entered `onPlaybackNearlyFinished`"); | |
String token = requestEnvelope.getRequest().getToken(); | |
log.debug("Token: {}", token); | |
log.debug("OffsetInMilliseconds: {}", requestEnvelope.getRequest().getOffsetInMilliseconds()); | |
int indexThatIsFinishing = Integer.MAX_VALUE - 1; | |
for(int i = 0; i < playlist.size(); i++) { | |
if (playlist.get(i).getToken().equals(token)) { | |
indexThatIsFinishing = i; | |
break; | |
} | |
} | |
int indexThatIsNext = indexThatIsFinishing + 1; | |
if (indexThatIsNext >= playlist.size()) { | |
log.debug("Reached the end of the playlist, returning null"); | |
return null; | |
} | |
File file = playlist.get(indexThatIsNext); | |
Stream stream = new Stream(); | |
stream.setToken(file.getToken()); | |
stream.setUrl(file.getUrl()); | |
stream.setExpectedPreviousToken(token); | |
stream.setOffsetInMilliseconds(0L); | |
AudioItem audioItem = new AudioItem(); | |
audioItem.setStream(stream); | |
PlayDirective playDirective = new PlayDirective(); | |
playDirective.setAudioItem(audioItem); | |
playDirective.setPlayBehavior(PlayBehavior.ENQUEUE); | |
List<Directive> directives = new ArrayList<>(); | |
directives.add(playDirective); | |
SpeechletResponse result = new SpeechletResponse(); | |
result.setDirectives(directives); | |
log.debug("Finished `onPlaybackNearlyFinished`"); | |
return result; | |
} | |
static class File { | |
private String folderId; | |
private String fileId; | |
private String url; | |
File(String folderId, String fileId, String url) { | |
this.folderId = folderId; | |
this.fileId = fileId; | |
this.url = url; | |
} | |
String getFolderId() { | |
return folderId; | |
} | |
void setFolderId(String folderId) { | |
this.folderId = folderId; | |
} | |
String getFileId() { | |
return fileId; | |
} | |
void setFileId(String fileId) { | |
this.fileId = fileId; | |
} | |
String getUrl() { | |
return url; | |
} | |
void setUrl(String url) { | |
this.url = url; | |
} | |
String getToken() { | |
return url; | |
} | |
} | |
@Override | |
public void onSessionEnded(SpeechletRequestEnvelope<SessionEndedRequest> requestEnvelope) { | |
} | |
@Override | |
public SpeechletResponse onPlaybackFailed(SpeechletRequestEnvelope<PlaybackFailedRequest> requestEnvelope) { | |
return null; | |
} | |
@Override | |
public SpeechletResponse onPlaybackFinished(SpeechletRequestEnvelope<PlaybackFinishedRequest> requestEnvelope) { | |
return null; | |
} | |
@Override | |
public SpeechletResponse onPlaybackStarted(SpeechletRequestEnvelope<PlaybackStartedRequest> requestEnvelope) { | |
return null; | |
} | |
@Override | |
public SpeechletResponse onPlaybackStopped(SpeechletRequestEnvelope<PlaybackStoppedRequest> requestEnvelope) { | |
return null; | |
} | |
@Override | |
public void onSessionStarted(SpeechletRequestEnvelope<SessionStartedRequest> requestEnvelope) { | |
} | |
@Override | |
public SpeechletResponse onLaunch(SpeechletRequestEnvelope<LaunchRequest> requestEnvelope) { | |
return null; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment