Lomiri
NotificationAudio.qml
1 /*
2  * Copyright (C) 2015-2016 Canonical Ltd.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 3.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 import QtQuick 2.4
18 import QtMultimedia 5.6
19 
20 Item {
21  id: root
22  property string source: ""
23  readonly property var playbackState: priv.audio ? priv.audio.playbackState : 0
24 
25  function play() {
26  if (!priv.audio) {
27  console.info("NotificationAudio: creating player");
28  priv.audio = priv.audioComponent.createObject(root);
29  }
30  if (priv.audio) {
31  priv.audio.play();
32  }
33  }
34  function stop() {
35  if (priv.audio) {
36  priv.audio.stop();
37  }
38  }
39 
40  QtObject {
41  id: priv
42  property Audio audio: null
43  property Component audioComponent: Component {
44  Audio {
45  source: root.source
46  audioRole: MediaPlayer.NotificationRole
47  /* Remove player in case of error so it gets recreated next time
48  * we need it. Happens if backend media player restarted, for
49  * instance. qtmultimedia should probably handle this
50  * transparently (LP: #1616425).
51  */
52  onError: {
53  console.warn("NotificationAudio: error event (" +
54  priv.audio.errorString + "), destroying");
55  priv.audio.destroy();
56  }
57  }
58  }
59  }
60 }