Fix a recording dequeue bug
I was going so insane over it I made the system more efficient in the process of figuring out the bug
This commit is contained in:
parent
ebb21d05b1
commit
acdfb117a0
@ -42,7 +42,7 @@ bool RecordingController::end() {
|
|||||||
WorkerContext *c = new WorkerContext;
|
WorkerContext *c = new WorkerContext;
|
||||||
c->consumer = [&](QImage) {
|
c->consumer = [&](QImage) {
|
||||||
_QueueContext contx;
|
_QueueContext contx;
|
||||||
contx.arr = _context->finalizer();
|
contx.file = _context->finalizer();
|
||||||
contx.format = _context->anotherFormat;
|
contx.format = _context->anotherFormat;
|
||||||
contx.postUploadTask = _context->postUploadTask;
|
contx.postUploadTask = _context->postUploadTask;
|
||||||
queue(contx);
|
queue(contx);
|
||||||
@ -94,11 +94,13 @@ void RecordingController::timeout() {
|
|||||||
if (isRunning())
|
if (isRunning())
|
||||||
preview->setTime(QString("%1:%2").arg(QString::number(minute)).arg(QString::number(second)), frame);
|
preview->setTime(QString("%1:%2").arg(QString::number(minute)).arg(QString::number(second)), frame);
|
||||||
} else {
|
} else {
|
||||||
timer.stop();
|
|
||||||
QMutexLocker l(&lock);
|
QMutexLocker l(&lock);
|
||||||
if (!uploadQueue.isEmpty()) {
|
if (!uploadQueue.isEmpty()) {
|
||||||
auto a = uploadQueue.dequeue();
|
auto a = uploadQueue.dequeue();
|
||||||
UploaderSingleton::inst().upload(a.arr, a.format);
|
if (!a.file.isEmpty()) {
|
||||||
|
QFile f(a.file);
|
||||||
|
UploaderSingleton::inst().upload(f, a.format);
|
||||||
|
}
|
||||||
if (a.postUploadTask) a.postUploadTask();
|
if (a.postUploadTask) a.postUploadTask();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,13 +16,13 @@ struct RecordingContext {
|
|||||||
QImage::Format format;
|
QImage::Format format;
|
||||||
std::function<void(QImage)> consumer;
|
std::function<void(QImage)> consumer;
|
||||||
std::function<bool(QSize)> validator;
|
std::function<bool(QSize)> validator;
|
||||||
std::function<QByteArray()> finalizer;
|
std::function<QString()> finalizer;
|
||||||
std::function<void()> postUploadTask;
|
std::function<void()> postUploadTask;
|
||||||
QString anotherFormat;
|
QString anotherFormat;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _QueueContext {
|
struct _QueueContext {
|
||||||
QByteArray arr;
|
QString file;
|
||||||
QString format;
|
QString format;
|
||||||
std::function<void()> postUploadTask;
|
std::function<void()> postUploadTask;
|
||||||
};
|
};
|
||||||
|
@ -33,15 +33,9 @@ RecordingFormats::RecordingFormats(formats::Recording f) {
|
|||||||
delete enc;
|
delete enc;
|
||||||
if (interrupt || !frameAdded) {
|
if (interrupt || !frameAdded) {
|
||||||
tmpDir.removeRecursively();
|
tmpDir.removeRecursively();
|
||||||
return QByteArray();
|
return QString();
|
||||||
}
|
}
|
||||||
QFile res(path);
|
return QFile(path).size() > 0 ? path : QString();
|
||||||
if (!res.open(QFile::ReadOnly)) {
|
|
||||||
qCritical().noquote() << "Could not open resulting file: " << res.errorString();
|
|
||||||
return QByteArray();
|
|
||||||
}
|
|
||||||
QByteArray data = res.readAll();
|
|
||||||
return data;
|
|
||||||
};
|
};
|
||||||
validator = [&](QSize s) {
|
validator = [&](QSize s) {
|
||||||
if (!enc) {
|
if (!enc) {
|
||||||
@ -86,7 +80,7 @@ std::function<void(QImage)> RecordingFormats::getConsumer() {
|
|||||||
return consumer;
|
return consumer;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::function<QByteArray()> RecordingFormats::getFinalizer() {
|
std::function<QString()> RecordingFormats::getFinalizer() {
|
||||||
return finalizer;
|
return finalizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ public:
|
|||||||
RecordingFormats(formats::Recording f);
|
RecordingFormats(formats::Recording f);
|
||||||
std::function<void(QImage)> getConsumer();
|
std::function<void(QImage)> getConsumer();
|
||||||
std::function<bool(QSize)> getValidator();
|
std::function<bool(QSize)> getValidator();
|
||||||
std::function<QByteArray()> getFinalizer();
|
std::function<QString()> getFinalizer();
|
||||||
std::function<void()> getPostUploadTask();
|
std::function<void()> getPostUploadTask();
|
||||||
QImage::Format getFormat();
|
QImage::Format getFormat();
|
||||||
QString getAnotherFormat();
|
QString getAnotherFormat();
|
||||||
@ -23,7 +23,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
std::function<void(QImage)> consumer;
|
std::function<void(QImage)> consumer;
|
||||||
std::function<bool(QSize)> validator;
|
std::function<bool(QSize)> validator;
|
||||||
std::function<QByteArray()> finalizer;
|
std::function<QString()> finalizer;
|
||||||
std::function<void()> postUploadTask;
|
std::function<void()> postUploadTask;
|
||||||
std::vector<QImage> frames;
|
std::vector<QImage> frames;
|
||||||
QImage::Format iFormat;
|
QImage::Format iFormat;
|
||||||
|
@ -90,11 +90,16 @@ void UploaderSingleton::upload(QByteArray img, QString format) {
|
|||||||
uploaders.value(uploader)->doUpload(img, format);
|
uploaders.value(uploader)->doUpload(img, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UploaderSingleton::upload(QFile img, QString format) {
|
void UploaderSingleton::upload(QFile &img, QString format) {
|
||||||
if (img.open(QIODevice::ReadOnly)) {
|
if (img.size() <= 0) return;
|
||||||
uploaders.value(uploader)->doUpload(img.readAll(), format);
|
if (img.rename(
|
||||||
img.close();
|
saveDir.absoluteFilePath(formatter::format(settings::settings().value("fileFormat").toString(), format.toLower())))) {
|
||||||
}
|
if (img.open(QFile::ReadWrite))
|
||||||
|
uploaders.value(uploader)->doUpload(img.readAll(), format);
|
||||||
|
else
|
||||||
|
notifications::notify("KShare - Failed to save picture", img.errorString(), QSystemTrayIcon::Warning);
|
||||||
|
} else
|
||||||
|
notifications::notify("KShare - Failed to save picture", img.errorString(), QSystemTrayIcon::Warning);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UploaderSingleton::showSettings() {
|
void UploaderSingleton::showSettings() {
|
||||||
|
@ -15,7 +15,7 @@ public:
|
|||||||
void registerUploader(Uploader *uploader);
|
void registerUploader(Uploader *uploader);
|
||||||
void upload(QPixmap *pixmap);
|
void upload(QPixmap *pixmap);
|
||||||
void upload(QByteArray img, QString format);
|
void upload(QByteArray img, QString format);
|
||||||
void upload(QFile img, QString format);
|
void upload(QFile &img, QString format);
|
||||||
void showSettings();
|
void showSettings();
|
||||||
QList<Uploader *> uploaderList();
|
QList<Uploader *> uploaderList();
|
||||||
void set(QString uploader);
|
void set(QString uploader);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user