[Backend] Source formatted with clang-format.
This commit is contained in:
parent
6b1078f93b
commit
8fc36d20b7
|
@ -1,52 +1,51 @@
|
||||||
|
|
||||||
#include <stdexcept>
|
|
||||||
#include <clocale>
|
#include <clocale>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
#include "MpvPlayerBackend.h"
|
#include "MpvPlayerBackend.h"
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QQuickWindow>
|
|
||||||
#include <QOpenGLContext>
|
#include <QOpenGLContext>
|
||||||
#include <QOpenGLFramebufferObject>
|
#include <QOpenGLFramebufferObject>
|
||||||
|
#include <QQuickWindow>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
namespace
|
void
|
||||||
|
wakeup(void* ctx)
|
||||||
{
|
{
|
||||||
|
QMetaObject::invokeMethod(
|
||||||
void wakeup(void *ctx)
|
(MpvPlayerBackend*)ctx, "on_mpv_events", Qt::QueuedConnection);
|
||||||
{
|
|
||||||
QMetaObject::invokeMethod((MpvPlayerBackend*)ctx, "on_mpv_events", Qt::QueuedConnection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_mpv_redraw(void *ctx)
|
void
|
||||||
|
on_mpv_redraw(void* ctx)
|
||||||
{
|
{
|
||||||
MpvPlayerBackend::on_update(ctx);
|
MpvPlayerBackend::on_update(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *get_proc_address_mpv(void *ctx, const char *name)
|
static void*
|
||||||
|
get_proc_address_mpv(void* ctx, const char* name)
|
||||||
{
|
{
|
||||||
Q_UNUSED(ctx)
|
Q_UNUSED(ctx)
|
||||||
|
|
||||||
QOpenGLContext* glctx = QOpenGLContext::currentContext();
|
QOpenGLContext* glctx = QOpenGLContext::currentContext();
|
||||||
if (!glctx) return nullptr;
|
if (!glctx)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
return reinterpret_cast<void*>(glctx->getProcAddress(QByteArray(name)));
|
return reinterpret_cast<void*>(glctx->getProcAddress(QByteArray(name)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
}
|
|
||||||
|
|
||||||
class MpvRenderer : public QQuickFramebufferObject::Renderer
|
class MpvRenderer : public QQuickFramebufferObject::Renderer
|
||||||
{
|
{
|
||||||
MpvPlayerBackend* obj;
|
MpvPlayerBackend* obj;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MpvRenderer(MpvPlayerBackend* new_obj)
|
MpvRenderer(MpvPlayerBackend* new_obj)
|
||||||
: obj{ new_obj }
|
: obj{ new_obj }
|
||||||
{
|
{}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
virtual ~MpvRenderer() {}
|
virtual ~MpvRenderer() {}
|
||||||
|
|
||||||
|
@ -55,11 +54,13 @@ public:
|
||||||
QOpenGLFramebufferObject* createFramebufferObject(const QSize& size)
|
QOpenGLFramebufferObject* createFramebufferObject(const QSize& size)
|
||||||
{
|
{
|
||||||
// init mpv_gl:
|
// init mpv_gl:
|
||||||
if (!obj->mpv_gl)
|
if (!obj->mpv_gl) {
|
||||||
{
|
mpv_opengl_init_params gl_init_params{ get_proc_address_mpv,
|
||||||
mpv_opengl_init_params gl_init_params{get_proc_address_mpv, nullptr, nullptr};
|
nullptr,
|
||||||
|
nullptr };
|
||||||
mpv_render_param params[]{
|
mpv_render_param params[]{
|
||||||
{MPV_RENDER_PARAM_API_TYPE, const_cast<char *>(MPV_RENDER_API_TYPE_OPENGL)},
|
{ MPV_RENDER_PARAM_API_TYPE,
|
||||||
|
const_cast<char*>(MPV_RENDER_API_TYPE_OPENGL) },
|
||||||
{ MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &gl_init_params },
|
{ MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &gl_init_params },
|
||||||
{ MPV_RENDER_PARAM_INVALID, nullptr }
|
{ MPV_RENDER_PARAM_INVALID, nullptr }
|
||||||
};
|
};
|
||||||
|
@ -73,14 +74,15 @@ public:
|
||||||
return QQuickFramebufferObject::Renderer::createFramebufferObject(size);
|
return QQuickFramebufferObject::Renderer::createFramebufferObject(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void render()
|
void render()
|
||||||
{
|
{
|
||||||
|
|
||||||
obj->window()->resetOpenGLState();
|
obj->window()->resetOpenGLState();
|
||||||
|
|
||||||
QOpenGLFramebufferObject* fbo = framebufferObject();
|
QOpenGLFramebufferObject* fbo = framebufferObject();
|
||||||
mpv_opengl_fbo mpfbo{.fbo = static_cast<int>(fbo->handle()), .w = fbo->width(), .h = fbo->height(), .internal_format = 0};
|
mpv_opengl_fbo mpfbo{ .fbo = static_cast<int>(fbo->handle()),
|
||||||
|
.w = fbo->width(),
|
||||||
|
.h = fbo->height(),
|
||||||
|
.internal_format = 0 };
|
||||||
int flip_y{ 0 };
|
int flip_y{ 0 };
|
||||||
|
|
||||||
mpv_render_param params[] = {
|
mpv_render_param params[] = {
|
||||||
|
@ -101,9 +103,10 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
MpvPlayerBackend::MpvPlayerBackend(QQuickItem* parent)
|
MpvPlayerBackend::MpvPlayerBackend(QQuickItem* parent)
|
||||||
: QQuickFramebufferObject(parent), mpv{mpv_create()}, mpv_gl(nullptr)
|
: QQuickFramebufferObject(parent)
|
||||||
|
, mpv{ mpv_create() }
|
||||||
|
, mpv_gl(nullptr)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!mpv)
|
if (!mpv)
|
||||||
throw std::runtime_error("could not create mpv context");
|
throw std::runtime_error("could not create mpv context");
|
||||||
|
|
||||||
|
@ -120,10 +123,6 @@ MpvPlayerBackend::MpvPlayerBackend(QQuickItem * parent)
|
||||||
mpv_set_option_string(mpv, "config", "yes");
|
mpv_set_option_string(mpv, "config", "yes");
|
||||||
// mpv_set_option_string(mpv, "sub-visibility", "no");
|
// mpv_set_option_string(mpv, "sub-visibility", "no");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mpv_observe_property(mpv, 0, "playback-abort", MPV_FORMAT_NONE);
|
mpv_observe_property(mpv, 0, "playback-abort", MPV_FORMAT_NONE);
|
||||||
mpv_observe_property(mpv, 0, "chapter-list", MPV_FORMAT_NODE);
|
mpv_observe_property(mpv, 0, "chapter-list", MPV_FORMAT_NODE);
|
||||||
mpv_observe_property(mpv, 0, "track-list", MPV_FORMAT_NODE);
|
mpv_observe_property(mpv, 0, "track-list", MPV_FORMAT_NODE);
|
||||||
|
@ -141,122 +140,150 @@ MpvPlayerBackend::MpvPlayerBackend(QQuickItem * parent)
|
||||||
if (mpv_initialize(mpv) < 0)
|
if (mpv_initialize(mpv) < 0)
|
||||||
throw std::runtime_error("could not initialize mpv context");
|
throw std::runtime_error("could not initialize mpv context");
|
||||||
|
|
||||||
connect(this, &MpvPlayerBackend::onUpdate, this, &MpvPlayerBackend::doUpdate,
|
connect(this,
|
||||||
|
&MpvPlayerBackend::onUpdate,
|
||||||
|
this,
|
||||||
|
&MpvPlayerBackend::doUpdate,
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MpvPlayerBackend::~MpvPlayerBackend()
|
MpvPlayerBackend::~MpvPlayerBackend()
|
||||||
{
|
{
|
||||||
if (mpv_gl)
|
if (mpv_gl) {
|
||||||
{
|
|
||||||
mpv_render_context_free(mpv_gl);
|
mpv_render_context_free(mpv_gl);
|
||||||
}
|
}
|
||||||
|
|
||||||
mpv_terminate_destroy(mpv);
|
mpv_terminate_destroy(mpv);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::on_update(void *ctx)
|
void
|
||||||
|
MpvPlayerBackend::on_update(void* ctx)
|
||||||
{
|
{
|
||||||
MpvPlayerBackend* self = (MpvPlayerBackend*)ctx;
|
MpvPlayerBackend* self = (MpvPlayerBackend*)ctx;
|
||||||
emit self->onUpdate();
|
emit self->onUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
// connected to onUpdate(); signal makes sure it runs on the GUI thread
|
// connected to onUpdate(); signal makes sure it runs on the GUI thread
|
||||||
void MpvPlayerBackend::doUpdate()
|
void
|
||||||
|
MpvPlayerBackend::doUpdate()
|
||||||
{
|
{
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariant
|
||||||
QVariant MpvPlayerBackend::getProperty(const QString &name) const
|
MpvPlayerBackend::getProperty(const QString& name) const
|
||||||
{
|
{
|
||||||
return mpv::qt::get_property_variant(mpv, name);
|
return mpv::qt::get_property_variant(mpv, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
void MpvPlayerBackend::command(const QVariant& params)
|
MpvPlayerBackend::command(const QVariant& params)
|
||||||
{
|
{
|
||||||
qDebug() << params;
|
qDebug() << params;
|
||||||
mpv::qt::command_variant(mpv, params);
|
mpv::qt::command_variant(mpv, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::setProperty(const QString& name, const QVariant& value)
|
void
|
||||||
|
MpvPlayerBackend::setProperty(const QString& name, const QVariant& value)
|
||||||
{
|
{
|
||||||
mpv::qt::set_property_variant(mpv, name, value);
|
mpv::qt::set_property_variant(mpv, name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::setOption(const QString& name, const QVariant& value)
|
void
|
||||||
|
MpvPlayerBackend::setOption(const QString& name, const QVariant& value)
|
||||||
{
|
{
|
||||||
mpv::qt::set_option_variant(mpv, name, value);
|
mpv::qt::set_option_variant(mpv, name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::launchAboutQt()
|
void
|
||||||
|
MpvPlayerBackend::launchAboutQt()
|
||||||
{
|
{
|
||||||
QApplication *qapp = qobject_cast<QApplication *>(QCoreApplication::instance());
|
QApplication* qapp =
|
||||||
|
qobject_cast<QApplication*>(QCoreApplication::instance());
|
||||||
qapp->aboutQt();
|
qapp->aboutQt();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::togglePlayPause()
|
void
|
||||||
|
MpvPlayerBackend::togglePlayPause()
|
||||||
{
|
{
|
||||||
command(QVariantList() << "cycle" << "pause");
|
command(QVariantList() << "cycle"
|
||||||
|
<< "pause");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::toggleMute()
|
void
|
||||||
|
MpvPlayerBackend::toggleMute()
|
||||||
{
|
{
|
||||||
command(QVariantList() << "cycle" << "mute");
|
command(QVariantList() << "cycle"
|
||||||
|
<< "mute");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::nextAudioTrack()
|
void
|
||||||
|
MpvPlayerBackend::nextAudioTrack()
|
||||||
{
|
{
|
||||||
command(QVariantList() << "cycle" << "audio");
|
command(QVariantList() << "cycle"
|
||||||
|
<< "audio");
|
||||||
}
|
}
|
||||||
void MpvPlayerBackend::nextSubtitleTrack()
|
void
|
||||||
|
MpvPlayerBackend::nextSubtitleTrack()
|
||||||
{
|
{
|
||||||
command(QVariantList() << "cycle" << "sub");
|
command(QVariantList() << "cycle"
|
||||||
|
<< "sub");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::nextVideoTrack()
|
void
|
||||||
|
MpvPlayerBackend::nextVideoTrack()
|
||||||
{
|
{
|
||||||
command(QVariantList() << "cycle" << "video");
|
command(QVariantList() << "cycle"
|
||||||
|
<< "video");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::prevPlaylistItem()
|
void
|
||||||
|
MpvPlayerBackend::prevPlaylistItem()
|
||||||
{
|
{
|
||||||
command(QVariantList() << "playlist-prev");
|
command(QVariantList() << "playlist-prev");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::nextPlaylistItem()
|
void
|
||||||
|
MpvPlayerBackend::nextPlaylistItem()
|
||||||
{
|
{
|
||||||
command(QVariantList() << "playlist-next" << "force");
|
command(QVariantList() << "playlist-next"
|
||||||
|
<< "force");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::loadFile(const QVariant &filename)
|
void
|
||||||
|
MpvPlayerBackend::loadFile(const QVariant& filename)
|
||||||
{
|
{
|
||||||
command(QVariantList() << "loadfile" << filename);
|
command(QVariantList() << "loadfile" << filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::setVolume(const QVariant &volume)
|
void
|
||||||
|
MpvPlayerBackend::setVolume(const QVariant& volume)
|
||||||
{
|
{
|
||||||
command(QVariantList() << "set" << "volume" << volume);
|
command(QVariantList() << "set"
|
||||||
|
<< "volume" << volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::addVolume(const QVariant &volume)
|
void
|
||||||
|
MpvPlayerBackend::addVolume(const QVariant& volume)
|
||||||
{
|
{
|
||||||
command(QVariantList() << "add" << "volume" << volume);
|
command(QVariantList() << "add"
|
||||||
|
<< "volume" << volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::seek(const QVariant &seekTime)
|
void
|
||||||
|
MpvPlayerBackend::seek(const QVariant& seekTime)
|
||||||
{
|
{
|
||||||
command(QVariantList() << "seek" << seekTime);
|
command(QVariantList() << "seek" << seekTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant MpvPlayerBackend::getTracks() const
|
QVariant
|
||||||
|
MpvPlayerBackend::getTracks() const
|
||||||
{
|
{
|
||||||
return mpv::qt::get_property_variant(mpv, "track-list");
|
return mpv::qt::get_property_variant(mpv, "track-list");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::on_mpv_events()
|
void
|
||||||
|
MpvPlayerBackend::on_mpv_events()
|
||||||
{
|
{
|
||||||
while (mpv) {
|
while (mpv) {
|
||||||
mpv_event* event = mpv_wait_event(mpv, 0);
|
mpv_event* event = mpv_wait_event(mpv, 0);
|
||||||
|
@ -266,10 +293,10 @@ void MpvPlayerBackend::on_mpv_events()
|
||||||
}
|
}
|
||||||
handle_mpv_event(event);
|
handle_mpv_event(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MpvPlayerBackend::handle_mpv_event(mpv_event *event)
|
void
|
||||||
|
MpvPlayerBackend::handle_mpv_event(mpv_event* event)
|
||||||
{
|
{
|
||||||
switch (event->event_id) {
|
switch (event->event_id) {
|
||||||
case MPV_EVENT_PROPERTY_CHANGE: {
|
case MPV_EVENT_PROPERTY_CHANGE: {
|
||||||
|
@ -277,22 +304,27 @@ void MpvPlayerBackend::handle_mpv_event(mpv_event *event)
|
||||||
if (strcmp(prop->name, "time-pos") == 0) {
|
if (strcmp(prop->name, "time-pos") == 0) {
|
||||||
if (prop->format == MPV_FORMAT_DOUBLE) {
|
if (prop->format == MPV_FORMAT_DOUBLE) {
|
||||||
double time = *(double*)prop->data;
|
double time = *(double*)prop->data;
|
||||||
QMetaObject::invokeMethod(this,"setProgressBarValue",Q_ARG(QVariant,time));
|
QMetaObject::invokeMethod(
|
||||||
|
this, "setProgressBarValue", Q_ARG(QVariant, time));
|
||||||
}
|
}
|
||||||
} else if (strcmp(prop->name, "duration") == 0) {
|
} else if (strcmp(prop->name, "duration") == 0) {
|
||||||
if (prop->format == MPV_FORMAT_DOUBLE) {
|
if (prop->format == MPV_FORMAT_DOUBLE) {
|
||||||
double time = *(double *)prop->data;Q_ARG(QVariant,"txt1"),
|
double time = *(double*)prop->data;
|
||||||
QMetaObject::invokeMethod(this,"setProgressBarEnd",Q_ARG(QVariant,time));
|
Q_ARG(QVariant, "txt1"),
|
||||||
|
QMetaObject::invokeMethod(
|
||||||
|
this, "setProgressBarEnd", Q_ARG(QVariant, time));
|
||||||
}
|
}
|
||||||
} else if (strcmp(prop->name, "volume") == 0) {
|
} else if (strcmp(prop->name, "volume") == 0) {
|
||||||
if (prop->format == MPV_FORMAT_DOUBLE) {
|
if (prop->format == MPV_FORMAT_DOUBLE) {
|
||||||
double volume = *(double*)prop->data;
|
double volume = *(double*)prop->data;
|
||||||
QMetaObject::invokeMethod(this,"updateVolume",Q_ARG(QVariant,volume));
|
QMetaObject::invokeMethod(
|
||||||
|
this, "updateVolume", Q_ARG(QVariant, volume));
|
||||||
}
|
}
|
||||||
} else if (strcmp(prop->name, "muted") == 0) {
|
} else if (strcmp(prop->name, "muted") == 0) {
|
||||||
if (prop->format == MPV_FORMAT_DOUBLE) {
|
if (prop->format == MPV_FORMAT_DOUBLE) {
|
||||||
double muted = *(double*)prop->data;
|
double muted = *(double*)prop->data;
|
||||||
QMetaObject::invokeMethod(this,"updateMuted",Q_ARG(QVariant,muted));
|
QMetaObject::invokeMethod(
|
||||||
|
this, "updateMuted", Q_ARG(QVariant, muted));
|
||||||
}
|
}
|
||||||
} else if (strcmp(prop->name, "media-title") == 0) {
|
} else if (strcmp(prop->name, "media-title") == 0) {
|
||||||
if (prop->format == MPV_FORMAT_STRING) {
|
if (prop->format == MPV_FORMAT_STRING) {
|
||||||
|
@ -302,12 +334,14 @@ void MpvPlayerBackend::handle_mpv_event(mpv_event *event)
|
||||||
} else if (strcmp(prop->name, "sub-text") == 0) {
|
} else if (strcmp(prop->name, "sub-text") == 0) {
|
||||||
if (prop->format == MPV_FORMAT_STRING) {
|
if (prop->format == MPV_FORMAT_STRING) {
|
||||||
char* subs = *(char**)prop->data;
|
char* subs = *(char**)prop->data;
|
||||||
QMetaObject::invokeMethod(this,"setSubtitles",Q_ARG(QVariant,subs));
|
QMetaObject::invokeMethod(
|
||||||
|
this, "setSubtitles", Q_ARG(QVariant, subs));
|
||||||
}
|
}
|
||||||
} else if (strcmp(prop->name, "demuxer-cache-duration") == 0) {
|
} else if (strcmp(prop->name, "demuxer-cache-duration") == 0) {
|
||||||
if (prop->format == MPV_FORMAT_DOUBLE) {
|
if (prop->format == MPV_FORMAT_DOUBLE) {
|
||||||
double duration = *(double*)prop->data;
|
double duration = *(double*)prop->data;
|
||||||
QMetaObject::invokeMethod(this,"setCachedDuration",Q_ARG(QVariant,duration));
|
QMetaObject::invokeMethod(
|
||||||
|
this, "setCachedDuration", Q_ARG(QVariant, duration));
|
||||||
}
|
}
|
||||||
} else if (strcmp(prop->name, "playlist-pos") == 0) {
|
} else if (strcmp(prop->name, "playlist-pos") == 0) {
|
||||||
if (prop->format == MPV_FORMAT_DOUBLE) {
|
if (prop->format == MPV_FORMAT_DOUBLE) {
|
||||||
|
@ -329,7 +363,8 @@ void MpvPlayerBackend::handle_mpv_event(mpv_event *event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QQuickFramebufferObject::Renderer *MpvPlayerBackend::createRenderer() const
|
QQuickFramebufferObject::Renderer*
|
||||||
|
MpvPlayerBackend::createRenderer() const
|
||||||
{
|
{
|
||||||
window()->setPersistentOpenGLContext(true);
|
window()->setPersistentOpenGLContext(true);
|
||||||
window()->setPersistentSceneGraph(true);
|
window()->setPersistentSceneGraph(true);
|
||||||
|
|
|
@ -2,15 +2,13 @@
|
||||||
#define MpvPlayerBackend_H
|
#define MpvPlayerBackend_H
|
||||||
|
|
||||||
#include <mpv/client.h>
|
#include <mpv/client.h>
|
||||||
#include <mpv/render_gl.h>
|
|
||||||
#include <mpv/qthelper.hpp>
|
#include <mpv/qthelper.hpp>
|
||||||
|
#include <mpv/render_gl.h>
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QOpenGLContext>
|
#include <QOpenGLContext>
|
||||||
#include <QQuickFramebufferObject>
|
#include <QQuickFramebufferObject>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MpvRenderer;
|
class MpvRenderer;
|
||||||
|
|
||||||
class MpvPlayerBackend : public QQuickFramebufferObject
|
class MpvPlayerBackend : public QQuickFramebufferObject
|
||||||
|
@ -28,7 +26,6 @@ public:
|
||||||
virtual ~MpvPlayerBackend();
|
virtual ~MpvPlayerBackend();
|
||||||
virtual Renderer* createRenderer() const;
|
virtual Renderer* createRenderer() const;
|
||||||
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void launchAboutQt();
|
void launchAboutQt();
|
||||||
void togglePlayPause();
|
void togglePlayPause();
|
||||||
|
@ -49,7 +46,6 @@ public slots:
|
||||||
void setOption(const QString& name, const QVariant& value);
|
void setOption(const QString& name, const QVariant& value);
|
||||||
QVariant getProperty(const QString& name) const;
|
QVariant getProperty(const QString& name) const;
|
||||||
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void onUpdate();
|
void onUpdate();
|
||||||
void positionChanged(int value);
|
void positionChanged(int value);
|
||||||
|
@ -61,10 +57,6 @@ private slots:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void handle_mpv_event(mpv_event* event);
|
void handle_mpv_event(mpv_event* event);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
23
src/main.cpp
23
src/main.cpp
|
@ -4,17 +4,17 @@
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
|
|
||||||
#include <QApplication>
|
|
||||||
#include <QQmlApplicationEngine>
|
|
||||||
#include <QProcessEnvironment>
|
|
||||||
#include "MpvPlayerBackend.h"
|
#include "MpvPlayerBackend.h"
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QProcessEnvironment>
|
||||||
|
#include <QQmlApplicationEngine>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include "setenv_mingw.hpp"
|
#include "setenv_mingw.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int main( int argc, char *argv[] )
|
int
|
||||||
|
main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
setenv("QT_QUICK_CONTROLS_STYLE", "Desktop", 1);
|
setenv("QT_QUICK_CONTROLS_STYLE", "Desktop", 1);
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
@ -23,10 +23,15 @@ int main( int argc, char *argv[] )
|
||||||
app.setApplicationName("KittehPlayer");
|
app.setApplicationName("KittehPlayer");
|
||||||
for (int i = 1; i < argc; ++i) {
|
for (int i = 1; i < argc; ++i) {
|
||||||
if (!qstrcmp(argv[i], "--update")) {
|
if (!qstrcmp(argv[i], "--update")) {
|
||||||
QString program = QProcessEnvironment::systemEnvironment().value("APPDIR", "") + "/usr/bin/appimageupdatetool";
|
QString program =
|
||||||
|
QProcessEnvironment::systemEnvironment().value("APPDIR", "") +
|
||||||
|
"/usr/bin/appimageupdatetool";
|
||||||
QProcess updater;
|
QProcess updater;
|
||||||
updater.setProcessChannelMode(QProcess::ForwardedChannels);
|
updater.setProcessChannelMode(QProcess::ForwardedChannels);
|
||||||
updater.start(program, QStringList() << QProcessEnvironment::systemEnvironment().value("APPIMAGE", ""));
|
updater.start(program,
|
||||||
|
QStringList()
|
||||||
|
<< QProcessEnvironment::systemEnvironment().value(
|
||||||
|
"APPIMAGE", ""));
|
||||||
updater.waitForFinished();
|
updater.waitForFinished();
|
||||||
qDebug() << program;
|
qDebug() << program;
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@ -36,7 +41,9 @@ int main( int argc, char *argv[] )
|
||||||
QProcess dpms;
|
QProcess dpms;
|
||||||
dpms.start("xset", QStringList() << "-dpms");
|
dpms.start("xset", QStringList() << "-dpms");
|
||||||
|
|
||||||
QString newpath = QProcessEnvironment::systemEnvironment().value("APPDIR", "") + "/usr/bin:" + QProcessEnvironment::systemEnvironment().value("PATH", "");
|
QString newpath =
|
||||||
|
QProcessEnvironment::systemEnvironment().value("APPDIR", "") +
|
||||||
|
"/usr/bin:" + QProcessEnvironment::systemEnvironment().value("PATH", "");
|
||||||
qDebug() << newpath;
|
qDebug() << newpath;
|
||||||
setenv("PATH", newpath.toUtf8().constData(), 1);
|
setenv("PATH", newpath.toUtf8().constData(), 1);
|
||||||
|
|
||||||
|
|
|
@ -31,12 +31,13 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
int setenv( const char *var, const char *value, int overwrite )
|
int
|
||||||
|
setenv(const char* var, const char* value, int overwrite)
|
||||||
{
|
{
|
||||||
/* Core implementation for both setenv() and unsetenv() functions;
|
/* Core implementation for both setenv() and unsetenv() functions;
|
||||||
* at the outset, assume that the requested operation may fail.
|
* at the outset, assume that the requested operation may fail.
|
||||||
|
@ -46,15 +47,13 @@ int setenv( const char *var, const char *value, int overwrite )
|
||||||
/* The specified "var" name MUST be non-NULL, not a zero-length
|
/* The specified "var" name MUST be non-NULL, not a zero-length
|
||||||
* string, and must not include any '=' character.
|
* string, and must not include any '=' character.
|
||||||
*/
|
*/
|
||||||
if( var && *var && (strchr( var, '=' ) == NULL) )
|
if (var && *var && (strchr(var, '=') == NULL)) {
|
||||||
{
|
|
||||||
/* A properly named variable may be added to, removed from,
|
/* A properly named variable may be added to, removed from,
|
||||||
* or modified within the environment, ONLY if "overwrite"
|
* or modified within the environment, ONLY if "overwrite"
|
||||||
* mode is enabled, OR if the named variable does not yet
|
* mode is enabled, OR if the named variable does not yet
|
||||||
* exist...
|
* exist...
|
||||||
*/
|
*/
|
||||||
if( overwrite || getenv( var ) == NULL )
|
if (overwrite || getenv(var) == NULL) {
|
||||||
{
|
|
||||||
/* ... in which cases, we convert the specified name and
|
/* ... in which cases, we convert the specified name and
|
||||||
* value into the appropriate form for use with putenv(),
|
* value into the appropriate form for use with putenv(),
|
||||||
* (noting that we accept a NULL "value" as equivalent to
|
* (noting that we accept a NULL "value" as equivalent to
|
||||||
|
@ -72,14 +71,12 @@ int setenv( const char *var, const char *value, int overwrite )
|
||||||
* free memory; ensure that errno is set accordingly.
|
* free memory; ensure that errno is set accordingly.
|
||||||
*/
|
*/
|
||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
/* The named variable already exists, and overwrite mode
|
/* The named variable already exists, and overwrite mode
|
||||||
* was not enabled; there is nothing to be done.
|
* was not enabled; there is nothing to be done.
|
||||||
*/
|
*/
|
||||||
retval = 0;
|
retval = 0;
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
/* The specified environment variable name was invalid.
|
/* The specified environment variable name was invalid.
|
||||||
*/
|
*/
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
|
@ -89,4 +86,3 @@ int setenv( const char *var, const char *value, int overwrite )
|
||||||
*/
|
*/
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue