mirror of
https://gitlab.com/kelteseth/ScreenPlay.git
synced 2024-11-25 12:13:00 +01:00
Rewrite video convert to fix threading issues
Add unit tests for video import
This commit is contained in:
parent
8acf666b7d
commit
122d2c7869
@ -35,6 +35,7 @@ set(headers
|
||||
app.h
|
||||
src/globalvariables.h
|
||||
src/createimportvideo.h
|
||||
src/createimportstates.h
|
||||
src/installedlistmodel.h
|
||||
src/monitorlistmodel.h
|
||||
src/screenplaywallpaper.h
|
||||
|
@ -105,7 +105,7 @@ ApplicationWindow {
|
||||
|
||||
StackView {
|
||||
id: stackView
|
||||
|
||||
objectName: "stackView"
|
||||
property int duration: 300
|
||||
|
||||
anchors {
|
||||
|
@ -11,6 +11,7 @@ import ScreenPlay.QMLUtilities 1.0
|
||||
|
||||
Rectangle {
|
||||
id: root
|
||||
objectName: "createSidebar"
|
||||
|
||||
property bool expanded: false
|
||||
property alias listView: listView
|
||||
@ -87,6 +88,7 @@ Rectangle {
|
||||
*/
|
||||
|
||||
id: listView
|
||||
objectName: "wizardsListView"
|
||||
|
||||
anchors.fill: parent
|
||||
anchors.margins: 20
|
||||
@ -119,9 +121,10 @@ Rectangle {
|
||||
}
|
||||
|
||||
ListElement {
|
||||
headline: "Video import and convert (all types)"
|
||||
headline: qsTr("Video import and convert (all types)")
|
||||
source: "qrc:/qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaper.qml"
|
||||
category: "Video Wallpaper"
|
||||
objectName: "videoImportConvert"
|
||||
}
|
||||
|
||||
ListElement {
|
||||
@ -193,7 +196,7 @@ Rectangle {
|
||||
|
||||
delegate: Button {
|
||||
id: listItem
|
||||
|
||||
objectName: model.objectName
|
||||
width: listView.width - 40
|
||||
height: 45
|
||||
highlighted: ListView.isCurrentItem
|
||||
|
@ -21,12 +21,14 @@ Item {
|
||||
clip: true
|
||||
|
||||
CreateWallpaperInit {
|
||||
onNext: {
|
||||
onNext: startConvert(filePath,codec);
|
||||
function startConvert(filePath,codec){
|
||||
root.wizardStarted();
|
||||
swipeView.currentIndex = 1;
|
||||
createWallpaperVideoImportConvert.codec = codec;
|
||||
createWallpaperVideoImportConvert.filePath = filePath;
|
||||
ScreenPlay.create.createWallpaperStart(filePath, codec, quality);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,7 @@ import "../../../Common" as Common
|
||||
|
||||
Item {
|
||||
id: root
|
||||
objectName: "createWallpaperInit"
|
||||
|
||||
property int quality: sliderQuality.slider.value
|
||||
|
||||
@ -127,6 +128,7 @@ Item {
|
||||
}
|
||||
|
||||
Button {
|
||||
objectName: "createWallpaperInitFileSelectButton"
|
||||
text: qsTr("Select file")
|
||||
highlighted: true
|
||||
font.family: ScreenPlay.settings.font
|
||||
|
@ -5,6 +5,7 @@ import QtQuick.Controls.Material 2.3
|
||||
import QtQuick.Layouts 1.12
|
||||
import ScreenPlay 1.0
|
||||
import ScreenPlay.Create 1.0
|
||||
import ScreenPlay.Enums.ImportVideoState 1.0
|
||||
import "../../../Common" as Common
|
||||
|
||||
Item {
|
||||
@ -15,86 +16,87 @@ Item {
|
||||
property var codec: Create.VP8
|
||||
property string filePath
|
||||
|
||||
signal abort()
|
||||
signal save()
|
||||
signal abort
|
||||
signal save
|
||||
|
||||
function cleanup() {
|
||||
ScreenPlay.create.abortAndCleanup();
|
||||
ScreenPlay.create.cancel()
|
||||
}
|
||||
|
||||
function basename(str) {
|
||||
let filenameWithExtentions = (str.slice(str.lastIndexOf("/") + 1));
|
||||
let filename = filenameWithExtentions.split('.').slice(0, -1).join('.');
|
||||
return filename;
|
||||
let filenameWithExtentions = (str.slice(str.lastIndexOf("/") + 1))
|
||||
let filename = filenameWithExtentions.split('.').slice(0, -1).join('.')
|
||||
return filename
|
||||
}
|
||||
|
||||
function checkCanSave() {
|
||||
if (canSave && conversionFinishedSuccessful)
|
||||
btnSave.enabled = true;
|
||||
btnSave.enabled = true
|
||||
else
|
||||
btnSave.enabled = false;
|
||||
btnSave.enabled = false
|
||||
}
|
||||
|
||||
onCanSaveChanged: root.checkCanSave()
|
||||
onFilePathChanged: {
|
||||
textFieldName.text = basename(filePath);
|
||||
textFieldName.text = basename(filePath)
|
||||
}
|
||||
|
||||
Connections {
|
||||
function onCreateWallpaperStateChanged(state) {
|
||||
switch (state) {
|
||||
case CreateImportVideo.ConvertingPreviewImage:
|
||||
txtConvert.text = qsTr("Generating preview image...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewThumbnailImage:
|
||||
txtConvert.text = qsTr("Generating preview thumbnail image...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewImageFinished:
|
||||
imgPreview.source = "file:///" + ScreenPlay.create.workingDir + "/preview.jpg";
|
||||
imgPreview.visible = true;
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewVideo:
|
||||
txtConvert.text = qsTr("Generating 5 second preview video...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewGif:
|
||||
txtConvert.text = qsTr("Generating preview gif...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewGifFinished:
|
||||
gifPreview.source = "file:///" + ScreenPlay.create.workingDir + "/preview.gif";
|
||||
imgPreview.visible = false;
|
||||
gifPreview.visible = true;
|
||||
gifPreview.playing = true;
|
||||
break;
|
||||
case CreateImportVideo.ConvertingAudio:
|
||||
txtConvert.text = qsTr("Converting Audio...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingVideo:
|
||||
txtConvert.text = qsTr("Converting Video... This can take some time!");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingVideoError:
|
||||
txtConvert.text = qsTr("Converting Video ERROR!");
|
||||
break;
|
||||
case CreateImportVideo.AnalyseVideoError:
|
||||
txtConvert.text = qsTr("Analyse Video ERROR!");
|
||||
break;
|
||||
case CreateImportVideo.Finished:
|
||||
txtConvert.text = "";
|
||||
conversionFinishedSuccessful = true;
|
||||
busyIndicator.running = false;
|
||||
root.checkCanSave();
|
||||
break;
|
||||
case ImportVideoState.ConvertingPreviewImage:
|
||||
txtConvert.text = qsTr("Generating preview image...")
|
||||
break
|
||||
case ImportVideoState.ConvertingPreviewThumbnailImage:
|
||||
txtConvert.text = qsTr("Generating preview thumbnail image...")
|
||||
break
|
||||
case ImportVideoState.ConvertingPreviewImageFinished:
|
||||
imgPreview.source = "file:///" + ScreenPlay.create.workingDir + "/preview.jpg"
|
||||
imgPreview.visible = true
|
||||
break
|
||||
case ImportVideoState.ConvertingPreviewVideo:
|
||||
txtConvert.text = qsTr("Generating 5 second preview video...")
|
||||
break
|
||||
case ImportVideoState.ConvertingPreviewGif:
|
||||
txtConvert.text = qsTr("Generating preview gif...")
|
||||
break
|
||||
case ImportVideoState.ConvertingPreviewGifFinished:
|
||||
gifPreview.source = "file:///" + ScreenPlay.create.workingDir + "/preview.gif"
|
||||
imgPreview.visible = false
|
||||
gifPreview.visible = true
|
||||
gifPreview.playing = true
|
||||
break
|
||||
case ImportVideoState.ConvertingAudio:
|
||||
txtConvert.text = qsTr("Converting Audio...")
|
||||
break
|
||||
case ImportVideoState.ConvertingVideo:
|
||||
txtConvert.text = qsTr(
|
||||
"Converting Video... This can take some time!")
|
||||
break
|
||||
case ImportVideoState.ConvertingVideoError:
|
||||
txtConvert.text = qsTr("Converting Video ERROR!")
|
||||
break
|
||||
case ImportVideoState.AnalyseVideoError:
|
||||
txtConvert.text = qsTr("Analyse Video ERROR!")
|
||||
break
|
||||
case ImportVideoState.Finished:
|
||||
txtConvert.text = ""
|
||||
conversionFinishedSuccessful = true
|
||||
busyIndicator.running = false
|
||||
root.checkCanSave()
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
function onProgressChanged(progress) {
|
||||
var percentage = Math.floor(progress * 100);
|
||||
var percentage = Math.floor(progress * 100)
|
||||
if (percentage > 100 || progress > 0.95)
|
||||
percentage = 100;
|
||||
percentage = 100
|
||||
|
||||
if (percentage === NaN)
|
||||
print(progress, percentage);
|
||||
print(progress, percentage)
|
||||
|
||||
txtConvertNumber.text = percentage + "%";
|
||||
txtConvertNumber.text = percentage + "%"
|
||||
}
|
||||
|
||||
target: ScreenPlay.create
|
||||
@ -116,7 +118,6 @@ Item {
|
||||
margins: 40
|
||||
bottomMargin: 0
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Item {
|
||||
@ -186,9 +187,7 @@ Item {
|
||||
position: 1
|
||||
color: "#00000000"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BusyIndicator {
|
||||
@ -211,7 +210,6 @@ Item {
|
||||
bottom: parent.bottom
|
||||
bottomMargin: 40
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Text {
|
||||
@ -227,9 +225,7 @@ Item {
|
||||
bottom: parent.bottom
|
||||
bottomMargin: 20
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Common.ImageSelector {
|
||||
@ -243,9 +239,7 @@ Item {
|
||||
left: parent.left
|
||||
bottom: parent.bottom
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Item {
|
||||
@ -283,9 +277,9 @@ Item {
|
||||
Layout.fillWidth: true
|
||||
onTextChanged: {
|
||||
if (textFieldName.text.length >= 3)
|
||||
canSave = true;
|
||||
canSave = true
|
||||
else
|
||||
canSave = false;
|
||||
canSave = false
|
||||
}
|
||||
}
|
||||
|
||||
@ -311,7 +305,6 @@ Item {
|
||||
width: parent.width
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Row {
|
||||
@ -336,14 +329,14 @@ Item {
|
||||
Material.foreground: "white"
|
||||
font.family: ScreenPlay.settings.font
|
||||
onClicked: {
|
||||
root.abort();
|
||||
ScreenPlay.create.abortAndCleanup();
|
||||
root.abort()
|
||||
ScreenPlay.create.cancel()
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
id: btnSave
|
||||
|
||||
objectName: "btnSave"
|
||||
text: qsTr("Save")
|
||||
enabled: false
|
||||
Material.background: Material.accent
|
||||
@ -351,16 +344,18 @@ Item {
|
||||
font.family: ScreenPlay.settings.font
|
||||
onClicked: {
|
||||
if (conversionFinishedSuccessful) {
|
||||
btnSave.enabled = false;
|
||||
ScreenPlay.create.saveWallpaper(textFieldName.text, textFieldDescription.text, root.filePath, previewSelector.imageSource, textFieldYoutubeURL.text, codec, textFieldTags.getTags());
|
||||
savePopup.open();
|
||||
ScreenPlay.installedListModel.reset();
|
||||
btnSave.enabled = false
|
||||
ScreenPlay.create.saveWallpaper(
|
||||
textFieldName.text,
|
||||
textFieldDescription.text, root.filePath,
|
||||
previewSelector.imageSource,
|
||||
textFieldYoutubeURL.text, codec,
|
||||
textFieldTags.getTags())
|
||||
savePopup.open()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Popup {
|
||||
@ -392,12 +387,10 @@ Item {
|
||||
|
||||
interval: 1000 + Math.random() * 1000
|
||||
onTriggered: {
|
||||
savePopup.close();
|
||||
ScreenPlay.util.setNavigationActive(true);
|
||||
ScreenPlay.util.setNavigation("Installed");
|
||||
savePopup.close()
|
||||
ScreenPlay.util.setNavigationActive(true)
|
||||
ScreenPlay.util.setNavigation("Installed")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import QtQuick.Controls.Material 2.3
|
||||
import QtQuick.Layouts 1.12
|
||||
import ScreenPlay 1.0
|
||||
import ScreenPlay.Create 1.0
|
||||
import ScreenPlay.Enums.ImportVideoState 1.0
|
||||
import "../../../Common" as Common
|
||||
|
||||
Item {
|
||||
@ -38,44 +39,44 @@ Item {
|
||||
Connections {
|
||||
function onCreateWallpaperStateChanged(state) {
|
||||
switch (state) {
|
||||
case CreateImportVideo.AnalyseVideo:
|
||||
case ImportVideoState.AnalyseVideo:
|
||||
txtConvert.text = qsTr("AnalyseVideo...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewImage:
|
||||
case ImportVideoState.ConvertingPreviewImage:
|
||||
txtConvert.text = qsTr("Generating preview image...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewThumbnailImage:
|
||||
case ImportVideoState.ConvertingPreviewThumbnailImage:
|
||||
txtConvert.text = qsTr("Generating preview thumbnail image...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewImageFinished:
|
||||
case ImportVideoState.ConvertingPreviewImageFinished:
|
||||
imgPreview.source = "file:///" + ScreenPlay.create.workingDir + "/preview.jpg";
|
||||
imgPreview.visible = true;
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewVideo:
|
||||
case ImportVideoState.ConvertingPreviewVideo:
|
||||
txtConvert.text = qsTr("Generating 5 second preview video...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewGif:
|
||||
case ImportVideoState.ConvertingPreviewGif:
|
||||
txtConvert.text = qsTr("Generating preview gif...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingPreviewGifFinished:
|
||||
case ImportVideoState.ConvertingPreviewGifFinished:
|
||||
gifPreview.source = "file:///" + ScreenPlay.create.workingDir + "/preview.gif";
|
||||
imgPreview.visible = false;
|
||||
gifPreview.visible = true;
|
||||
gifPreview.playing = true;
|
||||
break;
|
||||
case CreateImportVideo.ConvertingAudio:
|
||||
case ImportVideoState.ConvertingAudio:
|
||||
txtConvert.text = qsTr("Converting Audio...");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingVideo:
|
||||
case ImportVideoState.ConvertingVideo:
|
||||
txtConvert.text = qsTr("Converting Video... This can take some time!");
|
||||
break;
|
||||
case CreateImportVideo.ConvertingVideoError:
|
||||
case ImportVideoState.ConvertingVideoError:
|
||||
txtConvert.text = qsTr("Converting Video ERROR!");
|
||||
break;
|
||||
case CreateImportVideo.AnalyseVideoError:
|
||||
case ImportVideoState.AnalyseVideoError:
|
||||
txtConvert.text = qsTr("Analyse Video ERROR!");
|
||||
break;
|
||||
case CreateImportVideo.Finished:
|
||||
case ImportVideoState.Finished:
|
||||
txtConvert.text = "";
|
||||
conversionFinishedSuccessful = true;
|
||||
busyIndicator.running = false;
|
||||
@ -330,13 +331,13 @@ Item {
|
||||
font.family: ScreenPlay.settings.font
|
||||
onClicked: {
|
||||
root.exit();
|
||||
ScreenPlay.create.abortAndCleanup();
|
||||
ScreenPlay.create.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
id: btnSave
|
||||
|
||||
objectName: "btnSave"
|
||||
text: qsTr("Save")
|
||||
enabled: false
|
||||
Material.background: Material.accent
|
||||
@ -347,7 +348,6 @@ Item {
|
||||
btnSave.enabled = false;
|
||||
ScreenPlay.create.saveWallpaper(textFieldName.text, textFieldDescription.text, root.filePath, previewSelector.imageSource, textFieldYoutubeURL.text, Create.VP9, textFieldTags.getTags());
|
||||
savePopup.open();
|
||||
ScreenPlay.installedListModel.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ FocusScope {
|
||||
|
||||
Button {
|
||||
id: btnSave
|
||||
|
||||
objectName: "btnSave"
|
||||
text: qsTr("Save")
|
||||
enabled: root.ready
|
||||
Material.background: Material.accent
|
||||
|
@ -5,6 +5,7 @@ import ScreenPlay 1.0
|
||||
|
||||
Item {
|
||||
id: navigationItem
|
||||
objectName: txt.text
|
||||
|
||||
property string iconSource: "qrc:/assets/icons/icon_installed.svg"
|
||||
property alias name: txt.text
|
||||
|
@ -10,23 +10,16 @@ namespace ScreenPlay {
|
||||
|
||||
As for this writing (April 2019) it is solely used to import webm wallpaper
|
||||
and create the gif/web 5 second previews.
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/*!
|
||||
Constructor.
|
||||
*/
|
||||
Create::Create(const std::shared_ptr<GlobalVariables>& globalVariables, QObject* parent)
|
||||
: QObject(parent)
|
||||
Create::Create(const std::shared_ptr<GlobalVariables>& globalVariables)
|
||||
: QObject(nullptr)
|
||||
, m_globalVariables(globalVariables)
|
||||
|
||||
{
|
||||
qRegisterMetaType<CreateImportVideo::ImportVideoState>("CreateImportVideo::ImportVideoState");
|
||||
qRegisterMetaType<Create::VideoCodec>("Create::VideoCodec");
|
||||
qmlRegisterUncreatableType<CreateImportVideo>("ScreenPlay.Create", 1, 0, "CreateImportVideo", "Error only for enums");
|
||||
qmlRegisterUncreatableType<Create>("ScreenPlay.Create", 1, 0, "VideoCodec", "Error only for enums");
|
||||
qmlRegisterType<Create>("ScreenPlay.Create", 1, 0, "Create");
|
||||
init();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -35,19 +28,36 @@ Create::Create(const std::shared_ptr<GlobalVariables>& globalVariables, QObject*
|
||||
Create::Create()
|
||||
: QObject(nullptr)
|
||||
{
|
||||
qRegisterMetaType<CreateImportVideo::ImportVideoState>("CreateImportVideo::ImportVideoState");
|
||||
qRegisterMetaType<Create::VideoCodec>("Create::VideoCodec");
|
||||
qmlRegisterUncreatableType<ScreenPlay::CreateImportVideo>("ScreenPlay.Create", 1, 0, "CreateImportVideo", "Error only for enums");
|
||||
qmlRegisterUncreatableType<Create>("ScreenPlay.Create", 1, 0, "VideoCodec", "Error only for enums");
|
||||
qmlRegisterType<Create>("ScreenPlay.Create", 1, 0, "Create");
|
||||
init();
|
||||
}
|
||||
|
||||
void Create::init()
|
||||
{
|
||||
qRegisterMetaType<Create::VideoCodec>("Create::VideoCodec");
|
||||
qmlRegisterUncreatableType<Create>("ScreenPlay.Create", 1, 0, "VideoCodec", "Error only for enums");
|
||||
qmlRegisterType<Create>("ScreenPlay.Create", 1, 0, "Create");
|
||||
|
||||
qRegisterMetaType<ImportVideoState::ImportVideoState>("ImportVideoState::ImportVideoState");
|
||||
qmlRegisterUncreatableMetaObject(ScreenPlay::ImportVideoState::staticMetaObject,
|
||||
"ScreenPlay.Enums.ImportVideoState",
|
||||
1, 0,
|
||||
"ImportVideoState",
|
||||
"Error: only enums");
|
||||
}
|
||||
|
||||
void Create::reset()
|
||||
{
|
||||
clearFfmpegOutput();
|
||||
m_interrupt = false;
|
||||
setProgress(0.);
|
||||
setWorkingDir({});
|
||||
}
|
||||
/*!
|
||||
\brief Starts the process.
|
||||
*/
|
||||
void Create::createWallpaperStart(QString videoPath, Create::VideoCodec codec, const int quality)
|
||||
{
|
||||
clearFfmpegOutput();
|
||||
reset();
|
||||
videoPath = ScreenPlayUtil::toLocal(videoPath);
|
||||
|
||||
const QDir dir(m_globalVariables->localStoragePath().toLocalFile());
|
||||
@ -56,10 +66,11 @@ void Create::createWallpaperStart(QString videoPath, Create::VideoCodec codec, c
|
||||
const auto folderName = QString("_tmp_" + QTime::currentTime().toString()).replace(":", "");
|
||||
|
||||
if (!dir.mkdir(folderName)) {
|
||||
emit createWallpaperStateChanged(CreateImportVideo::ImportVideoState::CreateTmpFolderError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::CreateTmpFolderError);
|
||||
emit abortCreateWallpaper();
|
||||
return;
|
||||
}
|
||||
|
||||
setWorkingDir(dir.path() + "/" + folderName);
|
||||
|
||||
QString target_codec;
|
||||
@ -75,34 +86,100 @@ void Create::createWallpaperStart(QString videoPath, Create::VideoCodec codec, c
|
||||
break;
|
||||
}
|
||||
|
||||
m_createImportVideoThread = std::make_unique<QThread>();
|
||||
m_createImportVideo = std::make_unique<CreateImportVideo>(videoPath, workingDir(), target_codec, quality);
|
||||
connect(m_createImportVideo.get(), &CreateImportVideo::processOutput, this, [this](QString text) {
|
||||
appendFfmpegOutput(text + "\n");
|
||||
m_createImportFuture = QtConcurrent::run(QThreadPool::globalInstance(), [videoPath, target_codec, quality, this]() {
|
||||
CreateImportVideo import(videoPath, workingDir(), target_codec, quality, m_interrupt);
|
||||
QObject::connect(&import, &CreateImportVideo::createWallpaperStateChanged, this, &Create::createWallpaperStateChanged, Qt::ConnectionType::QueuedConnection);
|
||||
QObject::connect(&import, &CreateImportVideo::abortAndCleanup, this, &Create::abortAndCleanup, Qt::ConnectionType::QueuedConnection);
|
||||
QObject::connect(
|
||||
&import, &CreateImportVideo::processOutput, this, [this](const QString text) {
|
||||
appendFfmpegOutput(text + "\n");
|
||||
},
|
||||
Qt::ConnectionType::QueuedConnection);
|
||||
|
||||
if (!import.createWallpaperInfo() || m_interrupt) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::Failed);
|
||||
emit import.abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperImageThumbnailPreview()";
|
||||
if (!import.createWallpaperImageThumbnailPreview() || m_interrupt) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::Failed);
|
||||
emit import.abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperImagePreview()";
|
||||
if (!import.createWallpaperImagePreview() || m_interrupt) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::Failed);
|
||||
emit import.abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperVideoPreview()";
|
||||
if (!import.createWallpaperVideoPreview() || m_interrupt) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::Failed);
|
||||
emit import.abortAndCleanup();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperGifPreview()";
|
||||
if (!import.createWallpaperGifPreview() || m_interrupt) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::Failed);
|
||||
emit import.abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
// If the video has no audio we can skip the extraction
|
||||
if (!import.m_skipAudio) {
|
||||
qInfo() << "extractWallpaperAudio()";
|
||||
if (!import.extractWallpaperAudio() || m_interrupt) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::Failed);
|
||||
emit import.abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Skip convert for webm
|
||||
if (import.m_isWebm) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::Finished);
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperVideo()";
|
||||
if (!import.createWallpaperVideo() || m_interrupt) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::Failed);
|
||||
emit import.abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::Finished);
|
||||
});
|
||||
|
||||
connect(m_createImportVideo.get(), &CreateImportVideo::createWallpaperStateChanged, this, &Create::createWallpaperStateChanged);
|
||||
connect(m_createImportVideo.get(), &CreateImportVideo::progressChanged, this, &Create::setProgress);
|
||||
connect(m_createImportVideoThread.get(), &QThread::started, m_createImportVideo.get(), &CreateImportVideo::process);
|
||||
connect(m_createImportVideo.get(), &CreateImportVideo::abortAndCleanup, this, &Create::abortAndCleanup);
|
||||
QObject::connect(&m_createImportFutureWatcher, &QFutureWatcherBase::finished, this, [this]() {
|
||||
if (m_interrupt)
|
||||
abortAndCleanup();
|
||||
});
|
||||
|
||||
connect(m_createImportVideo.get(), &CreateImportVideo::finished, m_createImportVideoThread.get(), &QThread::quit);
|
||||
connect(m_createImportVideo.get(), &CreateImportVideo::finished, m_createImportVideo.get(), &QObject::deleteLater);
|
||||
connect(m_createImportVideoThread.get(), &QThread::finished, m_createImportVideoThread.get(), &QObject::deleteLater);
|
||||
|
||||
m_createImportVideo->moveToThread(m_createImportVideoThread.get());
|
||||
m_createImportVideoThread->start();
|
||||
m_createImportFutureWatcher.setFuture(m_createImportFuture);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief When converting of the wallpaper steps where successful.
|
||||
*/
|
||||
void Create::saveWallpaper(QString title, QString description, QString filePath, QString previewImagePath, QString youtube, Create::VideoCodec codec, QVector<QString> tags)
|
||||
void Create::saveWallpaper(
|
||||
const QString title,
|
||||
const QString description,
|
||||
QString filePath,
|
||||
QString previewImagePath,
|
||||
const QString youtube,
|
||||
const Create::VideoCodec codec,
|
||||
const QVector<QString> tags)
|
||||
{
|
||||
filePath = ScreenPlayUtil::toLocal(filePath);
|
||||
previewImagePath = ScreenPlayUtil::toLocal(previewImagePath);
|
||||
|
||||
emit createWallpaperStateChanged(CreateImportVideo::ImportVideoState::CopyFiles);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::CopyFiles);
|
||||
|
||||
// Case when the selected users preview image has the same name as
|
||||
// our default "preview.jpg" name. QFile::copy does no override exsisting files
|
||||
@ -111,7 +188,7 @@ void Create::saveWallpaper(QString title, QString description, QString filePath,
|
||||
if (userSelectedPreviewImage.fileName() == "preview.jpg") {
|
||||
if (!userSelectedPreviewImage.remove()) {
|
||||
qDebug() << "Could remove" << previewImagePath;
|
||||
emit createWallpaperStateChanged(CreateImportVideo::ImportVideoState::CopyFilesError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::CopyFilesError);
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,7 +196,7 @@ void Create::saveWallpaper(QString title, QString description, QString filePath,
|
||||
if (previewImageFile.exists()) {
|
||||
if (!QFile::copy(previewImagePath, m_workingDir + "/" + previewImageFile.fileName())) {
|
||||
qDebug() << "Could not copy" << previewImagePath << " to " << m_workingDir + "/" + previewImageFile.fileName();
|
||||
emit createWallpaperStateChanged(CreateImportVideo::ImportVideoState::CopyFilesError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::CopyFilesError);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -128,12 +205,12 @@ void Create::saveWallpaper(QString title, QString description, QString filePath,
|
||||
if (filePath.endsWith(".webm")) {
|
||||
if (!QFile::copy(filePath, m_workingDir + "/" + filePathFile.fileName())) {
|
||||
qDebug() << "Could not copy" << filePath << " to " << m_workingDir + "/" + filePathFile.fileName();
|
||||
emit createWallpaperStateChanged(CreateImportVideo::ImportVideoState::CopyFilesError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::CopyFilesError);
|
||||
return;
|
||||
}
|
||||
}
|
||||
emit createWallpaperStateChanged(CreateImportVideo::ImportVideoState::CopyFilesFinished);
|
||||
emit createWallpaperStateChanged(CreateImportVideo::ImportVideoState::CreateProjectFile);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::CopyFilesFinished);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::CreateProjectFile);
|
||||
|
||||
QJsonObject obj;
|
||||
obj.insert("description", description);
|
||||
@ -155,14 +232,20 @@ void Create::saveWallpaper(QString title, QString description, QString filePath,
|
||||
}
|
||||
|
||||
if (!Util::writeSettings(std::move(obj), m_workingDir + "/project.json")) {
|
||||
emit createWallpaperStateChanged(CreateImportVideo::ImportVideoState::CreateProjectFileError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::CreateProjectFileError);
|
||||
return;
|
||||
}
|
||||
|
||||
emit createWallpaperStateChanged(CreateImportVideo::ImportVideoState::CreateProjectFileFinished);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::CreateProjectFileFinished);
|
||||
}
|
||||
|
||||
m_createImportVideoThread->quit();
|
||||
m_createImportVideoThread->wait();
|
||||
/*!
|
||||
\brief This method is called from qml.
|
||||
*/
|
||||
void Create::cancel()
|
||||
{
|
||||
qInfo() << "cancel()";
|
||||
m_interrupt = true;
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -170,35 +253,15 @@ void Create::saveWallpaper(QString title, QString description, QString filePath,
|
||||
*/
|
||||
void Create::abortAndCleanup()
|
||||
{
|
||||
qWarning() << "Abort and Cleanup!";
|
||||
|
||||
if (m_createImportVideo == nullptr || m_createImportVideoThread == nullptr) {
|
||||
qDebug() << "Invalid thread pointer. Cancel abort!";
|
||||
return;
|
||||
}
|
||||
|
||||
// Save to export path before aborting to be able to cleanup the tmp folder
|
||||
QString tmpExportPath = m_createImportVideo->m_exportPath;
|
||||
|
||||
connect(m_createImportVideoThread.get(), &QThread::finished, this, [=]() {
|
||||
QDir exportPath(tmpExportPath);
|
||||
qWarning() << "Abort and Cleanup!" << exportPath;
|
||||
if (exportPath.exists()) {
|
||||
if (!exportPath.removeRecursively()) {
|
||||
emit createWallpaperStateChanged(CreateImportVideo::ImportVideoState::AbortCleanupError);
|
||||
qWarning() << "Could not delete temp exportPath: " << exportPath;
|
||||
} else {
|
||||
qDebug() << "cleanup " << tmpExportPath;
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Could not cleanup and delete: " << exportPath;
|
||||
QDir exportPath(m_workingDir);
|
||||
if (exportPath.exists()) {
|
||||
if (!exportPath.removeRecursively()) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::AbortCleanupError);
|
||||
qWarning() << "Could not delete temp exportPath: " << exportPath;
|
||||
}
|
||||
m_createImportVideo.reset();
|
||||
m_createImportVideoThread.reset();
|
||||
});
|
||||
|
||||
m_createImportVideoThread->quit();
|
||||
m_createImportVideoThread->wait();
|
||||
} else {
|
||||
qWarning() << "Could not cleanup video import. Export path does not exist: " << exportPath;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -71,9 +71,7 @@ class Create : public QObject {
|
||||
Q_PROPERTY(QString ffmpegOutput READ ffmpegOutput WRITE appendFfmpegOutput NOTIFY ffmpegOutputChanged)
|
||||
|
||||
public:
|
||||
explicit Create(
|
||||
const std::shared_ptr<GlobalVariables>& globalVariables,
|
||||
QObject* parent = nullptr);
|
||||
explicit Create(const std::shared_ptr<GlobalVariables>& globalVariables);
|
||||
|
||||
Create();
|
||||
|
||||
@ -84,14 +82,13 @@ public:
|
||||
};
|
||||
Q_ENUM(VideoCodec)
|
||||
|
||||
|
||||
float progress() const { return m_progress; }
|
||||
|
||||
QString workingDir() const { return m_workingDir; }
|
||||
|
||||
QString ffmpegOutput() const { return m_ffmpegOutput; }
|
||||
|
||||
signals:
|
||||
void createWallpaperStateChanged(CreateImportVideo::ImportVideoState state);
|
||||
void createWallpaperStateChanged(ImportVideoState::ImportVideoState state);
|
||||
void progressChanged(float progress);
|
||||
void abortCreateWallpaper();
|
||||
void workingDirChanged(QString workingDir);
|
||||
@ -100,17 +97,17 @@ signals:
|
||||
void htmlWallpaperCreatedSuccessful(QString path);
|
||||
|
||||
public slots:
|
||||
void cancel();
|
||||
|
||||
void createWallpaperStart(QString videoPath, Create::VideoCodec codec, const int quality = 50);
|
||||
|
||||
void saveWallpaper(
|
||||
QString title,
|
||||
QString description,
|
||||
void saveWallpaper(const QString title,
|
||||
const QString description,
|
||||
QString filePath,
|
||||
QString previewImagePath,
|
||||
QString youtube,
|
||||
ScreenPlay::Create::VideoCodec codec,
|
||||
QVector<QString> tags);
|
||||
const QString youtube,
|
||||
const ScreenPlay::Create::VideoCodec codec,
|
||||
const QVector<QString> tags);
|
||||
|
||||
void abortAndCleanup();
|
||||
|
||||
@ -145,13 +142,18 @@ public slots:
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<CreateImportVideo> m_createImportVideo;
|
||||
std::unique_ptr<QThread> m_createImportVideoThread;
|
||||
void init();
|
||||
void reset();
|
||||
|
||||
private:
|
||||
const std::shared_ptr<GlobalVariables> m_globalVariables;
|
||||
|
||||
float m_progress { 0.0F };
|
||||
QString m_workingDir;
|
||||
QString m_ffmpegOutput;
|
||||
|
||||
std::atomic<bool> m_interrupt;
|
||||
QFuture<void> m_createImportFuture;
|
||||
QFutureWatcher<void> m_createImportFutureWatcher;
|
||||
};
|
||||
}
|
||||
|
52
ScreenPlay/src/createimportstates.h
Normal file
52
ScreenPlay/src/createimportstates.h
Normal file
@ -0,0 +1,52 @@
|
||||
#pragma once
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace ScreenPlay {
|
||||
/*!
|
||||
\namespace ScreenPlay::ImportVideoState
|
||||
\inmodule ScreenPlay
|
||||
\brief Global enum for ImportVideoState.
|
||||
*/
|
||||
namespace ImportVideoState {
|
||||
Q_NAMESPACE
|
||||
|
||||
enum class ImportVideoState {
|
||||
Idle,
|
||||
Started,
|
||||
AnalyseVideo,
|
||||
AnalyseVideoFinished,
|
||||
AnalyseVideoError,
|
||||
AnalyseVideoHasNoVideoStreamError,
|
||||
ConvertingPreviewVideo,
|
||||
ConvertingPreviewVideoFinished,
|
||||
ConvertingPreviewVideoError,
|
||||
ConvertingPreviewGif,
|
||||
ConvertingPreviewGifFinished, //10
|
||||
ConvertingPreviewGifError,
|
||||
ConvertingPreviewImage,
|
||||
ConvertingPreviewImageFinished,
|
||||
ConvertingPreviewImageError,
|
||||
ConvertingPreviewImageThumbnail,
|
||||
ConvertingPreviewImageThumbnailFinished,
|
||||
ConvertingPreviewImageThumbnailError,
|
||||
ConvertingAudio,
|
||||
ConvertingAudioFinished,
|
||||
ConvertingAudioError, //20
|
||||
ConvertingVideo,
|
||||
ConvertingVideoFinished,
|
||||
ConvertingVideoError,
|
||||
CopyFiles,
|
||||
CopyFilesFinished,
|
||||
CopyFilesError,
|
||||
CreateProjectFile,
|
||||
CreateProjectFileFinished,
|
||||
CreateProjectFileError,
|
||||
AbortCleanupError, //30
|
||||
CreateTmpFolderError,
|
||||
Finished,
|
||||
Failed,
|
||||
};
|
||||
Q_ENUM_NS(ImportVideoState)
|
||||
}
|
||||
}
|
@ -17,21 +17,23 @@ namespace ScreenPlay {
|
||||
/*!
|
||||
\brief This constructor is only needed for calling qRegisterMetaType on CreateImportVideo to register the enums.
|
||||
\code
|
||||
qRegisterMetaType<CreateImportVideo::ImportVideoState>("CreateImportVideo::ImportVideoState");
|
||||
qRegisterMetaType<ImportVideoState::ImportVideoState>("ImportVideoState::ImportVideoState");
|
||||
\endcode
|
||||
*/
|
||||
CreateImportVideo::CreateImportVideo(QObject* parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Creates a CreateImportVideo object to be used in a different thread. A \a videoPath and a \a exportPath are
|
||||
needed for convertion.
|
||||
*/
|
||||
CreateImportVideo::CreateImportVideo(const QString& videoPath, const QString& exportPath, const QString& codec, const int quality, QObject* parent)
|
||||
: QObject(parent)
|
||||
CreateImportVideo::CreateImportVideo(
|
||||
const QString& videoPath,
|
||||
const QString& exportPath,
|
||||
const QString& codec,
|
||||
const int quality,
|
||||
std::atomic<bool>& interrupt)
|
||||
: QObject(nullptr)
|
||||
, m_quality(quality)
|
||||
, m_interrupt(interrupt)
|
||||
{
|
||||
m_videoPath = videoPath;
|
||||
m_exportPath = exportPath;
|
||||
@ -48,90 +50,6 @@ CreateImportVideo::CreateImportVideo(const QString& videoPath, const QString& ex
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Processes the multiple steps of creating a wallpaper.
|
||||
\list 1
|
||||
\li createWallpaperInfo()
|
||||
\li createWallpaperImagePreview()
|
||||
\li createWallpaperVideoPreview()
|
||||
\li createWallpaperGifPreview()
|
||||
\li createWallpaperVideo() - skiped if already a webm
|
||||
\li extractWallpaperAudio() - skiped if no audio
|
||||
\li emit createWallpaperStateChanged(ImportVideoState::Finished);
|
||||
\endlist
|
||||
*/
|
||||
void CreateImportVideo::process()
|
||||
{
|
||||
|
||||
qInfo() << "createWallpaperInfo()" << m_videoPath << m_exportPath << m_codec << m_ffmpegExecutable << m_ffprobeExecutable;
|
||||
if (!createWallpaperInfo() || QThread::currentThread()->isInterruptionRequested()) {
|
||||
emit abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperImageThumbnailPreview()";
|
||||
if (!createWallpaperImageThumbnailPreview() || QThread::currentThread()->isInterruptionRequested()) {
|
||||
emit abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperImagePreview()";
|
||||
if (!createWallpaperImagePreview() || QThread::currentThread()->isInterruptionRequested()) {
|
||||
emit abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperVideoPreview()";
|
||||
if (!createWallpaperVideoPreview() || QThread::currentThread()->isInterruptionRequested()) {
|
||||
emit abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperGifPreview()";
|
||||
if (!createWallpaperGifPreview() || QThread::currentThread()->isInterruptionRequested()) {
|
||||
emit abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
// If the video has no audio we can skip the extraction
|
||||
if (!m_skipAudio) {
|
||||
qInfo() << "extractWallpaperAudio()";
|
||||
if (!extractWallpaperAudio() || QThread::currentThread()->isInterruptionRequested()) {
|
||||
emit abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_isWebm) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::Finished);
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperVideo()";
|
||||
if (!createWallpaperVideo() || QThread::currentThread()->isInterruptionRequested()) {
|
||||
emit abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::Finished);
|
||||
}
|
||||
|
||||
void CreateImportVideo::processGif()
|
||||
{
|
||||
qInfo() << "createWallpaperImageThumbnailPreview()";
|
||||
if (!createWallpaperImageThumbnailPreview() || QThread::currentThread()->isInterruptionRequested()) {
|
||||
emit abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
qInfo() << "createWallpaperImagePreview()";
|
||||
if (!createWallpaperImagePreview() || QThread::currentThread()->isInterruptionRequested()) {
|
||||
emit abortAndCleanup();
|
||||
return;
|
||||
}
|
||||
emit createWallpaperStateChanged(ImportVideoState::Finished);
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Starts ffprobe and tries to parse the resulting json. If the video
|
||||
is a container that not contains the video length like webm or mkv
|
||||
@ -173,12 +91,12 @@ bool CreateImportVideo::createWallpaperInfo()
|
||||
|
||||
emit processOutput("ffprobe " + ScreenPlayUtil::toString(args));
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::AnalyseVideo);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::AnalyseVideo);
|
||||
|
||||
const QString ffmpegOut = waitForFinished(args, QProcess::SeparateChannels, Executable::FFPROBE);
|
||||
qInfo() << ffmpegOut;
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::AnalyseVideoFinished);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::AnalyseVideoFinished);
|
||||
|
||||
auto obj = ScreenPlayUtil::parseQByteArrayToQJsonObject(QByteArray::fromStdString(ffmpegOut.toStdString()));
|
||||
|
||||
@ -188,14 +106,14 @@ bool CreateImportVideo::createWallpaperInfo()
|
||||
|
||||
emit processOutput(ffmpegOut);
|
||||
emit processOutput("Error parsing FFPROBE json output");
|
||||
emit createWallpaperStateChanged(ImportVideoState::AnalyseVideoError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::AnalyseVideoError);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (obj->empty()) {
|
||||
qWarning() << "Error! File could not be parsed.";
|
||||
emit processOutput("Error! File could not be parsed.");
|
||||
emit createWallpaperStateChanged(ImportVideoState::AnalyseVideoError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::AnalyseVideoError);
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -214,7 +132,7 @@ bool CreateImportVideo::createWallpaperInfo()
|
||||
bool CreateImportVideo::analyzeWebmReadFrames(const QJsonObject& obj)
|
||||
{
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::AnalyseVideo);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::AnalyseVideo);
|
||||
|
||||
// Number of frames is a string for some reason...
|
||||
if (!obj.value("streams").isArray()) {
|
||||
@ -283,7 +201,7 @@ bool CreateImportVideo::analyzeVideo(const QJsonObject& obj)
|
||||
if (!hasVideoStream) {
|
||||
qDebug() << "Error! File has no video Stream!";
|
||||
emit processOutput("Error! File has no video Stream!");
|
||||
emit createWallpaperStateChanged(ImportVideoState::AnalyseVideoHasNoVideoStreamError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::AnalyseVideoHasNoVideoStreamError);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -299,7 +217,7 @@ bool CreateImportVideo::analyzeVideo(const QJsonObject& obj)
|
||||
emit processOutput("Error parsing number of frames. Is this really a valid video File?");
|
||||
QJsonDocument tmpVideoStreamDoc(videoStream);
|
||||
emit processOutput(tmpVideoStreamDoc.toJson());
|
||||
emit createWallpaperStateChanged(ImportVideoState::AnalyseVideoError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::AnalyseVideoError);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -312,7 +230,7 @@ bool CreateImportVideo::analyzeVideo(const QJsonObject& obj)
|
||||
if (!okParseDuration) {
|
||||
qDebug() << "Error parsing video length. Is this really a valid video File?";
|
||||
emit processOutput("Error parsing video length. Is this really a valid video File?");
|
||||
emit createWallpaperStateChanged(ImportVideoState::AnalyseVideoError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::AnalyseVideoError);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -373,7 +291,7 @@ bool CreateImportVideo::analyzeVideo(const QJsonObject& obj)
|
||||
bool CreateImportVideo::createWallpaperVideoPreview()
|
||||
{
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewVideo);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewVideo);
|
||||
|
||||
QStringList args;
|
||||
args.append("-y");
|
||||
@ -397,13 +315,13 @@ bool CreateImportVideo::createWallpaperVideoPreview()
|
||||
const QString ffmpegOut = waitForFinished(args);
|
||||
const QFile previewVideo(m_exportPath + "/preview.webm");
|
||||
if (!previewVideo.exists() || !(previewVideo.size() > 0)) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewVideoError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewVideoError);
|
||||
return false;
|
||||
}
|
||||
|
||||
emit processOutput(ffmpegOut);
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewVideoFinished);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewVideoFinished);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -425,7 +343,7 @@ bool CreateImportVideo::createWallpaperVideoPreview()
|
||||
bool CreateImportVideo::createWallpaperGifPreview()
|
||||
{
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewGif);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewGif);
|
||||
|
||||
QStringList args;
|
||||
args.append("-y");
|
||||
@ -442,13 +360,13 @@ bool CreateImportVideo::createWallpaperGifPreview()
|
||||
if (!ffmpegOut.isEmpty()) {
|
||||
const QFile previewGif(m_exportPath + "/preview.gif");
|
||||
if (!previewGif.exists() || !(previewGif.size() > 0)) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewGifError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewGifError);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
emit processOutput(ffmpegOut);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewGifFinished);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewGifFinished);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -464,7 +382,7 @@ bool CreateImportVideo::createWallpaperGifPreview()
|
||||
bool CreateImportVideo::createWallpaperImageThumbnailPreview()
|
||||
{
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewImageThumbnail);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewImageThumbnail);
|
||||
|
||||
QStringList args;
|
||||
args.clear();
|
||||
@ -500,13 +418,13 @@ bool CreateImportVideo::createWallpaperImageThumbnailPreview()
|
||||
if (!ffmpegOut.isEmpty()) {
|
||||
const QFile previewImg(m_exportPath + "/previewThumbnail.jpg");
|
||||
if (!previewImg.exists() || !(previewImg.size() > 0)) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewImageThumbnailError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewImageThumbnailError);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
emit processOutput(ffmpegOut);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewImageThumbnailFinished);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewImageThumbnailFinished);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -517,7 +435,7 @@ bool CreateImportVideo::createWallpaperImageThumbnailPreview()
|
||||
bool CreateImportVideo::createWallpaperImagePreview()
|
||||
{
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewImage);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewImage);
|
||||
|
||||
QStringList args;
|
||||
args.clear();
|
||||
@ -544,13 +462,13 @@ bool CreateImportVideo::createWallpaperImagePreview()
|
||||
if (!ffmpegOut.isEmpty()) {
|
||||
const QFile previewImg(m_exportPath + "/preview.jpg");
|
||||
if (!previewImg.exists() || !(previewImg.size() > 0)) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewImageError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewImageError);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
emit processOutput(ffmpegOut);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingPreviewImageFinished);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingPreviewImageFinished);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -576,13 +494,13 @@ bool CreateImportVideo::createWallpaperImagePreview()
|
||||
*/
|
||||
bool CreateImportVideo::createWallpaperVideo()
|
||||
{
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingVideo);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingVideo);
|
||||
|
||||
connect(m_process.get(), &QProcess::readyReadStandardOutput, this, [&]() {
|
||||
QString tmpOut = m_process->readAllStandardOutput();
|
||||
qInfo() << tmpOut;
|
||||
if (tmpOut.contains("Conversion failed!")) {
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingVideoError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingVideoError);
|
||||
}
|
||||
const auto tmpList = tmpOut.split(QRegExp("\\s+"), Qt::SplitBehaviorFlags::SkipEmptyParts);
|
||||
|
||||
@ -683,11 +601,11 @@ bool CreateImportVideo::createWallpaperVideo()
|
||||
QFile video(convertedFileAbsolutePath);
|
||||
if (!video.exists() || !(video.size() > 0)) {
|
||||
qDebug() << convertedFileAbsolutePath << ffmpegOutput << video.exists() << video.size();
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingVideoError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingVideoError);
|
||||
return false;
|
||||
}
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingVideoFinished);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingVideoFinished);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -710,7 +628,7 @@ bool CreateImportVideo::createWallpaperVideo()
|
||||
bool CreateImportVideo::extractWallpaperAudio()
|
||||
{
|
||||
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingAudio);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingAudio);
|
||||
|
||||
QStringList args;
|
||||
args.append("-y");
|
||||
@ -731,13 +649,13 @@ bool CreateImportVideo::extractWallpaperAudio()
|
||||
if (!previewImg.exists() || !(previewImg.size() > 0)) {
|
||||
qDebug() << args;
|
||||
qDebug() << tmpErrImg;
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingAudioError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingAudioError);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
emit processOutput(tmpErrImg);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ConvertingAudioFinished);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::ConvertingAudioFinished);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -755,12 +673,20 @@ QString CreateImportVideo::waitForFinished(
|
||||
m_process = std::make_unique<QProcess>();
|
||||
QObject::connect(m_process.get(), &QProcess::errorOccurred, [=](QProcess::ProcessError error) {
|
||||
qDebug() << "error enum val = " << error << m_process->errorString();
|
||||
emit createWallpaperStateChanged(ImportVideoState::AnalyseVideoError);
|
||||
emit createWallpaperStateChanged(ImportVideoState::ImportVideoState::AnalyseVideoError);
|
||||
m_process->terminate();
|
||||
if (!m_process->waitForFinished(1000)) {
|
||||
m_process->kill();
|
||||
}
|
||||
});
|
||||
|
||||
QObject::connect(m_process.get(), QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
|
||||
[=](int exitCode, QProcess::ExitStatus exitStatus) {
|
||||
qInfo() << "Process finished with exit code: " << exitCode;
|
||||
if (exitCode != 0)
|
||||
qWarning() << "Process finished with exit code: " << exitCode << " exitStatus:" << exitStatus;
|
||||
});
|
||||
|
||||
if (executable == Executable::FFMPEG) {
|
||||
m_process->setProgram(m_ffmpegExecutable);
|
||||
} else {
|
||||
@ -786,7 +712,7 @@ QString CreateImportVideo::waitForFinished(
|
||||
|
||||
while (!m_process->waitForFinished(10)) //Wake up every 10ms and check if we must exit
|
||||
{
|
||||
if (QThread::currentThread()->isInterruptionRequested()) {
|
||||
if (m_interrupt) {
|
||||
qInfo() << "Interrupt thread";
|
||||
m_process->terminate();
|
||||
if (!m_process->waitForFinished(1000)) {
|
||||
@ -802,7 +728,10 @@ QString CreateImportVideo::waitForFinished(
|
||||
} else {
|
||||
processOutput = m_process->readAll();
|
||||
}
|
||||
qInfo() << "ProcessOutput:" << processOutput;
|
||||
|
||||
if (!processOutput.isEmpty())
|
||||
qInfo() << "ProcessOutput:" << processOutput;
|
||||
|
||||
m_process->close();
|
||||
|
||||
return processOutput;
|
||||
|
@ -47,9 +47,9 @@
|
||||
#include <QProcess>
|
||||
#include <QScopeGuard>
|
||||
#include <QString>
|
||||
#include <QThread>
|
||||
#include <QtMath>
|
||||
|
||||
#include "createimportstates.h"
|
||||
#include "util.h"
|
||||
|
||||
namespace ScreenPlay {
|
||||
@ -59,46 +59,7 @@ class CreateImportVideo : public QObject {
|
||||
Q_PROPERTY(float progress READ progress WRITE setProgress NOTIFY progressChanged)
|
||||
|
||||
public:
|
||||
CreateImportVideo() { }
|
||||
CreateImportVideo(QObject* parent = nullptr);
|
||||
explicit CreateImportVideo(const QString& videoPath, const QString& exportPath, const QString& codec, const int quality, QObject* parent = nullptr);
|
||||
|
||||
enum class ImportVideoState {
|
||||
Idle,
|
||||
Started,
|
||||
AnalyseVideo,
|
||||
AnalyseVideoFinished,
|
||||
AnalyseVideoError,
|
||||
AnalyseVideoHasNoVideoStreamError,
|
||||
ConvertingPreviewVideo,
|
||||
ConvertingPreviewVideoFinished,
|
||||
ConvertingPreviewVideoError,
|
||||
ConvertingPreviewGif,
|
||||
ConvertingPreviewGifFinished, //10
|
||||
ConvertingPreviewGifError,
|
||||
ConvertingPreviewImage,
|
||||
ConvertingPreviewImageFinished,
|
||||
ConvertingPreviewImageError,
|
||||
ConvertingPreviewImageThumbnail,
|
||||
ConvertingPreviewImageThumbnailFinished,
|
||||
ConvertingPreviewImageThumbnailError,
|
||||
ConvertingAudio,
|
||||
ConvertingAudioFinished,
|
||||
ConvertingAudioError, //20
|
||||
ConvertingVideo,
|
||||
ConvertingVideoFinished,
|
||||
ConvertingVideoError,
|
||||
CopyFiles,
|
||||
CopyFilesFinished,
|
||||
CopyFilesError,
|
||||
CreateProjectFile,
|
||||
CreateProjectFileFinished,
|
||||
CreateProjectFileError,
|
||||
AbortCleanupError, //30
|
||||
CreateTmpFolderError,
|
||||
Finished,
|
||||
};
|
||||
Q_ENUM(ImportVideoState)
|
||||
explicit CreateImportVideo(const QString& videoPath, const QString& exportPath, const QString& codec, const int quality, std::atomic<bool>& interrupt);
|
||||
|
||||
float progress() const { return m_progress; }
|
||||
|
||||
@ -128,16 +89,13 @@ public:
|
||||
};
|
||||
|
||||
signals:
|
||||
void createWallpaperStateChanged(CreateImportVideo::ImportVideoState state);
|
||||
void createWallpaperStateChanged(ImportVideoState::ImportVideoState state);
|
||||
void processOutput(QString text);
|
||||
void finished();
|
||||
void abortAndCleanup();
|
||||
void progressChanged(float progress);
|
||||
|
||||
public slots:
|
||||
void process();
|
||||
void processGif();
|
||||
|
||||
bool createWallpaperInfo();
|
||||
bool createWallpaperVideoPreview();
|
||||
bool createWallpaperGifPreview();
|
||||
@ -170,6 +128,7 @@ private:
|
||||
QString m_ffprobeExecutable;
|
||||
QString m_ffmpegExecutable;
|
||||
std::unique_ptr<QProcess> m_process;
|
||||
std::atomic<bool>& m_interrupt;
|
||||
};
|
||||
}
|
||||
Q_DECLARE_METATYPE(ScreenPlay::CreateImportVideo::ImportVideoState)
|
||||
Q_DECLARE_METATYPE(ScreenPlay::ImportVideoState::ImportVideoState)
|
||||
|
@ -33,6 +33,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
#include "app.h"
|
||||
#include "create.h"
|
||||
#include <QApplication>
|
||||
#include <QCommandLineParser>
|
||||
#include <QCoreApplication>
|
||||
@ -49,25 +50,128 @@ class ScreenPlayTest : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
private slots:
|
||||
void main_test();
|
||||
void initTestCase()
|
||||
{
|
||||
Q_INIT_RESOURCE(ScreenPlayQML);
|
||||
Q_INIT_RESOURCE(ScreenPlayAssets);
|
||||
|
||||
app.init();
|
||||
m_window = qobject_cast<QQuickWindow*>(app.mainWindowEngine()->rootObjects().first());
|
||||
QVERIFY(m_window);
|
||||
QVERIFY(QTest::qWaitForWindowExposed(m_window));
|
||||
|
||||
QTest::qWait(1000);
|
||||
}
|
||||
void import_convert_video();
|
||||
|
||||
private:
|
||||
QQuickWindow* m_window = nullptr;
|
||||
ScreenPlay::App app;
|
||||
};
|
||||
|
||||
void ScreenPlayTest::main_test()
|
||||
/*!
|
||||
* For some reason a direct findChild does not work for item
|
||||
* delegates.
|
||||
* https://stackoverflow.com/questions/36767512/how-to-access-qml-listview-delegate-items-from-c
|
||||
*
|
||||
*/
|
||||
QQuickItem* findItemDelegate(QQuickItem* listView)
|
||||
{
|
||||
Q_INIT_RESOURCE(ScreenPlayQML);
|
||||
Q_INIT_RESOURCE(ScreenPlayAssets);
|
||||
if (!listView->property("contentItem").isValid())
|
||||
return {};
|
||||
|
||||
// QtWebEngine::initialize();
|
||||
// QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
// QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
|
||||
auto contentItem = listView->property("contentItem").value<QQuickItem*>();
|
||||
auto contentItemChildren = contentItem->childItems();
|
||||
QQuickItem* videoImportConvertButton {};
|
||||
for (auto childItem : contentItemChildren) {
|
||||
if (childItem->objectName() == "videoImportConvert")
|
||||
return childItem;
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
ScreenPlay::App app;
|
||||
app.init();
|
||||
void clickItem(QQuickItem* item)
|
||||
{
|
||||
QQuickWindow* itemWindow = item->window();
|
||||
QVERIFY(itemWindow);
|
||||
auto centre = item->mapToScene(QPoint(item->width() / 2, item->height() / 2)).toPoint();
|
||||
qInfo() << "click_:" << centre;
|
||||
QTest::mouseClick(itemWindow, Qt::LeftButton, Qt::NoModifier, centre);
|
||||
}
|
||||
|
||||
QTest::qWait(10000);
|
||||
void ScreenPlayTest::import_convert_video()
|
||||
{
|
||||
|
||||
using namespace ScreenPlay;
|
||||
auto* createTab = m_window->findChild<QQuickItem*>("Create");
|
||||
QVERIFY(createTab);
|
||||
clickItem(createTab);
|
||||
QTest::qWait(300);
|
||||
auto* stackView = m_window->findChild<QQuickItem*>("stackView");
|
||||
QVERIFY(stackView);
|
||||
QVERIFY(stackView->property("currentItem").isValid());
|
||||
auto* createView = qvariant_cast<QQuickItem*>(stackView->property("currentItem"));
|
||||
QVERIFY(createView);
|
||||
QTest::qWait(300);
|
||||
auto* wizardsListView = m_window->findChild<QQuickItem*>("wizardsListView");
|
||||
QVERIFY(wizardsListView);
|
||||
QQuickItem* videoImportConvertButton = findItemDelegate(wizardsListView);
|
||||
QVERIFY(videoImportConvertButton);
|
||||
clickItem(videoImportConvertButton);
|
||||
QTest::qWait(300);
|
||||
|
||||
auto* createWallpaperInit = m_window->findChild<QQuickItem*>("createWallpaperInit");
|
||||
QVERIFY(createWallpaperInit);
|
||||
|
||||
QVERIFY(QMetaObject::invokeMethod(createWallpaperInit,
|
||||
QString("startConvert").toLatin1().constData(),
|
||||
Qt::ConnectionType::AutoConnection,
|
||||
Q_ARG(QVariant, "file:///D:/Video Loop/bbb.mp4"),
|
||||
Q_ARG(QVariant, 1))); // VideoCodec::VP9
|
||||
|
||||
QTest::qWait(1000);
|
||||
// Wait for Create::createWallpaperStart
|
||||
{
|
||||
ImportVideoState::ImportVideoState status = ImportVideoState::ImportVideoState::Idle;
|
||||
QObject::connect(app.create(), &Create::createWallpaperStateChanged, this, [&status](ImportVideoState::ImportVideoState state) {
|
||||
status = state;
|
||||
});
|
||||
|
||||
while (true) {
|
||||
QSignalSpy videoConvertFinishSpy(app.create(), &Create::createWallpaperStateChanged);
|
||||
if (status == ImportVideoState::ImportVideoState::Finished || status == ImportVideoState::ImportVideoState::Failed) {
|
||||
QVERIFY(status == ImportVideoState::ImportVideoState::Finished);
|
||||
QTest::qWait(1000); // Wait for the ui to process the event
|
||||
break;
|
||||
}
|
||||
videoConvertFinishSpy.wait();
|
||||
}
|
||||
}
|
||||
|
||||
QTest::qWait(1000);
|
||||
auto* btnSave = m_window->findChild<QQuickItem*>("btnSave");
|
||||
QVERIFY(btnSave);
|
||||
clickItem(btnSave);
|
||||
|
||||
// Wait for Create::saveWallpaper
|
||||
{
|
||||
ImportVideoState::ImportVideoState status = ImportVideoState::ImportVideoState::Idle;
|
||||
QObject::connect(app.create(), &Create::createWallpaperStateChanged, this, [&status](ImportVideoState::ImportVideoState state) {
|
||||
status = state;
|
||||
});
|
||||
|
||||
while (true) {
|
||||
QSignalSpy videoConvertFinishSpy(app.create(), &Create::createWallpaperStateChanged);
|
||||
if (status == ImportVideoState::ImportVideoState::CreateProjectFileFinished || status == ImportVideoState::ImportVideoState::CreateProjectFileError || status == ImportVideoState::ImportVideoState::CopyFilesError) {
|
||||
QVERIFY(status == ImportVideoState::ImportVideoState::CreateProjectFileFinished);
|
||||
QTest::qWait(1000); // Wait for the ui to process the event
|
||||
break;
|
||||
}
|
||||
videoConvertFinishSpy.wait();
|
||||
}
|
||||
}
|
||||
|
||||
QTest::qWait(1000);
|
||||
}
|
||||
|
||||
QTEST_MAIN(ScreenPlayTest)
|
||||
|
@ -129,12 +129,12 @@
|
||||
<context>
|
||||
<name>CreateWallpaperInit</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="31"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="32"/>
|
||||
<source>Import any video type</source>
|
||||
<translation type="unfinished">Importiere jedes Video</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="37"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="38"/>
|
||||
<source>Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are:
|
||||
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</source>
|
||||
@ -142,22 +142,22 @@
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="52"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="53"/>
|
||||
<source>Set your preffered video codec:</source>
|
||||
<translation type="unfinished">Bevorzugte Video-Kodierung Festlegen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="97"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="98"/>
|
||||
<source>Quality slider. Lower value means better quality.</source>
|
||||
<translation type="unfinished">Qualitäts-Regler. Niedriger wert heißt niedrige Qualität</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="112"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="113"/>
|
||||
<source>Open Documentation</source>
|
||||
<translation type="unfinished">Öffne Documentation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="130"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="132"/>
|
||||
<source>Select file</source>
|
||||
<translation type="unfinished">Datei auswählen</translation>
|
||||
</message>
|
||||
@ -263,7 +263,7 @@
|
||||
<translation type="unfinished">Speichern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="382"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="381"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished">Speicher Wallpaper...</translation>
|
||||
</message>
|
||||
@ -560,7 +560,7 @@
|
||||
<translation type="unfinished">Speichern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="375"/>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="374"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished">Speicher Wallpaper...</translation>
|
||||
</message>
|
||||
@ -1299,47 +1299,47 @@ Bitte Konfiguriere deine Wallpaper noch erneut</translation>
|
||||
<translation type="unfinished">Abonniere</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="116"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="119"/>
|
||||
<source>Tools Overview</source>
|
||||
<translation type="unfinished">Werkzeugeübersicht</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="123"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="126"/>
|
||||
<source>Video import and convert (all types)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="130"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="133"/>
|
||||
<source>Video Import (.webm)</source>
|
||||
<translation type="unfinished">Importiere Video (.webm)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="137"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="140"/>
|
||||
<source>GIF Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="144"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="147"/>
|
||||
<source>QML Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="151"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="154"/>
|
||||
<source>HTML5 Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="158"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="161"/>
|
||||
<source>Website Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="165"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="168"/>
|
||||
<source>QML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="172"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="175"/>
|
||||
<source>HTML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -113,34 +113,34 @@
|
||||
<context>
|
||||
<name>CreateWallpaperInit</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="31"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="32"/>
|
||||
<source>Import any video type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="37"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="38"/>
|
||||
<source>Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are:
|
||||
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="52"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="53"/>
|
||||
<source>Set your preffered video codec:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="97"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="98"/>
|
||||
<source>Quality slider. Lower value means better quality.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="112"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="113"/>
|
||||
<source>Open Documentation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="130"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="132"/>
|
||||
<source>Select file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -246,7 +246,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="382"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="381"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -543,7 +543,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="375"/>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="374"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1181,47 +1181,47 @@
|
||||
<context>
|
||||
<name>Sidebar</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="116"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="119"/>
|
||||
<source>Tools Overview</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="123"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="126"/>
|
||||
<source>Video import and convert (all types)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="130"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="133"/>
|
||||
<source>Video Import (.webm)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="137"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="140"/>
|
||||
<source>GIF Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="144"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="147"/>
|
||||
<source>QML Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="151"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="154"/>
|
||||
<source>HTML5 Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="158"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="161"/>
|
||||
<source>Website Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="165"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="168"/>
|
||||
<source>QML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="172"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="175"/>
|
||||
<source>HTML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -129,34 +129,34 @@
|
||||
<context>
|
||||
<name>CreateWallpaperInit</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="31"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="32"/>
|
||||
<source>Import any video type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="37"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="38"/>
|
||||
<source>Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are:
|
||||
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="52"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="53"/>
|
||||
<source>Set your preffered video codec:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="97"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="98"/>
|
||||
<source>Quality slider. Lower value means better quality.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="112"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="113"/>
|
||||
<source>Open Documentation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="130"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="132"/>
|
||||
<source>Select file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -262,7 +262,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="382"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="381"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -559,7 +559,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="375"/>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="374"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1197,47 +1197,47 @@
|
||||
<context>
|
||||
<name>Sidebar</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="116"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="119"/>
|
||||
<source>Tools Overview</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="123"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="126"/>
|
||||
<source>Video import and convert (all types)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="130"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="133"/>
|
||||
<source>Video Import (.webm)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="137"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="140"/>
|
||||
<source>GIF Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="144"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="147"/>
|
||||
<source>QML Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="151"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="154"/>
|
||||
<source>HTML5 Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="158"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="161"/>
|
||||
<source>Website Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="165"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="168"/>
|
||||
<source>QML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="172"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="175"/>
|
||||
<source>HTML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -113,34 +113,34 @@
|
||||
<context>
|
||||
<name>CreateWallpaperInit</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="31"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="32"/>
|
||||
<source>Import any video type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="37"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="38"/>
|
||||
<source>Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are:
|
||||
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="52"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="53"/>
|
||||
<source>Set your preffered video codec:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="97"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="98"/>
|
||||
<source>Quality slider. Lower value means better quality.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="112"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="113"/>
|
||||
<source>Open Documentation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="130"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="132"/>
|
||||
<source>Select file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -246,7 +246,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="382"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="381"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -543,7 +543,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="375"/>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="374"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1181,47 +1181,47 @@
|
||||
<context>
|
||||
<name>Sidebar</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="116"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="119"/>
|
||||
<source>Tools Overview</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="123"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="126"/>
|
||||
<source>Video import and convert (all types)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="130"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="133"/>
|
||||
<source>Video Import (.webm)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="137"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="140"/>
|
||||
<source>GIF Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="144"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="147"/>
|
||||
<source>QML Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="151"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="154"/>
|
||||
<source>HTML5 Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="158"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="161"/>
|
||||
<source>Website Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="165"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="168"/>
|
||||
<source>QML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="172"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="175"/>
|
||||
<source>HTML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -129,34 +129,34 @@
|
||||
<context>
|
||||
<name>CreateWallpaperInit</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="31"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="32"/>
|
||||
<source>Import any video type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="37"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="38"/>
|
||||
<source>Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are:
|
||||
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="52"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="53"/>
|
||||
<source>Set your preffered video codec:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="97"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="98"/>
|
||||
<source>Quality slider. Lower value means better quality.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="112"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="113"/>
|
||||
<source>Open Documentation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="130"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="132"/>
|
||||
<source>Select file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -262,7 +262,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="382"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="381"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -559,7 +559,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="375"/>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="374"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1197,47 +1197,47 @@
|
||||
<context>
|
||||
<name>Sidebar</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="116"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="119"/>
|
||||
<source>Tools Overview</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="123"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="126"/>
|
||||
<source>Video import and convert (all types)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="130"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="133"/>
|
||||
<source>Video Import (.webm)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="137"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="140"/>
|
||||
<source>GIF Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="144"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="147"/>
|
||||
<source>QML Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="151"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="154"/>
|
||||
<source>HTML5 Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="158"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="161"/>
|
||||
<source>Website Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="165"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="168"/>
|
||||
<source>QML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="172"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="175"/>
|
||||
<source>HTML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -129,34 +129,34 @@
|
||||
<context>
|
||||
<name>CreateWallpaperInit</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="31"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="32"/>
|
||||
<source>Import any video type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="37"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="38"/>
|
||||
<source>Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are:
|
||||
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="52"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="53"/>
|
||||
<source>Set your preffered video codec:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="97"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="98"/>
|
||||
<source>Quality slider. Lower value means better quality.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="112"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="113"/>
|
||||
<source>Open Documentation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="130"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="132"/>
|
||||
<source>Select file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -262,7 +262,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="382"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="381"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -559,7 +559,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="375"/>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="374"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1197,47 +1197,47 @@
|
||||
<context>
|
||||
<name>Sidebar</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="116"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="119"/>
|
||||
<source>Tools Overview</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="123"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="126"/>
|
||||
<source>Video import and convert (all types)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="130"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="133"/>
|
||||
<source>Video Import (.webm)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="137"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="140"/>
|
||||
<source>GIF Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="144"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="147"/>
|
||||
<source>QML Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="151"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="154"/>
|
||||
<source>HTML5 Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="158"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="161"/>
|
||||
<source>Website Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="165"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="168"/>
|
||||
<source>QML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="172"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="175"/>
|
||||
<source>HTML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -129,34 +129,34 @@
|
||||
<context>
|
||||
<name>CreateWallpaperInit</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="31"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="32"/>
|
||||
<source>Import any video type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="37"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="38"/>
|
||||
<source>Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are:
|
||||
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="52"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="53"/>
|
||||
<source>Set your preffered video codec:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="97"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="98"/>
|
||||
<source>Quality slider. Lower value means better quality.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="112"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="113"/>
|
||||
<source>Open Documentation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="130"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="132"/>
|
||||
<source>Select file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -262,7 +262,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="382"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="381"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -559,7 +559,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="375"/>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="374"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1197,47 +1197,47 @@
|
||||
<context>
|
||||
<name>Sidebar</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="116"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="119"/>
|
||||
<source>Tools Overview</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="123"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="126"/>
|
||||
<source>Video import and convert (all types)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="130"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="133"/>
|
||||
<source>Video Import (.webm)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="137"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="140"/>
|
||||
<source>GIF Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="144"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="147"/>
|
||||
<source>QML Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="151"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="154"/>
|
||||
<source>HTML5 Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="158"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="161"/>
|
||||
<source>Website Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="165"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="168"/>
|
||||
<source>QML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="172"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="175"/>
|
||||
<source>HTML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -113,34 +113,34 @@
|
||||
<context>
|
||||
<name>CreateWallpaperInit</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="31"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="32"/>
|
||||
<source>Import any video type</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="37"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="38"/>
|
||||
<source>Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are:
|
||||
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="52"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="53"/>
|
||||
<source>Set your preffered video codec:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="97"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="98"/>
|
||||
<source>Quality slider. Lower value means better quality.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="112"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="113"/>
|
||||
<source>Open Documentation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="130"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="132"/>
|
||||
<source>Select file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -246,7 +246,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="382"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="381"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -543,7 +543,7 @@
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="375"/>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="374"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@ -1181,47 +1181,47 @@
|
||||
<context>
|
||||
<name>Sidebar</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="116"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="119"/>
|
||||
<source>Tools Overview</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="123"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="126"/>
|
||||
<source>Video import and convert (all types)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="130"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="133"/>
|
||||
<source>Video Import (.webm)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="137"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="140"/>
|
||||
<source>GIF Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="144"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="147"/>
|
||||
<source>QML Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="151"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="154"/>
|
||||
<source>HTML5 Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="158"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="161"/>
|
||||
<source>Website Wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="165"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="168"/>
|
||||
<source>QML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="172"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="175"/>
|
||||
<source>HTML Widget</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
Binary file not shown.
@ -113,12 +113,12 @@
|
||||
<context>
|
||||
<name>CreateWallpaperInit</name>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="31"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="32"/>
|
||||
<source>Import any video type</source>
|
||||
<translation>导入任何视频类型</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="37"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="38"/>
|
||||
<source>Depending on your PC configuration it is better to convert your wallpaper to a specific video codec. If both have bad performance you can also try a QML wallpaper! Supported video formats are:
|
||||
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</source>
|
||||
@ -127,22 +127,22 @@
|
||||
*.mp4 *.mpg *.mp2 *.mpeg *.ogv *.avi *.wmv *.m4v *.3gp *.flv</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="52"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="53"/>
|
||||
<source>Set your preffered video codec:</source>
|
||||
<translation>设置您偏好的视频编码格式:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="97"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="98"/>
|
||||
<source>Quality slider. Lower value means better quality.</source>
|
||||
<translation>质量滑条,更小的值意味着更好的质量。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="112"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="113"/>
|
||||
<source>Open Documentation</source>
|
||||
<translation>打开文档</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="130"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperInit.qml" line="132"/>
|
||||
<source>Select file</source>
|
||||
<translation>选择文件</translation>
|
||||
</message>
|
||||
@ -248,7 +248,7 @@
|
||||
<translation>保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="382"/>
|
||||
<location filename="../qml/Create/Wizards/ImportVideoAndConvert/CreateWallpaperVideoImportConvert.qml" line="381"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation>保存壁纸...</translation>
|
||||
</message>
|
||||
@ -545,7 +545,7 @@
|
||||
<translation>保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="375"/>
|
||||
<location filename="../qml/Create/Wizards/ImportWebm/ImportWebmConvert.qml" line="374"/>
|
||||
<source>Save Wallpaper...</source>
|
||||
<translation>保存壁纸...</translation>
|
||||
</message>
|
||||
@ -1279,42 +1279,47 @@
|
||||
<translation>订阅</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="116"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="119"/>
|
||||
<source>Tools Overview</source>
|
||||
<translation>工具概览</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="128"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="126"/>
|
||||
<source>Video import and convert (all types)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="133"/>
|
||||
<source>Video Import (.webm)</source>
|
||||
<translation>视频导入 (.webm)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="134"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="140"/>
|
||||
<source>GIF Wallpaper</source>
|
||||
<translation>GIF 壁纸</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="140"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="147"/>
|
||||
<source>QML Wallpaper</source>
|
||||
<translation>QML 壁纸</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="146"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="154"/>
|
||||
<source>HTML5 Wallpaper</source>
|
||||
<translation>HTML5 壁纸</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="152"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="161"/>
|
||||
<source>Website Wallpaper</source>
|
||||
<translation>网页壁纸</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="158"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="168"/>
|
||||
<source>QML Widget</source>
|
||||
<translation>QML 部件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="164"/>
|
||||
<location filename="../qml/Create/Sidebar.qml" line="175"/>
|
||||
<source>HTML Widget</source>
|
||||
<translation>HTML 部件</translation>
|
||||
</message>
|
||||
|
Loading…
Reference in New Issue
Block a user