]> git.sesse.net Git - vlc/blob - bindings/phonon/vlc/seekstack.cpp
Phonon Backend using VLC
[vlc] / bindings / phonon / vlc / seekstack.cpp
1 /*****************************************************************************
2  * VLC backend for the Phonon library                                        *
3  * Copyright (C) 2007-2008 Tanguy Krotoff <tkrotoff@gmail.com>               *
4  * Copyright (C) 2008 Lukas Durfina <lukas.durfina@gmail.com>                *
5  * Copyright (C) 2009 Fathi Boudra <fabo@kde.org>                            *
6  *                                                                           *
7  * This program is free software; you can redistribute it and/or             *
8  * modify it under the terms of the GNU Lesser General Public                *
9  * License as published by the Free Software Foundation; either              *
10  * version 3 of the License, or (at your option) any later version.          *
11  *                                                                           *
12  * This program is distributed in the hope that it will be useful,           *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of            *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
15  * Lesser General Public License for more details.                           *
16  *                                                                           *
17  * You should have received a copy of the GNU Lesser General Public          *
18  * License along with this package; if not, write to the Free Software       *
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA *
20  *****************************************************************************/
21
22 #include "seekstack.h"
23
24 #include <QtCore/QTimer>
25 #include <QtCore/QDebug>
26
27 namespace Phonon
28 {
29 namespace VLC {
30
31 SeekStack::SeekStack(MediaObject *mediaObject)
32         : QObject(mediaObject)
33 {
34     p_media_object = mediaObject;
35
36     p_timer = new QTimer(this);
37     connect(p_timer, SIGNAL(timeout()),
38             SLOT(popSeek()));
39     p_timer->setInterval(1000);
40 }
41
42 SeekStack::~SeekStack()
43 {
44 }
45
46 void SeekStack::pushSeek(qint64 milliseconds)
47 {
48     qDebug() << __FUNCTION__ << "seek:" << milliseconds;
49
50     disconnect(p_media_object, SIGNAL(tickInternal(qint64)),
51                p_media_object, SLOT(tickInternalSlot(qint64)));
52
53     stack.push(milliseconds);
54
55     if (!p_timer->isActive()) {
56         p_timer->start();
57         popSeek();
58     }
59 }
60
61 void SeekStack::popSeek()
62 {
63     if (stack.isEmpty()) {
64         p_timer->stop();
65         reconnectTickSignal();
66         return;
67     }
68
69     int i_milliseconds = stack.pop();
70     stack.clear();
71
72     qDebug() << __FUNCTION__ << "real seek:" << i_milliseconds;
73
74     p_media_object->seekInternal(i_milliseconds);
75
76     reconnectTickSignal();
77 }
78
79 void SeekStack::reconnectTickSignal()
80 {
81     connect(p_media_object, SIGNAL(tickInternal(qint64)),
82             p_media_object, SLOT(tickInternalSlot(qint64)));
83 }
84
85 }
86 } // Namespace Phonon::VLC