17c804472Sopenharmony_ci/*
27c804472Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
47c804472Sopenharmony_ci * you may not use this file except in compliance with the License.
57c804472Sopenharmony_ci * You may obtain a copy of the License at
67c804472Sopenharmony_ci *
77c804472Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
87c804472Sopenharmony_ci *
97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127c804472Sopenharmony_ci * See the License for the specific language governing permissions and
137c804472Sopenharmony_ci * limitations under the License.
147c804472Sopenharmony_ci */
157c804472Sopenharmony_ci
167c804472Sopenharmony_ci#include "JsApp.h"
177c804472Sopenharmony_ci#include <algorithm>
187c804472Sopenharmony_ci#include <sstream>
197c804472Sopenharmony_ci#include <cstdio>
207c804472Sopenharmony_ci#include "FileSystem.h"
217c804472Sopenharmony_ci#include "PreviewerEngineLog.h"
227c804472Sopenharmony_ci
237c804472Sopenharmony_cistatic std::vector<std::string> liteDevice = {"liteWearable", "smartVision"};
247c804472Sopenharmony_ci
257c804472Sopenharmony_ciJsApp::JsApp()
267c804472Sopenharmony_ci    : pipeName(""),
277c804472Sopenharmony_ci      pipePort(""),
287c804472Sopenharmony_ci      jsAppPath(""),
297c804472Sopenharmony_ci      bundleName("undefined"),
307c804472Sopenharmony_ci      urlPath(""),
317c804472Sopenharmony_ci      isFinished(true),
327c804472Sopenharmony_ci      isRunning(true),
337c804472Sopenharmony_ci      isDebug(false),
347c804472Sopenharmony_ci      debugServerPort(0),
357c804472Sopenharmony_ci      jsHeapSize(0),
367c804472Sopenharmony_ci      colorMode(""),
377c804472Sopenharmony_ci      orientation(""),
387c804472Sopenharmony_ci      aceVersion(""),
397c804472Sopenharmony_ci      screenDensity(""),
407c804472Sopenharmony_ci      configChanges("")
417c804472Sopenharmony_ci{
427c804472Sopenharmony_ci}
437c804472Sopenharmony_ci
447c804472Sopenharmony_civoid JsApp::Stop()
457c804472Sopenharmony_ci{
467c804472Sopenharmony_ci    ILOG("JsApp::Stop start stop js app.");
477c804472Sopenharmony_ci    auto start = std::chrono::system_clock::now();
487c804472Sopenharmony_ci    while (!isFinished) {
497c804472Sopenharmony_ci        Interrupt();
507c804472Sopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(1));
517c804472Sopenharmony_ci        auto end = std::chrono::system_clock::now();
527c804472Sopenharmony_ci        auto passedSecond = std::chrono::duration_cast<std::chrono::seconds>(end - start).count();
537c804472Sopenharmony_ci        if (passedSecond > 10) { // The restart timeout interval is 10 seconds.
547c804472Sopenharmony_ci            ILOG("Restart js app time out!");
557c804472Sopenharmony_ci            return;
567c804472Sopenharmony_ci        }
577c804472Sopenharmony_ci    }
587c804472Sopenharmony_ci    ILOG("JsApp::Stop js app stop finished.");
597c804472Sopenharmony_ci}
607c804472Sopenharmony_ci
617c804472Sopenharmony_civoid JsApp::Interrupt() {}
627c804472Sopenharmony_ci
637c804472Sopenharmony_cibool JsApp::IsLiteDevice(std::string deviceType)
647c804472Sopenharmony_ci{
657c804472Sopenharmony_ci    auto iter = find(liteDevice.begin(), liteDevice.end(), deviceType);
667c804472Sopenharmony_ci    if (iter == liteDevice.end()) {
677c804472Sopenharmony_ci        return false;
687c804472Sopenharmony_ci    }
697c804472Sopenharmony_ci    return true;
707c804472Sopenharmony_ci}
717c804472Sopenharmony_ci
727c804472Sopenharmony_civoid JsApp::SetPipeName(const std::string& name)
737c804472Sopenharmony_ci{
747c804472Sopenharmony_ci    pipeName = name;
757c804472Sopenharmony_ci}
767c804472Sopenharmony_ci
777c804472Sopenharmony_civoid JsApp::SetPipePort(const std::string& port)
787c804472Sopenharmony_ci{
797c804472Sopenharmony_ci    pipePort = port;
807c804472Sopenharmony_ci}
817c804472Sopenharmony_ci
827c804472Sopenharmony_civoid JsApp::SetJsAppPath(const std::string& value)
837c804472Sopenharmony_ci{
847c804472Sopenharmony_ci    jsAppPath = value;
857c804472Sopenharmony_ci}
867c804472Sopenharmony_ci
877c804472Sopenharmony_civoid JsApp::SetScreenDensity(const std::string value)
887c804472Sopenharmony_ci{
897c804472Sopenharmony_ci    screenDensity = value;
907c804472Sopenharmony_ci}
917c804472Sopenharmony_ci
927c804472Sopenharmony_civoid JsApp::SetConfigChanges(const std::string value)
937c804472Sopenharmony_ci{
947c804472Sopenharmony_ci    configChanges = value;
957c804472Sopenharmony_ci}
967c804472Sopenharmony_ci
977c804472Sopenharmony_civoid JsApp::SetUrlPath(const std::string& value)
987c804472Sopenharmony_ci{
997c804472Sopenharmony_ci    urlPath = value;
1007c804472Sopenharmony_ci}
1017c804472Sopenharmony_ci
1027c804472Sopenharmony_civoid JsApp::SetBundleName(const std::string& name)
1037c804472Sopenharmony_ci{
1047c804472Sopenharmony_ci    bundleName = name;
1057c804472Sopenharmony_ci    FileSystem::SetBundleName(name);
1067c804472Sopenharmony_ci    FileSystem::MakeVirtualFileSystemPath();
1077c804472Sopenharmony_ci}
1087c804472Sopenharmony_ci
1097c804472Sopenharmony_civoid JsApp::SetRunning(bool flag)
1107c804472Sopenharmony_ci{
1117c804472Sopenharmony_ci    isRunning = flag;
1127c804472Sopenharmony_ci}
1137c804472Sopenharmony_ci
1147c804472Sopenharmony_cibool JsApp::GetRunning()
1157c804472Sopenharmony_ci{
1167c804472Sopenharmony_ci    return isRunning;
1177c804472Sopenharmony_ci}
1187c804472Sopenharmony_ci
1197c804472Sopenharmony_civoid JsApp::SetIsDebug(bool value)
1207c804472Sopenharmony_ci{
1217c804472Sopenharmony_ci    isDebug = value;
1227c804472Sopenharmony_ci}
1237c804472Sopenharmony_ci
1247c804472Sopenharmony_civoid JsApp::SetDebugServerPort(uint16_t value)
1257c804472Sopenharmony_ci{
1267c804472Sopenharmony_ci    debugServerPort = value;
1277c804472Sopenharmony_ci}
1287c804472Sopenharmony_ci
1297c804472Sopenharmony_civoid JsApp::SetJSHeapSize(uint32_t size)
1307c804472Sopenharmony_ci{
1317c804472Sopenharmony_ci    jsHeapSize = size;
1327c804472Sopenharmony_ci}
1337c804472Sopenharmony_ci
1347c804472Sopenharmony_cistd::string JsApp::GetJSONTree()
1357c804472Sopenharmony_ci{
1367c804472Sopenharmony_ci    return "";
1377c804472Sopenharmony_ci}
1387c804472Sopenharmony_ci
1397c804472Sopenharmony_cistd::string JsApp::GetDefaultJSONTree()
1407c804472Sopenharmony_ci{
1417c804472Sopenharmony_ci    return "";
1427c804472Sopenharmony_ci}
1437c804472Sopenharmony_ci
1447c804472Sopenharmony_civoid JsApp::SetArgsColorMode(const std::string& value)
1457c804472Sopenharmony_ci{
1467c804472Sopenharmony_ci    colorMode = value;
1477c804472Sopenharmony_ci}
1487c804472Sopenharmony_ci
1497c804472Sopenharmony_civoid JsApp::SetArgsAceVersion(const std::string& value)
1507c804472Sopenharmony_ci{
1517c804472Sopenharmony_ci    aceVersion = value;
1527c804472Sopenharmony_ci}
1537c804472Sopenharmony_ci
1547c804472Sopenharmony_civoid JsApp::ColorModeChanged(const std::string commandColorMode)
1557c804472Sopenharmony_ci{
1567c804472Sopenharmony_ci    colorMode = commandColorMode;
1577c804472Sopenharmony_ci}
1587c804472Sopenharmony_ci
1597c804472Sopenharmony_cistd::string JsApp::GetColorMode() const
1607c804472Sopenharmony_ci{
1617c804472Sopenharmony_ci    return colorMode;
1627c804472Sopenharmony_ci}
1637c804472Sopenharmony_ci
1647c804472Sopenharmony_cistd::string JsApp::GetOrientation() const
1657c804472Sopenharmony_ci{
1667c804472Sopenharmony_ci    return orientation;
1677c804472Sopenharmony_ci}
1687c804472Sopenharmony_ci
1697c804472Sopenharmony_civoid JsApp::OrientationChanged(std::string commandOrientation)
1707c804472Sopenharmony_ci{
1717c804472Sopenharmony_ci    orientation = commandOrientation;
1727c804472Sopenharmony_ci}
1737c804472Sopenharmony_ci
1747c804472Sopenharmony_civoid JsApp::ResolutionChanged(ResolutionParam&, int32_t, std::string) {}
1757c804472Sopenharmony_ci
1767c804472Sopenharmony_civoid JsApp::ReloadRuntimePage(const std::string) {}
1777c804472Sopenharmony_ci
1787c804472Sopenharmony_cibool JsApp::MemoryRefresh(const std::string) const
1797c804472Sopenharmony_ci{
1807c804472Sopenharmony_ci    return false;
1817c804472Sopenharmony_ci}
1827c804472Sopenharmony_ci
1837c804472Sopenharmony_civoid JsApp::LoadDocument(const std::string, const std::string, const Json2::Value&) {}
1847c804472Sopenharmony_ci
1857c804472Sopenharmony_civoid JsApp::FoldStatusChanged(const std::string commandFoldStatus,
1867c804472Sopenharmony_ci    int32_t currentWidth, int32_t currentHeight) {}
1877c804472Sopenharmony_ci
1887c804472Sopenharmony_civoid JsApp::SetAvoidArea(const AvoidAreas& areas) {}
1897c804472Sopenharmony_ci
1907c804472Sopenharmony_ciconst AvoidAreas JsApp::GetCurrentAvoidArea() const
1917c804472Sopenharmony_ci{
1927c804472Sopenharmony_ci    AvoidAreas areas;
1937c804472Sopenharmony_ci    return areas;
1947c804472Sopenharmony_ci}
1957c804472Sopenharmony_ci
1967c804472Sopenharmony_civoid JsApp::InitJsApp() {}