~aleteoryx/muditaos

14918dc4f968a6339aff07ff78ca2a56ccc2037a — jimmorrisson 5 years ago 2695cc8
[EGD-4925] Change new filesystem handling implementation in module-gui. (#1193)

Due to vfs deprecation there is need to remove all vfs calls from code. This PR covers module gui. There are some modifications in other modules included which are necessary because of build system issues.
132 files changed, 330 insertions(+), 284 deletions(-)

M module-apps/application-alarm-clock/widgets/AlarmOptionsItem.cpp
M module-apps/application-antenna/windows/AlgoParamsWindow.cpp
M module-apps/application-antenna/windows/AntennaMainWindow.cpp
M module-apps/application-antenna/windows/ScanModesWindow.cpp
M module-apps/application-calculator/ApplicationCalculator.cpp
M module-apps/application-calculator/data/CalculatorUtility.cpp
M module-apps/application-calculator/tests/CalculatorUtility_tests.cpp
M module-apps/application-calculator/windows/CalculatorMainWindow.cpp
M module-apps/application-call/widgets/StateIcon.hpp
M module-apps/application-call/windows/CallWindow.cpp
M module-apps/application-call/windows/EmergencyCallWindow.cpp
M module-apps/application-call/windows/EnterNumberWindow.cpp
M module-apps/application-calllog/ApplicationCallLog.cpp
M module-apps/application-calllog/windows/CallLogDetailsWindow.cpp
M module-apps/application-calllog/windows/CallLogMainWindow.cpp
M module-apps/application-calllog/windows/CallLogOptionsWindow.cpp
M module-apps/application-desktop/windows/DesktopMainWindow.cpp
M module-apps/application-desktop/windows/LockedInfoWindow.cpp
M module-apps/application-desktop/windows/MenuWindow.cpp
M module-apps/application-desktop/windows/PinLockBaseWindow.cpp
M module-apps/application-desktop/windows/PowerOffWindow.cpp
M module-apps/application-desktop/windows/PukLockBox.cpp
M module-apps/application-desktop/windows/Reboot.cpp
M module-apps/application-desktop/windows/ScreenLockBox.cpp
M module-apps/application-meditation/widgets/IntervalBox.cpp
M module-apps/application-meditation/widgets/MeditationListItems.cpp
M module-apps/application-meditation/widgets/TimerProperty.cpp
M module-apps/application-meditation/windows/MeditationListViewWindows.cpp
M module-apps/application-meditation/windows/MeditationTimerWindow.cpp
M module-apps/application-meditation/windows/MeditationWindow.cpp
M module-apps/application-messages/ApplicationMessages.cpp
M module-apps/application-messages/widgets/SMSInputWidget.cpp
M module-apps/application-messages/windows/MessagesMainWindow.cpp
M module-apps/application-messages/windows/NewMessage.cpp
M module-apps/application-messages/windows/OptionsMessages.cpp
M module-apps/application-messages/windows/SMSTemplatesWindow.cpp
M module-apps/application-messages/windows/SearchResults.cpp
M module-apps/application-messages/windows/SearchStart.cpp
M module-apps/application-messages/windows/ThreadWindowOptions.cpp
M module-apps/application-music-player/ApplicationMusicPlayer.cpp
M module-apps/application-music-player/windows/MusicPlayerAllSongsWindow.cpp
M module-apps/application-music-player/windows/MusicPlayerEmptyWindow.cpp
M module-apps/application-notes/windows/NoteEditWindow.cpp
M module-apps/application-notes/windows/NoteMainWindow.cpp
M module-apps/application-notes/windows/NotePreviewWindow.cpp
M module-apps/application-notes/windows/NotesOptions.cpp
M module-apps/application-notes/windows/SearchEngineWindow.cpp
M module-apps/application-phonebook/widgets/ContactFlagsWidget.cpp
M module-apps/application-phonebook/widgets/InformationWidget.cpp
M module-apps/application-phonebook/widgets/InputBoxWithLabelAndIconWidget.cpp
M module-apps/application-phonebook/widgets/InputLinesWithLabelIWidget.cpp
M module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp
M module-apps/application-settings-new/ApplicationSettings.cpp
M module-apps/application-settings-new/widgets/timeWidget.cpp
M module-apps/application-settings-new/widgets/timeWidget.hpp
M module-apps/application-settings-new/windows/AddDeviceWindow.cpp
M module-apps/application-settings-new/windows/AllDevicesWindow.cpp
M module-apps/application-settings-new/windows/AppsAndToolsWindow.cpp
M module-apps/application-settings-new/windows/AutolockWindow.cpp
M module-apps/application-settings-new/windows/BaseSettingsWindow.cpp
M module-apps/application-settings-new/windows/BluetoothWindow.cpp
M module-apps/application-settings-new/windows/DisplayAndKeypadWindow.cpp
M module-apps/application-settings-new/windows/DisplayLightWindow.cpp
M module-apps/application-settings-new/windows/FontSizeWindow.cpp
M module-apps/application-settings-new/windows/InputLanguageWindow.cpp
M module-apps/application-settings-new/windows/KeypadLightWindow.cpp
M module-apps/application-settings-new/windows/LockedScreenWindow.cpp
M module-apps/application-settings-new/windows/MessagesWindow.cpp
M module-apps/application-settings-new/windows/NetworkWindow.cpp
M module-apps/application-settings-new/windows/QuotesAddWindow.cpp
M module-apps/application-settings-new/windows/QuotesMainWindow.cpp
M module-apps/application-settings-new/windows/SettingsMainWindow.cpp
M module-apps/application-settings-new/windows/TorchWindow.cpp
M module-apps/application-settings-new/windows/WallpaperWindow.cpp
M module-apps/application-settings/ApplicationSettings.cpp
M module-apps/application-settings/windows/BtScanWindow.cpp
M module-apps/application-settings/windows/BtWindow.cpp
M module-apps/application-settings/windows/CellularPassthroughWindow.cpp
M module-apps/application-settings/windows/DateTimeWindow.cpp
M module-apps/application-settings/windows/EinkModeWindow.cpp
M module-apps/application-settings/windows/FotaWindow.cpp
M module-apps/application-settings/windows/Info.cpp
M module-apps/application-settings/windows/LanguageWindow.cpp
M module-apps/application-settings/windows/SettingsChange.cpp
M module-apps/application-settings/windows/SettingsMainWindow.cpp
M module-apps/application-settings/windows/SimSelectWindow.cpp
M module-apps/application-settings/windows/TestMessageWindow.cpp
M module-apps/application-settings/windows/UITestWindow.cpp
M module-apps/application-special-input/windows/SpecialInputMainWindow.cpp
M module-apps/widgets/BrightnessBox.cpp
M module-apps/widgets/ButtonOnOff.cpp
M module-apps/widgets/ModesBox.cpp
M module-apps/windows/AppWindow.cpp
M module-apps/windows/Dialog.cpp
M module-apps/windows/OptionWindow.cpp
M module-apps/windows/Options.cpp
M module-apps/windows/VolumeWindow.cpp
M module-db/Database/sqlite3vfs.cpp
M module-db/Interface/ContactRecord.hpp
M module-db/Interface/SettingsRecord.hpp
M module-db/Tables/SettingsTable.hpp
M module-db/tests/ContactsRecord_tests.cpp
M module-gui/CMakeLists.txt
M module-gui/gui/core/FontManager.cpp
M module-gui/gui/core/ImageManager.cpp
M module-gui/gui/input/Profile.cpp
M module-gui/gui/input/Profile.hpp
M module-gui/gui/input/Translator.cpp
M module-gui/gui/input/Translator.hpp
M module-gui/gui/widgets/Icon.cpp
M module-gui/gui/widgets/InputMode.cpp
M module-gui/gui/widgets/Text.cpp
M module-gui/test/test-catch-text/CMakeLists.txt
M module-gui/test/test-catch-text/main.cpp
M module-gui/test/test-catch-text/test-gui-Text.cpp
M module-gui/test/test-google/CMakeLists.txt
M module-services/service-appmgr/model/ApplicationManager.cpp
M module-services/service-appmgr/service-appmgr/Controller.hpp
M module-services/service-appmgr/service-appmgr/messages/LanguageChangeRequest.hpp
M module-services/service-db/test/test-service-db-settings-api.cpp
M module-services/service-desktop/endpoints/factoryReset/FactoryReset.cpp
M module-services/service-gui/ServiceGUI.cpp
M module-services/service-gui/ServiceGUI.hpp
M module-utils/Utils.cpp
M module-utils/Utils.hpp
M module-utils/i18n/i18n.cpp
M module-utils/i18n/i18n.hpp
M module-utils/test/test_time_conversion.cpp
M module-utils/test/unittest_duration.cpp
M module-utils/test/unittest_utils.cpp
M module-utils/time/time_conversion.cpp
M module-utils/time/time_locale.hpp
M module-apps/application-alarm-clock/widgets/AlarmOptionsItem.cpp => module-apps/application-alarm-clock/widgets/AlarmOptionsItem.cpp +3 -2
@@ 7,6 7,7 @@
#include <Style.hpp>
#include <Utils.hpp>
#include <module-services/service-audio/service-audio/AudioServiceAPI.hpp>
#include <purefs/filesystem_paths.hpp>

namespace gui
{


@@ 240,9 241,9 @@ namespace gui

    std::vector<audio::Tags> AlarmOptionsItem::getMusicFilesList()
    {
        const char *musicFolder = USER_PATH("music");
        const auto musicFolder = (purefs::dir::getUserDiskPath() / "music").string();
        std::vector<audio::Tags> musicFiles;
        LOG_INFO("Scanning music folder: %s", musicFolder);
        LOG_INFO("Scanning music folder: %s", musicFolder.c_str());
        for (const auto &ent : std::filesystem::directory_iterator(musicFolder)) {
            if (!ent.is_directory()) {
                const auto filePath = std::string(musicFolder) + "/" + ent.path().filename().c_str();

M module-apps/application-antenna/windows/AlgoParamsWindow.cpp => module-apps/application-antenna/windows/AlgoParamsWindow.cpp +1 -1
@@ 7,7 7,7 @@
#include "gui/widgets/Label.hpp"
#include "gui/widgets/Window.hpp"

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include <Style.hpp>
#include "gui/widgets/BoxLayout.hpp"
#include "../AntennaAppStyle.hpp"

M module-apps/application-antenna/windows/AntennaMainWindow.cpp => module-apps/application-antenna/windows/AntennaMainWindow.cpp +1 -1
@@ 13,7 13,7 @@
#include "gui/widgets/Label.hpp"
#include "gui/widgets/Window.hpp"

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include <Style.hpp>

#include "../AntennaAppStyle.hpp"

M module-apps/application-antenna/windows/ScanModesWindow.cpp => module-apps/application-antenna/windows/ScanModesWindow.cpp +1 -1
@@ 7,7 7,7 @@
#include "gui/widgets/Label.hpp"
#include "gui/widgets/Window.hpp"

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include <Style.hpp>

#include "../AntennaAppStyle.hpp"

M module-apps/application-calculator/ApplicationCalculator.cpp => module-apps/application-calculator/ApplicationCalculator.cpp +1 -1
@@ 3,7 3,7 @@

#include "ApplicationCalculator.hpp"
#include "windows/CalculatorMainWindow.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace app
{

M module-apps/application-calculator/data/CalculatorUtility.cpp => module-apps/application-calculator/data/CalculatorUtility.cpp +1 -1
@@ 4,7 4,7 @@
#include "CalculatorUtility.hpp"
#include "application-calculator/widgets/CalculatorStyle.hpp"
#include <module-utils/tinyexpr/tinyexpr.h>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <Utils.hpp>
#include <cmath>


M module-apps/application-calculator/tests/CalculatorUtility_tests.cpp => module-apps/application-calculator/tests/CalculatorUtility_tests.cpp +2 -1
@@ 4,8 4,9 @@
#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>
#include "application-calculator/data/CalculatorUtility.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <cstring>
#include <vfs.hpp>

class vfs vfs;


M module-apps/application-calculator/windows/CalculatorMainWindow.cpp => module-apps/application-calculator/windows/CalculatorMainWindow.cpp +1 -1
@@ 4,7 4,7 @@
#include "CalculatorMainWindow.hpp"
#include "application-calculator/widgets/CalculatorStyle.hpp"
#include "application-calculator/data/CalculatorUtility.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-call/widgets/StateIcon.hpp => module-apps/application-call/widgets/StateIcon.hpp +1 -1
@@ 7,7 7,7 @@
#include "Label.hpp"
#include <Style.hpp>
#include <log/log.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-call/windows/CallWindow.cpp => module-apps/application-call/windows/CallWindow.cpp +1 -1
@@ 13,7 13,7 @@
#include "application-call/ApplicationCall.hpp"
#include "application-call/data/CallSwitchData.hpp"

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>

#include <service-audio/AudioServiceAPI.hpp>
#include <service-cellular/CellularServiceAPI.hpp>

M module-apps/application-call/windows/EmergencyCallWindow.cpp => module-apps/application-call/windows/EmergencyCallWindow.cpp +1 -1
@@ 5,7 5,7 @@
#include "../ApplicationCall.hpp"
#include <service-appmgr/model/ApplicationManager.hpp>

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "EmergencyCallWindow.hpp"

namespace gui

M module-apps/application-call/windows/EnterNumberWindow.cpp => module-apps/application-call/windows/EnterNumberWindow.cpp +1 -1
@@ 9,7 9,7 @@

#include <ContactRecord.hpp>
#include <country.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <InputMode.hpp>
#include <service-appmgr/Controller.hpp>
#include <service-cellular/CellularServiceAPI.hpp>

M module-apps/application-calllog/ApplicationCallLog.cpp => module-apps/application-calllog/ApplicationCallLog.cpp +1 -1
@@ 13,7 13,7 @@
#include <service-db/DBMessage.hpp>
#include <Dialog.hpp>
#include <OptionWindow.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <log/log.hpp>
#include <MessageType.hpp>
#include <module-db/queries/calllog/QueryCalllogSetAllRead.hpp>

M module-apps/application-calllog/windows/CallLogDetailsWindow.cpp => module-apps/application-calllog/windows/CallLogDetailsWindow.cpp +1 -1
@@ 14,7 14,7 @@
#include "../ApplicationCallLog.hpp"

#include <service-db/DBMessage.hpp>
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>

#include "../data/CallLogInternals.hpp" // TODO: alek: add easier paths
#include "../data/CallLogSwitchData.hpp"

M module-apps/application-calllog/windows/CallLogMainWindow.cpp => module-apps/application-calllog/windows/CallLogMainWindow.cpp +1 -1
@@ 9,7 9,7 @@
#include <application-call/ApplicationCall.hpp>
#include <service-appmgr/model/ApplicationManager.hpp>
#include <service-db/DBCalllogMessage.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <Label.hpp>
#include <Margins.hpp>
#include <Style.hpp>

M module-apps/application-calllog/windows/CallLogOptionsWindow.cpp => module-apps/application-calllog/windows/CallLogOptionsWindow.cpp +1 -1
@@ 2,7 2,7 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "CallLogOptionsWindow.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "log/log.hpp"
#include <Options.hpp>
#include <module-services/service-db/service-db/DBServiceAPI.hpp>

M module-apps/application-desktop/windows/DesktopMainWindow.cpp => module-apps/application-desktop/windows/DesktopMainWindow.cpp +1 -1
@@ 18,7 18,7 @@
#include <service-time/ServiceTime.hpp>
#include <service-time/TimeMessage.hpp>

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "log/log.hpp"

#include <application-settings-new/ApplicationSettings.hpp>

M module-apps/application-desktop/windows/LockedInfoWindow.cpp => module-apps/application-desktop/windows/LockedInfoWindow.cpp +1 -1
@@ 13,7 13,7 @@
#include "Names.hpp"

#include <application-phonebook/ApplicationPhonebook.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

using namespace gui;


M module-apps/application-desktop/windows/MenuWindow.cpp => module-apps/application-desktop/windows/MenuWindow.cpp +1 -1
@@ 11,7 11,7 @@
#include <tools/Common.hpp>
#include <Style.hpp>
#include <cassert>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace style::design
{

M module-apps/application-desktop/windows/PinLockBaseWindow.cpp => module-apps/application-desktop/windows/PinLockBaseWindow.cpp +1 -1
@@ 4,7 4,7 @@
#include "PinLockBaseWindow.hpp"
#include "application-desktop/data/AppDesktopStyle.hpp"
#include "application-desktop/widgets/PinLock.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

#include "FontManager.hpp"


M module-apps/application-desktop/windows/PowerOffWindow.cpp => module-apps/application-desktop/windows/PowerOffWindow.cpp +1 -1
@@ 7,7 7,7 @@
#include "log/log.hpp"

// module-utils
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>

#include "PowerOffWindow.hpp"
#include "../ApplicationDesktop.hpp"

M module-apps/application-desktop/windows/PukLockBox.cpp => module-apps/application-desktop/windows/PukLockBox.cpp +1 -1
@@ 7,7 7,7 @@
#include "application-desktop/widgets/PinLock.hpp"
#include "application-desktop/data/AppDesktopStyle.hpp"
#include "gui/widgets/Image.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <Style.hpp>

namespace label_style = style::window::pin_lock::pin_label;

M module-apps/application-desktop/windows/Reboot.cpp => module-apps/application-desktop/windows/Reboot.cpp +1 -1
@@ 4,7 4,7 @@
#include "Reboot.hpp"
#include "../ApplicationDesktop.hpp"
#include <Style.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-desktop/windows/ScreenLockBox.cpp => module-apps/application-desktop/windows/ScreenLockBox.cpp +1 -1
@@ 8,7 8,7 @@
#include "application-desktop/data/AppDesktopStyle.hpp"
#include "gui/widgets/Label.hpp"
#include "gui/widgets/Image.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace label_style = style::window::pin_lock::pin_label;


M module-apps/application-meditation/widgets/IntervalBox.cpp => module-apps/application-meditation/widgets/IntervalBox.cpp +1 -1
@@ 8,7 8,7 @@
#include "TimerProperty.hpp"
#include "InputEvent.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <cassert>

using namespace gui;

M module-apps/application-meditation/widgets/MeditationListItems.cpp => module-apps/application-meditation/widgets/MeditationListItems.cpp +1 -1
@@ 4,7 4,7 @@
#include "MeditationListItems.hpp"
#include "application-meditation/data/Style.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

using namespace gui;
namespace listStyle = style::meditation::itemList;

M module-apps/application-meditation/widgets/TimerProperty.cpp => module-apps/application-meditation/widgets/TimerProperty.cpp +1 -1
@@ 3,7 3,7 @@

#include "TimerProperty.hpp"
#include <application-meditation/data/Style.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <module-utils/Utils.hpp>

using namespace gui;

M module-apps/application-meditation/windows/MeditationListViewWindows.cpp => module-apps/application-meditation/windows/MeditationListViewWindows.cpp +1 -1
@@ 9,7 9,7 @@

#include "ListView.hpp"
#include "Label.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

using namespace gui;
namespace listViewWindow = style::meditation::listView::window;

M module-apps/application-meditation/windows/MeditationTimerWindow.cpp => module-apps/application-meditation/windows/MeditationTimerWindow.cpp +1 -1
@@ 9,7 9,7 @@
#include "Names.hpp"

#include <cassert>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

#include "RichTextParser.hpp"
#include "FontManager.hpp"

M module-apps/application-meditation/windows/MeditationWindow.cpp => module-apps/application-meditation/windows/MeditationWindow.cpp +1 -1
@@ 13,7 13,7 @@
#include "InputEvent.hpp"
#include <cassert>

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-messages/ApplicationMessages.cpp => module-apps/application-messages/ApplicationMessages.cpp +1 -1
@@ 17,7 17,7 @@

#include <MessageType.hpp>
#include <Dialog.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <memory>
#include <service-db/DBServiceAPI.hpp>
#include <service-db/DBNotificationMessage.hpp>

M module-apps/application-messages/widgets/SMSInputWidget.cpp => module-apps/application-messages/widgets/SMSInputWidget.cpp +1 -1
@@ 7,7 7,7 @@
#include <module-apps/application-messages/ApplicationMessages.hpp>

#include <Style.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <Font.hpp>
#include <utility>
#include <algorithm>

M module-apps/application-messages/windows/MessagesMainWindow.cpp => module-apps/application-messages/windows/MessagesMainWindow.cpp +1 -1
@@ 13,7 13,7 @@
#include <service-db/DBNotificationMessage.hpp>

#include <service-appmgr/model/ApplicationManager.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <application-phonebook/data/PhonebookItemData.hpp>
#include <Style.hpp>
#include <log/log.hpp>

M module-apps/application-messages/windows/NewMessage.cpp => module-apps/application-messages/windows/NewMessage.cpp +1 -1
@@ 11,7 11,7 @@
#include <application-phonebook/windows/PhonebookSearchResults.hpp>
#include <service-appmgr/Controller.hpp>
#include <service-db/DBServiceAPI.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <BoxLayout.hpp>
#include <Text.hpp>


M module-apps/application-messages/windows/OptionsMessages.cpp => module-apps/application-messages/windows/OptionsMessages.cpp +1 -1
@@ 8,7 8,7 @@
#include <common_data/Clipboard.hpp>
#include <Options.hpp>
#include <OptionWindow.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <log/log.hpp>

#include <Text.hpp>

M module-apps/application-messages/windows/SMSTemplatesWindow.cpp => module-apps/application-messages/windows/SMSTemplatesWindow.cpp +1 -1
@@ 9,7 9,7 @@

#include <service-appmgr/Controller.hpp>
#include <service-db/DBSMSTemplateMessage.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <Style.hpp>
#include <log/log.hpp>


M module-apps/application-messages/windows/SearchResults.cpp => module-apps/application-messages/windows/SearchResults.cpp +1 -1
@@ 12,7 12,7 @@
#include <service-db/QueryMessage.hpp>
#include <service-db/DBMessage.hpp>

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-messages/windows/SearchStart.cpp => module-apps/application-messages/windows/SearchStart.cpp +1 -1
@@ 3,7 3,7 @@

#include "SearchStart.hpp"
#include "../ApplicationMessages.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <widgets/InputBox.hpp>
#include <cassert>


M module-apps/application-messages/windows/ThreadWindowOptions.cpp => module-apps/application-messages/windows/ThreadWindowOptions.cpp +1 -1
@@ 2,7 2,7 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ThreadWindowOptions.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "log/log.hpp"
#include <Options.hpp>
#include <OptionWindow.hpp>

M module-apps/application-music-player/ApplicationMusicPlayer.cpp => module-apps/application-music-player/ApplicationMusicPlayer.cpp +2 -1
@@ 6,9 6,10 @@
#include "windows/MusicPlayerEmptyWindow.hpp"

#include <service-audio/AudioServiceAPI.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <log/log.hpp>
#include <time/ScopedTime.hpp>
#include <vfs.hpp>

namespace app
{

M module-apps/application-music-player/windows/MusicPlayerAllSongsWindow.cpp => module-apps/application-music-player/windows/MusicPlayerAllSongsWindow.cpp +1 -1
@@ 6,7 6,7 @@

#include <Style.hpp>
#include <cassert>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <log/log.hpp>
#include <service-audio/AudioServiceAPI.hpp>


M module-apps/application-music-player/windows/MusicPlayerEmptyWindow.cpp => module-apps/application-music-player/windows/MusicPlayerEmptyWindow.cpp +1 -1
@@ 6,7 6,7 @@
#include "application-music-player/data/MusicPlayerStyle.hpp"

#include <Style.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <log/log.hpp>
#include <service-audio/AudioServiceAPI.hpp>


M module-apps/application-notes/windows/NoteEditWindow.cpp => module-apps/application-notes/windows/NoteEditWindow.cpp +1 -1
@@ 13,7 13,7 @@
#include <module-apps/application-notes/style/NoteEditStyle.hpp>
#include <module-apps/messages/OptionsWindow.hpp>

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <module-utils/time/time_conversion.hpp>

#include <module-gui/gui/widgets/BottomBar.hpp>

M module-apps/application-notes/windows/NoteMainWindow.cpp => module-apps/application-notes/windows/NoteMainWindow.cpp +1 -1
@@ 9,7 9,7 @@
#include <InputEvent.hpp>
#include <service-db/DBNotesMessage.hpp>

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

#include <gui/widgets/Label.hpp>
#include <gui/widgets/BottomBar.hpp>

M module-apps/application-notes/windows/NotePreviewWindow.cpp => module-apps/application-notes/windows/NotePreviewWindow.cpp +1 -1
@@ 9,7 9,7 @@
#include <module-apps/application-notes/windows/NotesOptions.hpp>
#include <module-apps/messages/OptionsWindow.hpp>

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <module-utils/time/time_conversion.hpp>

#include <Style.hpp>

M module-apps/application-notes/windows/NotesOptions.cpp => module-apps/application-notes/windows/NotesOptions.cpp +1 -1
@@ 9,7 9,7 @@
#include <module-apps/windows/DialogMetadata.hpp>
#include <module-apps/messages/DialogMetadataMessage.hpp>

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

#include <module-gui/gui/widgets/Text.hpp>


M module-apps/application-notes/windows/SearchEngineWindow.cpp => module-apps/application-notes/windows/SearchEngineWindow.cpp +1 -1
@@ 7,7 7,7 @@
#include <module-apps/application-notes/data/NotesFoundData.hpp>
#include <module-apps/widgets/InputBox.hpp>

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace app::notes
{

M module-apps/application-phonebook/widgets/ContactFlagsWidget.cpp => module-apps/application-phonebook/widgets/ContactFlagsWidget.cpp +1 -1
@@ 8,7 8,7 @@

#include <Alignment.hpp>
#include <BoxLayout.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <tools/Common.hpp>
#include <Style.hpp>


M module-apps/application-phonebook/widgets/InformationWidget.cpp => module-apps/application-phonebook/widgets/InformationWidget.cpp +1 -1
@@ 7,7 7,7 @@
#include "application-phonebook/data/PhonebookStyle.hpp"

#include <ContactRecord.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-phonebook/widgets/InputBoxWithLabelAndIconWidget.cpp => module-apps/application-phonebook/widgets/InputBoxWithLabelAndIconWidget.cpp +1 -1
@@ 6,7 6,7 @@
#include "application-phonebook/data/PhonebookStyle.hpp"

#include <BottomBar.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

#include <utility>


M module-apps/application-phonebook/widgets/InputLinesWithLabelIWidget.cpp => module-apps/application-phonebook/widgets/InputLinesWithLabelIWidget.cpp +1 -1
@@ 7,7 7,7 @@
#include "application-phonebook/data/PhonebookStyle.hpp"

#include <ContactRecord.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <utility>

namespace gui

M module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp => module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp +1 -1
@@ 7,7 7,7 @@
#include "application-phonebook/data/PhonebookStyle.hpp"

#include <ContactRecord.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/ApplicationSettings.cpp => module-apps/application-settings-new/ApplicationSettings.cpp +1 -1
@@ 28,10 28,10 @@

#include <service-evtmgr/EventManagerServiceAPI.hpp>
#include <service-bluetooth/BluetoothMessage.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <service-cellular/CellularServiceAPI.hpp>
#include <service-db/Settings.hpp>
#include <module-services/service-db/agents/settings/SystemSettings.hpp>
#include <i18n/i18n.hpp>

namespace app
{

M module-apps/application-settings-new/widgets/timeWidget.cpp => module-apps/application-settings-new/widgets/timeWidget.cpp +1 -1
@@ 5,7 5,7 @@
#include "SettingsStyle.hpp"

#include <Style.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/widgets/timeWidget.hpp => module-apps/application-settings-new/widgets/timeWidget.hpp +1 -0
@@ 5,6 5,7 @@

#include <Label.hpp>
#include <Text.hpp>
#include <chrono>

namespace gui
{

M module-apps/application-settings-new/windows/AddDeviceWindow.cpp => module-apps/application-settings-new/windows/AddDeviceWindow.cpp +1 -1
@@ 6,7 6,7 @@

#include "OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <utility>

namespace gui

M module-apps/application-settings-new/windows/AllDevicesWindow.cpp => module-apps/application-settings-new/windows/AllDevicesWindow.cpp +1 -1
@@ 10,7 10,7 @@
#include "DialogMetadataMessage.hpp"

#include <InputEvent.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <service-bluetooth/BluetoothMessage.hpp>

namespace gui

M module-apps/application-settings-new/windows/AppsAndToolsWindow.cpp => module-apps/application-settings-new/windows/AppsAndToolsWindow.cpp +1 -1
@@ 4,7 4,7 @@
#include "AppsAndToolsWindow.hpp"

#include <application-settings-new/ApplicationSettings.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <OptionWindow.hpp>

namespace gui

M module-apps/application-settings-new/windows/AutolockWindow.cpp => module-apps/application-settings-new/windows/AutolockWindow.cpp +1 -1
@@ 5,7 5,7 @@
#include "application-settings-new/ApplicationSettings.hpp"
#include "windows/OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/windows/BaseSettingsWindow.cpp => module-apps/application-settings-new/windows/BaseSettingsWindow.cpp +1 -1
@@ 3,7 3,7 @@

#include "BaseSettingsWindow.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/windows/BluetoothWindow.cpp => module-apps/application-settings-new/windows/BluetoothWindow.cpp +1 -1
@@ 6,7 6,7 @@

#include "OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <service-bluetooth/BluetoothMessage.hpp>

namespace gui

M module-apps/application-settings-new/windows/DisplayAndKeypadWindow.cpp => module-apps/application-settings-new/windows/DisplayAndKeypadWindow.cpp +1 -1
@@ 7,7 7,7 @@
#include "windows/OptionWindow.hpp"
#include "windows/OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/windows/DisplayLightWindow.cpp => module-apps/application-settings-new/windows/DisplayLightWindow.cpp +1 -1
@@ 6,7 6,7 @@
#include "application-settings-new/ApplicationSettings.hpp"
#include "windows/OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/windows/FontSizeWindow.cpp => module-apps/application-settings-new/windows/FontSizeWindow.cpp +1 -1
@@ 5,7 5,7 @@

#include "application-settings-new/ApplicationSettings.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/windows/InputLanguageWindow.cpp => module-apps/application-settings-new/windows/InputLanguageWindow.cpp +1 -1
@@ 6,7 6,7 @@
#include "application-settings-new/ApplicationSettings.hpp"
#include "windows/OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <module-services/service-appmgr/service-appmgr/Controller.hpp>

namespace gui

M module-apps/application-settings-new/windows/KeypadLightWindow.cpp => module-apps/application-settings-new/windows/KeypadLightWindow.cpp +1 -1
@@ 6,7 6,7 @@
#include "application-settings-new/ApplicationSettings.hpp"
#include "windows/OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/windows/LockedScreenWindow.cpp => module-apps/application-settings-new/windows/LockedScreenWindow.cpp +1 -1
@@ 5,7 5,7 @@
#include "application-settings-new/ApplicationSettings.hpp"
#include "windows/OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/windows/MessagesWindow.cpp => module-apps/application-settings-new/windows/MessagesWindow.cpp +1 -1
@@ 4,7 4,7 @@
#include "MessagesWindow.hpp"

#include <application-settings-new/ApplicationSettings.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <OptionWindow.hpp>
#include <OptionSetting.hpp>


M module-apps/application-settings-new/windows/NetworkWindow.cpp => module-apps/application-settings-new/windows/NetworkWindow.cpp +1 -1
@@ 6,7 6,7 @@

#include "OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/windows/QuotesAddWindow.cpp => module-apps/application-settings-new/windows/QuotesAddWindow.cpp +1 -1
@@ 5,7 5,7 @@

#include "application-settings-new/ApplicationSettings.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <widgets/Text.hpp>

namespace gui

M module-apps/application-settings-new/windows/QuotesMainWindow.cpp => module-apps/application-settings-new/windows/QuotesMainWindow.cpp +1 -1
@@ 8,7 8,7 @@
#include "windows/OptionSetting.hpp"

#include <InputEvent.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <json/json11.hpp>
#include <vfs.hpp>


M module-apps/application-settings-new/windows/SettingsMainWindow.cpp => module-apps/application-settings-new/windows/SettingsMainWindow.cpp +1 -1
@@ 4,7 4,7 @@
#include "SettingsMainWindow.hpp"
#include "application-settings-new/ApplicationSettings.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <log/log.hpp>
#include <service-appmgr/Controller.hpp>


M module-apps/application-settings-new/windows/TorchWindow.cpp => module-apps/application-settings-new/windows/TorchWindow.cpp +1 -1
@@ 7,7 7,7 @@

#include "OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings-new/windows/WallpaperWindow.cpp => module-apps/application-settings-new/windows/WallpaperWindow.cpp +1 -1
@@ 6,7 6,7 @@
#include "application-settings-new/ApplicationSettings.hpp"
#include "windows/OptionSetting.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings/ApplicationSettings.cpp => module-apps/application-settings/ApplicationSettings.cpp +1 -1
@@ 26,7 26,7 @@
#include "windows/CellularPassthroughWindow.hpp"
#include "windows/SettingsChange.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <service-evtmgr/EventManagerServiceAPI.hpp>
#include <service-bluetooth/BluetoothMessage.hpp>
#include <service-db/Settings.hpp>

M module-apps/application-settings/windows/BtScanWindow.cpp => module-apps/application-settings/windows/BtScanWindow.cpp +1 -1
@@ 8,7 8,7 @@

#include "../ApplicationSettings.hpp"

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>

#include "BtScanWindow.hpp"
#include "Label.hpp"

M module-apps/application-settings/windows/BtWindow.cpp => module-apps/application-settings/windows/BtWindow.cpp +1 -1
@@ 9,7 9,7 @@
#include "../ApplicationSettings.hpp"
#include "../windows/BtScanWindow.hpp"

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>

#include "BtWindow.hpp"
#include "Label.hpp"

M module-apps/application-settings/windows/CellularPassthroughWindow.cpp => module-apps/application-settings/windows/CellularPassthroughWindow.cpp +1 -1
@@ 2,7 2,7 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "CellularPassthroughWindow.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <module-bsp/bsp/cellular/bsp_cellular.hpp>
#include "Label.hpp"
#include <cassert>

M module-apps/application-settings/windows/DateTimeWindow.cpp => module-apps/application-settings/windows/DateTimeWindow.cpp +1 -1
@@ 16,7 16,7 @@
#include "../ApplicationSettings.hpp"
#include "DateTimeWindow.hpp"

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "time/time_conversion.hpp"
#include "time/time_date_validation.hpp"


M module-apps/application-settings/windows/EinkModeWindow.cpp => module-apps/application-settings/windows/EinkModeWindow.cpp +1 -1
@@ 10,7 10,7 @@
#include "service-appmgr/Controller.hpp"
#include "../ApplicationSettings.hpp"

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>

#include "Label.hpp"
#include "Margins.hpp"

M module-apps/application-settings/windows/FotaWindow.cpp => module-apps/application-settings/windows/FotaWindow.cpp +1 -1
@@ 5,7 5,7 @@

#include "Fota.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/application-settings/windows/Info.cpp => module-apps/application-settings/windows/Info.cpp +2 -1
@@ 14,7 14,8 @@
#include <gui/widgets/Margins.hpp>
#include <gui/widgets/Style.hpp>

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <vfs.hpp>

namespace gui
{

M module-apps/application-settings/windows/LanguageWindow.cpp => module-apps/application-settings/windows/LanguageWindow.cpp +1 -1
@@ 7,7 7,7 @@

#include "../ApplicationSettings.hpp"

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>

#include "Label.hpp"
#include "LanguageWindow.hpp"

M module-apps/application-settings/windows/SettingsChange.cpp => module-apps/application-settings/windows/SettingsChange.cpp +1 -1
@@ 3,7 3,7 @@

#include "SettingsChange.hpp"
#include "../ApplicationSettings.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "tools/Common.hpp"
#include <widgets/Text.hpp>
#include <widgets/TextFixedSize.hpp>

M module-apps/application-settings/windows/SettingsMainWindow.cpp => module-apps/application-settings/windows/SettingsMainWindow.cpp +1 -1
@@ 4,7 4,7 @@
#include "SettingsMainWindow.hpp"
#include "../ApplicationSettings.hpp"
#include "Info.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "log/log.hpp"
#include "CellularPassthroughWindow.hpp"
#include "FotaWindow.hpp"

M module-apps/application-settings/windows/SimSelectWindow.cpp => module-apps/application-settings/windows/SimSelectWindow.cpp +1 -1
@@ 4,7 4,7 @@
#include "SimSelectWindow.hpp"
#include "Info.hpp"
#include "SettingsMainWindow.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "log/log.hpp"
#include <common_data/EventStore.hpp>
#include <service-db/DBServiceAPI.hpp>

M module-apps/application-settings/windows/TestMessageWindow.cpp => module-apps/application-settings/windows/TestMessageWindow.cpp +1 -1
@@ 15,7 15,7 @@

#include "../ApplicationSettings.hpp"

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>

#include "Label.hpp"
#include "Margins.hpp"

M module-apps/application-settings/windows/UITestWindow.cpp => module-apps/application-settings/windows/UITestWindow.cpp +1 -1
@@ 5,7 5,7 @@
#include "../ApplicationSettings.hpp"
#include "Label.hpp"
#include "Margins.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "log/log.hpp"
#include "messages/AppMessage.hpp"
#include <service-appmgr/model/ApplicationManager.hpp>

M module-apps/application-special-input/windows/SpecialInputMainWindow.cpp => module-apps/application-special-input/windows/SpecialInputMainWindow.cpp +1 -1
@@ 5,7 5,7 @@
#include "../ApplicationSpecialInput.hpp"
#include "Style.hpp"
#include "messages/AppMessage.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <cassert>

using namespace gui;

M module-apps/widgets/BrightnessBox.cpp => module-apps/widgets/BrightnessBox.cpp +1 -1
@@ 1,7 1,7 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include "BightnessBox.hpp"

namespace gui

M module-apps/widgets/ButtonOnOff.cpp => module-apps/widgets/ButtonOnOff.cpp +1 -1
@@ 4,7 4,7 @@
#include "ButtonOnOff.hpp"

#include <Style.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace gui
{

M module-apps/widgets/ModesBox.cpp => module-apps/widgets/ModesBox.cpp +1 -1
@@ 1,7 1,7 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include "ModesBox.hpp"

namespace gui

M module-apps/windows/AppWindow.cpp => module-apps/windows/AppWindow.cpp +1 -1
@@ 6,7 6,7 @@
#include "InputEvent.hpp"
#include <Style.hpp>
#include <application-desktop/ApplicationDesktop.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <service-appmgr/Controller.hpp>
#include <service-audio/AudioServiceAPI.hpp>


M module-apps/windows/Dialog.cpp => module-apps/windows/Dialog.cpp +1 -1
@@ 4,7 4,7 @@
#include "Dialog.hpp"
#include "DialogMetadataMessage.hpp"
#include <service-appmgr/model/ApplicationManager.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

using namespace gui;


M module-apps/windows/OptionWindow.cpp => module-apps/windows/OptionWindow.cpp +1 -1
@@ 4,7 4,7 @@
#include "OptionWindow.hpp"
#include "Label.hpp"
#include "Margins.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "log/log.hpp"
#include <service-appmgr/model/ApplicationManager.hpp>
#include <Style.hpp>

M module-apps/windows/Options.cpp => module-apps/windows/Options.cpp +1 -1
@@ 5,7 5,7 @@
#include "Text.hpp"
#include "tools/Common.hpp"
#include <cassert>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <utility>
#include <FontManager.hpp>


M module-apps/windows/VolumeWindow.cpp => module-apps/windows/VolumeWindow.cpp +1 -1
@@ 2,7 2,7 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <module-gui/gui/input/InputEvent.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include "VolumeWindow.hpp"

namespace gui

M module-db/Database/sqlite3vfs.cpp => module-db/Database/sqlite3vfs.cpp +1 -0
@@ 119,6 119,7 @@
#include <errno.h>
#include <memory>
#include <cstring>
#include <filesystem>

#include "FreeRTOS.h"
#include "task.h"

M module-db/Interface/ContactRecord.hpp => module-db/Interface/ContactRecord.hpp +2 -1
@@ 7,7 7,7 @@
#include <Common/Query.hpp>
#include <Tables/ContactsGroups.hpp>

#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "Record.hpp"
#include "utf8/UTF8.hpp"



@@ 19,6 19,7 @@
#include <memory>
#include <optional>
#include <set>
#include <sstream>

struct ContactRecord : public Record
{

M module-db/Interface/SettingsRecord.hpp => module-db/Interface/SettingsRecord.hpp +1 -1
@@ 7,7 7,7 @@
#include "utf8/UTF8.hpp"
#include "../Common/Common.hpp"
#include "../Databases/SettingsDB.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>

struct SettingsRecord
{

M module-db/Tables/SettingsTable.hpp => module-db/Tables/SettingsTable.hpp +1 -1
@@ 7,7 7,7 @@
#include "Database/Database.hpp"
#include "utf8/UTF8.hpp"
#include "Common/Common.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>

struct SettingsTableRow
{

M module-db/tests/ContactsRecord_tests.cpp => module-db/tests/ContactsRecord_tests.cpp +1 -1
@@ 4,7 4,7 @@
#include <catch2/catch.hpp>

#include "Interface/ContactRecord.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "vfs.hpp"
#include <purefs/filesystem_paths.hpp>


M module-gui/CMakeLists.txt => module-gui/CMakeLists.txt +1 -2
@@ 19,10 19,9 @@ include(gui/widgets/CMakeLists.txt)
include(gui/input/CMakeLists.txt)
include(gui/dom/CMakeLists.txt)

include_directories( ../module-vfs )
include_directories( ../module-utils )

target_link_libraries(${PROJECT_NAME} PUBLIC module-utils module-vfs ${TARGET_LIBRARIES} )
target_link_libraries(${PROJECT_NAME} PUBLIC module-utils ${TARGET_LIBRARIES} )

# Board specific compilation definitions,options,include directories and features
target_compile_definitions(${PROJECT_NAME} PUBLIC ${PROJECT_CONFIG_DEFINITIONS})

M module-gui/gui/core/FontManager.cpp => module-gui/gui/core/FontManager.cpp +13 -11
@@ 6,7 6,9 @@
#include "FontInfo.hpp" // for FontInfo
#include "RawFont.hpp"  // for RawFont
#include "log/log.hpp"  // for LOG_ERROR, LOG_INFO, LOG_WARN
#include "vfs.hpp"      // for vfs, vfs::DirectoryEntry, vfs::FileAttributes
#include <Utils.hpp>
#include <filesystem>
#include <cstdio>

namespace style::window::font
{


@@ 42,23 44,24 @@ namespace gui
    RawFont *FontManager::loadFont(std::string filename)
    {

        auto file = vfs.fopen(filename.c_str(), "rb");
        auto file = std::fopen(filename.c_str(), "rb");

        auto fileSize = vfs.filelength(file);
        auto fileSize = utils::filesystem::filelength(file);
        std::rewind(file);

        char *fontData = new char[fileSize];
        if (fontData == nullptr) {
            vfs.fclose(file);
            std::fclose(file);
            LOG_ERROR(" Failed to allocate temporary font buffer");
            return nullptr;
        }

        // read data to buffer
        auto bytesRead = vfs.fread(fontData, 1, fileSize, file);
        auto bytesRead = std::fread(fontData, 1, fileSize, file);

        // close file
        vfs.fclose(file);
        if (bytesRead != fileSize) {
        std::fclose(file);
        if (static_cast<long>(bytesRead) != fileSize) {
            LOG_ERROR("Failed to read all file");
            delete[] fontData;
            return nullptr;


@@ 96,11 99,10 @@ namespace gui
        std::vector<std::string> fontFiles;

        LOG_INFO("Scanning fonts folder: %s", fontFolder.c_str());
        auto dirList = vfs.listdir(fontFolder.c_str());

        for (vfs::DirectoryEntry ent : dirList) {
            if ((ent.attributes != vfs::FileAttributes::Directory) && hasEnding(ent.fileName, ".mpf")) {
                fontFiles.push_back(fontFolder + "/" + ent.fileName);
        for (const auto &entry : std::filesystem::directory_iterator(fontFolder)) {
            if (!std::filesystem::is_directory(entry) && entry.path().extension() == ".mpf") {
                fontFiles.push_back(entry.path().string());
            }
        }


M module-gui/gui/core/ImageManager.cpp => module-gui/gui/core/ImageManager.cpp +17 -15
@@ 11,7 11,9 @@
#include <set>
#include <string>

#include <cstdio>
#include <cstring>
#include <filesystem>

#include "ImageManager.hpp"
#include "utf8/UTF8.hpp"


@@ 20,7 22,7 @@
#include "ImageMap.hpp"
#include "VecMap.hpp"
#include "PixMap.hpp"
#include "vfs.hpp"
#include <Utils.hpp>

namespace gui
{


@@ 82,22 84,22 @@ namespace gui
    ImageMap *ImageManager::loadPixMap(std::string filename)
    {

        auto file = vfs.fopen(filename.c_str(), "rb");
        auto file = std::fopen(filename.c_str(), "rb");

        auto fileSize = vfs.filelength(file);
        auto fileSize = utils::filesystem::filelength(file);

        char *data = new char[fileSize];
        if (data == nullptr) {
            vfs.fclose(file);
            std::fclose(file);
            LOG_ERROR(" Failed to allocate temporary font buffer");
            return nullptr;
        }

        // read data to buffer
        vfs.fread(data, 1, fileSize, file);
        std::fread(data, 1, fileSize, file);

        // close file
        vfs.fclose(file);
        std::fclose(file);

        // allocate memory for new font
        PixMap *pixMap = new PixMap();


@@ 126,22 128,22 @@ namespace gui
    ImageMap *ImageManager::loadVecMap(std::string filename)
    {

        auto file = vfs.fopen(filename.c_str(), "rb");
        auto file = std::fopen(filename.c_str(), "rb");

        auto fileSize = vfs.filelength(file);
        auto fileSize = utils::filesystem::filelength(file);

        char *data = new char[fileSize];
        if (data == nullptr) {
            vfs.fclose(file);
            std::fclose(file);
            LOG_ERROR(" Failed to allocate temporary font buffer");
            return nullptr;
        }

        // read data to buffer
        vfs.fread(data, 1, fileSize, file);
        std::fread(data, 1, fileSize, file);

        // close file
        vfs.fclose(file);
        std::fclose(file);

        VecMap *vecMap = new VecMap();
        if (vecMap->load(reinterpret_cast<uint8_t *>(data), fileSize) != gui::Status::GUI_SUCCESS) {


@@ 171,11 173,11 @@ namespace gui
        std::vector<std::string> mapFiles;

        LOG_INFO("Scanning %s images folder: %s", ext.c_str(), mapFolder.c_str());
        auto dirList = vfs.listdir(mapFolder.c_str(), ext);

        for (vfs::DirectoryEntry ent : dirList) {
            if (ent.attributes != vfs::FileAttributes::Directory)
                mapFiles.push_back(mapFolder + "/" + ent.fileName);
        for (const auto &entry : std::filesystem::directory_iterator(mapFolder)) {
            if (!entry.is_directory() && entry.path().extension() == ext) {
                mapFiles.push_back(entry.path().string());
            }
        }

        LOG_INFO("Total number of images: %u", static_cast<unsigned int>(mapFiles.size()));

M module-gui/gui/input/Profile.cpp => module-gui/gui/input/Profile.cpp +24 -15
@@ 7,19 7,14 @@
#include <sstream>
#include "log/log.hpp"
#include "utf8/UTF8.hpp"
#include "vfs.hpp"
#include "Profile.hpp"
#include <Utils.hpp>

namespace gui
{

    const uint32_t KeyProfile::none_key = 0;

    KeyProfile::KeyProfile()
    {}
    KeyProfile::~KeyProfile()
    {}

    Profile::Profile(const std::string &name)
    {
        LOG_INFO("Create!");


@@ 67,9 62,19 @@ namespace gui
        return elems;
    }

    bool Profile::load(std::string filename)
    void Profile::clear()
    {
        keys.clear();
    }

    std::string Profile::getName() const noexcept
    {
        return name;
    }

    bool Profile::load(const std::string &filename)
    {
        auto file = vfs.fopen(filename.c_str(), "rb");
        auto file = std::fopen(filename.c_str(), "rb");

        if (file == nullptr) {
            LOG_FATAL("no KeyProfile file: %s", filename.c_str());


@@ 89,9 94,8 @@ namespace gui

        KeyProfile *pk = nullptr;
        KeyProfile tmp;
        while (vfs.eof(file) != true) {

            std::string line = trim(vfs.getline(file));
        while (std::feof(file) != true) {
            const auto line = trim(utils::filesystem::getline(file));
            if ((line[0] == '#') || (line.empty())) {
                continue;
            }


@@ 141,7 145,7 @@ namespace gui
            }
        }

        vfs.fclose(file);
        std::fclose(file);

        return true;
    }


@@ 177,7 181,7 @@ namespace gui
        return elems;
    }

    void Profile::addCharacters(KeyProfile *pk, const std::string &s)
    void Profile::addCharacters(KeyProfile *pk, const std::string &s) const
    {

        uint32_t charKey;


@@ 203,7 207,7 @@ namespace gui
            }
        }
    }
    void Profile::addTimeouts(KeyProfile *pk, const std::string &s)
    void Profile::addTimeouts(KeyProfile *pk, const std::string &s) const
    {
        uint32_t timeout;
        std::vector<std::string> vec = split(s, ',');


@@ 219,7 223,12 @@ namespace gui
            keys.insert(std::pair<uint32_t, KeyProfile *>(pk->keyCode, pk));
    }

    const KeyProfile *Profile::getKeyProfile(uint32_t keyCode)
    void Profile::setName(const std::string &name)
    {
        this->name = name;
    }

    const KeyProfile *Profile::getKeyProfile(uint32_t keyCode) const
    {
        auto key = keys.find(keyCode);
        if (key != keys.end())

M module-gui/gui/input/Profile.hpp => module-gui/gui/input/Profile.hpp +8 -19
@@ 15,12 15,10 @@ namespace gui
        static const uint32_t none_key; /// defaults to 0
        uint32_t keyCode = none_key;
        bool cyclic      = false;
        ;
        std::vector<uint32_t> chars;
        std::vector<uint32_t> timeouts;

        KeyProfile();
        virtual ~KeyProfile();
        virtual ~KeyProfile() = default;

        void addCharacters(const std::string &s);
        void addTimeouts(const std::string &s);


@@ 31,30 29,21 @@ namespace gui
        std::string name;
        std::map<uint32_t, KeyProfile *> keys = {};

        void addCharacters(KeyProfile *pk, const std::string &s);
        void addTimeouts(KeyProfile *pk, const std::string &s);
        void addCharacters(KeyProfile *pk, const std::string &s) const;
        void addTimeouts(KeyProfile *pk, const std::string &s) const;
        void addKeyProfile(KeyProfile *pk);
        void setName(std::string name)
        {
            this->name = name;
        };
        const KeyProfile *getKeyProfile(uint32_t keyCode);
        void setName(const std::string &name);
        const KeyProfile *getKeyProfile(uint32_t keyCode) const;

      public:
        void clear()
        {
            this->keys.clear();
        };
        void clear();
        Profile() = default;
        Profile(const std::string &name);
        Profile(Profile &&p);
        virtual ~Profile();

        std::string getName()
        {
            return name;
        };
        bool load(std::string filename);
        [[nodiscard]] std::string getName() const noexcept;
        bool load(const std::string &filename);

        uint32_t get(bsp::KeyCodes code, uint32_t times);
    };

M module-gui/gui/input/Translator.cpp => module-gui/gui/input/Translator.cpp +58 -1
@@ 3,8 3,9 @@

#include "Translator.hpp"
#include "log/log.hpp"
#include "vfs.hpp"
#include <algorithm>
#include <log/log.hpp>
#include <filesystem>

namespace gui
{


@@ 182,4 183,60 @@ namespace gui
        return Profiles::get(keymap).get(key.key_code, times);
    }

    void Profiles::loadProfile(const std::string &filepath)
    {
        LOG_INFO("Load profile: %s", filepath.c_str());
        auto p = Profile(filepath);
        if (p.getName() != std::string()) {
            profiles.insert({p.getName(), std::move(p)});
        }
    }
    std::vector<std::string> Profiles::getProfilesList(std::string ext)
    {
        std::vector<std::string> profileFiles;
        LOG_INFO("Scanning %s profiles folder: %s", ext.c_str(), profilesFolder);

        for (const auto &entry : std::filesystem::directory_iterator(profilesFolder)) {
            if (!std::filesystem::is_directory(entry) && entry.path().extension().string() == ext) {
                profileFiles.push_back(entry.path().string());
            }
        }

        LOG_INFO("Total number of profiles: %u", static_cast<unsigned int>(profileFiles.size()));
        return profileFiles;
    }

    void Profiles::init()
    {
        std::vector<std::string> profileFiles = getProfilesList(".kprof");
        for (std::string mapName : profileFiles) {
            if (std::size(mapName)) {
                loadProfile(mapName);
            }
        }
        if (std::size(profiles) == 0) {
            LOG_ERROR("No keyboard profiles loaded");
        }
    }
    Profiles &Profiles::get()
    {
        static Profiles *p;
        if (p == nullptr) {
            p = new Profiles();
            p->init();
        }
        return *p;
    }
    Profile &Profiles::get(const std::string &name)
    {
        // if profile not in profile map -> load
        if (std::size(name) == 0) {
            LOG_ERROR("Request for non existend profile: %s", name.c_str());
            return get().empty;
        }
        if (get().profiles.find(name) == get().profiles.end()) {
            get().loadProfile(name);
        }
        return get().profiles[name];
    }
} /* namespace gui */

M module-gui/gui/input/Translator.hpp => module-gui/gui/input/Translator.hpp +6 -61
@@ 12,7 12,6 @@
#include <string>
#include <vector>
#include <common_data/RawKey.hpp>
#include <vfs.hpp>

namespace gui
{


@@ 71,69 70,15 @@ namespace gui
      private:
        const char *profilesFolder                   = "assets/profiles";
        std::map<std::string, gui::Profile> profiles = {};

        void loadProfile(const std::string &filepath)
        {
            LOG_INFO("Load profile: %s", filepath.c_str());
            auto p = Profile(filepath);
            if (p.getName() != std::string()) {
                profiles.insert({p.getName(), std::move(p)});
            }
        }

        std::vector<std::string> getProfilesList(std::string ext)
        {
            std::vector<std::string> profileFiles;
            LOG_INFO("Scanning %s profiles folder: %s", ext.c_str(), profilesFolder);
            auto dirList = vfs.listdir(profilesFolder, ext);

            for (vfs::DirectoryEntry ent : dirList) {
                if (ent.attributes != vfs::FileAttributes::Directory) {
                    profileFiles.push_back(std::string(profilesFolder) + "/" + ent.fileName);
                }
            }

            LOG_INFO("Total number of profiles: %u", static_cast<unsigned int>(profileFiles.size()));
            return profileFiles;
        }

        void init()
        {
            std::vector<std::string> profileFiles = getProfilesList(".kprof");
            for (std::string mapName : profileFiles) {
                if (std::size(mapName)) {
                    loadProfile(mapName);
                }
            }
            if (std::size(profiles) == 0) {
                LOG_ERROR("No keyboard profiles loaded");
            }
        }
        Profile empty;

      public:
        static Profiles &get()
        {
            static Profiles *p;
            if (p == nullptr) {
                p = new Profiles();
                p->init();
            }
            return *p;
        }
        void loadProfile(const std::string &filepath);
        std::vector<std::string> getProfilesList(std::string ext);
        void init();

        static Profile &get(const std::string &name)
        {
            // if profile not in profile map -> load
            if (std::size(name) == 0) {
                LOG_ERROR("Request for non existend profile: %s", name.c_str());
                return get().empty;
            }
            if (get().profiles.find(name) == get().profiles.end()) {
                get().loadProfile(name);
            }
            return get().profiles[name];
        }
      public:
        static Profiles &get();
        static Profile &get(const std::string &name);
    };

} /* namespace gui */

M module-gui/gui/widgets/Icon.cpp => module-gui/gui/widgets/Icon.cpp +1 -1
@@ 3,7 3,7 @@

#include "Icon.hpp"
#include "TextParse.hpp"
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <Style.hpp>
#include <Font.hpp>


M module-gui/gui/widgets/InputMode.cpp => module-gui/gui/widgets/InputMode.cpp +2 -1
@@ 2,8 2,9 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <InputMode.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <map>
#include <log/log.hpp>

/// input mode strings - as these are stored in json (in files...)
const std::map<InputMode::Mode, std::string> input_mode = {

M module-gui/gui/widgets/Text.cpp => module-gui/gui/widgets/Text.cpp +3 -4
@@ 17,7 17,6 @@
#include "TextParse.hpp"
#include "log/log.hpp"
#include "utf8/UTF8.hpp"
#include "vfs.hpp"
#include <Style.hpp>
#include <cassert>
#include <FontManager.hpp>


@@ 192,10 191,10 @@ namespace gui

    bool Text::saveText(UTF8 path)
    {
        if (auto file = vfs.fopen(path.c_str(), "wb")) {
        if (auto file = std::fopen(path.c_str(), "wb")) {
            auto text = getText();
            vfs.fwrite(text.c_str(), text.length(), text.length(), file);
            vfs.fclose(file);
            std::fwrite(text.c_str(), text.length(), text.length(), file);
            std::fclose(file);
            return true;
        }
        return false;

M module-gui/test/test-catch-text/CMakeLists.txt => module-gui/test/test-catch-text/CMakeLists.txt +0 -1
@@ 20,7 20,6 @@ add_catch2_executable(
                ../mock/
        LIBS
                module-gui
                module-vfs
        DEPS
                assets
)

M module-gui/test/test-catch-text/main.cpp => module-gui/test/test-catch-text/main.cpp +1 -1
@@ 4,7 4,7 @@
#define CATCH_CONFIG_MAIN
#include <catch2/catch.hpp>
#include <vfs.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

class vfs vfs;        // needed for compilation, our vfs is global
utils::i18n localize; // needed to load any keymap - these are stored in i18

M module-gui/test/test-catch-text/test-gui-Text.cpp => module-gui/test/test-catch-text/test-gui-Text.cpp +1 -1
@@ 6,7 6,7 @@
#include "Common.hpp"
#include "InitializedFontManager.hpp"
#include "TextParse.hpp"
#include "module-utils/i18n/i18n.hpp"
#include <i18n/i18n.hpp>
#include "mock/InitializedFontManager.hpp"
#include <catch2/catch.hpp>
#include <limits>

M module-gui/test/test-google/CMakeLists.txt => module-gui/test/test-google/CMakeLists.txt +1 -2
@@ 12,13 12,12 @@ target_include_directories(${PROJECT_NAME}
        PUBLIC
        "${CMAKE_CURRENT_LIST_DIR}"
        "${CMAKE_SOURCE_DIR}/module-utils"
        "${CMAKE_SOURCE_DIR}/module-vfs"
        "${CMAKE_SOURCE_DIR}/module-gui/test/"
        )

target_link_directories(${PROJECT_NAME} PUBLIC "${PROJECT_LIB_DIRECTORY}")

target_link_libraries(${PROJECT_NAME} PUBLIC module-vfs module-utils module-gui)
target_link_libraries(${PROJECT_NAME} PUBLIC module-utils module-gui)

target_link_libraries(${PROJECT_NAME} PUBLIC gtest gtest_main)


M module-services/service-appmgr/model/ApplicationManager.cpp => module-services/service-appmgr/model/ApplicationManager.cpp +1 -1
@@ 13,7 13,7 @@
#include <SystemManager/SystemManager.hpp>
#include <application-call/ApplicationCall.hpp>
#include <application-special-input/ApplicationSpecialInput.hpp>
#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>
#include <log/log.hpp>
#include <service-appmgr/messages/Message.hpp>
#include <service-db/DBServiceAPI.hpp>

M module-services/service-appmgr/service-appmgr/Controller.hpp => module-services/service-appmgr/service-appmgr/Controller.hpp +1 -1
@@ 10,7 10,7 @@
#include <module-sys/Service/Service.hpp>
#include <SwitchData.hpp>

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

#include <memory>
#include <string>

M module-services/service-appmgr/service-appmgr/messages/LanguageChangeRequest.hpp => module-services/service-appmgr/service-appmgr/messages/LanguageChangeRequest.hpp +1 -1
@@ 5,7 5,7 @@

#include "BaseMessage.hpp"

#include <module-utils/i18n/i18n.hpp>
#include <i18n/i18n.hpp>

namespace app::manager
{

M module-services/service-db/test/test-service-db-settings-api.cpp => module-services/service-db/test/test-service-db-settings-api.cpp +1 -0
@@ 18,6 18,7 @@
#include "test-service-db-settings-testmsgs.hpp"
#include "test-service-db-settings-testservices.hpp"
#include "test-service-db-settings-testapps.hpp"
#include <vfs.hpp>

struct vfs_initializer
{

M module-services/service-desktop/endpoints/factoryReset/FactoryReset.cpp => module-services/service-desktop/endpoints/factoryReset/FactoryReset.cpp +15 -6
@@ 2,7 2,9 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "FactoryReset.hpp"

#ifndef TARGET_Linux
#include <FreeRTOSFATConfig.h>
#endif
#include <SystemManager/SystemManager.hpp>
#include <log/log.hpp>
#include <purefs/filesystem_paths.hpp>


@@ 13,6 15,8 @@
#include <filesystem>
#include <memory>
#include <vector>
#include <purefs/filesystem_paths.hpp>
#include <purefs/fs/filesystem.hpp>

namespace sys
{


@@ 21,6 25,11 @@ namespace sys

namespace FactoryReset
{
    namespace
    {
        inline constexpr auto copy_buf = 8192 * 4;
    } // namespace

    static bool CopyFile(std::string sourcefile, std::string targetfile);

    static int recurseDepth             = 0;


@@ 78,7 87,7 @@ namespace FactoryReset
                delpath += direntry.path().string().c_str();

                if (std::filesystem::is_directory(direntry)) {
                    if (direntry.path().string().compare(PATH_FACTORY) != 0) {
                    if (direntry.path().string().compare(purefs::dir::getFactoryOSPath()) != 0) {
                        LOG_INFO("FactoryReset: recursively deleting dir %s...", delpath.c_str());
                        try {
                            std::filesystem::remove_all(delpath.c_str());


@@ 176,15 185,15 @@ namespace FactoryReset
        std::unique_ptr<std::FILE, decltype(lamb)> tf(std::fopen(targetfile.c_str(), "w"), lamb);

        if ((sf.get() != nullptr) && (tf.get() != nullptr)) {
            std::unique_ptr<unsigned char[]> buffer(new unsigned char[purefs::buffer::copy_buf]);
            std::unique_ptr<unsigned char[]> buffer(new unsigned char[copy_buf]);

            if (buffer.get() != nullptr) {
                uint32_t loopcount = (utils::filesystem::filelength(sf.get()) / purefs::buffer::copy_buf) + 1u;
                uint32_t readsize  = purefs::buffer::copy_buf;
                uint32_t loopcount = (utils::filesystem::filelength(sf.get()) / copy_buf) + 1u;
                uint32_t readsize  = copy_buf;

                for (uint32_t i = 0u; i < loopcount; i++) {
                    if (i + 1u == loopcount) {
                        readsize = utils::filesystem::filelength(sf.get()) % purefs::buffer::copy_buf;
                        readsize = utils::filesystem::filelength(sf.get()) % copy_buf;
                    }

                    if (std::fread(buffer.get(), 1, readsize, sf.get()) != readsize) {

M module-services/service-gui/ServiceGUI.cpp => module-services/service-gui/ServiceGUI.cpp +3 -2
@@ 37,6 37,7 @@ extern "C"
#include <list>
#include <memory>
#include <utility>
#include <purefs/filesystem_paths.hpp>

namespace sgui
{


@@ 52,10 53,10 @@ namespace sgui
        transferContext = new gui::Context(screenWidth, screenHeight);

        gui::FontManager &fontManager = gui::FontManager::getInstance();
        fontManager.init("assets");
        fontManager.init(purefs::dir::getCurrentOSPath() / "assets");

        gui::ImageManager &imageManager = gui::ImageManager::getInstance();
        imageManager.init("assets");
        imageManager.init(purefs::dir::getCurrentOSPath() / "assets");

        connect(typeid(sgui::DrawMessage),
                [&](sys::Message *request) -> sys::MessagePointer { return handleDrawMessage(request); });

M module-services/service-gui/ServiceGUI.hpp => module-services/service-gui/ServiceGUI.hpp +0 -2
@@ 9,8 9,6 @@
#include <gui/core/Context.hpp>
#include <gui/core/Renderer.hpp>
#include <gui/input/Translator.hpp>
#include <queue.h>
#include <semphr.h>
#include <Service/Common.hpp>
#include <Service/Message.hpp>
#include <Service/Service.hpp>

M module-utils/Utils.cpp => module-utils/Utils.cpp +38 -3
@@ 2,16 2,26 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "Utils.hpp"
#include <purefs/fs/filesystem.hpp>
#include <crc32/crc32.h>

namespace utils::filesystem
{
    namespace
    {
        inline constexpr auto crc_buf = 1024;
    } // namespace

    long int filelength(std::FILE *file) noexcept
    {
        if (file == nullptr) {
            return 0;
        }
        const auto startPosition = std::ftell(file);
        std::fseek(file, 0, SEEK_END);
        return std::ftell(file);
        const auto endPosition = std::ftell(file);
        std::fseek(file, startPosition, SEEK_SET);
        return endPosition;
    }

    void computeCRC32(std::FILE *file, unsigned long *outCrc32) noexcept


@@ 19,13 29,13 @@ namespace utils::filesystem
        if (outCrc32 == nullptr)
            return;

        auto buf = std::make_unique<unsigned char[]>(purefs::buffer::crc_buf);
        auto buf = std::make_unique<unsigned char[]>(crc_buf);
        size_t bufLen;

        *outCrc32 = 0;

        while (!std::feof(file)) {
            bufLen = std::fread(buf.get(), 1, purefs::buffer::crc_buf, file);
            bufLen = std::fread(buf.get(), 1, crc_buf, file);
            if (bufLen <= 0)
                break;



@@ 50,4 60,29 @@ namespace utils::filesystem

        return random_string;
    }

    std::string getline(std::FILE *stream, uint32_t length) noexcept
    {
        std::uint32_t currentPosition = std::ftell(stream);

        // allocate memory to read number of signs defined by length param. Size of buffer is increased by 1 to add
        // string's null terminator.
        auto buffer = std::make_unique<char[]>(length + 1);

        std::uint32_t bytesRead = std::fread(buffer.get(), 1, length, stream);

        // search buffer for /n sign
        constexpr auto newLineSign = 0x0A;
        for (std::uint32_t i = 0; i < bytesRead; ++i) {
            if (buffer[i] == newLineSign) {
                buffer[i] = 0;
                std::fseek(stream, currentPosition + i + 1, SEEK_SET);
                break;
            }
        }

        std::string ret = std::string(buffer.get());

        return ret;
    }
} // namespace utils::filesystem

M module-utils/Utils.hpp => module-utils/Utils.hpp +4 -4
@@ 2,14 2,15 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once
#include "module-utils/i18n/i18n.hpp"
#include "i18n/i18n.hpp"
#include <algorithm> // std::find_if_not
#include <log/log.hpp>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <chrono>
#include <random>
#include "module-utils/time/time_conversion.hpp"
#include "time/time_conversion.hpp"

#define MAGIC_ENUM_RANGE_MAX 256
#include <magic_enum.hpp>


@@ 245,9 246,8 @@ namespace utils
    namespace filesystem
    {
        [[nodiscard]] long int filelength(std::FILE *file) noexcept;

        void computeCRC32(std::FILE *file, unsigned long *outCrc32) noexcept;

        [[nodiscard]] std::string generateRandomId(std::size_t length = 0) noexcept;
        [[nodiscard]] std::string getline(std::FILE *stream, uint32_t length = 1024) noexcept;
    } // namespace filesystem
} // namespace utils

M module-utils/i18n/i18n.cpp => module-utils/i18n/i18n.cpp +14 -12
@@ 1,7 1,12 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "log/log.hpp"
#include "i18n.hpp"
#include "Utils.hpp"
#include <cstdio>
#include <filesystem>
#include <purefs/filesystem_paths.hpp>

namespace utils
{


@@ 19,26 24,23 @@ namespace utils
    i18n localize;
    json11::Json LangLoader::createJson(const std::string &filename)
    {
        const fs::path path = LanguageDirPath / (filename + extension);
        auto fd             = vfs.fopen(path.c_str(), "r");
        const auto path = LanguageDirPath / (filename + extension);
        auto fd         = std::fopen(path.c_str(), "r");
        if (fd == nullptr) {
            LOG_FATAL("Error during opening file %s", path.c_str());
            return json11::Json();
        }

        uint32_t fsize = vfs.filelength(fd);
        uint32_t fsize = utils::filesystem::filelength(fd);

        auto stream = new char[fsize + 1]; // +1 for NULL terminator
        auto stream = std::make_unique<char[]>(fsize + 1); // +1 for NULL terminator

        memset(stream, 0, fsize + 1);

        vfs.fread(stream, 1, fsize, fd);
        std::fread(stream.get(), 1, fsize, fd);

        std::string err;
        json11::Json js = json11::Json::parse(stream, err);
        json11::Json js = json11::Json::parse(stream.get(), err);

        delete[] stream;
        vfs.fclose(fd);
        std::fclose(fd);

        // Error
        if (err.length() != 0) {


@@ 53,8 55,8 @@ namespace utils
    std::vector<Language> LangLoader::getAvailableDisplayLanguages() const
    {
        std::vector<std::string> languageNames;
        for (const auto &entry : fs::directory_iterator(LanguageDirPath)) {
            languageNames.push_back(fs::path(entry.path()).stem());
        for (const auto &entry : std::filesystem::directory_iterator(LanguageDirPath)) {
            languageNames.push_back(std::filesystem::path(entry.path()).stem());
        }
        return languageNames;
    }

M module-utils/i18n/i18n.hpp => module-utils/i18n/i18n.hpp +2 -14
@@ 5,9 5,6 @@
#include "json/json11.hpp"
#include <string>
#include <vfs.hpp>
#include "log/log.hpp"

#include "thread.hpp"

using Language = std::string;



@@ 16,10 13,7 @@ namespace utils
    class LangLoader
    {
      public:
        LangLoader()
        {}
        virtual ~LangLoader()
        {}
        virtual ~LangLoader() = default;
        std::vector<Language> getAvailableDisplayLanguages() const;
        json11::Json createJson(const std::string &filename);
    };


@@ 38,14 32,8 @@ namespace utils

      public:
        static constexpr auto DefaultLanguage = "English";
        // Default constructor, left empty on purpose
        i18n()
        {}

        // Explicit initialization point, default constructor is omitted. This is because LangLoader uses file system
        // which is not available at program's startup.
        virtual ~i18n()
        {}
        virtual ~i18n() = default;
        void setInputLanguage(const Language &lang);
        const std::string &getInputLanguage(const std::string &str);
        const std::string &get(const std::string &str);

M module-utils/test/test_time_conversion.cpp => module-utils/test/test_time_conversion.cpp +2 -0
@@ 5,6 5,8 @@
#include <time/time_conversion.hpp>
#include <algorithm>
#include <thread.hpp>
#include <vfs.hpp>
#include "i18n/i18n.hpp"

namespace
{

M module-utils/test/unittest_duration.cpp => module-utils/test/unittest_duration.cpp +1 -0
@@ 4,6 4,7 @@
#include <cstring>
#include <iostream>
#include <memory>
#include <vfs.hpp>
#include <unistd.h>

#include "time/time_conversion.hpp"

M module-utils/test/unittest_utils.cpp => module-utils/test/unittest_utils.cpp +1 -0
@@ 11,6 11,7 @@
#include <catch2/catch.hpp>

#include "Utils.hpp"
#include <vfs.hpp>

class vfs vfs;


M module-utils/time/time_conversion.cpp => module-utils/time/time_conversion.cpp +1 -1
@@ 14,7 14,7 @@
#include <ctime>
#include <iomanip>
#include <locale>
#include <module-utils/i18n/i18n.hpp>
#include "i18n/i18n.hpp"

#include "time_locale.hpp"
#include <Utils.hpp>

M module-utils/time/time_locale.hpp => module-utils/time/time_locale.hpp +1 -1
@@ 5,7 5,7 @@

#include <array>
#include <utf8/UTF8.hpp>
#include <module-utils/i18n/i18n.hpp>
#include "i18n/i18n.hpp"
#include <log/log.hpp>

namespace utils