1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-09-15 06:52:34 +02:00

Merge branch 'master' into 107-refactor-create-screen

# Conflicts:
#	ScreenPlay/main.qml
This commit is contained in:
Elias Steurer 2020-11-07 14:09:54 +01:00
commit 954bb11c7d
71 changed files with 1185 additions and 688 deletions

8
.cmake-format.py Normal file
View File

@ -0,0 +1,8 @@
with section("format"):
# How wide to allow formatted cmake files
line_width = 140
# How many spaces to tab for indent
tab_size = 4

View File

@ -1,47 +1,183 @@
stages:
- check
- build
- test
- benchmark
build:windows:
check:
stage: check
tags:
- vs2019
- windows10
script:
- cd Tools
- pip install cmakelang
- python format-cmake.py
- python format-cpp.py
build:windows_debug:
stage: build
tags:
- vs2017
- windows
before_script:
- git clean -xdf
- git submodule sync --recursive
- git submodule update --init --recursive
# Needs MSVC 2019 installed!
# Setup vcvars32.bat manually because this is powershell and MS does not have something simmilar for PS. Wtf?
# https://gist.github.com/justinian/81a2e55c89e8301a8a96
# https://stackoverflow.com/questions/2124753/how-can-i-use-powershell-with-the-visual-studio-command-prompt
- $tempFile = [IO.Path]::GetTempFileName()
- cmd /c " `"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat`" && set > `"$tempFile`" "
- Get-Content $tempFile | Foreach-Object {if($_ -match "^(.*?)=(.*)$"){Set-Content "env:\$($matches[1])" $matches[2]}}
- Remove-Item $tempFile
- $Env:Path += ';C:\Qt\5.15.1\msvc2019_64\bin'
- $Env:Path += ';C:\Qt\Tools\QtCreator\bin'
- $env:path -split ";"
cache:
key: ${CI_RUNNER_DESCRIPTION}
paths:
- Common\vcpkg\
- vs2019
- windows10
needs:
- check
script:
- cmd /c install_dependencies_windows.bat
- mkdir BUILD_WINDOWS
- cd BUILD_WINDOWS
- cmake.exe ../ -DCMAKE_PREFIX_PATH=c:/Qt/5.15.1/msvc2019 -DCMAKE_IGNORE_PATH=C:/Strawberry/c/bin -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE="$(Get-Location)/../Common/vcpkg/scripts/buildsystems/vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=x64-windows "-GCodeBlocks - Ninja" -B.
- cmake.exe --build . --target all
- cd bin
- windeployqt.exe --release --qmldir ../../ScreenPlay/qml ScreenPlay.exe
- windeployqt.exe --release --qmldir ../../ScreenPlayWidget ScreenPlayWidget.exe
- windeployqt.exe --release --qmldir ../../ScreenPlayWallpaper ScreenPlayWallpaper.exe
- del *.cpp,*.moc,*.h,*.obj,*.res,*.exp,*.lib,*.lik,*.pch, *.ninja, *.exe.manifest, *.cbp, *.cmake, *.ninja_log, *.ninja_deps, *.manifest
- cd Tools
- python build.py -t debug
artifacts:
expire_in: '12 weeks'
expire_in: '4 weeks'
paths:
- BUILD_WINDOWS/bin/
- build-x64-windows-debug/bin/
build:windows_release:
stage: build
tags:
- vs2019
- windows10
needs:
- check
script:
- cd Tools
- python build.py -t release
artifacts:
expire_in: '4 weeks'
paths:
- build-x64-windows-release/bin/
build:osx_debug:
stage: build
allow_failure: true
tags:
- osx
needs:
- check
script:
- cd Tools
- python3 build.py -t debug
artifacts:
expire_in: '4 weeks'
paths:
- build-x64-osx-debug/bin/
build:osx_release:
stage: build
allow_failure: true
tags:
- osx
needs:
- check
script:
- cd Tools
- python3 build.py -t release
artifacts:
expire_in: '4 weeks'
paths:
- build-x64-osx-release/bin/
build:linux_debug:
stage: build
allow_failure: true
image:
name: darkmattercoder/qt-build:5.15.1
entrypoint: [""]
tags:
- gitlab-org-docker
needs:
- check
script:
- sudo apt-get update -y
- sudo apt-get install apt-transport-https ca-certificates gnupg software-properties-common wget software-properties-common -y
- wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
- sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic-rc main' -y
- sudo apt-get update -y
- sudo apt install build-essential libgl1-mesa-dev lld ninja-build cmake -y
- cd Tools
- python build.py -t debug
artifacts:
expire_in: '4 weeks'
paths:
- build-x64-linux-debug/bin/
build:linux_release:
stage: build
allow_failure: true
image:
name: darkmattercoder/qt-build:5.15.1
entrypoint: [""]
tags:
- gitlab-org-docker
needs:
- check
script:
- sudo apt-get update -y
- sudo apt-get install apt-transport-https ca-certificates gnupg software-properties-common wget software-properties-common -y
- wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
- sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic-rc main' -y
- sudo apt-get update -y
- sudo apt install build-essential libgl1-mesa-dev lld ninja-build cmake -y
- cd Tools
- python build.py -t release
artifacts:
expire_in: '4 weeks'
paths:
- build-x64-linux-release/bin/
test:windows_debug:
stage: test
tags:
- windows10
- vs2019
dependencies:
- build:windows_debug
needs:
- build:windows_debug
script:
- ./build-x64-windows-debug/bin/ScreenPlay.exe --no-run=false --exit=true --reporters=junit --out=test-report-junit.xml
artifacts:
expire_in: '4 weeks'
when: always
reports:
junit: test-report-junit.xml
test:windows_release:
stage: test
tags:
- windows10
- vs2019
dependencies:
- build:windows_release
needs:
- build:windows_release
script:
- ./build-x64-windows-release/bin/ScreenPlay.exe --no-run=false --exit=true --reporters=junit --out=test-report-junit.xml
artifacts:
expire_in: '4 weeks'
when: always
reports:
junit: test-report-junit.xml
benchmark:windows_release:
stage: benchmark
tags:
- windows10
- vs2019
dependencies:
- build:windows_release
needs:
- build:windows_release
script:
- ./build-x64-windows-release/bin/ScreenPlay.exe --benchmark
artifacts:
expire_in: '4 weeks'
when: always
reports:
metrics: build-x64-windows-release/bin/metrics.txt
build_docs:
stage: .post
script:
- curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=master https://gitlab.com/api/v4/projects/15800262/trigger/pipeline
- curl --request POST --form "token=$CI_JOB_TOKEN" --form ref=master https://gitlab.com/api/v4/projects/15800262/trigger/pipeline

BIN
.gitlab/media/preview.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

View File

@ -1,4 +1,6 @@
cmake_minimum_required(VERSION 3.16.0 )
cmake_minimum_required(VERSION 3.16.0)
project(ScreenPlay)
# This sets cmake to compile all dlls into the main directory
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
@ -15,14 +17,22 @@ elseif(APPLE)
set(VCPKG_ARCH "x64-osx")
endif()
set(VCPKG_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Common/vcpkg/installed/${VCPKG_ARCH}/include/)
set(VCPKG_TOOLS_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Common/vcpkg/installed/${VCPKG_ARCH}/tools/)
set(QT_TELEMTRY_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/Common/qt-google-analytics/)
# assume built-in pthreads on MacOS https://stackoverflow.com/questions/54587052/cmake-on-mac-could-not-find-threads-missing-threads-found
if(APPLE)
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)
endif()
set(VCPKG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../ScreenPlay-vcpkg")
set(VCPKG_INSTALLED_PATH "${VCPKG_PATH}/installed/${VCPKG_ARCH}")
set(QT_TELEMTRY_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/Common/qt-google-analytics/)
find_package(Git REQUIRED)
if(WIN32)
set(date_command "CMD" )
set(date_command "CMD")
set(date_arg "/c date /t")
elseif(APPLE)
@ -33,30 +43,26 @@ elseif(UNIX)
set(date_arg "")
endif()
execute_process(COMMAND
${date_command} ${date_arg}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE BUILD_DATE
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
COMMAND ${date_command} ${date_arg}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE BUILD_DATE
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND
"${GIT_EXECUTABLE}" describe --always
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_COMMIT_HASH
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --always
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_COMMIT_HASH
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
add_compile_definitions(COMPILE_INFO="${BUILD_DATE} + ${GIT_COMMIT_HASH}")
if(UNIX)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
if(UNIX AND NOT APPLE)
# Fixes QWebEngine linker errors on Ubuntu 20.04
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=gold")
endif()
project(ScreenPlay)
add_subdirectory(ScreenPlay)
add_subdirectory(ScreenPlaySDK)
add_subdirectory(ScreenPlayShader)
@ -64,5 +70,5 @@ add_subdirectory(ScreenPlayWallpaper)
add_subdirectory(ScreenPlayWidget)
if(WIN32)
add_subdirectory(ScreenPlaySysInfo)
add_subdirectory(ScreenPlaySysInfo)
endif()

View File

@ -0,0 +1,7 @@
### Continous Inegration
##### Code Checks
##### Benchmarks
##### Unit tests

View File

@ -2,18 +2,18 @@
1. Install latest [git + git-lfs](https://git-scm.com/)
2. Clone ScreenPlay
``` bash
git clone --recursive https://gitlab.com/kelteseth/ScreenPlay.git
git clone --recursive https://gitlab.com/kelteseth/ScreenPlay.git ScreenPlay
```
3. Download the latest [__Qt 5.15__](https://www.qt.io/download-qt-installer). Earlier versions are not supported!
4. Start install-dependencies.bat to download dependencies into the Common/ folder
4. Start install-dependencies.bat to download dependencies. ATTENTION: This will create a ScreenPlay-vcpkg folder in the same directory as your ScreenPlay source folder.
``` bash
//Windows
.\install-dependencies.bat
.\Tools\install-dependencies.bat
//Linux
sudo apt install git gcc cmake build-essential libgl1-mesa-dev
chmod +x install-dependencies.sh
.\install-dependencies.sh
.\Tools\install-dependencies.sh
```
* This will install these dependencies via __vcpkg__
* openSSL 1.1.1d
@ -27,7 +27,7 @@ chmod +x install-dependencies.sh
7. Add CMake variables
* Add CMAKE_TOOLCHAIN_FILE and VCPKG_TARGET_TRIPLET
* Extras -> Tools -> Kits -> <Your Kit> -> CMake Configuration -> Append this:
* CMAKE_TOOLCHAIN_FILE:STRING=%{CurrentProject:Path}/Common/vcpkg/scripts/buildsystems/vcpkg.cmake
* CMAKE_TOOLCHAIN_FILE:STRING=%{CurrentProject:Path}/../ScreenPlay-vcpkg/vcpkg/scripts/buildsystems/vcpkg.cmake
* VCPKG_TARGET_TRIPLET:STRING=x64-windows
* or Linux: x64-linux MacOSX: x64-osx

View File

@ -7,7 +7,12 @@
<br>
ScreenPlay [![pipeline status](https://gitlab.com/kelteseth/ScreenPlay/badges/master/pipeline.svg)](https://gitlab.com/kelteseth/ScreenPlay/-/commits/master) <br>
Dev. Docs [![pipeline status](https://gitlab.com/kelteseth/ScreenPlayDeveloperDocs/badges/master/pipeline.svg)](https://gitlab.com/kelteseth/ScreenPlayDeveloperDocs/-/commits/master)
Dev. Docs [![pipeline status](https://gitlab.com/kelteseth/ScreenPlayDeveloperDocs/badges/master/pipeline.svg)](https://gitlab.com/kelteseth/ScreenPlayDeveloperDocs/-/commits/master) <br><br>
<a href="https://twitter.com/kelteseth">![Twitter Follow](https://img.shields.io/twitter/follow/kelteseth?style=for-the-badge)</a>
<a href="https://www.reddit.com/r/ScreenPlayApp/">![Subreddit subscribers](https://img.shields.io/reddit/subreddit-subscribers/screenplayapp?style=for-the-badge)</a>
<a href="https://discord.com/invite/rUvjNSV?utm_source=Discord%20Widget&utm_medium=Connect">![Discord](https://img.shields.io/discord/516635043435773970?style=for-the-badge)</a>
<br>
ScreenPlay is an open source cross platform app for displaying Video Wallpaper, Widgets and AppDrawer. It is written in modern C++20/Qt5/QML. Binaries with workshop support are available for Windows and soon Linux & MacOSX via <a href="https://store.steampowered.com/about/">Steam</a>. Join our community:
@ -16,7 +21,7 @@ ScreenPlay is an open source cross platform app for displaying Video Wallpaper,
<!--<h4><a href="https://steamcommunity.com/app/672870/">Download ScreenPlay!</a></h4>-->
<br>
![Preview](.gitlab/media/preview.mp4)
![Preview](.gitlab/media/preview.gif)
<br> <h4><a href="https://kelteseth.gitlab.io/ScreenPlayDocs/wallpaper/wallpaper/">Wallpaper </a> and <a href="https://kelteseth.gitlab.io/ScreenPlayDocs/widgets/widgets/"> Widgets </a>Guide</h4>
</div>

View File

@ -1,62 +1,61 @@
project(ScreenPlay LANGUAGES CXX)
project(ScreenPlay LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOMOC ON)
find_package(
Qt5
COMPONENTS Quick
QuickCompiler
Widgets
Gui
WebEngine
LinguistTools
REQUIRED)
Qt5
COMPONENTS Quick QuickCompiler Widgets Gui WebEngine LinguistTools
REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(benchmark CONFIG REQUIRED)
find_package(doctest CONFIG REQUIRED)
if(WIN32)
find_package(sentry CONFIG REQUIRED)
find_package(sentry CONFIG REQUIRED)
endif()
set(src main.cpp
app.cpp
../Common/qt-google-analytics/ganalytics.cpp
src/globalvariables.cpp
src/createimportvideo.cpp
src/installedlistmodel.cpp
src/monitorlistmodel.cpp
src/screenplaywallpaper.cpp
src/screenplaywidget.cpp
src/settings.cpp
src/profilelistmodel.cpp
src/installedlistfilter.cpp
src/projectsettingslistmodel.cpp
src/screenplaymanager.cpp
src/sdkconnection.cpp
src/util.cpp
src/create.cpp)
set(src
main.cpp
app.cpp
../Common/qt-google-analytics/ganalytics.cpp
src/globalvariables.cpp
src/createimportvideo.cpp
src/installedlistmodel.cpp
src/monitorlistmodel.cpp
src/screenplaywallpaper.cpp
src/screenplaywidget.cpp
src/settings.cpp
src/profilelistmodel.cpp
src/installedlistfilter.cpp
src/projectsettingslistmodel.cpp
src/screenplaymanager.cpp
src/sdkconnection.cpp
src/util.cpp
src/create.cpp)
set(headers app.h
../Common/qt-google-analytics/ganalytics.h
src/globalvariables.h
src/createimportvideo.h
src/installedlistmodel.h
src/monitorlistmodel.h
src/screenplaywallpaper.h
src/screenplaywidget.h
src/settings.h
src/profilelistmodel.h
src/profile.h
src/projectfile.h
src/installedlistfilter.h
src/projectsettingslistmodel.h
src/screenplaymanager.h
src/sdkconnection.h
src/util.h
src/create.h)
set(headers
app.h
../Common/qt-google-analytics/ganalytics.h
src/globalvariables.h
src/createimportvideo.h
src/installedlistmodel.h
src/monitorlistmodel.h
src/screenplaywallpaper.h
src/screenplaywidget.h
src/settings.h
src/profilelistmodel.h
src/profile.h
src/projectfile.h
src/installedlistfilter.h
src/projectsettingslistmodel.h
src/screenplaymanager.h
src/sdkconnection.h
src/util.h
src/create.h)
set(l10n
translations/ScreenPlay_de.ts
@ -66,57 +65,52 @@ set(l10n
translations/ScreenPlay_fr.ts
translations/ScreenPlay_ko.ts
translations/ScreenPlay_ru.ts
translations/ScreenPlay_vi.ts
)
translations/ScreenPlay_vi.ts)
set_source_files_properties(${l10n} PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/translations")
qt5_add_translation(qmFiles ${l10n})
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
qt5_add_resources(qml qml.qrc resources.qrc)
qt5_add_resources(qml qml.qrc Resources.qrc)
else()
qtquick_compiler_add_resources(qml qml.qrc resources.qrc)
qtquick_compiler_add_resources(qml qml.qrc Resources.qrc)
endif()
add_executable(${PROJECT_NAME} ${src} ${headers} ${resources} ${qml})
if(WIN32)
# Icon
target_sources(${PROJECT_NAME} PRIVATE ScreenPlay.rc)
target_sources(${PROJECT_NAME} PRIVATE ScreenPlay.rc)
# Disable console window on Windows
# https://stackoverflow.com/questions/8249028/how-do-i-keep-my-qt-c-program-from-opening-a-console-in-windows
set_property(TARGET ${PROJECT_NAME} PROPERTY WIN32_EXECUTABLE true)
endif()
target_compile_definitions(${PROJECT_NAME} PRIVATE "GIT_VERSION=${GIT_VERSION}")
target_compile_definitions(${PROJECT_NAME} PRIVATE "GIT_VERSION=${GIT_VERSION}")
target_link_libraries(${PROJECT_NAME}
PRIVATE
Qt5::Quick
Qt5::Gui
Qt5::Widgets
Qt5::Core
Qt5::WebEngine
ScreenPlaySDK
)
target_link_libraries(
${PROJECT_NAME}
PRIVATE Qt5::Quick
Qt5::Gui
Qt5::Widgets
Qt5::Core
Qt5::WebEngine
ScreenPlaySDK
benchmark::benchmark
benchmark::benchmark_main
doctest::doctest)
if(WIN32)
target_link_libraries(${PROJECT_NAME} PRIVATE sentry::sentry)
endif()
target_include_directories(${PROJECT_NAME}
PRIVATE
${QT_TELEMTRY_INCLUDE})
target_include_directories(${PROJECT_NAME} PRIVATE ${QT_TELEMTRY_INCLUDE})
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin/assets/fonts)
configure_file(assets/fonts/NotoSansCJKkr-Regular.otf ${CMAKE_BINARY_DIR}/bin/assets/fonts COPYONLY)
# Copy ffmpeg. If the ffmpeg files are missing, start the
# install_dependencies_XXX for your system!
# Copy ffmpeg. If the ffmpeg files are missing, start the install_dependencies_XXX for your system!
if(WIN32)
file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/../Common/ffmpeg/*")
@ -124,9 +118,11 @@ if(WIN32)
configure_file(${filename} ${CMAKE_BINARY_DIR}/bin/ COPYONLY)
endforeach()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../Common/vcpkg/installed/x64-windows/tools/sentry-native/crashpad_handler.exe ${CMAKE_BINARY_DIR}/bin/ COPYONLY)
configure_file(${VCPKG_INSTALLED_PATH}/tools/sentry-native/crashpad_handler.exe ${CMAKE_BINARY_DIR}/bin/ COPYONLY)
elseif(APPLE)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../Common/ffmpeg/ffmpeg ${CMAKE_BINARY_DIR}/bin/ COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../Common/ffmpeg/ffprobe ${CMAKE_BINARY_DIR}/bin/ COPYONLY)
# cmake-format: off
# Auto ffmpeg download missing for osx
#configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../Common/ffmpeg/ffmpeg ${CMAKE_BINARY_DIR}/bin/ COPYONLY)
#configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../Common/ffmpeg/ffprobe ${CMAKE_BINARY_DIR}/bin/ COPYONLY)
# cmake-format: on
endif()

View File

@ -116,5 +116,6 @@
<file>translations/ScreenPlay_ko.qm</file>
<file>translations/ScreenPlay_ru.qm</file>
<file>translations/ScreenPlay_vi.qm</file>
<file>assets/icons/monitor_setup.svg</file>
</qresource>
</RCC>

View File

@ -43,6 +43,9 @@ namespace ScreenPlay {
App::App()
: QObject(nullptr)
{
m_continuousIntegrationMetricsTimer.start();
QGuiApplication::setWindowIcon(QIcon(":/assets/icons/app.ico"));
QGuiApplication::setOrganizationName("ScreenPlay");
QGuiApplication::setOrganizationDomain("screen-play.app");
@ -120,6 +123,7 @@ App::App()
// ScreenPlayManager first to check if another ScreenPlay Instace is running
m_screenPlayManager = std::make_unique<ScreenPlayManager>();
m_isAnotherScreenPlayInstanceRunning = m_screenPlayManager->isAnotherScreenPlayInstanceRunning();
Util::appendToMetricsFile("screenplay_app_constructor", m_continuousIntegrationMetricsTimer.msecsSinceReference());
}
/*!
@ -130,6 +134,9 @@ App::App()
*/
void App::init()
{
Util::appendToMetricsFile("screenplay_app_init", m_continuousIntegrationMetricsTimer.msecsSinceReference());
using std::make_shared, std::make_unique;
// Util should be created as first so we redirect qDebugs etc. into the log
@ -173,7 +180,7 @@ void App::init()
m_settings->setupLanguage();
QObject::connect(m_globalVariables.get(), &GlobalVariables::localStoragePathChanged, this, [this](QUrl localStoragePath) {
m_settings->resetInstalledListmodel();
emit m_settings->resetInstalledListmodel();
m_settings->setqSetting("ScreenPlayContentPath", localStoragePath.toString());
});
QObject::connect(m_monitorListModel.get(), &MonitorListModel::monitorConfigurationChanged, m_screenPlayManager.get(), &ScreenPlayManager::closeAllWallpapers);
@ -187,9 +194,9 @@ void App::init()
}
qmlRegisterSingletonInstance("ScreenPlay", 1, 0, "ScreenPlay", this);
loadSteamPlugin();
Util::appendToMetricsFile("Screenplay_app_qqmlapplicationengine_load_begin", m_continuousIntegrationMetricsTimer.msecsSinceReference());
m_mainWindowEngine->load(QUrl(QStringLiteral("qrc:/main.qml")));
Util::appendToMetricsFile("Screenplay_app_qqmlapplicationengine_load_end", m_continuousIntegrationMetricsTimer.msecsSinceReference());
}
/*!
@ -208,18 +215,22 @@ void App::exit()
}
}
void App::loadSteamPlugin()
bool App::loadSteamPlugin()
{
#ifdef Q_OS_MACOS
const QString fileSuffix = ".dylib";
#endif
#ifdef Q_OS_WIN
#ifdef QT_NO_DEBUG
const QString fileSuffix = ".dll";
#else
const QString fileSuffix = "d.dll";
#endif
#else
#endif
#ifdef Q_OS_LINUX
const QString fileSuffix = ".so";
#endif
@ -228,9 +239,12 @@ void App::loadSteamPlugin()
if (!m_workshopPlugin.load()) {
qWarning() << "Steam plugin not provided!";
qWarning() << m_workshopPlugin.fileName() << " - With error: " << m_workshopPlugin.errorString();
return false;
}
const ScreenPlayWorkshopPlugin* workshopPlugin = reinterpret_cast<ScreenPlayWorkshopPlugin*>(m_workshopPlugin.instance());
Q_UNUSED(workshopPlugin)
settings()->setSteamVersion(true);
return true;
}
}

View File

@ -35,6 +35,7 @@
#pragma once
#include <QDir>
#include <QElapsedTimer>
#include <QIcon>
#include <QObject>
#include <QQmlApplicationEngine>
@ -153,6 +154,7 @@ signals:
public slots:
void exit();
bool loadSteamPlugin();
void setTrackerSendEvent(const QString& category, const QString& page)
{
if (m_telemetry) {
@ -248,12 +250,10 @@ public slots:
emit mainWindowEngineChanged(m_mainWindowEngine.get());
}
private:
void loadSteamPlugin();
private:
QPluginLoader m_workshopPlugin;
QNetworkAccessManager m_networkAccessManager;
QElapsedTimer m_continuousIntegrationMetricsTimer;
std::unique_ptr<QQmlApplicationEngine> m_mainWindowEngine;
std::unique_ptr<Create> m_create;

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 508 508" style="enable-background:new 0 0 508 508;" xml:space="preserve">
<circle style="fill:#324A5E;" cx="254" cy="254" r="254"/>
<polygon style="fill:#FFFFFF;" points="206,346 194,404.4 314,404.4 302,346 "/>
<polygon style="fill:#E6E9EE;" points="306.8,369.6 302,346 206,346 201.2,369.6 "/>
<path style="fill:#FFFFFF;" d="M411.2,352.8H96.8c-9.6,0-17.6-8-17.6-17.6V142.8c0-9.6,8-17.6,17.6-17.6h314.4
c9.6,0,17.6,8,17.6,17.6v192.4C428.8,344.8,420.8,352.8,411.2,352.8z"/>
<path style="fill:#E6E9EE;" d="M164.4,418.4v-10.8c0-5.2,4-9.2,9.2-9.2H334c5.2,0,9.2,4,9.2,9.2v10.8c0,5.2-4,9.2-9.2,9.2H173.6
C168.8,427.6,164.4,423.6,164.4,418.4z"/>
<rect x="96" y="143.6" style="fill:#54C0EB;" width="316.4" height="172.4"/>
<circle style="fill:#E6E9EE;" cx="254" cy="334.4" r="10.4"/>
<g>
<path style="fill:#FFFFFF;" d="M281.6,228.8l-9.2-4.4c0.8-4.8,0.4-9.2-0.4-13.6l8.8-4.8c1.6-0.8,2.4-3.2,1.6-5.2l-4-9.2
c-0.8-2-2.8-2.8-4.8-2l-9.6,3.2c-2.8-3.6-6-6.8-10-9.6l2.8-9.6c0.4-2-0.4-4-2.4-4.8l-8.4-4c-2-0.8-4,0-4.8,2l-4.4,9.2
c-4.8-0.8-9.2-0.4-13.6,0.4l-4.8-8.8c-0.8-1.6-3.2-2.4-5.2-1.6l-9.2,4c-2,0.8-2.8,2.8-2,4.8l3.2,9.6c-3.6,2.8-6.8,6-9.6,10
l-9.6-2.8c-2-0.4-4,0.4-4.8,2.4l-3.6,9.2c-0.8,2,0,4,2,4.8l9.2,4.4c-0.8,4.8-0.4,9.2,0.4,13.6l-8.8,4.8c-1.6,0.8-2.4,3.2-1.6,5.2
l4,9.2c0.8,2,2.8,2.8,4.8,2l9.6-3.2c2.8,3.6,6,6.8,10,9.6l-2.8,9.6c-0.4,2,0.4,4,2.4,4.8l9.2,3.6c2,0.8,4,0,4.8-2l4.4-9.2
c4.8,0.8,9.2,0.4,13.6-0.4l4.8,8.8c0.8,1.6,3.2,2.4,5.2,1.6l9.2-4c2-0.8,2.8-2.8,2-4.8l-3.2-9.6c3.6-2.8,6.8-6,9.6-10l9.6,2.8
c2,0.4,4-0.4,4.8-2.4l3.6-9.2C284.4,232,283.6,230,281.6,228.8z M220.8,241.2c-12.8-5.2-19.2-19.6-14-32.4s19.6-19.2,32.4-14
s19.2,19.6,14,32.4C248.4,240,233.6,246.4,220.8,241.2z"/>
<path style="fill:#FFFFFF;" d="M330.4,271.6l-4.8-2.4c0.4-2.4,0-4.8-0.4-7.2l4.8-2.8c0.8-0.4,1.2-1.6,0.8-2.8l-2.4-4.8
c-0.4-0.8-1.6-1.6-2.8-1.2l-5.2,2c-1.6-2-3.2-3.6-5.6-5.2l1.2-5.2c0.4-1.2-0.4-2-1.2-2.4l-5.2-2c-1.2-0.4-2,0-2.8,1.2l-2.4,4.8
c-2.4-0.4-4.8,0-7.2,0.4l-2.8-4.8c-0.4-0.8-1.6-1.2-2.8-0.8l-4.8,2.4c-0.8,0.4-1.6,1.6-1.2,2.8l2,5.2c-2,1.6-3.6,3.2-5.2,5.6
l-4.4-2c-1.2-0.4-2,0.4-2.4,1.2l-2,5.2c-0.4,1.2,0,2,1.2,2.8l4.8,2.4c-0.4,2.4,0,4.8,0.4,7.2l-4.8,2.8c-0.8,0.4-1.2,1.6-0.8,2.8
l2.4,4.8c0.4,0.8,1.6,1.6,2.8,1.2l5.2-2c1.6,2,3.2,3.6,5.6,5.2l-1.2,5.2c-0.4,1.2,0.4,2,1.2,2.4l5.2,2c1.2,0.4,2,0,2.8-1.2l2.4-4.8
c2.4,0.4,4.8,0,7.2-0.4l2.8,4.8c0.4,0.8,1.6,1.2,2.8,0.8l4.8-2.4c0.8-0.4,1.6-1.6,1.2-2.8l-2-5.2c2-1.6,3.6-3.2,5.2-5.6l5.2,1.2
c1.2,0.4,2-0.4,2.4-1.2l2-5.2C332,273.2,331.6,272,330.4,271.6z M298,278.8c-6.8-2.4-10.4-10.4-8-17.2c2.4-6.8,10.4-10.4,17.2-8
c6.8,2.4,10.4,10.4,8,17.2C312.8,278,304.8,281.6,298,278.8z"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -34,10 +34,15 @@
#include "app.h"
#include <QApplication>
#include <QCommandLineParser>
#include <QDebug>
#ifdef Q_OS_WIN
#include <sentry.h>
#endif
#define DOCTEST_CONFIG_IMPLEMENT
#define DOCTEST_CONFIG_SUPER_FAST_ASSERTS
#include <doctest/doctest.h>
int main(int argc, char* argv[])
{
@ -52,6 +57,29 @@ int main(int argc, char* argv[])
QApplication qtGuiApp(argc, argv);
// Benchmarks
if (QGuiApplication::arguments().contains("--benchmark")) {
QFile metricsFile { QGuiApplication::applicationDirPath() + "/metrics.txt" };
if (metricsFile.exists())
qInfo() << "Removing old Continuous Integration Metrics Timer: " << metricsFile.remove();
QTimer::singleShot(10000, []() {
qInfo() << "Exit ScreenPlay benchmark mode!";
QGuiApplication::quit();
});
}
// Unit tests
doctest::Context context;
context.setOption("abort-after", 5); // stop test execution after 5 failed assertions
context.setOption("order-by", "name"); // sort the test cases by their name
context.setOption("no-breaks", true); // don't break in the debugger when assertions fail
context.setOption("no-run", true); // No tests are executed by default
context.applyCommandLine(argc, argv); // Every setOption call after applyCommandLine overrides the command line arguments
const int testResult = context.run();
if (context.shouldExit())
return testResult;
ScreenPlay::App app;
if (app.m_isAnotherScreenPlayInstanceRunning) {

View File

@ -90,12 +90,18 @@ ApplicationWindow {
pageLoaderWorkshop.visible = false
pageLoaderCreate.setSource("qrc:/qml/Create/Create.qml")
} else if (name === "Workshop") {
if (ScreenPlay.settings.steamVersion) {
pageLoader.visible = false
pageLoaderCreate.visible = false
pageLoaderWorkshop.visible = true
pageLoaderWorkshop.setSource("qrc:/qml/Workshop/Workshop.qml")
if (!ScreenPlay.settings.steamVersion) {
const steamAvialable = ScreenPlay.loadSteamPlugin()
if (!steamAvialable) {
dialogSteam.open()
switchPage("Installed")
return
}
}
pageLoader.visible = false
pageLoaderCreate.visible = false
pageLoaderWorkshop.visible = true
pageLoaderWorkshop.setSource("qrc:/qml/Workshop/Workshop.qml")
} else if (name === "Community") {
pageLoader.visible = true
pageLoaderCreate.visible = false
@ -111,8 +117,59 @@ ApplicationWindow {
sidebar.state = "inactive"
}
Dialog {
id: dialogSteam
modal: true
anchors.centerIn: Overlay.overlay
standardButtons: Dialog.Ok
title: qsTr("Could not load steam integration!")
}
Dialog {
id: dialogMonitorConfigurationChanged
modal: true
anchors.centerIn: Overlay.overlay
standardButtons: Dialog.Ok
contentHeight: 250
contentItem: Item {
ColumnLayout {
anchors.margins: 20
anchors.fill: parent
spacing: 20
Image {
Layout.alignment: Qt.AlignHCenter
Layout.preferredWidth: 150
Layout.preferredHeight: 150
source: "qrc:/assets/icons/monitor_setup.svg"
fillMode: Image.PreserveAspectFit
}
Text {
text: qsTr("Your monitor setup changed!\n Please configure your wallpaper again.")
Layout.fillWidth: true
Layout.fillHeight: true
wrapMode: Text.WrapAtWordBoundaryOrAnywhere
horizontalAlignment: Text.AlignHCenter
font.family: ScreenPlay.settings.font
font.pointSize: 16
color: Material.primaryTextColor
}
}
}
Connections {
target: ScreenPlay.monitorListModel
function onMonitorConfigurationChanged() {
dialogMonitorConfigurationChanged.open()
}
}
}
Common.TrayIcon {}
Loader {
id: pageLoader
asynchronous: true

View File

@ -10,7 +10,7 @@ import ScreenPlay.Enums.InstalledType 1.0
import ScreenPlay.Enums.SearchType 1.0
Item {
id: pageInstalled
id: root
signal setNavigationItem(var pos)
signal setSidebarActive(var active)
@ -81,7 +81,7 @@ Item {
cellWidth: 340
cellHeight: 200
cacheBuffer: 160
interactive: pageInstalled.enabled
interactive: root.enabled
snapMode: GridView.SnapToRow
anchors {
topMargin: 0
@ -191,8 +191,14 @@ Item {
contextMenu.workshopID = delegate.workshopID
contextMenu.absoluteStoragePath = delegate.absoluteStoragePath
const pos = delegate.mapToItem(pageInstalled, position.x,
position.y)
deleteDialog.currentItemIndex = itemIndex
const pos = delegate.mapToItem(root, position.x, position.y)
// Disable duplicate opening. The can happen if we
// call popup when we are in the closing animtion.
if (contextMenu.visible || contextMenu.opened)
return
contextMenu.popup(pos.x, pos.y)
}
@ -206,6 +212,7 @@ Item {
id: contextMenu
property int workshopID: 0
property url absoluteStoragePath
MenuItem {
text: qsTr("Open containing folder")
icon.source: "qrc:/assets/icons/icon_folder_open.svg"
@ -235,14 +242,15 @@ Item {
}
Dialog {
id: deleteDialog
title: "Are you sure you want to delete this item?"
title: qsTr("Are you sure you want to delete this item?")
standardButtons: Dialog.Ok | Dialog.Cancel
modal: true
dim: true
anchors.centerIn: Overlay.overlay
property int currentItemIndex: 0
onAccepted: ScreenPlay.installedListModel.deinstallItemAt(
screenPlayItem.itemIndex)
currentItemIndex)
}
Navigation {

View File

@ -85,7 +85,6 @@ Rectangle {
id: navWorkshop
state: "inactive"
name: "Workshop"
enabled: ScreenPlay.settings.steamVersion
iconSource: "qrc:/assets/icons/icon_steam.svg"
onPageClicked: navigation.onPageChanged(name)
}

View File

@ -234,7 +234,7 @@ void Create::createWallpaperStart(QString videoPath, Create::VideoCodec codec)
codecs.append("vp9");
}
m_createImportVideoThread = new QThread();
m_createImportVideoThread = new QThread(this);
m_createImportVideo = new CreateImportVideo(videoPath, workingDir(), codecs);
connect(m_createImportVideo, &CreateImportVideo::processOutput, this, [this](QString text) {
appendFfmpegOutput(text + "\n");
@ -328,7 +328,7 @@ void Create::saveWallpaper(QString title, QString description, QString filePath,
obj.insert("type", "videoWallpaper");
QJsonArray tagsJsonArray;
for (const QString &tmp : tags) {
for (const QString& tmp : tags) {
tagsJsonArray.append(tmp);
}
obj.insert("tags", tagsJsonArray);

View File

@ -60,10 +60,6 @@ class CreateImportVideo : public QObject {
public:
CreateImportVideo() { }
~CreateImportVideo()
{
qDebug() << "CreateImportVideo";
}
CreateImportVideo(QObject* parent = nullptr);
explicit CreateImportVideo(const QString& videoPath, const QString& exportPath, const QStringList& codecs, QObject* parent = nullptr);

View File

@ -96,7 +96,7 @@ public:
}
public slots:
QVariantMap get(const QString &folderId) const;
QVariantMap get(const QString& folderId) const;
void loadInstalledContent();
void append(const QJsonObject&, const QString&);

View File

@ -148,7 +148,7 @@ void MonitorListModel::loadMonitors()
}
}
beginInsertRows(QModelIndex(), 0, rowCount());
QModelIndex index;
for (int i = 0; i < QApplication::screens().count(); i++) {
QScreen* screen = QApplication::screens().at(i);
@ -161,9 +161,11 @@ void MonitorListModel::loadMonitors()
screen->geometry().y() + offsetY,
screen->geometry().width(),
screen->geometry().height());
beginInsertRows(index, m_monitorList.size(), m_monitorList.size());
m_monitorList.append(Monitor { i, availableVirtualGeometry, screen });
endInsertRows();
}
endInsertRows();
emit monitorReloadCompleted();
}
@ -216,7 +218,7 @@ void MonitorListModel::closeWallpaper(const QString& appID)
*/
QRect MonitorListModel::getAbsoluteDesktopSize() const
{
auto* app = static_cast<QApplication*>(QApplication::instance());
auto* app = static_cast<QApplication*>(QGuiApplication::instance());
return app->screens().at(0)->availableVirtualGeometry();
}

View File

@ -117,13 +117,11 @@ public slots:
void screenAdded(QScreen* screen)
{
qDebug() << "screenAdded" << screen->geometry() << m_monitorList.size();
emit monitorConfigurationChanged();
reset();
}
void screenRemoved(QScreen* screen)
{
qDebug() << "screenRemoved" << screen->geometry() << m_monitorList.size();
emit monitorConfigurationChanged();
reset();
}

View File

@ -37,7 +37,6 @@
#include <QString>
#include <QUrl>
namespace ScreenPlay {
/*!
@ -49,7 +48,7 @@ namespace ScreenPlay {
*/
struct Profile {
Profile() {}
Profile() { }
Profile(const QUrl& absolutePath,
const QString& id,
const QString& version,

View File

@ -60,7 +60,7 @@ public:
QVariant m_value;
virtual QJsonObject getItemSettings() = 0;
public slots:
virtual void setData(const QJsonObject& obj){}
virtual void setData(const QJsonObject& obj) { }
};
struct SliderItem : public IListItem {

View File

@ -1,5 +1,6 @@
#include "screenplaymanager.h"
#include <QScopeGuard>
#include <doctest/doctest.h>
namespace ScreenPlay {
@ -18,7 +19,6 @@ namespace ScreenPlay {
ScreenPlayManager::ScreenPlayManager(
QObject* parent)
: QObject { parent }
, m_server { std::make_unique<QLocalServer>() }
{
@ -280,14 +280,13 @@ bool ScreenPlayManager::removeWallpaperAt(int index)
return false;
}
bool ScreenPlayManager::removeApp(const QString &appID)
bool ScreenPlayManager::removeApp(const QString& appID)
{
emit requestSaveProfiles();
if (!closeConnection(appID)) {
qWarning() << "Could not close socket. Abort!";
return false;
}
m_monitorListModel->closeWallpaper(appID);
const QString appIDCopy = appID;
@ -389,7 +388,11 @@ void ScreenPlayManager::newConnection()
*/
void ScreenPlayManager::closeAllWallpapers()
{
if(m_screenPlayWallpapers.empty() && m_activeWallpaperCounter == 0)
return;
closeConntectionByType(GlobalVariables::getAvailableWallpaper());
setActiveWallpaperCounter(0);
}
/*!
@ -402,20 +405,29 @@ void ScreenPlayManager::closeAllWallpapers()
*/
void ScreenPlayManager::closeAllWidgets()
{
if(m_screenPlayWidgets.empty() && m_activeWidgetsCounter == 0)
return;
closeConntectionByType(GlobalVariables::getAvailableWidgets());
setActiveWidgetsCounter(0);
}
/*!
\brief Closes a connection by type. Used only by closeAllWidgets() and closeAllWallpapers()
*/
void ScreenPlayManager::closeConntectionByType(const QStringList& types)
bool ScreenPlayManager::closeConntectionByType(const QStringList& types)
{
if (m_clients.isEmpty())
return true;
for (auto& client : m_clients) {
if (types.contains(client->type(), Qt::CaseInsensitive)) {
client->close();
m_clients.removeOne(client);
return m_clients.removeOne(client);
}
}
return false;
}
/*!
@ -423,6 +435,9 @@ void ScreenPlayManager::closeConntectionByType(const QStringList& types)
*/
bool ScreenPlayManager::closeConnection(const QString& appID)
{
if (m_clients.isEmpty())
return true;
for (auto& client : m_clients) {
if (client->appID() == appID) {
client->close();
@ -502,7 +517,6 @@ bool ScreenPlayManager::removeWallpaperByAppID(const QString& appID)
*/
void ScreenPlayManager::loadProfiles()
{
auto configObj = Util::openJsonFileToObject(m_globalVariables->localSettingsPath().toString() + "/profiles.json");
if (!configObj) {
@ -593,4 +607,10 @@ void ScreenPlayManager::loadProfiles()
}
}
TEST_CASE("Loads profiles.json")
{
GlobalVariables globalVariables;
ScreenPlayManager manager;
}
}

View File

@ -95,6 +95,8 @@ signals:
void requestRaise();
void profilesSaved();
void monitorConfigurationChanged();
private slots:
void saveProfiles();
@ -133,7 +135,7 @@ public slots:
void newConnection();
void closeAllWallpapers();
void closeAllWidgets();
void closeConntectionByType(const QStringList& types);
bool closeConntectionByType(const QStringList& types);
bool closeConnection(const QString& appID);
void setWallpaperValue(const QString& appID, const QString& key, const QString& value);

View File

@ -248,6 +248,30 @@ public slots:
setqSetting("HighPriorityStart", highPriorityStart);
const QString app = "'" + QGuiApplication::applicationDirPath() + "/WindowsServiceHelper.exe" + "'";
QStringList args { "-Command", QString("Start-Process %1 -Verb runAs").arg(app), "-ArgumentList" };
// Because we must use powershell, we need to add an extra 'var' and ,
auto appendAsString = [&](const QString& string, const bool isLast = false) {
QString arg = "'" + string + "'";
if (!isLast)
arg += ",";
args.append(arg);
};
appendAsString("--t");
appendAsString("create");
appendAsString("--sn");
appendAsString("ScreenPlayService");
appendAsString("--dn");
appendAsString("ScreenPlayService");
appendAsString("--a");
appendAsString(QVariant(highPriorityStart).toString(), true);
QProcess process;
process.start(QStringLiteral("powershell"), args);
process.waitForFinished(5000);
m_highPriorityStart = highPriorityStart;
emit highPriorityStartChanged(m_highPriorityStart);
}
@ -383,7 +407,7 @@ private:
const std::shared_ptr<GlobalVariables>& m_globalVariables;
bool m_autostart { true };
bool m_highPriorityStart { true };
bool m_highPriorityStart { false };
bool m_offlineMode { true };
bool m_checkWallpaperVisible { false };
bool m_silentStart { false };

View File

@ -168,13 +168,34 @@ QString Util::toString(const QStringList& list)
return out;
}
void Util::appendToMetricsFile(const QString& key, const QVariant& value)
{
if (!QGuiApplication::arguments().contains("--benchmark"))
return;
const QString appDir = QGuiApplication::applicationDirPath();
QFile metricsFile { appDir + "/metrics.txt" };
if (!metricsFile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) {
qWarning() << "Cannot open metrix file:" << appDir << metricsFile.fileName();
return;
}
QString text = key + "\t" + value.toString() + "\n";
QTextStream out(&metricsFile);
out << text;
metricsFile.flush();
metricsFile.close();
}
/*!
\brief Parses a QByteArray to a QJsonObject. If returns and std::nullopt on failure.
*/
std::optional<QJsonObject> Util::parseQByteArrayToQJsonObject(const QByteArray& byteArray)
{
QJsonObject obj;
QJsonParseError err;
QJsonParseError err {};
QJsonDocument doc = QJsonDocument::fromJson(byteArray, &err);
if (err.error == QJsonParseError::NoError) {

View File

@ -59,7 +59,6 @@
#include "globalvariables.h"
namespace ScreenPlay {
template <typename T>
@ -114,6 +113,7 @@ public slots:
static std::optional<QVersionNumber> getVersionNumberFromString(const QString& str);
static bool writeJsonObjectToFile(const QString& absoluteFilePath, const QJsonObject& object, bool truncate = true);
static QString toString(const QStringList& list);
static void appendToMetricsFile(const QString& key, const QVariant& value);
static void logToGui(QtMsgType type, const QMessageLogContext& context, const QString& msg);
static QString generateRandomString(quint32 length = 32);
@ -144,7 +144,6 @@ public slots:
emit debugMessagesChanged(m_debugMessages);
}
private:
QNetworkAccessManager* m_networkAccessManager { nullptr };

View File

@ -747,20 +747,25 @@ wenn Sie ScreenPlay über Steam! installiert haben
<translation type="unfinished">Holen dir mehr Wallpaper und Widgets über den Steam-Workshop!</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="210"/>
<location filename="../qml/Installed/Installed.qml" line="217"/>
<source>Open containing folder</source>
<translation type="unfinished">Enthaltenden Ordner öffnen</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="218"/>
<location filename="../qml/Installed/Installed.qml" line="225"/>
<source>Deinstall Item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="227"/>
<location filename="../qml/Installed/Installed.qml" line="234"/>
<source>Open workshop Page</source>
<translation type="unfinished">Workshop-Seite öffnen</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="245"/>
<source>Are you sure you want to delete this item?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="obsolete">Alles</translation>
@ -1289,52 +1294,52 @@ wenn Sie ScreenPlay über Steam! installiert haben
<translation type="obsolete">Wallpaper erstellen</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source>Project size: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source> MB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="95"/>
<location filename="../qml/Workshop/Sidebar.qml" line="97"/>
<source>No description...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="237"/>
<location filename="../qml/Workshop/Sidebar.qml" line="239"/>
<source>Click here if you like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="251"/>
<location filename="../qml/Workshop/Sidebar.qml" line="253"/>
<source>Click here if you do not like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="286"/>
<location filename="../qml/Workshop/Sidebar.qml" line="288"/>
<source>Tags: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="311"/>
<location filename="../qml/Workshop/Sidebar.qml" line="313"/>
<source>Subscribtions: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="317"/>
<location filename="../qml/Workshop/Sidebar.qml" line="319"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribe</source>
<translation type="unfinished"></translation>
</message>
@ -2029,82 +2034,82 @@ wenn Sie ScreenPlay über Steam! installiert haben
<context>
<name>Workshop</name>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="151"/>
<location filename="../qml/Workshop/Workshop.qml" line="133"/>
<source>Loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="162"/>
<location filename="../qml/Workshop/Workshop.qml" line="144"/>
<source>Download now!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="167"/>
<location filename="../qml/Workshop/Workshop.qml" line="149"/>
<source>Downloading...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="174"/>
<location filename="../qml/Workshop/Workshop.qml" line="156"/>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="198"/>
<location filename="../qml/Workshop/Workshop.qml" line="178"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="260"/>
<location filename="../qml/Workshop/Workshop.qml" line="252"/>
<source>Search for Wallpaper and Widgets...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="296"/>
<location filename="../qml/Workshop/Workshop.qml" line="288"/>
<source>Ranked By Vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="299"/>
<location filename="../qml/Workshop/Workshop.qml" line="291"/>
<source>Publication Date</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="302"/>
<location filename="../qml/Workshop/Workshop.qml" line="294"/>
<source>Ranked By Trend</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="305"/>
<location filename="../qml/Workshop/Workshop.qml" line="297"/>
<source>Favorited By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="308"/>
<location filename="../qml/Workshop/Workshop.qml" line="300"/>
<source>Created By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="311"/>
<location filename="../qml/Workshop/Workshop.qml" line="303"/>
<source>Created By Followed Users</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="314"/>
<location filename="../qml/Workshop/Workshop.qml" line="306"/>
<source>Not Yet Rated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="317"/>
<location filename="../qml/Workshop/Workshop.qml" line="309"/>
<source>Total VotesAsc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="320"/>
<location filename="../qml/Workshop/Workshop.qml" line="312"/>
<source>Votes Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="323"/>
<location filename="../qml/Workshop/Workshop.qml" line="315"/>
<source>Total Unique Subscriptions</source>
<translation type="unfinished"></translation>
</message>
@ -2112,17 +2117,17 @@ wenn Sie ScreenPlay über Steam! installiert haben
<context>
<name>WorkshopItem</name>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="185"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="184"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="303"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="302"/>
<source>Successfully subscribed to Workshop Item!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="413"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="412"/>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>

View File

@ -501,20 +501,25 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="210"/>
<location filename="../qml/Installed/Installed.qml" line="217"/>
<source>Open containing folder</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="218"/>
<location filename="../qml/Installed/Installed.qml" line="225"/>
<source>Deinstall Item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="227"/>
<location filename="../qml/Installed/Installed.qml" line="234"/>
<source>Open workshop Page</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="245"/>
<source>Are you sure you want to delete this item?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="329"/>
<source></source>
@ -984,52 +989,52 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source>Project size: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source> MB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="95"/>
<location filename="../qml/Workshop/Sidebar.qml" line="97"/>
<source>No description...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="237"/>
<location filename="../qml/Workshop/Sidebar.qml" line="239"/>
<source>Click here if you like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="251"/>
<location filename="../qml/Workshop/Sidebar.qml" line="253"/>
<source>Click here if you do not like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="286"/>
<location filename="../qml/Workshop/Sidebar.qml" line="288"/>
<source>Tags: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="311"/>
<location filename="../qml/Workshop/Sidebar.qml" line="313"/>
<source>Subscribtions: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="317"/>
<location filename="../qml/Workshop/Sidebar.qml" line="319"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribe</source>
<translation type="unfinished"></translation>
</message>
@ -1724,82 +1729,82 @@
<context>
<name>Workshop</name>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="151"/>
<location filename="../qml/Workshop/Workshop.qml" line="133"/>
<source>Loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="162"/>
<location filename="../qml/Workshop/Workshop.qml" line="144"/>
<source>Download now!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="167"/>
<location filename="../qml/Workshop/Workshop.qml" line="149"/>
<source>Downloading...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="174"/>
<location filename="../qml/Workshop/Workshop.qml" line="156"/>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="198"/>
<location filename="../qml/Workshop/Workshop.qml" line="178"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="260"/>
<location filename="../qml/Workshop/Workshop.qml" line="252"/>
<source>Search for Wallpaper and Widgets...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="296"/>
<location filename="../qml/Workshop/Workshop.qml" line="288"/>
<source>Ranked By Vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="299"/>
<location filename="../qml/Workshop/Workshop.qml" line="291"/>
<source>Publication Date</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="302"/>
<location filename="../qml/Workshop/Workshop.qml" line="294"/>
<source>Ranked By Trend</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="305"/>
<location filename="../qml/Workshop/Workshop.qml" line="297"/>
<source>Favorited By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="308"/>
<location filename="../qml/Workshop/Workshop.qml" line="300"/>
<source>Created By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="311"/>
<location filename="../qml/Workshop/Workshop.qml" line="303"/>
<source>Created By Followed Users</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="314"/>
<location filename="../qml/Workshop/Workshop.qml" line="306"/>
<source>Not Yet Rated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="317"/>
<location filename="../qml/Workshop/Workshop.qml" line="309"/>
<source>Total VotesAsc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="320"/>
<location filename="../qml/Workshop/Workshop.qml" line="312"/>
<source>Votes Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="323"/>
<location filename="../qml/Workshop/Workshop.qml" line="315"/>
<source>Total Unique Subscriptions</source>
<translation type="unfinished"></translation>
</message>
@ -1807,17 +1812,17 @@
<context>
<name>WorkshopItem</name>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="185"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="184"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="303"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="302"/>
<source>Successfully subscribed to Workshop Item!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="413"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="412"/>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>

View File

@ -743,20 +743,25 @@ si instaló ScreenPlay vía Steam!
<translation type="unfinished">Consiga más fondos de pantalla y widgets a través del taller Steam!</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="210"/>
<location filename="../qml/Installed/Installed.qml" line="217"/>
<source>Open containing folder</source>
<translation type="unfinished">Abrir la carpeta que contiene</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="218"/>
<location filename="../qml/Installed/Installed.qml" line="225"/>
<source>Deinstall Item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="227"/>
<location filename="../qml/Installed/Installed.qml" line="234"/>
<source>Open workshop Page</source>
<translation type="unfinished">Taller abierto Página</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="245"/>
<source>Are you sure you want to delete this item?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="obsolete">Todos</translation>
@ -1285,52 +1290,52 @@ si instaló ScreenPlay vía Steam!
<translation type="obsolete">Crear un wallpaper</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source>Project size: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source> MB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="95"/>
<location filename="../qml/Workshop/Sidebar.qml" line="97"/>
<source>No description...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="237"/>
<location filename="../qml/Workshop/Sidebar.qml" line="239"/>
<source>Click here if you like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="251"/>
<location filename="../qml/Workshop/Sidebar.qml" line="253"/>
<source>Click here if you do not like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="286"/>
<location filename="../qml/Workshop/Sidebar.qml" line="288"/>
<source>Tags: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="311"/>
<location filename="../qml/Workshop/Sidebar.qml" line="313"/>
<source>Subscribtions: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="317"/>
<location filename="../qml/Workshop/Sidebar.qml" line="319"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribe</source>
<translation type="unfinished"></translation>
</message>
@ -2025,82 +2030,82 @@ si instaló ScreenPlay vía Steam!
<context>
<name>Workshop</name>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="151"/>
<location filename="../qml/Workshop/Workshop.qml" line="133"/>
<source>Loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="162"/>
<location filename="../qml/Workshop/Workshop.qml" line="144"/>
<source>Download now!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="167"/>
<location filename="../qml/Workshop/Workshop.qml" line="149"/>
<source>Downloading...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="174"/>
<location filename="../qml/Workshop/Workshop.qml" line="156"/>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="198"/>
<location filename="../qml/Workshop/Workshop.qml" line="178"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="260"/>
<location filename="../qml/Workshop/Workshop.qml" line="252"/>
<source>Search for Wallpaper and Widgets...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="296"/>
<location filename="../qml/Workshop/Workshop.qml" line="288"/>
<source>Ranked By Vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="299"/>
<location filename="../qml/Workshop/Workshop.qml" line="291"/>
<source>Publication Date</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="302"/>
<location filename="../qml/Workshop/Workshop.qml" line="294"/>
<source>Ranked By Trend</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="305"/>
<location filename="../qml/Workshop/Workshop.qml" line="297"/>
<source>Favorited By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="308"/>
<location filename="../qml/Workshop/Workshop.qml" line="300"/>
<source>Created By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="311"/>
<location filename="../qml/Workshop/Workshop.qml" line="303"/>
<source>Created By Followed Users</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="314"/>
<location filename="../qml/Workshop/Workshop.qml" line="306"/>
<source>Not Yet Rated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="317"/>
<location filename="../qml/Workshop/Workshop.qml" line="309"/>
<source>Total VotesAsc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="320"/>
<location filename="../qml/Workshop/Workshop.qml" line="312"/>
<source>Votes Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="323"/>
<location filename="../qml/Workshop/Workshop.qml" line="315"/>
<source>Total Unique Subscriptions</source>
<translation type="unfinished"></translation>
</message>
@ -2108,17 +2113,17 @@ si instaló ScreenPlay vía Steam!
<context>
<name>WorkshopItem</name>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="185"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="184"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="303"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="302"/>
<source>Successfully subscribed to Workshop Item!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="413"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="412"/>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>

View File

@ -741,20 +741,25 @@ si vous avez installé ScreenPlay via Steam !
<translation type="unfinished">Obtenez plus de Wallpaper &amp; Widgets via l&apos;atelier Steam!</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="210"/>
<location filename="../qml/Installed/Installed.qml" line="217"/>
<source>Open containing folder</source>
<translation type="unfinished">Ouvrir le dossier contenant</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="218"/>
<location filename="../qml/Installed/Installed.qml" line="225"/>
<source>Deinstall Item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="227"/>
<location filename="../qml/Installed/Installed.qml" line="234"/>
<source>Open workshop Page</source>
<translation type="unfinished">Ouvrir la page de l&apos;atelier</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="245"/>
<source>Are you sure you want to delete this item?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="obsolete">Tout</translation>
@ -1287,52 +1292,52 @@ si vous avez installé ScreenPlay via Steam !
<translation type="obsolete">Créer un wallpaper</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source>Project size: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source> MB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="95"/>
<location filename="../qml/Workshop/Sidebar.qml" line="97"/>
<source>No description...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="237"/>
<location filename="../qml/Workshop/Sidebar.qml" line="239"/>
<source>Click here if you like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="251"/>
<location filename="../qml/Workshop/Sidebar.qml" line="253"/>
<source>Click here if you do not like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="286"/>
<location filename="../qml/Workshop/Sidebar.qml" line="288"/>
<source>Tags: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="311"/>
<location filename="../qml/Workshop/Sidebar.qml" line="313"/>
<source>Subscribtions: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="317"/>
<location filename="../qml/Workshop/Sidebar.qml" line="319"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribe</source>
<translation type="unfinished"></translation>
</message>
@ -2027,82 +2032,82 @@ si vous avez installé ScreenPlay via Steam !
<context>
<name>Workshop</name>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="151"/>
<location filename="../qml/Workshop/Workshop.qml" line="133"/>
<source>Loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="162"/>
<location filename="../qml/Workshop/Workshop.qml" line="144"/>
<source>Download now!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="167"/>
<location filename="../qml/Workshop/Workshop.qml" line="149"/>
<source>Downloading...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="174"/>
<location filename="../qml/Workshop/Workshop.qml" line="156"/>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="198"/>
<location filename="../qml/Workshop/Workshop.qml" line="178"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="260"/>
<location filename="../qml/Workshop/Workshop.qml" line="252"/>
<source>Search for Wallpaper and Widgets...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="296"/>
<location filename="../qml/Workshop/Workshop.qml" line="288"/>
<source>Ranked By Vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="299"/>
<location filename="../qml/Workshop/Workshop.qml" line="291"/>
<source>Publication Date</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="302"/>
<location filename="../qml/Workshop/Workshop.qml" line="294"/>
<source>Ranked By Trend</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="305"/>
<location filename="../qml/Workshop/Workshop.qml" line="297"/>
<source>Favorited By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="308"/>
<location filename="../qml/Workshop/Workshop.qml" line="300"/>
<source>Created By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="311"/>
<location filename="../qml/Workshop/Workshop.qml" line="303"/>
<source>Created By Followed Users</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="314"/>
<location filename="../qml/Workshop/Workshop.qml" line="306"/>
<source>Not Yet Rated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="317"/>
<location filename="../qml/Workshop/Workshop.qml" line="309"/>
<source>Total VotesAsc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="320"/>
<location filename="../qml/Workshop/Workshop.qml" line="312"/>
<source>Votes Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="323"/>
<location filename="../qml/Workshop/Workshop.qml" line="315"/>
<source>Total Unique Subscriptions</source>
<translation type="unfinished"></translation>
</message>
@ -2110,17 +2115,17 @@ si vous avez installé ScreenPlay via Steam !
<context>
<name>WorkshopItem</name>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="185"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="184"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="303"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="302"/>
<source>Successfully subscribed to Workshop Item!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="413"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="412"/>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>

View File

@ -668,20 +668,25 @@ Steam을 통해 설치하셨을때의 기본 위치입니다!
<translation> &amp; !</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="210"/>
<location filename="../qml/Installed/Installed.qml" line="217"/>
<source>Open containing folder</source>
<translation type="unfinished"> </translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="218"/>
<location filename="../qml/Installed/Installed.qml" line="225"/>
<source>Deinstall Item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="227"/>
<location filename="../qml/Installed/Installed.qml" line="234"/>
<source>Open workshop Page</source>
<translation type="unfinished"> </translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="245"/>
<source>Are you sure you want to delete this item?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="vanished"></translation>
@ -1210,52 +1215,52 @@ Steam을 통해 설치하셨을때의 기본 위치입니다!
<translation type="vanished"> </translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source>Project size: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source> MB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="95"/>
<location filename="../qml/Workshop/Sidebar.qml" line="97"/>
<source>No description...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="237"/>
<location filename="../qml/Workshop/Sidebar.qml" line="239"/>
<source>Click here if you like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="251"/>
<location filename="../qml/Workshop/Sidebar.qml" line="253"/>
<source>Click here if you do not like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="286"/>
<location filename="../qml/Workshop/Sidebar.qml" line="288"/>
<source>Tags: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="311"/>
<location filename="../qml/Workshop/Sidebar.qml" line="313"/>
<source>Subscribtions: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="317"/>
<location filename="../qml/Workshop/Sidebar.qml" line="319"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribe</source>
<translation type="unfinished"></translation>
</message>
@ -1950,82 +1955,82 @@ Steam을 통해 설치하셨을때의 기본 위치입니다!
<context>
<name>Workshop</name>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="151"/>
<location filename="../qml/Workshop/Workshop.qml" line="133"/>
<source>Loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="162"/>
<location filename="../qml/Workshop/Workshop.qml" line="144"/>
<source>Download now!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="167"/>
<location filename="../qml/Workshop/Workshop.qml" line="149"/>
<source>Downloading...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="174"/>
<location filename="../qml/Workshop/Workshop.qml" line="156"/>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="198"/>
<location filename="../qml/Workshop/Workshop.qml" line="178"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="260"/>
<location filename="../qml/Workshop/Workshop.qml" line="252"/>
<source>Search for Wallpaper and Widgets...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="296"/>
<location filename="../qml/Workshop/Workshop.qml" line="288"/>
<source>Ranked By Vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="299"/>
<location filename="../qml/Workshop/Workshop.qml" line="291"/>
<source>Publication Date</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="302"/>
<location filename="../qml/Workshop/Workshop.qml" line="294"/>
<source>Ranked By Trend</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="305"/>
<location filename="../qml/Workshop/Workshop.qml" line="297"/>
<source>Favorited By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="308"/>
<location filename="../qml/Workshop/Workshop.qml" line="300"/>
<source>Created By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="311"/>
<location filename="../qml/Workshop/Workshop.qml" line="303"/>
<source>Created By Followed Users</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="314"/>
<location filename="../qml/Workshop/Workshop.qml" line="306"/>
<source>Not Yet Rated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="317"/>
<location filename="../qml/Workshop/Workshop.qml" line="309"/>
<source>Total VotesAsc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="320"/>
<location filename="../qml/Workshop/Workshop.qml" line="312"/>
<source>Votes Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="323"/>
<location filename="../qml/Workshop/Workshop.qml" line="315"/>
<source>Total Unique Subscriptions</source>
<translation type="unfinished"></translation>
</message>
@ -2033,17 +2038,17 @@ Steam을 통해 설치하셨을때의 기본 위치입니다!
<context>
<name>WorkshopItem</name>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="185"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="184"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="303"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="302"/>
<source>Successfully subscribed to Workshop Item!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="413"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="412"/>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>

View File

@ -742,20 +742,25 @@ ms), но есть и некоторые проприетарные, такие
<translation type="unfinished">Получите больше обоев и виджетов через мастерскую Steam!</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="210"/>
<location filename="../qml/Installed/Installed.qml" line="217"/>
<source>Open containing folder</source>
<translation type="unfinished">Открыть содержащую папку</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="218"/>
<location filename="../qml/Installed/Installed.qml" line="225"/>
<source>Deinstall Item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="227"/>
<location filename="../qml/Installed/Installed.qml" line="234"/>
<source>Open workshop Page</source>
<translation type="unfinished">Открыть страницу мастерской</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="245"/>
<source>Are you sure you want to delete this item?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All</source>
<translation type="obsolete">Все</translation>
@ -1284,52 +1289,52 @@ ms), но есть и некоторые проприетарные, такие
<translation type="obsolete">Создать обои</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source>Project size: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source> MB</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="95"/>
<location filename="../qml/Workshop/Sidebar.qml" line="97"/>
<source>No description...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="237"/>
<location filename="../qml/Workshop/Sidebar.qml" line="239"/>
<source>Click here if you like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="251"/>
<location filename="../qml/Workshop/Sidebar.qml" line="253"/>
<source>Click here if you do not like the content</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="286"/>
<location filename="../qml/Workshop/Sidebar.qml" line="288"/>
<source>Tags: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="311"/>
<location filename="../qml/Workshop/Sidebar.qml" line="313"/>
<source>Subscribtions: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="317"/>
<location filename="../qml/Workshop/Sidebar.qml" line="319"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribe</source>
<translation type="unfinished"></translation>
</message>
@ -2024,82 +2029,82 @@ ms), но есть и некоторые проприетарные, такие
<context>
<name>Workshop</name>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="151"/>
<location filename="../qml/Workshop/Workshop.qml" line="133"/>
<source>Loading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="162"/>
<location filename="../qml/Workshop/Workshop.qml" line="144"/>
<source>Download now!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="167"/>
<location filename="../qml/Workshop/Workshop.qml" line="149"/>
<source>Downloading...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="174"/>
<location filename="../qml/Workshop/Workshop.qml" line="156"/>
<source>Details</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="198"/>
<location filename="../qml/Workshop/Workshop.qml" line="178"/>
<source>Open In Steam</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="260"/>
<location filename="../qml/Workshop/Workshop.qml" line="252"/>
<source>Search for Wallpaper and Widgets...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="296"/>
<location filename="../qml/Workshop/Workshop.qml" line="288"/>
<source>Ranked By Vote</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="299"/>
<location filename="../qml/Workshop/Workshop.qml" line="291"/>
<source>Publication Date</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="302"/>
<location filename="../qml/Workshop/Workshop.qml" line="294"/>
<source>Ranked By Trend</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="305"/>
<location filename="../qml/Workshop/Workshop.qml" line="297"/>
<source>Favorited By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="308"/>
<location filename="../qml/Workshop/Workshop.qml" line="300"/>
<source>Created By Friends</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="311"/>
<location filename="../qml/Workshop/Workshop.qml" line="303"/>
<source>Created By Followed Users</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="314"/>
<location filename="../qml/Workshop/Workshop.qml" line="306"/>
<source>Not Yet Rated</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="317"/>
<location filename="../qml/Workshop/Workshop.qml" line="309"/>
<source>Total VotesAsc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="320"/>
<location filename="../qml/Workshop/Workshop.qml" line="312"/>
<source>Votes Up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="323"/>
<location filename="../qml/Workshop/Workshop.qml" line="315"/>
<source>Total Unique Subscriptions</source>
<translation type="unfinished"></translation>
</message>
@ -2107,17 +2112,17 @@ ms), но есть и некоторые проприетарные, такие
<context>
<name>WorkshopItem</name>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="185"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="184"/>
<source>Download</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="303"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="302"/>
<source>Successfully subscribed to Workshop Item!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="413"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="412"/>
<source>Download complete!</source>
<translation type="unfinished"></translation>
</message>

View File

@ -504,20 +504,25 @@
<translation>Lấy thêm hình nền &amp; tiện ích con thông qua Steam Workshop!</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="210"/>
<location filename="../qml/Installed/Installed.qml" line="217"/>
<source>Open containing folder</source>
<translation>Mở thư mục chứa.</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="218"/>
<location filename="../qml/Installed/Installed.qml" line="225"/>
<source>Deinstall Item</source>
<translation>Gỡ bỏ</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="227"/>
<location filename="../qml/Installed/Installed.qml" line="234"/>
<source>Open workshop Page</source>
<translation>Mở trang Workshop</translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="245"/>
<source>Are you sure you want to delete this item?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="329"/>
<source></source>
@ -987,52 +992,52 @@
<translation>Chọn hình nền</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source>Project size: </source>
<translation>Kích thước dự án: </translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source> MB</source>
<translation>MB</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="95"/>
<location filename="../qml/Workshop/Sidebar.qml" line="97"/>
<source>No description...</source>
<translation>Không tả...</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="237"/>
<location filename="../qml/Workshop/Sidebar.qml" line="239"/>
<source>Click here if you like the content</source>
<translation>Bấm vào đây nếu bạn thích nội dung này</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="251"/>
<location filename="../qml/Workshop/Sidebar.qml" line="253"/>
<source>Click here if you do not like the content</source>
<translation>Bấm vào đây nếu bạn không thích nội dung này</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="286"/>
<location filename="../qml/Workshop/Sidebar.qml" line="288"/>
<source>Tags: </source>
<translation>Từ khóa:</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="311"/>
<location filename="../qml/Workshop/Sidebar.qml" line="313"/>
<source>Subscribtions: </source>
<translation>Đăng : </translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="317"/>
<location filename="../qml/Workshop/Sidebar.qml" line="319"/>
<source>Open In Steam</source>
<translation>Mở trên Steam</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribed!</source>
<translation>Đã đăng !</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribe</source>
<translation>Đăng </translation>
</message>
@ -1727,84 +1732,84 @@
<context>
<name>Workshop</name>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="151"/>
<location filename="../qml/Workshop/Workshop.qml" line="133"/>
<source>Loading</source>
<translation>Đang tải</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="162"/>
<location filename="../qml/Workshop/Workshop.qml" line="144"/>
<source>Download now!</source>
<translation>Tải xuống ngay!</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="167"/>
<location filename="../qml/Workshop/Workshop.qml" line="149"/>
<source>Downloading...</source>
<translation>Đang tải xuống...</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="174"/>
<location filename="../qml/Workshop/Workshop.qml" line="156"/>
<source>Details</source>
<translation>Chi tiết</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="198"/>
<location filename="../qml/Workshop/Workshop.qml" line="178"/>
<source>Open In Steam</source>
<translation>Mở trên Steam</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="260"/>
<location filename="../qml/Workshop/Workshop.qml" line="252"/>
<source>Search for Wallpaper and Widgets...</source>
<translation>Tìm hình nền &amp; cảnh...</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="296"/>
<location filename="../qml/Workshop/Workshop.qml" line="288"/>
<source>Ranked By Vote</source>
<translation>Xếp hạng bởi số phiếu.</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="299"/>
<location filename="../qml/Workshop/Workshop.qml" line="291"/>
<source>Publication Date</source>
<translation>Ngày tải lên</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="302"/>
<location filename="../qml/Workshop/Workshop.qml" line="294"/>
<source>Ranked By Trend</source>
<translation>Xếp hạng bởi trend</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="305"/>
<location filename="../qml/Workshop/Workshop.qml" line="297"/>
<source>Favorited By Friends</source>
<translation>Đưc yêu thích bởi bạn </translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="308"/>
<location filename="../qml/Workshop/Workshop.qml" line="300"/>
<source>Created By Friends</source>
<translation>Tạo bởi bạn </translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="311"/>
<location filename="../qml/Workshop/Workshop.qml" line="303"/>
<source>Created By Followed Users</source>
<translation>Tạo bởi người đã theo dỗi</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="314"/>
<location filename="../qml/Workshop/Workshop.qml" line="306"/>
<source>Not Yet Rated</source>
<translation>Chưa đưc xếp hạng</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="317"/>
<location filename="../qml/Workshop/Workshop.qml" line="309"/>
<source>Total VotesAsc</source>
<translatorcomment>????</translatorcomment>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="320"/>
<location filename="../qml/Workshop/Workshop.qml" line="312"/>
<source>Votes Up</source>
<translatorcomment>?????</translatorcomment>
<translation>Số phiếu đang lên cao</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="323"/>
<location filename="../qml/Workshop/Workshop.qml" line="315"/>
<source>Total Unique Subscriptions</source>
<translation>Tổng số đăng duy nhất</translation>
</message>
@ -1812,17 +1817,17 @@
<context>
<name>WorkshopItem</name>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="185"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="184"/>
<source>Download</source>
<translation>Tải xuống</translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="303"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="302"/>
<source>Successfully subscribed to Workshop Item!</source>
<translation>Đăng thành công mục Workshop!</translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="413"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="412"/>
<source>Download complete!</source>
<translation>Tải xuống thành công!</translation>
</message>

View File

@ -70,7 +70,7 @@
<message>
<location filename="../qml/Create/CreateContent.qml" line="65"/>
<source>Empty HTML Wallpaper</source>
<translation>HTML壁纸</translation>
<translation>HTML </translation>
</message>
<message>
<location filename="../qml/Create/CreateContent.qml" line="75"/>
@ -480,20 +480,25 @@
<translation></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="210"/>
<location filename="../qml/Installed/Installed.qml" line="217"/>
<source>Open containing folder</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="218"/>
<location filename="../qml/Installed/Installed.qml" line="225"/>
<source>Deinstall Item</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="227"/>
<location filename="../qml/Installed/Installed.qml" line="234"/>
<source>Open workshop Page</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Installed/Installed.qml" line="245"/>
<source>Are you sure you want to delete this item?</source>
<translation></translation>
</message>
</context>
<context>
<name>InstalledWelcomeScreen</name>
@ -723,7 +728,7 @@
<message>
<location filename="../qml/Settings/Settings.qml" line="171"/>
<source>Chinese - Simplified</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../qml/Settings/Settings.qml" line="174"/>
@ -843,7 +848,7 @@
<message>
<location filename="../qml/Settings/Settings.qml" line="419"/>
<source>ScreenPlay Build Version </source>
<translation>ScreenPlay编译版本</translation>
<translation>ScreenPlay编译版本 </translation>
</message>
<message>
<location filename="../qml/Settings/Settings.qml" line="421"/>
@ -858,7 +863,7 @@
<message>
<location filename="../qml/Settings/Settings.qml" line="429"/>
<source>ScreenPlay would not be possible without the work of others. A big thank you to: </source>
<translation>ScreenPlay的诞生离不开一些人的帮助</translation>
<translation>ScreenPlay离不开一些人的帮助</translation>
</message>
<message>
<location filename="../qml/Settings/Settings.qml" line="430"/>
@ -958,52 +963,52 @@
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source>Project size: </source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="89"/>
<location filename="../qml/Workshop/Sidebar.qml" line="91"/>
<source> MB</source>
<translation> </translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="95"/>
<location filename="../qml/Workshop/Sidebar.qml" line="97"/>
<source>No description...</source>
<translation>...</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="237"/>
<location filename="../qml/Workshop/Sidebar.qml" line="239"/>
<source>Click here if you like the content</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="251"/>
<location filename="../qml/Workshop/Sidebar.qml" line="253"/>
<source>Click here if you do not like the content</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="286"/>
<location filename="../qml/Workshop/Sidebar.qml" line="288"/>
<source>Tags: </source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="311"/>
<location filename="../qml/Workshop/Sidebar.qml" line="313"/>
<source>Subscribtions: </source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="317"/>
<location filename="../qml/Workshop/Sidebar.qml" line="319"/>
<source>Open In Steam</source>
<translation>Steam打开</translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribed!</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Sidebar.qml" line="360"/>
<location filename="../qml/Workshop/Sidebar.qml" line="362"/>
<source>Subscribe</source>
<translation></translation>
</message>
@ -1698,82 +1703,82 @@
<context>
<name>Workshop</name>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="151"/>
<location filename="../qml/Workshop/Workshop.qml" line="133"/>
<source>Loading</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="162"/>
<location filename="../qml/Workshop/Workshop.qml" line="144"/>
<source>Download now!</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="167"/>
<location filename="../qml/Workshop/Workshop.qml" line="149"/>
<source>Downloading...</source>
<translation>...</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="174"/>
<location filename="../qml/Workshop/Workshop.qml" line="156"/>
<source>Details</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="198"/>
<location filename="../qml/Workshop/Workshop.qml" line="178"/>
<source>Open In Steam</source>
<translation>Steam打开</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="260"/>
<location filename="../qml/Workshop/Workshop.qml" line="252"/>
<source>Search for Wallpaper and Widgets...</source>
<translation>...</translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="296"/>
<location filename="../qml/Workshop/Workshop.qml" line="288"/>
<source>Ranked By Vote</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="299"/>
<location filename="../qml/Workshop/Workshop.qml" line="291"/>
<source>Publication Date</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="302"/>
<location filename="../qml/Workshop/Workshop.qml" line="294"/>
<source>Ranked By Trend</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="305"/>
<location filename="../qml/Workshop/Workshop.qml" line="297"/>
<source>Favorited By Friends</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="308"/>
<location filename="../qml/Workshop/Workshop.qml" line="300"/>
<source>Created By Friends</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="311"/>
<location filename="../qml/Workshop/Workshop.qml" line="303"/>
<source>Created By Followed Users</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="314"/>
<location filename="../qml/Workshop/Workshop.qml" line="306"/>
<source>Not Yet Rated</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="317"/>
<location filename="../qml/Workshop/Workshop.qml" line="309"/>
<source>Total VotesAsc</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="320"/>
<location filename="../qml/Workshop/Workshop.qml" line="312"/>
<source>Votes Up</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/Workshop.qml" line="323"/>
<location filename="../qml/Workshop/Workshop.qml" line="315"/>
<source>Total Unique Subscriptions</source>
<translation></translation>
</message>
@ -1781,17 +1786,17 @@
<context>
<name>WorkshopItem</name>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="185"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="184"/>
<source>Download</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="303"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="302"/>
<source>Successfully subscribed to Workshop Item!</source>
<translation></translation>
</message>
<message>
<location filename="../qml/Workshop/WorkshopItem.qml" line="413"/>
<location filename="../qml/Workshop/WorkshopItem.qml" line="412"/>
<source>Download complete!</source>
<translation></translation>
</message>

View File

@ -1,32 +1,19 @@
project(ScreenPlaySDK LANGUAGES CXX)
project(ScreenPlaySDK LANGUAGES CXX)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOMOC ON)
find_package(
Qt5
COMPONENTS Quick
Network
Core
REQUIRED)
Qt5
COMPONENTS Quick Network Core
REQUIRED)
set(src src/screenplay-sdk_plugin.cpp
src/screenplaysdk.cpp)
set(src src/screenplay-sdk_plugin.cpp src/screenplaysdk.cpp)
set(headers
inc/screenplay-sdk_plugin.h
inc/screenplaysdk.h)
set(headers inc/screenplay-sdk_plugin.h inc/screenplaysdk.h)
add_library(${PROJECT_NAME} ${src} ${headers})
add_library(${PROJECT_NAME} ${src} ${headers})
target_link_libraries(${PROJECT_NAME}
PRIVATE
Qt5::Core
Qt5::Quick
Qt5::Gui
Qt5::Network)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Quick Qt5::Gui Qt5::Network)
target_include_directories(
${PROJECT_NAME}
PUBLIC inc
)
target_include_directories(${PROJECT_NAME} PUBLIC inc)

View File

@ -36,11 +36,10 @@
#include <QQmlExtensionPlugin>
class ScreenPlay_SDKPlugin : public QQmlExtensionPlugin
{
class ScreenPlay_SDKPlugin : public QQmlExtensionPlugin {
Q_OBJECT
Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
public:
void registerTypes(const char *uri);
void registerTypes(const char* uri);
};

View File

@ -3,9 +3,8 @@
#include <qqml.h>
void ScreenPlay_SDKPlugin::registerTypes(const char *uri)
void ScreenPlay_SDKPlugin::registerTypes(const char* uri)
{
// @uri ScreenPlay.screenplaysdk
qmlRegisterType<ScreenPlaySDK>(uri, 1, 0, "ScreenPlaySDK");
}

View File

@ -1,49 +1,31 @@
project(ScreenPlayShader LANGUAGES CXX)
project(ScreenPlayShader LANGUAGES CXX)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOMOC ON)
find_package(
Qt5
COMPONENTS Quick
Core
REQUIRED)
Qt5
COMPONENTS Quick Core
REQUIRED)
set(src
screenplayshader_plugin.cpp
shaderlibrary.cpp
)
set(src screenplayshader_plugin.cpp shaderlibrary.cpp)
set(headers
screenplayshader_plugin.h
shaderlibrary.h
)
set(headers screenplayshader_plugin.h shaderlibrary.h)
set(shader shader.qrc)
add_library(${PROJECT_NAME} SHARED ${src} ${headers} ${shader})
target_link_libraries(${PROJECT_NAME}
PRIVATE
Qt5::Core
Qt5::Quick
Qt5::Gui)
target_include_directories(
${PROJECT_NAME}
PUBLIC inc
)
add_library(${PROJECT_NAME} SHARED ${src} ${headers} ${shader})
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Quick Qt5::Gui)
target_include_directories(${PROJECT_NAME} PUBLIC inc)
# QML module deployment
set(URI "ScreenPlay/Shader")
string(REPLACE "." "/" TARGETPATH ${URI})
if (NOT DEFINED QT_QMAKE_EXECUTABLE)
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
if (NOT QT_QMAKE_EXECUTABLE)
if(NOT DEFINED QT_QMAKE_EXECUTABLE)
get_target_property(QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
if(NOT QT_QMAKE_EXECUTABLE)
message(FATAL_ERROR "Cannot find qmake")
endif()
endif()
@ -57,10 +39,8 @@ file(MAKE_DIRECTORY ${DESTDIR})
configure_file(qmldir ${DESTDIR} COPYONLY)
# Copies ScreenPlayShader.* into qt qml plugins folder
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:ScreenPlayShader>
${DESTDIR}/$<TARGET_FILE_NAME:ScreenPlayShader>)
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:ScreenPlayShader> ${DESTDIR}/$<TARGET_FILE_NAME:ScreenPlayShader>)

View File

@ -13,6 +13,6 @@ QObject* ScreenPlayShaderLibrarySingleton(QQmlEngine* engine, QJSEngine* scriptE
void ScreenPlayShaderPlugin::registerTypes(const char* uri)
{
qmlRegisterType(QUrl("qrc:/ShaderWrapper/ShadertoyShader.qml"), "ScreenPlay.ShadertoyShader", 1,0, "ShadertoyShader");
qmlRegisterType(QUrl("qrc:/ShaderWrapper/ShadertoyShader.qml"), "ScreenPlay.ShadertoyShader", 1, 0, "ShadertoyShader");
qmlRegisterSingletonType<ShaderLibrary>(uri, 1, 0, "ShaderLibrary", ScreenPlayShaderLibrarySingleton);
}

View File

@ -19,4 +19,3 @@ ShaderLibrary::ShaderLibrary(QQuickItem* parent)
ShaderLibrary::~ShaderLibrary()
{
}

View File

@ -1,42 +1,26 @@
project(ScreenPlaySysInfo LANGUAGES CXX)
project(ScreenPlaySysInfo LANGUAGES CXX)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOMOC ON)
find_package(
Qt5
COMPONENTS Quick
Core
REQUIRED)
Qt5
COMPONENTS Quick Core
REQUIRED)
set(src screenplaysysinfo_plugin.cpp sysinfo.cpp cpu.cpp ram.cpp storage.cpp)
set(headers screenplaysysinfo_plugin.h sysinfo.h cpu.h ram.h mathhelper.h storage.h)
set(src screenplaysysinfo_plugin.cpp
sysinfo.cpp
cpu.cpp
ram.cpp
storage.cpp)
set(headers screenplaysysinfo_plugin.h
sysinfo.h
cpu.h
ram.h
mathhelper.h
storage.h)
add_library(${PROJECT_NAME} SHARED ${src} ${headers})
target_link_libraries(${PROJECT_NAME}
PRIVATE
Qt5::Core
Qt5::Quick)
add_library(${PROJECT_NAME} SHARED ${src} ${headers})
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Quick)
# QML module deployment
set(URI "ScreenPlay/Sysinfo")
string(REPLACE "." "/" TARGETPATH ${URI})
if (NOT DEFINED QT_QMAKE_EXECUTABLE)
get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
if (NOT QT_QMAKE_EXECUTABLE)
if(NOT DEFINED QT_QMAKE_EXECUTABLE)
get_target_property(QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
if(NOT QT_QMAKE_EXECUTABLE)
message(FATAL_ERROR "Cannot find qmake")
endif()
endif()
@ -50,10 +34,8 @@ file(MAKE_DIRECTORY ${DESTDIR})
configure_file(qmldir ${DESTDIR} COPYONLY)
# Copies ScreenPlaySysInfo.* into qt qml plugins folder
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:ScreenPlaySysInfo>
${DESTDIR}/$<TARGET_FILE_NAME:ScreenPlaySysInfo>)
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:ScreenPlaySysInfo> ${DESTDIR}/$<TARGET_FILE_NAME:ScreenPlaySysInfo>)

View File

@ -1,17 +1,17 @@
#include "cpu.h"
#include <QtQml/qqml.h>
#include "mathhelper.h"
#include <QtQml/qqml.h>
#define STATUS_SUCCESS 0
#define STATUS_INFO_LENGTH_MISMATCH 0xC0000004
#define STATUS_SUCCESS 0
#define STATUS_INFO_LENGTH_MISMATCH 0xC0000004
CPU::CPU(QObject *parent) : QObject(parent)
CPU::CPU(QObject* parent)
: QObject(parent)
{
connect(&m_updateTimer,&QTimer::timeout,this,&CPU::update);
connect(&m_updateTimer, &QTimer::timeout, this, &CPU::update);
m_updateTimer.start(m_tickRate);
}
void CPU::update()
{
BOOL status;
@ -19,7 +19,8 @@ void CPU::update()
// get new CPU's idle/kernel/user time
status = GetSystemTimes(&ftIdleTime, &ftKernelTime, &ftUserTime);
if (status == 0) return;
if (status == 0)
return;
//convert times to uint by appending low and high bits
uint64_t newIdleTime = FileTimeToInt64(ftIdleTime);

View File

@ -34,10 +34,10 @@
#pragma once
#include <QObject>
#include <QDebug>
#include <QTimer>
#include <QObject>
#include <QString>
#include <QTimer>
#ifdef Q_OS_WIN
#include <qt_windows.h>
@ -50,11 +50,9 @@ class CPU : public QObject {
Q_PROPERTY(float usage READ usage NOTIFY usageChanged)
Q_PROPERTY(int tickRate READ tickRate WRITE setTickRate NOTIFY tickRateChanged)
public:
explicit CPU(QObject* parent = nullptr);
float usage() const
{
return m_usage;
@ -71,7 +69,6 @@ signals:
void tickRateChanged(int tickRate);
public slots:
void update();
@ -95,8 +92,6 @@ public slots:
emit tickRateChanged(m_tickRate);
}
private:
float m_usage = 0.0f;

View File

@ -38,8 +38,9 @@
#include <QObject>
uint64_t FileTimeToInt64( const FILETIME& ft ) {
ULARGE_INTEGER uli = { };
uint64_t FileTimeToInt64(const FILETIME& ft)
{
ULARGE_INTEGER uli = {};
uli.LowPart = ft.dwLowDateTime;
uli.HighPart = ft.dwHighDateTime;
return uli.QuadPart;

View File

@ -1,12 +1,12 @@
#include "ram.h"
#include "sysinfoapi.h"
#include <QtQml/qqml.h>
#include <qmetatype.h>
#include "sysinfoapi.h"
RAM::RAM(QObject* parent)
: QObject(parent)
{
connect(&m_updateTimer,&QTimer::timeout,this,&RAM::update);
connect(&m_updateTimer, &QTimer::timeout, this, &RAM::update);
m_updateTimer.start(m_tickRate);
}
@ -16,7 +16,7 @@ void RAM::update()
MEMORYSTATUSEX memoryStatus;
memoryStatus.dwLength = sizeof(MEMORYSTATUSEX); //needed for internal api
bool success = GlobalMemoryStatusEx(&memoryStatus);
if(!success)
if (!success)
return;
//Apply total values

View File

@ -34,8 +34,8 @@
#pragma once
#include <QObject>
#include <QDebug>
#include <QObject>
#include <QTimer>
#ifdef Q_OS_WIN
#include <qt_windows.h>
@ -113,7 +113,6 @@ signals:
void usedPagingMemoryChanged(DWORDLONG usedPagingMemory);
void totalPhysicalMemoryChanged(DWORDLONG totalPhysicalMemory);
void totalVirtualMemoryChanged(DWORDLONG totalVirtualMemory);
@ -134,7 +133,7 @@ private slots:
void setUsedPhysicalMemory(DWORDLONG usedPhysicalMemory)
{
if(usedPhysicalMemory == m_usedPhysicalMemory)
if (usedPhysicalMemory == m_usedPhysicalMemory)
return;
m_usedPhysicalMemory = usedPhysicalMemory;
@ -143,7 +142,7 @@ private slots:
void setTotalPhysicalMemory(DWORDLONG totalPhysicalMemory)
{
if(totalPhysicalMemory == m_totalPhysicalMemory)
if (totalPhysicalMemory == m_totalPhysicalMemory)
return;
m_totalPhysicalMemory = totalPhysicalMemory;
@ -152,7 +151,7 @@ private slots:
void setUsedVirtualMemory(DWORDLONG usedVirtualMemory)
{
if(usedVirtualMemory == m_usedVirtualMemory)
if (usedVirtualMemory == m_usedVirtualMemory)
return;
m_usedVirtualMemory = usedVirtualMemory;
@ -161,7 +160,7 @@ private slots:
void setTotalVirtualMemory(DWORDLONG totalVirtualMemory)
{
if(totalVirtualMemory == m_totalVirtualMemory)
if (totalVirtualMemory == m_totalVirtualMemory)
return;
m_totalVirtualMemory = totalVirtualMemory;
@ -170,7 +169,7 @@ private slots:
void setUsedPagingMemory(DWORDLONG usedPagingMemory)
{
if(usedPagingMemory == m_usedPagingMemory)
if (usedPagingMemory == m_usedPagingMemory)
return;
m_usedPagingMemory = usedPagingMemory;
@ -179,7 +178,7 @@ private slots:
void setTotalPagingMemory(DWORDLONG totalPagingMemory)
{
if(totalPagingMemory == m_totalPagingMemory)
if (totalPagingMemory == m_totalPagingMemory)
return;
m_totalPagingMemory = totalPagingMemory;
@ -197,6 +196,4 @@ private:
QTimer m_updateTimer;
int m_tickRate = 1000;
};

View File

@ -15,5 +15,4 @@ void ScreenPlaySysInfoPlugin::registerTypes(const char* uri)
{
// @uri ScreenPlay.Sysinfo
qmlRegisterSingletonType<SysInfo>(uri, 1, 0, "SysInfo", ScreenPlaySysInfoSingleton);
}

View File

@ -36,11 +36,10 @@
#include <QQmlExtensionPlugin>
class ScreenPlaySysInfoPlugin : public QQmlExtensionPlugin
{
class ScreenPlaySysInfoPlugin : public QQmlExtensionPlugin {
Q_OBJECT
Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
public:
void registerTypes(const char *uri);
void registerTypes(const char* uri);
};

View File

@ -88,7 +88,7 @@ void Storage::reset()
void Storage::loadStorageDevices()
{
beginInsertRows(QModelIndex(), 0, rowCount());
for (const auto &storage : QStorageInfo::mountedVolumes()) {
for (const auto& storage : QStorageInfo::mountedVolumes()) {
m_storageInfoList.append(storage);
}
endInsertRows();

View File

@ -63,7 +63,6 @@ public:
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
public slots:
void refresh();
void reset();
@ -71,6 +70,7 @@ signals:
private:
void loadStorageDevices();
private:
QVector<QStorageInfo> m_storageInfoList;
};

View File

@ -67,7 +67,6 @@ public:
return m_storage.get();
}
signals:
void ramChanged(RAM* ram);
void cpuChanged(CPU* cpu);

View File

@ -1,70 +1,41 @@
project(ScreenPlayWallpaper LANGUAGES CXX)
project(ScreenPlayWallpaper LANGUAGES CXX)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOMOC ON)
find_package(
Qt5
COMPONENTS Quick
Widgets
Gui
WebEngine
QuickCompiler
REQUIRED)
Qt5
COMPONENTS Quick Widgets Gui WebEngine QuickCompiler
REQUIRED)
if(WIN32)
set(src_plattform
src/windowsdesktopproperties.cpp
src/winwindow.cpp)
set(headers_plattform
src/windowsdesktopproperties.h
src/winwindow.h)
set(src_plattform src/windowsdesktopproperties.cpp src/winwindow.cpp)
set(headers_plattform src/windowsdesktopproperties.h src/winwindow.h)
elseif(APPLE)
set(src_plattform
src/macintegration.cpp
src/macwindow.cpp)
set(headers_plattform
src/macintegration.h
src/macbridge.h
src/macwindow.h)
set(src_plattform src/macintegration.cpp src/macwindow.cpp)
set(headers_plattform src/macintegration.h src/macbridge.h src/macwindow.h src/MacBridge.mm)
elseif(UNIX)
set(src_plattform
main.cpp
src/linuxwindow.cpp)
set(headers_plattform
src/linuxwindow.h)
set(src_plattform main.cpp src/linuxwindow.cpp)
set(headers_plattform src/linuxwindow.h)
endif()
set( src
main.cpp
src/basewindow.cpp)
set( headers
src/basewindow.h)
set(src main.cpp src/basewindow.cpp)
set(headers src/basewindow.h)
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
set(resources SPWResources.qrc)
else()
qtquick_compiler_add_resources(resources SPWResources.qrc )
qtquick_compiler_add_resources(resources SPWResources.qrc)
endif()
add_executable(${PROJECT_NAME} ${src} ${headers} ${src_plattform} ${headers_plattform} ${resources})
add_executable(${PROJECT_NAME} ${src} ${headers} ${src_plattform} ${headers_plattform} ${resources})
# Disable console window on Windows
# https://stackoverflow.com/questions/8249028/how-do-i-keep-my-qt-c-program-from-opening-a-console-in-windows
set_property(TARGET ${PROJECT_NAME} PROPERTY WIN32_EXECUTABLE true)
target_link_libraries(${PROJECT_NAME}
PRIVATE
Qt5::Quick
Qt5::Gui
Qt5::Widgets
Qt5::Core
Qt5::WebEngine
ScreenPlaySDK
)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Quick Qt5::Gui Qt5::Widgets Qt5::Core Qt5::WebEngine ScreenPlaySDK)
if(APPLE)
target_link_libraries(${PROJECT_NAME} PRIVATE "-framework Cocoa")
endif()

View File

@ -4,7 +4,6 @@ import ScreenPlayWallpaper 1.0
import ScreenPlay.Shader 1.0
import "ShaderWrapper" as ShaderWrapper
Rectangle {
id: root
anchors.fill: parent
@ -46,8 +45,7 @@ Rectangle {
loader.sourceComponent = undefined
loader.source = ""
if (oldType === Wallpaper.WallpaperType.QML)
Wallpaper.clearComponentCache()
Wallpaper.clearComponentCache()
loader.source = Qt.resolvedUrl(Wallpaper.fullContentPath)
}
@ -221,5 +219,4 @@ Rectangle {
}
}
}
}

View File

@ -120,8 +120,8 @@ MainWindow::MainWindow(int screenAt, QString projectPath, QString id, QString de
UpdateWindow(m_hwnd);
UpdateWindow(m_worker_hwnd);
SetWindowLongPtr(m_hwnd, GWL_STYLE, WS_CHILDWINDOW);
SetWindowLongPtr(m_hwnd, GWL_EXSTYLE, WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_NOACTIVATE );
// ShowWindow(m_hwnd, SW_SHOW);
SetWindowLongPtr(m_hwnd, GWL_EXSTYLE, WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_NOACTIVATE);
// ShowWindow(m_hwnd, SW_SHOW);
//MoveWindow(m_hwnd, screen->geometry().x(), screen->geometry().y() , screen->size().width(), screen->size().height(), true);
qDebug() << "Create window: " << screenAt << ", x: " << screen->geometry().x() << "y: " << screen->geometry().y() << screen->size().width() << screen->size().height();
@ -158,7 +158,7 @@ MainWindow::MainWindow(int screenAt, QString projectPath, QString id, QString de
}
});
QTimer::singleShot(3000,[=](){
QTimer::singleShot(3000, [=]() {
ShowWindow(m_hwnd, SW_SHOWNOACTIVATE);
});
@ -176,7 +176,7 @@ void MainWindow::init()
// This needs to be set in this order or
// the window will be opened as fullscreen!
//ShowWindow(m_hwnd, SW_SHOWDEFAULT);
//ShowWindow(m_hwnd, SW_SHOWDEFAULT);
#endif
}
void MainWindow::destroyThis()

View File

@ -45,9 +45,9 @@
#include <QQmlEngine>
#include <QScreen>
#include <QSharedPointer>
#include <QTimer>
#include <QWindow>
#include <QtGlobal>
#include <QTimer>
#include <QtQuick/QQuickView>
#include <QtQuick/QQuickWindow>

View File

@ -28,8 +28,6 @@ BaseWindow::BaseWindow(QString projectFilePath, const QVector<int> activeScreens
QJsonDocument configJsonDocument;
QJsonParseError parseError;
projectFile.setFileName(projectFilePath + "/project.json");
projectFile.open(QIODevice::ReadOnly | QIODevice::Text);
QString projectConfig = projectFile.readAll();
@ -166,9 +164,12 @@ QString BaseWindow::loadFromFile(const QString& filename)
QFile file;
file.setFileName(basePath() + "/" + filename);
qWarning() << " loadFromFile: " << file.fileName() << file.readAll();
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
return file.readAll();
if (file.open(QIODevice::ReadOnly)) {
const QString content = file.readAll();
file.close();
return content;
}
file.close();
qWarning() << "Could not loadFromFile: " << file.fileName();
return "";
}

View File

@ -1,6 +1,5 @@
#include "linuxwindow.h"
LinuxWindow::LinuxWindow(QVector<int> activeScreensList, QString projectPath, QString id, QString volume, const QString fillmode, const bool checkWallpaperVisible, QObject* parent)
: BaseWindow(projectPath, activeScreensList, checkWallpaperVisible)
{
@ -42,8 +41,6 @@ LinuxWindow::LinuxWindow(QVector<int> activeScreensList, QString projectPath, QS
m_window.setTextRenderType(QQuickWindow::TextRenderType::NativeTextRendering);
m_window.setSource(QUrl("qrc:/mainWindow.qml"));
// WARNING: Setting Window flags must be called *here*!
Qt::WindowFlags flags = m_window.flags();
m_window.setFlags(flags | Qt::FramelessWindowHint | Qt::Desktop);

View File

@ -1,11 +1,11 @@
#include "macwindow.h"
MacWindow::MacWindow(
const QVector<int> &activeScreensList,
const QString &projectPath,
const QString &id,
const QString &volume,
const QString &fillmode)
const QVector<int>& activeScreensList,
const QString& projectPath,
const QString& id,
const QString& volume,
const QString& fillmode)
: BaseWindow(projectPath, activeScreensList, false)
{
setAppID(id);
@ -28,8 +28,6 @@ MacWindow::MacWindow(
//setupWallpaperForMultipleScreens(activeScreensList);
}
// WARNING: Setting Window flags must be called *here*!
Qt::WindowFlags flags = m_window.flags();
m_window.setFlags(flags | Qt::FramelessWindowHint | Qt::Desktop);
@ -44,7 +42,6 @@ MacWindow::MacWindow(
MacIntegration* macIntegration = new MacIntegration(this);
macIntegration->SetBackgroundLevel(&m_window);
}
void MacWindow::setVisible(bool show)

View File

@ -1,29 +1,21 @@
project(ScreenPlayWidget LANGUAGES CXX)
project(ScreenPlayWidget LANGUAGES CXX)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOMOC ON)
find_package(
Qt5
COMPONENTS Quick
Widgets
Gui
QuickCompiler
WebEngine
REQUIRED)
Qt5
COMPONENTS Quick Widgets Gui QuickCompiler WebEngine
REQUIRED)
set(src main.cpp
src/widgetwindow.cpp)
set(src main.cpp src/widgetwindow.cpp)
set(headers
src/widgetwindow.h)
set(headers src/widgetwindow.h)
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
set(resources SPWidgetResources.qrc)
else()
qtquick_compiler_add_resources(resources SPWidgetResources.qrc )
qtquick_compiler_add_resources(resources SPWidgetResources.qrc)
endif()
add_executable(${PROJECT_NAME} ${src} ${headers} ${resources})
@ -32,13 +24,4 @@ add_executable(${PROJECT_NAME} ${src} ${headers} ${resources})
# https://stackoverflow.com/questions/8249028/how-do-i-keep-my-qt-c-program-from-opening-a-console-in-windows
set_property(TARGET ${PROJECT_NAME} PROPERTY WIN32_EXECUTABLE true)
target_link_libraries(${PROJECT_NAME}
PRIVATE
Qt5::Quick
Qt5::Gui
Qt5::Widgets
Qt5::Core
ScreenPlaySDK
)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Quick Qt5::Gui Qt5::Widgets Qt5::Core ScreenPlaySDK)

View File

@ -13,7 +13,6 @@ int main(int argc, char* argv[])
QStringList argumentList = app.arguments();
// If we start with only one argument (path, appID, type),
// it means we want to test a single widget
if (argumentList.length() == 1) {

View File

@ -46,7 +46,7 @@ WidgetWindow::WidgetWindow(
} else {
QFile configTmp;
QJsonDocument configJsonDocument;
QJsonParseError parseError;
QJsonParseError parseError{};
configTmp.setFileName(projectPath + "/project.json");
configTmp.open(QIODevice::ReadOnly | QIODevice::Text);

View File

@ -154,6 +154,7 @@ public slots:
}
QPointF cursorPos() { return QCursor::pos(); }
#ifdef Q_OS_WIN
void setWindowBlur(unsigned int style = 3);
#endif

132
Tools/build.py Normal file
View File

@ -0,0 +1,132 @@
from sys import platform
import os
import sys
import subprocess
import shutil
import argparse
# Based on https://gist.github.com/l2m2/0d3146c53c767841c6ba8c4edbeb4c2c
def vs_env_dict():
vsvar32 = 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat'
cmd = [vsvar32, '&&', 'set']
popen = subprocess.Popen(
cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = popen.communicate()
if popen.wait() != 0:
raise ValueError(stderr.decode("mbcs"))
output = stdout.decode("mbcs").split("\r\n")
return dict((e[0].upper(), e[1]) for e in [p.rstrip().split("=", 1) for p in output] if len(e) == 2)
# MAIN
parser = argparse.ArgumentParser(description='Build and Package ScreenPlay')
parser.add_argument('-t', action="store", dest="build_type")
args = parser.parse_args()
if not args.build_type:
print("Build type argument is missing (release,debug). Example: python build.py -t release")
sys.exit(1)
qt_version = "5.15.1"
print("Starting build with type %s. Qt Version: %s" %
(args.build_type, qt_version))
cmake_prefix_path = ""
cmake_target_triplet = ""
executable_file_ending = ""
deploy_executable = ""
if platform == "win32":
print("Loading MSVC env variables via vsvars32.bat")
windows_msvc = "msvc2019_64"
executable_file_ending = ".exe"
deploy_executable = "windeployqt.exe"
dict = vs_env_dict()
dict["PATH"] = dict["PATH"] + ";C:\\Qt\\" + qt_version + "\\" + windows_msvc + "\\bin;C:\\Qt\\Tools\\QtCreator\\bin"
os.environ.update(dict)
cmake_prefix_path = "c:/Qt/" + qt_version + "/" + windows_msvc
cmake_target_triplet = "x64-windows"
os.system("install_dependencies_windows.bat")
elif platform == "darwin":
cmake_prefix_path = "~/Qt/" + qt_version + "/clang_64"
deploy_executable = "macdeployqt"
cmake_target_triplet = "x64-osx"
print("Executing install_dependencies_linux_mac.sh")
os.system("chmod +x install_dependencies_linux_mac.sh")
os.system("./install_dependencies_linux_mac.sh")
elif platform == "linux":
deploy_executable = "linuxdeployqt"
cmake_prefix_path = "~/Qt/"
cmake_target_triplet = "x64-linux"
print("Executing install_dependencies_linux_mac.sh")
os.system("chmod +x install_dependencies_linux_mac.sh")
os.system("./install_dependencies_linux_mac.sh")
# REMOVE OLD BUILD FOLDER
cwd = os.getcwd()
root_path = os.path.abspath((cwd+"/../"))
os.chdir(root_path)
cmake_toolchain_file = ("'{root_path}/../ScreenPlay-vcpkg/scripts/buildsystems/vcpkg.cmake'").format(root_path=root_path)
print("cmake_toolchain_file: %s " % cmake_toolchain_file)
build_folder = "build-" + cmake_target_triplet + "-" + args.build_type
if os.path.isdir(build_folder):
print("Remove previous build folder")
shutil.rmtree(build_folder)
os.mkdir(build_folder)
os.chdir(root_path + "/" + build_folder)
cmake_configure_command = """cmake ../
-DCMAKE_PREFIX_PATH={prefix_path}
-DCMAKE_BUILD_TYPE={type}
-DCMAKE_TOOLCHAIN_FILE={toolchain}
-DVCPKG_TARGET_TRIPLET={triplet}
-G "CodeBlocks - Ninja"
-B.
""".format(
type=args.build_type,
prefix_path=cmake_prefix_path,
triplet=cmake_target_triplet,
toolchain=cmake_toolchain_file).replace("\n", "")
print("cmake_configure_command: %s" % cmake_configure_command)
process = subprocess.run(cmake_configure_command, capture_output=True,shell=True)
if process.returncode != 0:
sys.exit(process.returncode)
os.system("cmake --build . --target all")
os.chdir("bin")
os.system(("{deploy_executable} --{type} --qmldir ../../ScreenPlay/qml ScreenPlay{executable_file_ending}").format(
type=args.build_type,
executable_file_ending=executable_file_ending,
deploy_executable=deploy_executable))
os.system(("{deploy_executable} --{type} --qmldir ../../ScreenPlayWidget ScreenPlayWidget{executable_file_ending}").format(
type=args.build_type,
executable_file_ending=executable_file_ending,
deploy_executable=deploy_executable))
os.system(("{deploy_executable} --{type} --qmldir ../../ScreenPlayWallpaper ScreenPlayWallpaper{executable_file_ending}").format(
type=args.build_type,
executable_file_ending=executable_file_ending,
deploy_executable=deploy_executable))
file_endings = [".ninja_deps", ".ninja", ".ninja_log", ".lib", ".exp",
".manifest", ".cmake", ".cbp", "CMakeCache.txt"]
for filename in os.listdir(os.getcwd()):
for ending in file_endings:
if filename.endswith(ending):
full_file_path = os.path.join(os.getcwd(), filename)
print("Remove: %s" % full_file_path)
os.remove(full_file_path)

17
Tools/format-cmake.py Normal file
View File

@ -0,0 +1,17 @@
import fnmatch
import os
import sys
import subprocess
for root, dirnames, filenames in os.walk('..'):
for filename in fnmatch.filter(filenames, 'CMakeLists.txt'):
print("cmake-format -c ../.cmake-format.py -i " + root + "/" + filename)
os.system("cmake-format -c ../.cmake-format.py -i %s" % ((root + "/" + filename)))
# Check if all files are formatter
output = subprocess.check_output("git diff", shell=True)
if output:
print("Git diff is not empty. This means your CMakeLists.txt file was not formatted!")
#print(output)
sys.exit(1)

22
Tools/format-cpp.py Normal file
View File

@ -0,0 +1,22 @@
import fnmatch
import os
import sys
import subprocess
executable = "clang-format"
if os.name == 'nt':
executable += ".exe"
for root, dirnames, files in os.walk('../'):
for filename in files:
if filename.endswith(('.cpp', '.h')):
print(executable, root+"/"+filename)
os.system(" %s -style=file -i %s" % (executable, (root + "/" + filename)))
# Check if all files are formatter
output = subprocess.check_output("git diff", shell=True)
if output:
print("Git diff is not empty. This means your code was not formatted via %s!" % executable)
print(output)
sys.exit(1)

View File

@ -1,8 +1,9 @@
git submodule update --init
git submodule update --recursive
cd Common
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
cd ..
cd ..
git clone https://github.com/microsoft/vcpkg.git ScreenPlay-vcpkg
cd ScreenPlay-vcpkg
git pull
# master 10.09.2020 - 18ab4b72a26284f0df28295ce7bf9b21c96f20f4
git checkout 18ab4b72a26284f0df28295ce7bf9b21c96f20f4
@ -11,7 +12,7 @@ chmod +x bootstrap-vcpkg.sh
chmod +x vcpkg
if [[ "$OSTYPE" == "darwin"* ]]; then
./vcpkg install openssl-unix sentry-native --triplet x64-osx --recurse
./vcpkg install openssl-unix sentry-native doctest benchmark --triplet x64-osx --recurse
else
./vcpkg install openssl-unix sentry-native --triplet x64-linux --recurse
./vcpkg install openssl-unix sentry-native doctest benchmark --triplet x64-linux --recurse
fi

View File

@ -1,18 +1,19 @@
git submodule update --init
git submodule update --recursive
cd Common
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
cd ..
cd ..
git clone https://github.com/microsoft/vcpkg.git ScreenPlay-vcpkg
cd ScreenPlay-vcpkg
git pull
rem master 10.09.2020 - 18ab4b72a26284f0df28295ce7bf9b21c96f20f4
git checkout 18ab4b72a26284f0df28295ce7bf9b21c96f20f4
call bootstrap-vcpkg.bat
rem Install vcpkg dependencies
vcpkg.exe install openssl sentry-native --triplet x64-windows --recurse
vcpkg.exe install openssl sentry-native doctest benchmark --triplet x64-windows --recurse
cd ..
cd ..
cd ScreenPlay
rem Download 7-zip
curl.exe -L https://www.7-zip.org/a/7z1900.msi --ssl-no-revoke --output 7z.msi

13
Tools/lint-cmake.py Normal file
View File

@ -0,0 +1,13 @@
import fnmatch
import os
import sys
import subprocess
executable = "cmake-lint"
if os.name == 'nt':
executable += ".exe"
for root, dirnames, filenames in os.walk('../'):
for filename in fnmatch.filter(filenames, 'CMakeLists.txt'):
print(executable, root + "/" + filename)
os.system(" %s %s" % (executable, (root + "/" + filename)))