Skip to content
This repository was archived by the owner on Nov 5, 2023. It is now read-only.

Commit bfcab4a

Browse files
committed
Got Cast working
1 parent 4e5e5e0 commit bfcab4a

File tree

3 files changed

+165
-177
lines changed

3 files changed

+165
-177
lines changed

app/src/components/CastButton.vue

Lines changed: 126 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,123 @@
11
<template>
2-
<b-button variant="link" @click="requestSessionTest()"><img src="/public/cast-icon.svg"/></b-button>
2+
<div>
3+
<b-button variant="link" @click="sendInitMessage"><img src="/public/cast-icon.svg"/></b-button>
4+
<button @click="sendInitMessage">Send message</button>
5+
</div>
36
</template>
47

58
<script>
69
import loadScript from 'load-script'
710
8-
var applicationID = 'C97D0419';
9-
var namespace = 'urn:x-cast:com.google.cast.sample.helloworld';
10-
var session = null;
11+
const applicationID = 'C97D0419';
12+
const namespace = 'urn:x-cast:com.google.cast.sample.helloworld';
1113
1214
export default {
1315
name: 'castButton',
1416
data: function() {
1517
return {
1618
sendCastMessage: null,
19+
20+
session: null,
1721
};
1822
},
23+
// mounted: function() {
24+
// this.initializeCastApi();
25+
26+
// this.$watch("captioningOn", function(captioningOn) {
27+
// },
1928
methods: {
20-
requestSessionTest: function() {
21-
chrome.cast.requestSession(function(e) {
22-
let session = e;
23-
session.sendMessage(namespace, {
24-
mutationType: 'RESTORE_SETTINGS',
25-
payload: {
26-
settings: this.$store.state.settings,
27-
verstion: this.$store.state.version,
28-
},
29-
},
30-
function () {
31-
console.log('Message sent: ');
32-
},
33-
function(e){
34-
console.log(e)
35-
}
36-
);
37-
},
38-
function(e){
39-
console.log(e)
40-
}
41-
);
29+
initializeCastApi: function() {
30+
console.log(this);
31+
let self = this;
32+
let sessionRequest = new chrome.cast.SessionRequest(applicationID);
33+
const onReceivedMessage = function(namespace, message) {
34+
console.log('Received message:');
35+
console.log(namespace, message);
36+
}
37+
38+
const sessionListener = function (e) {
39+
console.log('New session ID:' + e.sessionId);
40+
self.session = e;
41+
self.session.addUpdateListener(sessionUpdateListener);
42+
self.session.addMessageListener(namespace, onReceivedMessage);
43+
};
44+
45+
const sessionUpdateListener = function sessionUpdateListener(isAlive) {
46+
var message = isAlive ? 'Session Updated' : 'Session Removed';
47+
message += ': ' + self.session.sessionId;
48+
console.log(message);
49+
if (!isAlive) {
50+
self.session = null;
51+
}
52+
}
53+
54+
const receiverListener = function receiverListener(e) {
55+
if(e === 'available') {
56+
console.log('receiver found');
57+
}
58+
else {
59+
console.log('receiver list empty');
60+
}
61+
};
62+
63+
let apiConfig = new chrome.cast.ApiConfig(
64+
sessionRequest,
65+
sessionListener,
66+
receiverListener);
67+
68+
chrome.cast.initialize(apiConfig, () => { console.log('init success')}, (e) => { console.log(e); });
69+
},
70+
sendInitMessage: function() {
71+
this.sendMessage({
72+
mutationType: 'RESTORE_SETTINGS',
73+
payload: {
74+
settings: this.$store.state.settings,
75+
verstion: this.$store.state.version,
76+
}
77+
});
78+
},
79+
sendMessage: function (message) {
80+
if (this.session != null) {
81+
this.session.sendMessage(namespace, message, function() {
82+
console.log("success: "+ JSON.stringify(message));
83+
},
84+
function(e) {
85+
console.log("error: ");
86+
console.log(e);
87+
});
88+
}
89+
else {
90+
let self = this;
91+
chrome.cast.requestSession(function(e) {
92+
self.session = e;
93+
self.session.sendMessage(namespace, message,
94+
95+
function() {
96+
console.log("success: "+ message);
97+
}, function(e) {
98+
console.log("error: ");
99+
console.log(e);
100+
})
101+
}, function(e) {
102+
console.log("error: ");
103+
console.log(e);
104+
});
105+
}
106+
},
107+
},
108+
computed: {
109+
transcriptFinal () {
110+
return this.$store.state.captioner.transcript.final;
111+
},
112+
transcriptInterim () {
113+
return this.$store.state.captioner.transcript.interim;
42114
},
43115
},
44116
mounted: function() {
117+
let self = this;
45118
window['__onGCastApiAvailable'] = function(isAvailable) {
46119
if (isAvailable) {
47-
initializeCastApi();
120+
self.initializeCastApi();
48121
}
49122
};
50123
@@ -60,144 +133,42 @@ export default {
60133
}
61134
});
62135
63-
/**
64-
* Call initialization for Cast
65-
*/
66-
if (!chrome.cast || !chrome.cast.isAvailable) {
67-
setTimeout(initializeCastApi, 1000);
68-
}
69-
70-
/**
71-
* initialization
72-
*/
73-
function initializeCastApi() {
74-
var sessionRequest = new chrome.cast.SessionRequest(applicationID);
75-
var apiConfig = new chrome.cast.ApiConfig(sessionRequest,
76-
sessionListener,
77-
receiverListener);
78-
79-
chrome.cast.initialize(apiConfig, onInitSuccess, onError);
80-
}
81-
82-
/**
83-
* initialization success callback
84-
*/
85-
function onInitSuccess() {
86-
appendMessage('onInitSuccess');
87-
}
88-
89-
/**
90-
* initialization error callback
91-
*/
92-
function onError(message) {
93-
appendMessage('onError: ' + JSON.stringify(message));
94-
}
95-
96-
/**
97-
* generic success callback
98-
*/
99-
function onSuccess(message) {
100-
appendMessage('onSuccess: ' + message);
101-
}
102-
103-
/**
104-
* callback on success for stopping app
105-
*/
106-
function onStopAppSuccess() {
107-
appendMessage('onStopAppSuccess');
108-
}
109-
110-
/**
111-
* session listener during initialization
112-
*/
113-
function sessionListener(e) {
114-
appendMessage('New session ID:' + e.sessionId);
115-
session = e;
116-
session.addUpdateListener(sessionUpdateListener);
117-
session.addMessageListener(namespace, receiverMessage);
118-
}
119-
120-
/**
121-
* listener for session updates
122-
*/
123-
function sessionUpdateListener(isAlive) {
124-
var message = isAlive ? 'Session Updated' : 'Session Removed';
125-
message += ': ' + session.sessionId;
126-
appendMessage(message);
127-
if (!isAlive) {
128-
session = null;
129-
}
130-
}
131-
132-
/**
133-
* utility function to log messages from the receiver
134-
* @param {string} namespace The namespace of the message
135-
* @param {string} message A message string
136-
*/
137-
function receiverMessage(namespace, message) {
138-
appendMessage('receiverMessage: ' + namespace + ', ' + message);
139-
}
140-
141-
/**
142-
* receiver listener during initialization
143-
*/
144-
function receiverListener(e) {
145-
if(e === 'available') {
146-
appendMessage('receiver found');
147-
}
148-
else {
149-
appendMessage('receiver list empty');
136+
this.$watch("transcriptInterim", function(transcriptInterim) {
137+
if (this.session) {
138+
this.sendMessage({
139+
mutationType: 'captioner/SET_TRANSCRIPT_INTERIM',
140+
payload: {
141+
transcriptInterim,
142+
}
143+
});
150144
}
151-
}
152-
153-
/**
154-
* stop app/session
155-
*/
156-
function stopApp() {
157-
session.stop(onStopAppSuccess, onError);
158-
}
145+
});
159146
160-
/**
161-
* send a message to the receiver using the custom namespace
162-
* receiver CastMessageBus message handler will be invoked
163-
* @param {string} message A message string
164-
*/
165-
this.sendCastMessage = function(message) {
166-
if (session != null) {
167-
session.sendMessage(namespace, message, onSuccess.bind(this, 'Message sent: ' + message),
168-
onError);
169-
}
170-
else {
171-
chrome.cast.requestSession(function(e) {
172-
let session = e;
173-
session.sendMessage(namespace, message, onSuccess.bind(this, 'Message sent: ' +
174-
message), onError);
175-
}, onError);
147+
this.$watch("transcriptFinal", function(transcriptFinal) {
148+
if (this.session) {
149+
this.sendMessage({
150+
mutationType: 'captioner/APPEND_TRANSCRIPT_FINAL',
151+
payload: {
152+
transcriptFinal,
153+
}
154+
});
176155
}
177-
}
156+
});
178157
179158
/**
180-
* append message to debug message window
181-
* @param {string} message A message string
159+
* Call initialization for Cast
182160
*/
183-
function appendMessage(message) {
184-
console.log(message);
185-
}
161+
// if (!chrome.cast || !chrome.cast.isAvailable) {
162+
// setTimeout(initializeCastApi, 1000);
163+
// }
186164
187-
/**
188-
* utility function to handle text typed in by user in the input field
189-
*/
190-
function update() {
191-
this.sendCastMessage(document.getElementById('input').value);
192-
}
193165
194166
/**
195-
* handler for the transcribed text from the speech input
196-
* @param {string} words A transcibed speech string
167+
* stop app/session
197168
*/
198-
function transcribe(words) {
199-
this.sendCastMessage(words);
200-
}
169+
// function stopApp() {
170+
// session.stop((e) => { console.log('App successfully stopped');}, (e) => { console.log(e); });
171+
// }
201172
},
202173
}
203174
</script>

0 commit comments

Comments
 (0)