Tower: upload web_notify 16.0.3.2.0 (via marketplace)
This commit is contained in:
70
addons/web_notify/static/src/components/audio_player.esm.js
Normal file
70
addons/web_notify/static/src/components/audio_player.esm.js
Normal file
@@ -0,0 +1,70 @@
|
||||
/** @odoo-module alias=web_notify.AudioPlayer **/
|
||||
|
||||
import {Component, useState} from "@odoo/owl";
|
||||
|
||||
/**
|
||||
* @typedef AudioPlayerProps
|
||||
* @property {string} src URL of the audio file to be played
|
||||
* @property {number} [volume=1.0] Volume level of the audio (from 0.0 to 1.0)
|
||||
* @property {boolean} [loop=false] Whether the audio should loop
|
||||
* @property {Function} [onEnded] Callback function to be called when the audio ends
|
||||
*/
|
||||
|
||||
/**
|
||||
* The AudioPlayer component is responsible for playing audio files with
|
||||
* specified settings like volume and looping. It also provides the ability
|
||||
* to trigger actions when the audio playback ends.
|
||||
*/
|
||||
export class AudioPlayer extends Component {
|
||||
setup() {
|
||||
this.state = useState({isPlaying: false});
|
||||
this.audioElement = new Audio(this.props.src);
|
||||
|
||||
// Set audio properties
|
||||
this.audioElement.volume = this.props.volume || 1.0;
|
||||
this.audioElement.loop = this.props.loop || false;
|
||||
|
||||
// Start playing the audio
|
||||
this.audioElement
|
||||
.play()
|
||||
.then(() => {
|
||||
this.state.isPlaying = true;
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Audio playback failed:", error);
|
||||
});
|
||||
|
||||
// Listen for the end of the audio playback
|
||||
this.audioElement.addEventListener("ended", this.onAudioEnded.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the audio playback and triggers the onEnded callback if provided.
|
||||
*/
|
||||
stopAudio() {
|
||||
this.audioElement.pause();
|
||||
this.audioElement.currentTime = 0;
|
||||
this.state.isPlaying = false;
|
||||
|
||||
if (this.props.onEnded) {
|
||||
this.props.onEnded();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handler for when the audio playback ends.
|
||||
*/
|
||||
onAudioEnded() {
|
||||
if (!this.props.loop) {
|
||||
this.stopAudio();
|
||||
}
|
||||
}
|
||||
|
||||
willUnmount() {
|
||||
// Clean up the audio element and listeners
|
||||
this.audioElement.removeEventListener("ended", this.onAudioEnded);
|
||||
this.audioElement.pause();
|
||||
}
|
||||
}
|
||||
|
||||
AudioPlayer.template = "web_notify.AudioPlayer";
|
||||
Reference in New Issue
Block a user