mirror of
https://github.com/AzuraCast/AzuraCast.git
synced 2024-06-14 05:06:37 +00:00
179 lines
5.4 KiB
Vue
179 lines
5.4 KiB
Vue
<template>
|
|
<div class="card settings">
|
|
<div class="card-header bg-primary-dark">
|
|
<h5 class="card-title">
|
|
{{ $gettext('WebDJ') }}
|
|
<br>
|
|
<small>{{ stationName }}</small>
|
|
</h5>
|
|
</div>
|
|
<template v-if="isConnected">
|
|
<div class="card-body">
|
|
<div class="form-group">
|
|
<label
|
|
for="metadata_title"
|
|
class="mb-2"
|
|
>
|
|
{{ $gettext('Title') }}
|
|
</label>
|
|
<div class="controls">
|
|
<input
|
|
id="metadata_title"
|
|
v-model="shownMetadata.title"
|
|
class="form-control"
|
|
type="text"
|
|
>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label
|
|
for="metadata_artist"
|
|
class="mb-2"
|
|
>
|
|
{{ $gettext('Artist') }}
|
|
</label>
|
|
<div class="controls">
|
|
<input
|
|
id="metadata_artist"
|
|
v-model="shownMetadata.artist"
|
|
class="form-control"
|
|
type="text"
|
|
>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<button
|
|
class="btn btn-primary"
|
|
@click="updateMetadata"
|
|
>
|
|
{{ $gettext('Update Metadata') }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<template v-else>
|
|
<div class="card-body alert-info">
|
|
<p class="card-text">
|
|
{{ $gettext('The WebDJ lets you broadcast live to your station using just your web browser.') }}
|
|
</p>
|
|
<p class="card-text">
|
|
{{
|
|
$gettext('To use this feature, a secure (HTTPS) connection is required. Firefox is recommended to avoid static when broadcasting.')
|
|
}}
|
|
</p>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<div class="form-group">
|
|
<label
|
|
for="dj_username"
|
|
class="mb-2"
|
|
>
|
|
{{ $gettext('Streamer/DJ Username') }}
|
|
</label>
|
|
<div class="controls">
|
|
<input
|
|
id="dj_username"
|
|
v-model="djUsername"
|
|
type="text"
|
|
class="form-control"
|
|
>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label
|
|
for="dj_password"
|
|
class="mb-2"
|
|
>
|
|
{{ $gettext('Streamer/DJ Password') }}
|
|
</label>
|
|
<div class="controls">
|
|
<input
|
|
id="dj_password"
|
|
v-model="djPassword"
|
|
type="password"
|
|
class="form-control"
|
|
>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<div class="card-actions">
|
|
<button
|
|
v-if="!isConnected"
|
|
class="btn btn-success"
|
|
@click="startStream(djUsername, djPassword)"
|
|
>
|
|
{{ langStreamButton }}
|
|
</button>
|
|
<button
|
|
v-if="isConnected"
|
|
class="btn btn-danger"
|
|
@click="stopStream"
|
|
>
|
|
{{ langStreamButton }}
|
|
</button>
|
|
<button
|
|
class="btn"
|
|
:class="{ 'btn-primary': doPassThrough }"
|
|
@click="doPassThrough = !doPassThrough"
|
|
>
|
|
{{ $gettext('Cue') }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
import {computed, ref, watch} from "vue";
|
|
import {useTranslate} from "~/vendor/gettext";
|
|
import {useInjectWebDjNode} from "~/components/Public/WebDJ/useWebDjNode";
|
|
import {usePassthroughSync} from "~/components/Public/WebDJ/usePassthroughSync";
|
|
|
|
const props = defineProps({
|
|
stationName: {
|
|
type: String,
|
|
required: true
|
|
}
|
|
});
|
|
|
|
const djUsername = ref(null);
|
|
const djPassword = ref(null);
|
|
|
|
const {
|
|
doPassThrough,
|
|
isConnected,
|
|
startStream,
|
|
stopStream,
|
|
metadata,
|
|
sendMetadata
|
|
} = useInjectWebDjNode();
|
|
|
|
usePassthroughSync(doPassThrough, 'global');
|
|
|
|
const {$gettext} = useTranslate();
|
|
|
|
const langStreamButton = computed(() => {
|
|
return (isConnected.value)
|
|
? $gettext('Stop Streaming')
|
|
: $gettext('Start Streaming');
|
|
});
|
|
|
|
const shownMetadata = ref({});
|
|
watch(metadata, (newMeta) => {
|
|
if (newMeta === null) {
|
|
newMeta = {
|
|
artist: '',
|
|
title: ''
|
|
};
|
|
}
|
|
|
|
shownMetadata.value = newMeta;
|
|
});
|
|
|
|
const updateMetadata = () => {
|
|
sendMetadata(shownMetadata.value);
|
|
};
|
|
</script>
|