From 2144b21544b8c871477574b896902f4159c74cae Mon Sep 17 00:00:00 2001 From: Vasyl Vavrychuk Date: Fri, 29 Jul 2022 12:12:07 +0200 Subject: Update for app framework removal. Changes: - Remove the autobuild scripts and config.xml used by the app framework widget build. - Update the qmake files to just build a "videoplayer" binary and install it into /usr/bin by default. - Remove the code in main.cpp that handled reading the WebSocket command-line arguments and passing them to binding related code. - Add setenv of QT_QUICK_CONTROLS_STYLE to "AGL" to get the AGL styling used. This replaces a global environment variable definition tied to the old app framework, and makes it more obvious that the style is required for the app to properly work. - Remove MediaScaner based on QtWebSockets which was removed from agl-demo-platform Bug-AGL: SPEC-4182 Change-Id: I022217ffc42da41093a55120554237f95e3aa413 Signed-off-by: Vasyl Vavrychuk --- app/VideoPlayer.qml | 17 +------ app/api/MediaScanner.qml | 117 ---------------------------------------------- app/app.pri | 3 -- app/app.pro | 8 +++- app/main.cpp | 45 ++---------------- app/videoplayer.qrc | 1 - autobuild/agl/autobuild | 110 ------------------------------------------- autobuild/linux/autobuild | 110 ------------------------------------------- package/config.xml | 19 -------- videoplayer.pro | 3 +- 10 files changed, 11 insertions(+), 422 deletions(-) delete mode 100644 app/api/MediaScanner.qml delete mode 100644 app/app.pri delete mode 100755 autobuild/agl/autobuild delete mode 100755 autobuild/linux/autobuild delete mode 100644 package/config.xml diff --git a/app/VideoPlayer.qml b/app/VideoPlayer.qml index 7eb252e..83066f3 100644 --- a/app/VideoPlayer.qml +++ b/app/VideoPlayer.qml @@ -18,25 +18,10 @@ import QtQuick.Layouts 1.1 import QtQuick.Controls 2.0 import QtMultimedia 5.6 import AGL.Demo.Controls 1.0 -import 'api' as API ApplicationWindow { id: root - API.MediaScanner { - id: scanner - url: bindingAddress - - property var titles: Object - onAdded: { - playlist.addItem(media.path) - titles[media.path] = media.title - } - onRemoved: { - playlist.removeItem(index) - } - } - MediaPlayer { id: player audioRole: MediaPlayer.MusicRole @@ -206,7 +191,7 @@ ApplicationWindow { Layout.fillWidth: true Label { Layout.fillWidth: true - text: scanner.titles[model.source] ? scanner.titles[model.source] : model.source.toString().split('/').reverse()[0] + text: model.source.toString().split('/').reverse()[0] } } Label { diff --git a/app/api/MediaScanner.qml b/app/api/MediaScanner.qml deleted file mode 100644 index 8842a18..0000000 --- a/app/api/MediaScanner.qml +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2018 The Qt Company Ltd. - * Copyright (C) 2017 Konsulko Group - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import QtQuick 2.6 -import QtWebSockets 1.0 - -WebSocket { - id: root - active: true - url: bindingAddress - - property string statusString: "waiting..." - property string apiString: "mediascanner" - property var verbs: [] - property string payloadLength: "9999" - - readonly property var msgid: { - "call": 2, - "retok": 3, - "reterr": 4, - "event": 5 - } - - signal added(var media) - signal removed(var index) - - property var cache: [] - function add(files) { - for (var i = 0; i < files.length; i++) { - var media = files[i] - - if (cache.indexOf(media.path) < 0) { - root.added(media) - cache.push(media.path) - } - } - } - - function remove(prefix) { - for (var i = cache.length - 1; i > -1; i--) { - var media = cache[i] - if (media.substr(0, prefix.length) === prefix) { - root.removed(i) - cache.splice(i, 1) - } - } - } - - onTextMessageReceived: { - console.debug("Raw response: " + message) - var json = JSON.parse(message) - var request = json[2].request - var response = json[2].response -// console.debug("response: " + JSON.stringify(response)) - switch (json[0]) { - case msgid.call: - break - case msgid.retok: - root.statusString = request.status - var verb = verbs.shift() - if (verb === "media_result") { - root.add(response.Media) - } - break - case msgid.reterr: - root.statusString = "Bad return value, binding probably not installed" - var verb = verbs.shift() - break - case msgid.event: - var payload = JSON.parse(JSON.stringify(json[2])) - var event = payload.event - if (event === "mediascanner/media_added") { - console.debug("Media playlist is updated") - root.add(json[2].data.Media) - } else if (event === "mediascanner/media_removed") { - root.remove(json[2].data.Path) - } - break - } - } - - onStatusChanged: { - switch (status) { - case WebSocket.Open: - console.debug("onStatusChanged: Open") - sendSocketMessage("subscribe", { value: "media_added" }) - sendSocketMessage("subscribe", { value: "media_removed" }) - sendSocketMessage("media_result", { type: 'video' }) - break - case WebSocket.Error: - root.statusString = "WebSocket error: " + root.errorString - break - } - } - - function sendSocketMessage(verb, parameter) { - var requestJson = [ msgid.call, payloadLength, apiString + '/' - + verb, parameter ] - console.debug("sendSocketMessage: " + JSON.stringify(requestJson)) - verbs.push(verb) - sendTextMessage(JSON.stringify(requestJson)) - } -} diff --git a/app/app.pri b/app/app.pri deleted file mode 100644 index f22f540..0000000 --- a/app/app.pri +++ /dev/null @@ -1,3 +0,0 @@ -TEMPLATE = app - -DESTDIR = $${OUT_PWD}/../package/root/bin diff --git a/app/app.pro b/app/app.pro index 0083bfc..805dd5f 100644 --- a/app/app.pro +++ b/app/app.pro @@ -1,5 +1,6 @@ +TEMPLATE = app TARGET = videoplayer -QT = quick websockets multimedia +QT = quick multimedia SOURCES = main.cpp @@ -7,5 +8,8 @@ RESOURCES += \ videoplayer.qrc \ images/images.qrc -include(app.pri) +target.path = /usr/bin +target.files += $${OUT_PWD}/$${TARGET} +target.CONFIG = no_check_exist executable +INSTALLS += target diff --git a/app/main.cpp b/app/main.cpp index 11b1230..db39a17 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -13,57 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include -#include +#include +#include #include -#include -#include -#include - int main(int argc, char *argv[]) { - - setenv("QT_QPA_PLATFORM", "wayland", 1); - int port; - QString token; - - QCommandLineParser parser; QGuiApplication app(argc, argv); - parser.addPositionalArgument("port", - app.translate("main", "port for binding")); - parser.addPositionalArgument("secret", - app.translate("main", "secret for binding")); - - parser.addHelpOption(); - parser.addVersionOption(); - parser.process(app); - QStringList positionalArguments = parser.positionalArguments(); - - if (positionalArguments.length() == 2) { - port = positionalArguments.takeFirst().toInt(); - token = positionalArguments.takeFirst(); - qInfo() << "setting port:" << port << ", token:" << token; - } else { - qInfo() << "Need to specify port and token"; - exit(EXIT_FAILURE); - } - - QUrl bindingAddress; - bindingAddress.setScheme(QStringLiteral("ws")); - bindingAddress.setHost(QStringLiteral("localhost")); - bindingAddress.setPort(port); - bindingAddress.setPath(QStringLiteral("/api")); - - QUrlQuery query; - query.addQueryItem(QStringLiteral("token"), token); - bindingAddress.setQuery(query); + setenv("QT_QUICK_CONTROLS_STYLE", "AGL", 1); QQmlApplicationEngine engine; - engine.rootContext()->setContextProperty(QStringLiteral("bindingAddress"), bindingAddress); engine.load(QUrl(QStringLiteral("qrc:/VideoPlayer.qml"))); return app.exec(); - } diff --git a/app/videoplayer.qrc b/app/videoplayer.qrc index a1bbeb0..efe0092 100644 --- a/app/videoplayer.qrc +++ b/app/videoplayer.qrc @@ -1,6 +1,5 @@ VideoPlayer.qml - api/MediaScanner.qml diff --git a/autobuild/agl/autobuild b/autobuild/agl/autobuild deleted file mode 100755 index bbbc13e..0000000 --- a/autobuild/agl/autobuild +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/make -f -# Copyright (C) 2015 - 2018 "IoT.bzh" -# Copyright (C) 2020 Konsulko Group -# Author "Romain Forlot" -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -THISFILE := $(lastword $(MAKEFILE_LIST)) -ROOT_DIR := $(abspath $(dir $(THISFILE))/../..) - -# Build directories -# Note that the debug directory is defined in relation to the release -# directory (BUILD_DIR), this needs to be kept in mind if over-riding -# it and building that widget types, the specific widget type variable -# (e.g. BUILD_DIR_DEBUG) may also need to be specified to yield the -# desired output hierarchy. -BUILD_DIR = $(ROOT_DIR)/build -BUILD_DIR_DEBUG = $(abspath $(BUILD_DIR)/../build-debug) - -# Output directory variable for use in pattern rules. -# This is intended for internal use only, hence the explicit override -# definition. -override OUTPUT_DIR = $(BUILD_DIR) - -# Final install directory for widgets -DEST = $(OUTPUT_DIR) - -# Default build type for release builds -BUILD_TYPE = release - -.PHONY: all help update install distclean -.PHONY: clean clean-release clean-debug clean-all -.PHONY: configure configure-release configure-debug -.PHONY: build build-release build-debug build-all -.PHONY: package package-release package-debug package-all - -help: - @echo "List of targets available:" - @echo "" - @echo "- all" - @echo "- help" - @echo "- clean" - @echo "- distclean" - @echo "- configure" - @echo "- build: compilation, link and prepare files for package into a widget" - @echo "- package: output a widget file '*.wgt'" - @echo "- install: install in $(DEST) directory" - @echo "" - @echo "Usage: ./autobuild/agl/autobuild package DEST=${HOME}/opt" - @echo "Don't use your build dir as DEST as wgt file is generated at this location" - -all: package-all - -# Target specific variable over-rides so static pattern rules can be -# used for the various type-specific targets. - -configure-debug build-debug package-debug clean-debug: OUTPUT_DIR = $(BUILD_DIR_DEBUG) -configure-debug build-debug package-debug: BUILD_TYPE = debug - -clean-release clean-debug: - @if [ -d $(OUTPUT_DIR) ]; then \ - $(MAKE) -C $(OUTPUT_DIR) $(CLEAN_ARGS) clean; \ - else \ - echo Nothing to clean; \ - fi - -clean: clean-release - -clean-all: clean-release clean-debug - -distclean: clean-all - -configure-release configure-debug: - @mkdir -p $(OUTPUT_DIR) - @if [ ! -f $(OUTPUT_DIR)/Makefile ]; then \ - (cd $(OUTPUT_DIR) && qmake CONFIG+=$(BUILD_TYPE) $(CONFIGURE_ARGS) $(ROOT_DIR)); \ - fi - -configure: configure-release - -build-release build-debug: build-%: configure-% - @$(MAKE) -C $(OUTPUT_DIR) $(BUILD_ARGS) all - -build: build-release - -build-all: build-release build-debug - -package-release package-debug: package-%: build-% - @cp $(OUTPUT_DIR)/package/*.wgt $(OUTPUT_DIR)/ - @if [ "$(abspath $(DEST))" != "$(abspath $(OUTPUT_DIR))" ]; then \ - mkdir -p $(DEST) && cp $(OUTPUT_DIR)/*.wgt $(DEST); \ - fi - - -package: package-release - -package-all: package-release package-debug - -install: build - @$(MAKE) -C $(BUILD_DIR) $(INSTALL_ARGS) install diff --git a/autobuild/linux/autobuild b/autobuild/linux/autobuild deleted file mode 100755 index bbbc13e..0000000 --- a/autobuild/linux/autobuild +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/make -f -# Copyright (C) 2015 - 2018 "IoT.bzh" -# Copyright (C) 2020 Konsulko Group -# Author "Romain Forlot" -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -THISFILE := $(lastword $(MAKEFILE_LIST)) -ROOT_DIR := $(abspath $(dir $(THISFILE))/../..) - -# Build directories -# Note that the debug directory is defined in relation to the release -# directory (BUILD_DIR), this needs to be kept in mind if over-riding -# it and building that widget types, the specific widget type variable -# (e.g. BUILD_DIR_DEBUG) may also need to be specified to yield the -# desired output hierarchy. -BUILD_DIR = $(ROOT_DIR)/build -BUILD_DIR_DEBUG = $(abspath $(BUILD_DIR)/../build-debug) - -# Output directory variable for use in pattern rules. -# This is intended for internal use only, hence the explicit override -# definition. -override OUTPUT_DIR = $(BUILD_DIR) - -# Final install directory for widgets -DEST = $(OUTPUT_DIR) - -# Default build type for release builds -BUILD_TYPE = release - -.PHONY: all help update install distclean -.PHONY: clean clean-release clean-debug clean-all -.PHONY: configure configure-release configure-debug -.PHONY: build build-release build-debug build-all -.PHONY: package package-release package-debug package-all - -help: - @echo "List of targets available:" - @echo "" - @echo "- all" - @echo "- help" - @echo "- clean" - @echo "- distclean" - @echo "- configure" - @echo "- build: compilation, link and prepare files for package into a widget" - @echo "- package: output a widget file '*.wgt'" - @echo "- install: install in $(DEST) directory" - @echo "" - @echo "Usage: ./autobuild/agl/autobuild package DEST=${HOME}/opt" - @echo "Don't use your build dir as DEST as wgt file is generated at this location" - -all: package-all - -# Target specific variable over-rides so static pattern rules can be -# used for the various type-specific targets. - -configure-debug build-debug package-debug clean-debug: OUTPUT_DIR = $(BUILD_DIR_DEBUG) -configure-debug build-debug package-debug: BUILD_TYPE = debug - -clean-release clean-debug: - @if [ -d $(OUTPUT_DIR) ]; then \ - $(MAKE) -C $(OUTPUT_DIR) $(CLEAN_ARGS) clean; \ - else \ - echo Nothing to clean; \ - fi - -clean: clean-release - -clean-all: clean-release clean-debug - -distclean: clean-all - -configure-release configure-debug: - @mkdir -p $(OUTPUT_DIR) - @if [ ! -f $(OUTPUT_DIR)/Makefile ]; then \ - (cd $(OUTPUT_DIR) && qmake CONFIG+=$(BUILD_TYPE) $(CONFIGURE_ARGS) $(ROOT_DIR)); \ - fi - -configure: configure-release - -build-release build-debug: build-%: configure-% - @$(MAKE) -C $(OUTPUT_DIR) $(BUILD_ARGS) all - -build: build-release - -build-all: build-release build-debug - -package-release package-debug: package-%: build-% - @cp $(OUTPUT_DIR)/package/*.wgt $(OUTPUT_DIR)/ - @if [ "$(abspath $(DEST))" != "$(abspath $(OUTPUT_DIR))" ]; then \ - mkdir -p $(DEST) && cp $(OUTPUT_DIR)/*.wgt $(DEST); \ - fi - - -package: package-release - -package-all: package-release package-debug - -install: build - @$(MAKE) -C $(BUILD_DIR) $(INSTALL_ARGS) install diff --git a/package/config.xml b/package/config.xml deleted file mode 100644 index ecead3b..0000000 --- a/package/config.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - Video - - - This is a demo videoplayer application - Tasuku Suzuki <tasuku.suzuki@qt.io> - APL 2.0 - - - - - - - - - - - diff --git a/videoplayer.pro b/videoplayer.pro index 579a952..5cf7e78 100644 --- a/videoplayer.pro +++ b/videoplayer.pro @@ -1,3 +1,2 @@ TEMPLATE = subdirs -SUBDIRS = app package -package.depends += app +SUBDIRS = app -- cgit 1.2.3-korg