mirror of
https://github.com/clangen/musikcube.git
synced 2025-02-15 12:41:38 +00:00
Added support for the indexer.
This commit is contained in:
parent
de27613807
commit
a38b797154
@ -97,6 +97,42 @@ void mcsdk_context_message_queue::Run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mcsdk_svc_indexer_callback_proxy
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct mcsdk_svc_indexer_callback_proxy {
|
||||||
|
mcsdk_svc_indexer_context_internal* context;
|
||||||
|
|
||||||
|
mcsdk_svc_indexer_callback_proxy(mcsdk_svc_indexer_context_internal* context) {
|
||||||
|
this->context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_started() {
|
||||||
|
for (auto cb : context->callbacks) {
|
||||||
|
if (cb->on_started) {
|
||||||
|
cb->on_started(mcsdk_svc_indexer { context });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_finished(int tracks_processed) {
|
||||||
|
for (auto cb : context->callbacks) {
|
||||||
|
if (cb->on_finished) {
|
||||||
|
cb->on_finished(mcsdk_svc_indexer { context }, tracks_processed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_progress(int tracks_processed) {
|
||||||
|
for (auto cb : context->callbacks) {
|
||||||
|
if (cb->on_progress) {
|
||||||
|
cb->on_progress(mcsdk_svc_indexer { context }, tracks_processed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* mcsdk_context_*
|
* mcsdk_context_*
|
||||||
*/
|
*/
|
||||||
@ -111,24 +147,36 @@ mcsdk_export void mcsdk_context_init(mcsdk_context** context) {
|
|||||||
debug::Start();
|
debug::Start();
|
||||||
environment_initialized = true;
|
environment_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto c = new mcsdk_context();
|
auto c = new mcsdk_context();
|
||||||
memset(c, 0, sizeof(mcsdk_context));
|
memset(c, 0, sizeof(mcsdk_context));
|
||||||
|
|
||||||
auto internal = new mcsdk_context_internal();
|
auto internal = new mcsdk_context_internal();
|
||||||
|
|
||||||
internal->library = LibraryFactory::Default();
|
internal->library = LibraryFactory::Default();
|
||||||
internal->library->SetMessageQueue(internal->message_queue);
|
internal->library->SetMessageQueue(internal->message_queue);
|
||||||
internal->playback = new PlaybackService(internal->message_queue, internal->library);
|
internal->playback = new PlaybackService(internal->message_queue, internal->library);
|
||||||
internal->metadata = new LocalMetadataProxy(internal->library);
|
internal->metadata = new LocalMetadataProxy(internal->library);
|
||||||
internal->preferences = Preferences::ForComponent(prefs::components::Settings);
|
internal->preferences = Preferences::ForComponent(prefs::components::Settings);
|
||||||
|
|
||||||
c->internal.opaque = internal;
|
c->internal.opaque = internal;
|
||||||
c->metadata.opaque = internal->metadata;
|
c->metadata.opaque = internal->metadata;
|
||||||
c->preferences.opaque = internal->preferences.get();
|
c->preferences.opaque = internal->preferences.get();
|
||||||
c->playback.opaque = internal->playback;
|
c->playback.opaque = internal->playback;
|
||||||
|
|
||||||
|
auto indexer_internal = new mcsdk_svc_indexer_context_internal();
|
||||||
|
indexer_internal->indexer = internal->library->Indexer();
|
||||||
|
indexer_internal->callback_proxy = new mcsdk_svc_indexer_callback_proxy(indexer_internal);
|
||||||
|
c->indexer.opaque = indexer_internal;
|
||||||
|
|
||||||
if (!plugin_context) {
|
if (!plugin_context) {
|
||||||
mcsdk_set_plugin_context(c);
|
mcsdk_set_plugin_context(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal->thread = std::thread([internal] { /* needs to be last */
|
internal->thread = std::thread([internal] { /* needs to be last */
|
||||||
internal->message_queue.Run();
|
internal->message_queue.Run();
|
||||||
});
|
});
|
||||||
|
|
||||||
*context = c;
|
*context = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,19 +185,31 @@ mcsdk_export void mcsdk_context_release(mcsdk_context** context) {
|
|||||||
|
|
||||||
auto c = *context;
|
auto c = *context;
|
||||||
auto internal = static_cast<mcsdk_context_internal*>(c->internal.opaque);
|
auto internal = static_cast<mcsdk_context_internal*>(c->internal.opaque);
|
||||||
|
|
||||||
delete internal->playback;
|
delete internal->playback;
|
||||||
|
|
||||||
internal->playback = nullptr;
|
internal->playback = nullptr;
|
||||||
internal->library->Indexer()->Stop();
|
internal->library->Indexer()->Stop();
|
||||||
internal->library.reset();
|
internal->library.reset();
|
||||||
internal->preferences.reset();
|
internal->preferences.reset();
|
||||||
|
|
||||||
delete internal->metadata;
|
delete internal->metadata;
|
||||||
|
|
||||||
internal->message_queue.Quit();
|
internal->message_queue.Quit();
|
||||||
internal->thread.join();
|
internal->thread.join();
|
||||||
|
|
||||||
|
auto indexer_internal = static_cast<mcsdk_svc_indexer_context_internal*>(c->indexer.opaque);
|
||||||
|
delete indexer_internal->callback_proxy;
|
||||||
|
delete indexer_internal;
|
||||||
|
|
||||||
delete internal;
|
delete internal;
|
||||||
delete c;
|
|
||||||
if (plugin_context == c) {
|
if (plugin_context == c) {
|
||||||
mcsdk_set_plugin_context(nullptr);
|
mcsdk_set_plugin_context(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete c;
|
||||||
|
|
||||||
*context = 0;
|
*context = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,8 +37,11 @@
|
|||||||
#include <core/library/LibraryFactory.h>
|
#include <core/library/LibraryFactory.h>
|
||||||
#include <core/audio/PlaybackService.h>
|
#include <core/audio/PlaybackService.h>
|
||||||
#include <core/library/LocalMetadataProxy.h>
|
#include <core/library/LocalMetadataProxy.h>
|
||||||
|
#include <core/library/IIndexer.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
using namespace musik;
|
using namespace musik;
|
||||||
using namespace musik::core;
|
using namespace musik::core;
|
||||||
@ -66,4 +69,21 @@ struct mcsdk_context_internal {
|
|||||||
LocalMetadataProxy* metadata;
|
LocalMetadataProxy* metadata;
|
||||||
PlaybackService* playback;
|
PlaybackService* playback;
|
||||||
std::shared_ptr<Preferences> preferences;
|
std::shared_ptr<Preferences> preferences;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mcsdk_svc_indexer_callback_proxy;
|
||||||
|
|
||||||
|
struct mcsdk_svc_indexer_context_internal {
|
||||||
|
IIndexer* indexer;
|
||||||
|
mcsdk_svc_indexer_callback_proxy* callback_proxy;
|
||||||
|
std::set<mcsdk_svc_indexer_callbacks*> callbacks;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mcsdk_player_context_internal {
|
||||||
|
Player::EventListener* event_listener;
|
||||||
|
std::shared_ptr<IOutput> output;
|
||||||
|
std::mutex event_mutex;
|
||||||
|
std::condition_variable finished_condition;
|
||||||
|
Player* player;
|
||||||
|
bool player_finished;
|
||||||
};
|
};
|
@ -59,13 +59,12 @@
|
|||||||
#include <core/sdk/IStreamingEncoder.h>
|
#include <core/sdk/IStreamingEncoder.h>
|
||||||
#include <core/sdk/IDevice.h>
|
#include <core/sdk/IDevice.h>
|
||||||
#include <core/sdk/IOutput.h>
|
#include <core/sdk/IOutput.h>
|
||||||
|
#include <core/library/IIndexer.h>
|
||||||
#include <core/library/track/TrackList.h>
|
#include <core/library/track/TrackList.h>
|
||||||
#include <core/audio/Stream.h>
|
#include <core/audio/Stream.h>
|
||||||
#include <core/audio/Player.h>
|
#include <core/audio/Player.h>
|
||||||
#include <core/support/Common.h>
|
#include <core/support/Common.h>
|
||||||
|
|
||||||
#include <set>
|
|
||||||
|
|
||||||
using namespace musik;
|
using namespace musik;
|
||||||
using namespace musik::core;
|
using namespace musik::core;
|
||||||
using namespace musik::core::sdk;
|
using namespace musik::core::sdk;
|
||||||
@ -95,6 +94,8 @@ using namespace musik::core::audio;
|
|||||||
#define DEVICELIST(x) reinterpret_cast<IDeviceList*>(x.opaque)
|
#define DEVICELIST(x) reinterpret_cast<IDeviceList*>(x.opaque)
|
||||||
#define OUTPUT(x) reinterpret_cast<IOutput*>(x.opaque)
|
#define OUTPUT(x) reinterpret_cast<IOutput*>(x.opaque)
|
||||||
#define AUDIOSTREAM(x) reinterpret_cast<IStream*>(x.opaque)
|
#define AUDIOSTREAM(x) reinterpret_cast<IStream*>(x.opaque)
|
||||||
|
#define PLAYER(x) reinterpret_cast<mcsdk_player_context_internal*>(x.opaque)
|
||||||
|
#define INDEXER(x) reinterpret_cast<mcsdk_svc_indexer_context_internal*>(x.opaque)->indexer
|
||||||
|
|
||||||
#define RELEASE(x, type) if (mcsdk_handle_ok(x)) { type(x)->Release(); x.opaque = nullptr; }
|
#define RELEASE(x, type) if (mcsdk_handle_ok(x)) { type(x)->Release(); x.opaque = nullptr; }
|
||||||
|
|
||||||
@ -983,19 +984,10 @@ mcsdk_export void mcsdk_audio_stream_release(mcsdk_audio_stream as) {
|
|||||||
* Player
|
* Player
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct mcsdk_internal_player_context {
|
|
||||||
Player::EventListener* event_listener;
|
|
||||||
std::shared_ptr<IOutput> output;
|
|
||||||
std::mutex event_mutex;
|
|
||||||
std::condition_variable finished_condition;
|
|
||||||
Player* player;
|
|
||||||
bool player_finished;
|
|
||||||
};
|
|
||||||
|
|
||||||
class mcsdk_audio_player_callback_proxy: public Player::EventListener {
|
class mcsdk_audio_player_callback_proxy: public Player::EventListener {
|
||||||
public:
|
public:
|
||||||
std::set<mcsdk_audio_player_callbacks*> callbacks;
|
std::set<mcsdk_audio_player_callbacks*> callbacks;
|
||||||
mcsdk_internal_player_context* context;
|
mcsdk_player_context_internal* context;
|
||||||
virtual void OnPlayerPrepared(Player *player) {
|
virtual void OnPlayerPrepared(Player *player) {
|
||||||
std::unique_lock<std::mutex> lock(this->context->event_mutex);
|
std::unique_lock<std::mutex> lock(this->context->event_mutex);
|
||||||
for (auto c : callbacks) {
|
for (auto c : callbacks) {
|
||||||
@ -1056,8 +1048,6 @@ class mcsdk_audio_player_callback_proxy: public Player::EventListener {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PLAYER(x) reinterpret_cast<mcsdk_internal_player_context*>(x.opaque)
|
|
||||||
|
|
||||||
mcsdk_export mcsdk_audio_player mcsdk_audio_player_create(const char* url, mcsdk_audio_output output, mcsdk_audio_player_callbacks* callbacks, mcsdk_audio_player_gain gain) {
|
mcsdk_export mcsdk_audio_player mcsdk_audio_player_create(const char* url, mcsdk_audio_output output, mcsdk_audio_player_callbacks* callbacks, mcsdk_audio_player_gain gain) {
|
||||||
Player::Gain playerGain;
|
Player::Gain playerGain;
|
||||||
playerGain.gain = gain.gain;
|
playerGain.gain = gain.gain;
|
||||||
@ -1067,7 +1057,7 @@ mcsdk_export mcsdk_audio_player mcsdk_audio_player_create(const char* url, mcsdk
|
|||||||
|
|
||||||
auto callbackProxy = new mcsdk_audio_player_callback_proxy();
|
auto callbackProxy = new mcsdk_audio_player_callback_proxy();
|
||||||
|
|
||||||
mcsdk_internal_player_context* playerContext = new mcsdk_internal_player_context();
|
mcsdk_player_context_internal* playerContext = new mcsdk_player_context_internal();
|
||||||
playerContext->event_listener = callbackProxy;
|
playerContext->event_listener = callbackProxy;
|
||||||
playerContext->player_finished = false;
|
playerContext->player_finished = false;
|
||||||
|
|
||||||
@ -1090,7 +1080,7 @@ mcsdk_export mcsdk_audio_player mcsdk_audio_player_create(const char* url, mcsdk
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcsdk_export int mcsdk_audio_player_get_url(mcsdk_audio_player ap, char* dst, int size) {
|
mcsdk_export int mcsdk_audio_player_get_url(mcsdk_audio_player ap, char* dst, int size) {
|
||||||
mcsdk_internal_player_context* context = PLAYER(ap);
|
mcsdk_player_context_internal* context = PLAYER(ap);
|
||||||
std::unique_lock<std::mutex> lock(context->event_mutex);
|
std::unique_lock<std::mutex> lock(context->event_mutex);
|
||||||
if (!context->player_finished) {
|
if (!context->player_finished) {
|
||||||
return (int) CopyString(context->player->GetUrl(), dst, size);
|
return (int) CopyString(context->player->GetUrl(), dst, size);
|
||||||
@ -1099,7 +1089,7 @@ mcsdk_export int mcsdk_audio_player_get_url(mcsdk_audio_player ap, char* dst, in
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcsdk_export void mcsdk_audio_player_detach(mcsdk_audio_player ap, mcsdk_audio_player_callbacks* callbacks) {
|
mcsdk_export void mcsdk_audio_player_detach(mcsdk_audio_player ap, mcsdk_audio_player_callbacks* callbacks) {
|
||||||
mcsdk_internal_player_context* context = PLAYER(ap);
|
mcsdk_player_context_internal* context = PLAYER(ap);
|
||||||
std::unique_lock<std::mutex> lock(context->event_mutex);
|
std::unique_lock<std::mutex> lock(context->event_mutex);
|
||||||
if (!context->player_finished) {
|
if (!context->player_finished) {
|
||||||
auto proxy = reinterpret_cast<mcsdk_audio_player_callback_proxy*>(context->event_listener);
|
auto proxy = reinterpret_cast<mcsdk_audio_player_callback_proxy*>(context->event_listener);
|
||||||
@ -1111,7 +1101,7 @@ mcsdk_export void mcsdk_audio_player_detach(mcsdk_audio_player ap, mcsdk_audio_p
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcsdk_export void mcsdk_audio_player_attach(mcsdk_audio_player ap, mcsdk_audio_player_callbacks* callbacks) {
|
mcsdk_export void mcsdk_audio_player_attach(mcsdk_audio_player ap, mcsdk_audio_player_callbacks* callbacks) {
|
||||||
mcsdk_internal_player_context* context = PLAYER(ap);
|
mcsdk_player_context_internal* context = PLAYER(ap);
|
||||||
std::unique_lock<std::mutex> lock(context->event_mutex);
|
std::unique_lock<std::mutex> lock(context->event_mutex);
|
||||||
if (!context->player_finished) {
|
if (!context->player_finished) {
|
||||||
reinterpret_cast<mcsdk_audio_player_callback_proxy*>(context->event_listener)->callbacks.insert(callbacks);
|
reinterpret_cast<mcsdk_audio_player_callback_proxy*>(context->event_listener)->callbacks.insert(callbacks);
|
||||||
@ -1119,7 +1109,7 @@ mcsdk_export void mcsdk_audio_player_attach(mcsdk_audio_player ap, mcsdk_audio_p
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcsdk_export void mcsdk_audio_player_play(mcsdk_audio_player ap) {
|
mcsdk_export void mcsdk_audio_player_play(mcsdk_audio_player ap) {
|
||||||
mcsdk_internal_player_context* context = PLAYER(ap);
|
mcsdk_player_context_internal* context = PLAYER(ap);
|
||||||
std::unique_lock<std::mutex> lock(context->event_mutex);
|
std::unique_lock<std::mutex> lock(context->event_mutex);
|
||||||
if (!context->player_finished) {
|
if (!context->player_finished) {
|
||||||
context->player->Play();
|
context->player->Play();
|
||||||
@ -1127,7 +1117,7 @@ mcsdk_export void mcsdk_audio_player_play(mcsdk_audio_player ap) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcsdk_export double mcsdk_audio_player_get_position(mcsdk_audio_player ap) {
|
mcsdk_export double mcsdk_audio_player_get_position(mcsdk_audio_player ap) {
|
||||||
mcsdk_internal_player_context* context = PLAYER(ap);
|
mcsdk_player_context_internal* context = PLAYER(ap);
|
||||||
std::unique_lock<std::mutex> lock(context->event_mutex);
|
std::unique_lock<std::mutex> lock(context->event_mutex);
|
||||||
if (!context->player_finished) {
|
if (!context->player_finished) {
|
||||||
return context->player->GetPosition();
|
return context->player->GetPosition();
|
||||||
@ -1136,7 +1126,7 @@ mcsdk_export double mcsdk_audio_player_get_position(mcsdk_audio_player ap) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcsdk_export void mcsdk_audio_player_set_position(mcsdk_audio_player ap, double seconds) {
|
mcsdk_export void mcsdk_audio_player_set_position(mcsdk_audio_player ap, double seconds) {
|
||||||
mcsdk_internal_player_context* context = PLAYER(ap);
|
mcsdk_player_context_internal* context = PLAYER(ap);
|
||||||
std::unique_lock<std::mutex> lock(context->event_mutex);
|
std::unique_lock<std::mutex> lock(context->event_mutex);
|
||||||
if (!context->player_finished) {
|
if (!context->player_finished) {
|
||||||
context->player->SetPosition(seconds);
|
context->player->SetPosition(seconds);
|
||||||
@ -1144,7 +1134,7 @@ mcsdk_export void mcsdk_audio_player_set_position(mcsdk_audio_player ap, double
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcsdk_export double mcsdk_audio_player_get_duration(mcsdk_audio_player ap) {
|
mcsdk_export double mcsdk_audio_player_get_duration(mcsdk_audio_player ap) {
|
||||||
mcsdk_internal_player_context* context = PLAYER(ap);
|
mcsdk_player_context_internal* context = PLAYER(ap);
|
||||||
std::unique_lock<std::mutex> lock(context->event_mutex);
|
std::unique_lock<std::mutex> lock(context->event_mutex);
|
||||||
if (!context->player_finished) {
|
if (!context->player_finished) {
|
||||||
return context->player->GetDuration();
|
return context->player->GetDuration();
|
||||||
@ -1153,7 +1143,7 @@ mcsdk_export double mcsdk_audio_player_get_duration(mcsdk_audio_player ap) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcsdk_export void mcsdk_audio_player_add_mix_point(mcsdk_audio_player ap, int id, double time) {
|
mcsdk_export void mcsdk_audio_player_add_mix_point(mcsdk_audio_player ap, int id, double time) {
|
||||||
mcsdk_internal_player_context* context = PLAYER(ap);
|
mcsdk_player_context_internal* context = PLAYER(ap);
|
||||||
std::unique_lock<std::mutex> lock(context->event_mutex);
|
std::unique_lock<std::mutex> lock(context->event_mutex);
|
||||||
if (!context->player_finished) {
|
if (!context->player_finished) {
|
||||||
context->player->AddMixPoint(id, time);
|
context->player->AddMixPoint(id, time);
|
||||||
@ -1161,7 +1151,7 @@ mcsdk_export void mcsdk_audio_player_add_mix_point(mcsdk_audio_player ap, int id
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcsdk_export bool mcsdk_audio_player_has_capability(mcsdk_audio_player ap, mcsdk_stream_capability capability) {
|
mcsdk_export bool mcsdk_audio_player_has_capability(mcsdk_audio_player ap, mcsdk_stream_capability capability) {
|
||||||
mcsdk_internal_player_context* context = PLAYER(ap);
|
mcsdk_player_context_internal* context = PLAYER(ap);
|
||||||
std::unique_lock<std::mutex> lock(context->event_mutex);
|
std::unique_lock<std::mutex> lock(context->event_mutex);
|
||||||
if (!context->player_finished) {
|
if (!context->player_finished) {
|
||||||
return PLAYER(ap)->player->HasCapability((Capability) capability);
|
return PLAYER(ap)->player->HasCapability((Capability) capability);
|
||||||
@ -1170,7 +1160,7 @@ mcsdk_export bool mcsdk_audio_player_has_capability(mcsdk_audio_player ap, mcsdk
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcsdk_export void mcsdk_audio_player_release(mcsdk_audio_player ap, mcsdk_audio_player_release_mode mode) {
|
mcsdk_export void mcsdk_audio_player_release(mcsdk_audio_player ap, mcsdk_audio_player_release_mode mode) {
|
||||||
mcsdk_internal_player_context* context = PLAYER(ap);
|
mcsdk_player_context_internal* context = PLAYER(ap);
|
||||||
|
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> lock(context->event_mutex);
|
std::unique_lock<std::mutex> lock(context->event_mutex);
|
||||||
@ -1190,4 +1180,53 @@ mcsdk_export void mcsdk_audio_player_release(mcsdk_audio_player ap, mcsdk_audio_
|
|||||||
|
|
||||||
mcsdk_export mcsdk_audio_player_gain mcsdk_audio_player_get_default_gain() {
|
mcsdk_export mcsdk_audio_player_gain mcsdk_audio_player_get_default_gain() {
|
||||||
return mcsdk_audio_player_gain { 1.0, 1.0, 0.0, false };
|
return mcsdk_audio_player_gain { 1.0, 1.0, 0.0, false };
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* IIndexer
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define INDEXER_INTERNAL(x) reinterpret_cast<mcsdk_svc_indexer_context_internal*>(x.opaque)
|
||||||
|
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_add_path(mcsdk_svc_indexer in, const char* path) {
|
||||||
|
INDEXER(in)->AddPath(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_remove_path(mcsdk_svc_indexer in, const char* path) {
|
||||||
|
INDEXER(in)->RemovePath(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
mcsdk_export int mcsdk_svc_indexer_get_paths_count(mcsdk_svc_indexer in) {
|
||||||
|
std::vector<std::string> paths;
|
||||||
|
INDEXER(in)->GetPaths(paths);
|
||||||
|
return (int) paths.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
mcsdk_export int mcsdk_svc_indexer_get_paths_at(mcsdk_svc_indexer in, int index, char* dst, int len) {
|
||||||
|
std::vector<std::string> paths;
|
||||||
|
INDEXER(in)->GetPaths(paths);
|
||||||
|
return CopyString(paths[index], dst, (int) len);
|
||||||
|
}
|
||||||
|
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_schedule(mcsdk_svc_indexer in, mcsdk_svc_indexer_sync_type type) {
|
||||||
|
INDEXER(in)->Schedule((IIndexer::SyncType) type);
|
||||||
|
}
|
||||||
|
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_stop(mcsdk_svc_indexer in) {
|
||||||
|
INDEXER(in)->Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
mcsdk_export mcsdk_svc_indexer_state mcsdk_svc_indexer_get_state(mcsdk_svc_indexer in) {
|
||||||
|
return (mcsdk_svc_indexer_state) INDEXER(in)->GetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_add_callbacks(mcsdk_svc_indexer in, mcsdk_svc_indexer_callbacks* cb) {
|
||||||
|
INDEXER_INTERNAL(in)->callbacks.insert(cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_remove_callbacks(mcsdk_svc_indexer in, mcsdk_svc_indexer_callbacks* cb) {
|
||||||
|
auto internal = INDEXER_INTERNAL(in);
|
||||||
|
auto it = internal->callbacks.find(cb);
|
||||||
|
if (it != internal->callbacks.end()) {
|
||||||
|
internal->callbacks.erase(it);
|
||||||
|
}
|
||||||
}
|
}
|
@ -46,17 +46,17 @@ namespace musik { namespace core {
|
|||||||
sigslot::signal1<int> Progress;
|
sigslot::signal1<int> Progress;
|
||||||
|
|
||||||
enum State {
|
enum State {
|
||||||
StateIdle,
|
StateIdle = 0,
|
||||||
StateIndexing,
|
StateIndexing = 1,
|
||||||
StateStopping,
|
StateStopping = 2,
|
||||||
StateStopped
|
StateStopped = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class SyncType {
|
enum class SyncType {
|
||||||
All,
|
All = 0,
|
||||||
Local,
|
Local = 1,
|
||||||
Rebuild,
|
Rebuild = 2,
|
||||||
Sources
|
Sources = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual ~IIndexer() { }
|
virtual ~IIndexer() { }
|
||||||
|
@ -107,10 +107,24 @@ typedef enum mcsdk_stream_capability {
|
|||||||
mcsdk_stream_capability_prebuffer = 0x01
|
mcsdk_stream_capability_prebuffer = 0x01
|
||||||
} mcsdk_stream_capability;
|
} mcsdk_stream_capability;
|
||||||
|
|
||||||
typedef enum mcsdk_indexer_scan_result {
|
typedef enum mcsdk_svc_indexer_scan_result {
|
||||||
mcsdk_indexer_scan_result_commit = 1,
|
mcsdk_svc_indexer_scan_result_commit = 1,
|
||||||
mcsdk_indexer_scan_result_rollback = 2
|
mcsdk_svc_indexer_scan_result_rollback = 2
|
||||||
} mcsdk_indexer_scan_result;
|
} mcsdk_svc_indexer_scan_result;
|
||||||
|
|
||||||
|
typedef enum mcsdk_svc_indexer_state {
|
||||||
|
mcsdk_svc_indexer_state_idle = 0,
|
||||||
|
mcsdk_svc_indexer_state_indexing = 1,
|
||||||
|
mcsdk_svc_indexer_state_stopping = 2,
|
||||||
|
mcsdk_svc_indexer_state_stopped = 3
|
||||||
|
} mcsdk_svc_indexer_state;
|
||||||
|
|
||||||
|
typedef enum mcsdk_svc_indexer_sync_type {
|
||||||
|
mcsdk_svc_indexer_sync_type_all = 0,
|
||||||
|
mcsdk_svc_indexer_sync_type_local = 1,
|
||||||
|
mcsdk_svc_indexer_sync_type_rebuild = 2,
|
||||||
|
mcsdk_svc_indexer_sync_type_sources = 3
|
||||||
|
} mcsdk_svc_indexer_sync_type;
|
||||||
|
|
||||||
typedef enum mcsdk_replay_gain_mode {
|
typedef enum mcsdk_replay_gain_mode {
|
||||||
mcsdk_replay_gain_mode_disabled = 0,
|
mcsdk_replay_gain_mode_disabled = 0,
|
||||||
@ -214,6 +228,7 @@ mcsdk_define_handle(mcsdk_track_list);
|
|||||||
mcsdk_define_handle(mcsdk_track_list_editor);
|
mcsdk_define_handle(mcsdk_track_list_editor);
|
||||||
mcsdk_define_handle(mcsdk_svc_metadata);
|
mcsdk_define_handle(mcsdk_svc_metadata);
|
||||||
mcsdk_define_handle(mcsdk_svc_playback);
|
mcsdk_define_handle(mcsdk_svc_playback);
|
||||||
|
mcsdk_define_handle(mcsdk_svc_indexer);
|
||||||
mcsdk_define_handle(mcsdk_prefs);
|
mcsdk_define_handle(mcsdk_prefs);
|
||||||
mcsdk_define_handle(mcsdk_audio_buffer);
|
mcsdk_define_handle(mcsdk_audio_buffer);
|
||||||
mcsdk_define_handle(mcsdk_audio_buffer_provider);
|
mcsdk_define_handle(mcsdk_audio_buffer_provider);
|
||||||
@ -238,6 +253,12 @@ typedef struct mcsdk_audio_player_callbacks {
|
|||||||
void (*on_mixpoint)(mcsdk_audio_player p, int id, double time);
|
void (*on_mixpoint)(mcsdk_audio_player p, int id, double time);
|
||||||
} mcsdk_audio_player_callbacks;
|
} mcsdk_audio_player_callbacks;
|
||||||
|
|
||||||
|
typedef struct mcsdk_svc_indexer_callbacks {
|
||||||
|
void (*on_started)(mcsdk_svc_indexer i);
|
||||||
|
void (*on_finished)(mcsdk_svc_indexer i, int tracks_processed);
|
||||||
|
void (*on_progress)(mcsdk_svc_indexer i, int tracks_processed);
|
||||||
|
} mcsdk_svc_indexer_callbacks;
|
||||||
|
|
||||||
typedef struct mcsdk_audio_player_gain {
|
typedef struct mcsdk_audio_player_gain {
|
||||||
float preamp;
|
float preamp;
|
||||||
float gain;
|
float gain;
|
||||||
@ -252,6 +273,7 @@ typedef struct mcsdk_audio_player_gain {
|
|||||||
typedef struct mcsdk_context {
|
typedef struct mcsdk_context {
|
||||||
mcsdk_svc_metadata metadata;
|
mcsdk_svc_metadata metadata;
|
||||||
mcsdk_svc_playback playback;
|
mcsdk_svc_playback playback;
|
||||||
|
mcsdk_svc_indexer indexer;
|
||||||
mcsdk_prefs preferences;
|
mcsdk_prefs preferences;
|
||||||
mcsdk_internal internal;
|
mcsdk_internal internal;
|
||||||
} mcsdk_context;
|
} mcsdk_context;
|
||||||
@ -596,4 +618,18 @@ mcsdk_export bool mcsdk_audio_player_has_capability(mcsdk_audio_player ap, mcsdk
|
|||||||
mcsdk_export mcsdk_audio_player_gain mcsdk_audio_player_get_default_gain();
|
mcsdk_export mcsdk_audio_player_gain mcsdk_audio_player_get_default_gain();
|
||||||
mcsdk_export void mcsdk_audio_player_release(mcsdk_audio_player ap, mcsdk_audio_player_release_mode mode);
|
mcsdk_export void mcsdk_audio_player_release(mcsdk_audio_player ap, mcsdk_audio_player_release_mode mode);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IIndexer
|
||||||
|
*/
|
||||||
|
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_add_path(mcsdk_svc_indexer in, const char* path);
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_remove_path(mcsdk_svc_indexer in, const char* path);
|
||||||
|
mcsdk_export int mcsdk_svc_indexer_get_paths_count(mcsdk_svc_indexer in);
|
||||||
|
mcsdk_export int mcsdk_svc_indexer_get_paths_at(mcsdk_svc_indexer in, int index, char* dst, int len);
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_schedule(mcsdk_svc_indexer in, mcsdk_svc_indexer_sync_type type);
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_stop(mcsdk_svc_indexer in);
|
||||||
|
mcsdk_export mcsdk_svc_indexer_state mcsdk_svc_indexer_get_state(mcsdk_svc_indexer in);
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_add_callbacks(mcsdk_svc_indexer in, mcsdk_svc_indexer_callbacks* cb);
|
||||||
|
mcsdk_export void mcsdk_svc_indexer_remove_callbacks(mcsdk_svc_indexer in, mcsdk_svc_indexer_callbacks* cb);
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
x
Reference in New Issue
Block a user