~neon/juk/master

« back to all changes in this revision

Viewing changes to mpris2/mpris2.cpp

  • Committer: Michael Pyne
  • Date: 2012-04-16 01:53:04 UTC
  • Revision ID: git-v1:54c6db81c2fe09999b9953249dce839f5c7a0a66
Initial MPRIS2 support.

Eike Hein has kindly donated a working Mpris2 adaptor with instructions
on how to integrate into JuK, so I've done so.

This is just at the "compiles and links" stage and the track ID will
give a lot of weirdness due to the strictness of the D-Bus Object Path
name spec.

The reason we don't just use an identifier for a track is that the
"primary key" JuK uses is the canonical file name. JuK has no internal
RDBMS or anything similar where primary keys would be assigned. Because
of this we encode track IDs using z-Base-32 so they will not violate the
D-Bus spec.

Thanks to Eike for the large code contribution and integration support!

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***********************************************************************
 
2
 * Copyright 2012  Eike Hein <hein@kde.org>
 
3
 *
 
4
 * This program is free software; you can redistribute it and/or
 
5
 * modify it under the terms of the GNU General Public License as
 
6
 * published by the Free Software Foundation; either version 2 of
 
7
 * the License or (at your option) version 3 or any later version
 
8
 * accepted by the membership of KDE e.V. (or its successor approved
 
9
 * by the membership of KDE e.V.), which shall act as a proxy
 
10
 * defined in Section 14 of version 3 of the license.
 
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
 
15
 * GNU General Public License for more details.
 
16
 *
 
17
 * You should have received a copy of the GNU General Public License
 
18
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
19
 ***********************************************************************/
 
20
 
 
21
#include "mpris2/mpris2.h"
 
22
#include "mpris2/mediaplayer2.h"
 
23
#include "mpris2/mediaplayer2player.h"
 
24
 
 
25
#include <QDBusConnection>
 
26
 
 
27
Mpris2::Mpris2(QObject* parent) : QObject(parent)
 
28
{
 
29
    QString mspris2Name("org.mpris.MediaPlayer2." + QLatin1String("juk"));
 
30
 
 
31
    bool success = QDBusConnection::sessionBus().registerService(mspris2Name);
 
32
 
 
33
    // If the above failed, it's likely because we're not the first instance
 
34
    // and the name is already taken. In that event the MPRIS2 spec wants the
 
35
    // following:
 
36
    if (!success)
 
37
        success = QDBusConnection::sessionBus().registerService(mspris2Name + ".instance" + QString::number(getpid()));
 
38
 
 
39
    if (success)
 
40
    {
 
41
        new MediaPlayer2(this);
 
42
        new MediaPlayer2Player(this);
 
43
        QDBusConnection::sessionBus().registerObject("/org/mpris/MediaPlayer2", this, QDBusConnection::ExportAdaptors);
 
44
    }
 
45
}
 
46
 
 
47
Mpris2::~Mpris2()
 
48
{
 
49
}