Music Hub  ..
A session-wide music playback service
track_list_implementation.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2013-2015 Canonical Ltd.
3  * Copyright © 2022 UBports Foundation.
4  *
5  * Contact: Alberto Mardegan <mardy@users.sourceforge.net>
6  *
7  * This program is free software: you can redistribute it and/or modify it
8  * under the terms of the GNU Lesser General Public License version 3,
9  * as published by the Free Software Foundation.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  *
19  * Authored by: Thomas Voß <thomas.voss@canonical.com>
20  */
21 
22 #ifndef LOMIRI_MEDIAHUBSERVICE_TRACK_LIST_IMPLEMENTATION_H
23 #define LOMIRI_MEDIAHUBSERVICE_TRACK_LIST_IMPLEMENTATION_H
24 
25 #include "engine.h"
26 #include "track.h"
27 
28 #include <QObject>
29 #include <QScopedPointer>
30 #include <QVector>
31 
32 namespace lomiri
33 {
34 namespace MediaHubService
35 {
36 
37 namespace TrackList
38 {
39  struct Errors
40  {
41  Errors() = delete;
42 
43  struct ExceptionBase: public std::runtime_error {
44  ExceptionBase(const QString &msg = {}):
45  std::runtime_error(msg.toStdString()) {}
46  };
47 
50  };
51 
54  };
55 
58  };
59 
62  };
63 
64  struct TrackNotFound: public ExceptionBase {
66  };
67  };
68 
69  typedef QVector<Track::Id> Container;
71 } // namespace TrackList
72 
75 {
76  Q_OBJECT
77 
78 public:
80  const QSharedPointer<Engine::MetaDataExtractor> &extractor,
81  QObject *parent = nullptr);
83 
84  void setLoopStatus(Player::LoopStatus status);
86 
87  void setShuffle(bool shuffle);
88  bool shuffle() const;
89 
90  void setCurrentPosition(uint64_t position);
91 
92  bool canEditTracks() const;
93 
94  QUrl query_uri_for_track(const Track::Id& id);
96 
97  static const Track::Id &afterEmptyTrack();
98  void add_track_with_uri_at(const QUrl &uri, const Track::Id& position, bool make_current);
99  void add_tracks_with_uri_at(const QVector<QUrl> &uris, const Track::Id& position);
100  bool move_track(const Track::Id& id, const Track::Id& to);
101  void remove_track(const Track::Id& id);
102 
103  void go_to(const Track::Id& track);
104  const TrackList::Container &shuffled_tracks() const;
105  void reset();
106  const TrackList::Container &tracks() const;
107 
108  bool hasNext() const;
109  bool hasPrevious() const;
110  Track::Id next();
112  const Track::Id& current() const;
113 
114 Q_SIGNALS:
115  void endOfTrackList();
116  void onGoToTrack(const Track::Id &id);
117  void trackAdded(const Track::Id &id);
118  void tracksAdded(const QVector<QUrl> &tracks);
119  void trackRemoved(const Track::Id &id);
120  void trackMoved(const Track::Id &id,
121  const Track::Id &to);
122  void trackListReset();
123  void trackChanged(const Track::Id &id);
124  void trackListReplaced(const QVector<Track::Id> &tracks,
125  const Track::Id &currentTrack);
126 
127 private:
128  Q_DECLARE_PRIVATE(TrackListImplementation)
129  QScopedPointer<TrackListImplementationPrivate> d_ptr;
130 };
131 
132 }
133 }
134 
135 #endif // LOMIRI_MEDIAHUBSERVICE_TRACK_LIST_IMPLEMENTATION_H
lomiri::MediaHubService::TrackListImplementation::query_meta_data_for_track
Track::MetaData query_meta_data_for_track(const Track::Id &id)
Definition: track_list_implementation.cpp:443
lomiri::MediaHubService::TrackList::Errors::FailedToFindMoveTrackDest
Definition: track_list_implementation.h:60
QObject
lomiri::MediaHubService::Track::MetaData
Definition: track.h:37
lomiri::MediaHubService::TrackListImplementationPrivate
Definition: track_list_implementation.cpp:47
lomiri::MediaHubService::TrackList::Errors
Definition: track_list_implementation.h:39
lomiri::MediaHubService::Player::LoopStatus
LoopStatus
Definition: player.h:101
lomiri::MediaHubService::TrackList::Errors::TrackNotFound
Definition: track_list_implementation.h:64
lomiri::MediaHubService::TrackListImplementation::shuffle
bool shuffle() const
Definition: track_list_implementation.cpp:426
lomiri::MediaHubService::TrackList::Container
QVector< Track::Id > Container
Definition: track_list_implementation.h:69
lomiri::MediaHubService::TrackListImplementation::next
Track::Id next()
Definition: track_list_implementation.cpp:579
lomiri::MediaHubService::TrackListImplementation::reset
void reset()
Definition: track_list_implementation.cpp:499
lomiri::MediaHubService::TrackListImplementation::trackListReplaced
void trackListReplaced(const QVector< Track::Id > &tracks, const Track::Id &currentTrack)
lomiri::MediaHubService::TrackListImplementation::add_tracks_with_uri_at
void add_tracks_with_uri_at(const QVector< QUrl > &uris, const Track::Id &position)
Definition: track_list_implementation.cpp:464
lomiri::MediaHubService::Track::Id
QString Id
Definition: track.h:34
lomiri::MediaHubService::TrackListImplementation::current
const Track::Id & current() const
Definition: track_list_implementation.cpp:746
lomiri::MediaHubService::TrackList::Errors::ExceptionBase::ExceptionBase
ExceptionBase(const QString &msg={})
Definition: track_list_implementation.h:44
lomiri::MediaHubService::TrackListImplementation::shuffled_tracks
const TrackList::Container & shuffled_tracks() const
Definition: track_list_implementation.cpp:493
lomiri::MediaHubService::TrackListImplementation::tracks
const TrackList::Container & tracks() const
Definition: track_list_implementation.cpp:516
lomiri::MediaHubService::TrackListImplementation::query_uri_for_track
QUrl query_uri_for_track(const Track::Id &id)
Definition: track_list_implementation.cpp:432
track.h
lomiri::MediaHubService::TrackListImplementation::move_track
bool move_track(const Track::Id &id, const Track::Id &to)
Definition: track_list_implementation.cpp:472
lomiri::MediaHubService::TrackListImplementation::endOfTrackList
void endOfTrackList()
lomiri::MediaHubService::TrackListImplementation::setShuffle
void setShuffle(bool shuffle)
Definition: track_list_implementation.cpp:414
lomiri::MediaHubService::TrackListImplementation::loopStatus
Player::LoopStatus loopStatus() const
Definition: track_list_implementation.cpp:758
lomiri::MediaHubService::TrackList::Errors::ExceptionBase
Definition: track_list_implementation.h:43
lomiri::MediaHubService::TrackList::Errors::InsufficientPermissionsToAddTrack
Definition: track_list_implementation.h:48
lomiri::MediaHubService::TrackListImplementation::~TrackListImplementation
~TrackListImplementation()
Definition: track_list_implementation.cpp:410
lomiri::MediaHubService::TrackList::Errors::FailedToMoveTrack
Definition: track_list_implementation.h:52
lomiri::MediaHubService::TrackListImplementation::hasNext
bool hasNext() const
Definition: track_list_implementation.cpp:527
lomiri::MediaHubService::TrackListImplementation::trackRemoved
void trackRemoved(const Track::Id &id)
lomiri::MediaHubService::TrackListImplementation::onGoToTrack
void onGoToTrack(const Track::Id &id)
lomiri::MediaHubService::TrackListImplementation::previous
Track::Id previous()
Definition: track_list_implementation.cpp:668
lomiri::MediaHubService::TrackListImplementation::canEditTracks
bool canEditTracks() const
Definition: track_list_implementation.cpp:770
lomiri::MediaHubService::TrackListImplementation::hasPrevious
bool hasPrevious() const
Definition: track_list_implementation.cpp:566
lomiri::MediaHubService::TrackListImplementation::afterEmptyTrack
static const Track::Id & afterEmptyTrack()
Definition: track_list_implementation.cpp:775
lomiri::MediaHubService::TrackListImplementation::trackChanged
void trackChanged(const Track::Id &id)
lomiri::MediaHubService::TrackList::Errors::FailedToFindMoveTrackSource
Definition: track_list_implementation.h:56
lomiri::MediaHubService::TrackListImplementation::TrackListImplementation
TrackListImplementation(const QSharedPointer< Engine::MetaDataExtractor > &extractor, QObject *parent=nullptr)
Definition: track_list_implementation.cpp:402
lomiri::MediaHubService::TrackListImplementation::trackAdded
void trackAdded(const Track::Id &id)
lomiri::MediaHubService::TrackListImplementation::add_track_with_uri_at
void add_track_with_uri_at(const QUrl &uri, const Track::Id &position, bool make_current)
Definition: track_list_implementation.cpp:454
lomiri::MediaHubService::TrackListImplementation::go_to
void go_to(const Track::Id &track)
Definition: track_list_implementation.cpp:486
lomiri::MediaHubService::TrackListImplementation::setCurrentPosition
void setCurrentPosition(uint64_t position)
Definition: track_list_implementation.cpp:764
engine.h
lomiri::MediaHubService::TrackList::ConstIterator
Container::ConstIterator ConstIterator
Definition: track_list_implementation.h:70
lomiri::MediaHubService::TrackListImplementation::remove_track
void remove_track(const Track::Id &id)
Definition: track_list_implementation.cpp:480
lomiri
Definition: dbus_utils.h:24
lomiri::MediaHubService::TrackListImplementation::setLoopStatus
void setLoopStatus(Player::LoopStatus status)
Definition: track_list_implementation.cpp:752
lomiri::MediaHubService::TrackListImplementation::trackMoved
void trackMoved(const Track::Id &id, const Track::Id &to)
lomiri::MediaHubService::TrackListImplementation::trackListReset
void trackListReset()
lomiri::MediaHubService::TrackListImplementation
Definition: track_list_implementation.h:74
lomiri::MediaHubService::TrackList::Errors::Errors
Errors()=delete
lomiri::MediaHubService::TrackListImplementation::tracksAdded
void tracksAdded(const QVector< QUrl > &tracks)