mirror of
https://github.com/Quill-OS/quill.git
synced 2024-12-26 23:57:22 -08:00
Compare commits
2 commits
fbf460775e
...
3a31c3ac0b
Author | SHA1 | Date | |
---|---|---|---|
|
3a31c3ac0b | ||
|
91517f65e4 |
189 changed files with 11783 additions and 11898 deletions
199
.clang-format
Normal file
199
.clang-format
Normal file
|
@ -0,0 +1,199 @@
|
|||
# Commented out parameters are those with the same value as base LLVM style.
|
||||
# We can uncomment them if we want to change their value, or enforce the
|
||||
# chosen value in case the base style changes (last sync: Clang 14.0).
|
||||
---
|
||||
### General config, applies to all languages ###
|
||||
BasedOnStyle: LLVM
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: DontAlign
|
||||
# AlignArrayOfStructures: None
|
||||
# AlignConsecutiveMacros: None
|
||||
# AlignConsecutiveAssignments: None
|
||||
# AlignConsecutiveBitFields: None
|
||||
# AlignConsecutiveDeclarations: None
|
||||
# AlignEscapedNewlines: Right
|
||||
AlignOperands: DontAlign
|
||||
AlignTrailingComments: false
|
||||
# AllowAllArgumentsOnNextLine: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
# AllowShortEnumsOnASingleLine: true
|
||||
# AllowShortBlocksOnASingleLine: Never
|
||||
# AllowShortCaseLabelsOnASingleLine: false
|
||||
# AllowShortFunctionsOnASingleLine: All
|
||||
# AllowShortLambdasOnASingleLine: All
|
||||
# AllowShortIfStatementsOnASingleLine: Never
|
||||
# AllowShortLoopsOnASingleLine: false
|
||||
# AlwaysBreakAfterDefinitionReturnType: None
|
||||
# AlwaysBreakAfterReturnType: None
|
||||
# AlwaysBreakBeforeMultilineStrings: false
|
||||
# AlwaysBreakTemplateDeclarations: MultiLine
|
||||
# AttributeMacros:
|
||||
# - __capability
|
||||
# BinPackArguments: true
|
||||
# BinPackParameters: true
|
||||
# BraceWrapping:
|
||||
# AfterCaseLabel: false
|
||||
# AfterClass: false
|
||||
# AfterControlStatement: Never
|
||||
# AfterEnum: false
|
||||
# AfterFunction: false
|
||||
# AfterNamespace: false
|
||||
# AfterObjCDeclaration: false
|
||||
# AfterStruct: false
|
||||
# AfterUnion: false
|
||||
# AfterExternBlock: false
|
||||
# BeforeCatch: false
|
||||
# BeforeElse: false
|
||||
# BeforeLambdaBody: false
|
||||
# BeforeWhile: false
|
||||
# IndentBraces: false
|
||||
# SplitEmptyFunction: true
|
||||
# SplitEmptyRecord: true
|
||||
# SplitEmptyNamespace: true
|
||||
# BreakBeforeBinaryOperators: None
|
||||
# BreakBeforeConceptDeclarations: true
|
||||
# BreakBeforeBraces: Attach
|
||||
# BreakBeforeInheritanceComma: false
|
||||
# BreakInheritanceList: BeforeColon
|
||||
# BreakBeforeTernaryOperators: true
|
||||
# BreakConstructorInitializersBeforeComma: false
|
||||
BreakConstructorInitializers: AfterColon
|
||||
# BreakStringLiterals: true
|
||||
ColumnLimit: 0
|
||||
# CommentPragmas: '^ IWYU pragma:'
|
||||
# QualifierAlignment: Leave
|
||||
# CompactNamespaces: false
|
||||
ConstructorInitializerIndentWidth: 8
|
||||
ContinuationIndentWidth: 8
|
||||
Cpp11BracedListStyle: false
|
||||
# DeriveLineEnding: true
|
||||
# DerivePointerAlignment: false
|
||||
# DisableFormat: false
|
||||
# EmptyLineAfterAccessModifier: Never
|
||||
# EmptyLineBeforeAccessModifier: LogicalBlock
|
||||
# ExperimentalAutoDetectBinPacking: false
|
||||
# PackConstructorInitializers: BinPack
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
# AllowAllConstructorInitializersOnNextLine: true
|
||||
# FixNamespaceComments: true
|
||||
# ForEachMacros:
|
||||
# - foreach
|
||||
# - Q_FOREACH
|
||||
# - BOOST_FOREACH
|
||||
# IfMacros:
|
||||
# - KJ_IF_MAYBE
|
||||
# IncludeBlocks: Preserve
|
||||
IncludeCategories:
|
||||
- Regex: '".*"'
|
||||
Priority: 1
|
||||
- Regex: '^<.*\.h>'
|
||||
Priority: 2
|
||||
- Regex: '^<.*'
|
||||
Priority: 3
|
||||
# IncludeIsMainRegex: '(Test)?$'
|
||||
# IncludeIsMainSourceRegex: ''
|
||||
# IndentAccessModifiers: false
|
||||
IndentCaseLabels: true
|
||||
# IndentCaseBlocks: false
|
||||
# IndentGotoLabels: true
|
||||
# IndentPPDirectives: None
|
||||
# IndentExternBlock: AfterExternBlock
|
||||
# IndentRequires: false
|
||||
IndentWidth: 4
|
||||
# IndentWrappedFunctionNames: false
|
||||
# InsertTrailingCommas: None
|
||||
# JavaScriptQuotes: Leave
|
||||
# JavaScriptWrapImports: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
# LambdaBodyIndentation: Signature
|
||||
# MacroBlockBegin: ''
|
||||
# MacroBlockEnd: ''
|
||||
# MaxEmptyLinesToKeep: 1
|
||||
# NamespaceIndentation: None
|
||||
# PenaltyBreakAssignment: 2
|
||||
# PenaltyBreakBeforeFirstCallParameter: 19
|
||||
# PenaltyBreakComment: 300
|
||||
# PenaltyBreakFirstLessLess: 120
|
||||
# PenaltyBreakOpenParenthesis: 0
|
||||
# PenaltyBreakString: 1000
|
||||
# PenaltyBreakTemplateDeclaration: 10
|
||||
# PenaltyExcessCharacter: 1000000
|
||||
# PenaltyReturnTypeOnItsOwnLine: 60
|
||||
# PenaltyIndentedWhitespace: 0
|
||||
# PointerAlignment: Right
|
||||
# PPIndentWidth: -1
|
||||
# ReferenceAlignment: Pointer
|
||||
# ReflowComments: true
|
||||
# RemoveBracesLLVM: false
|
||||
# SeparateDefinitionBlocks: Leave
|
||||
# ShortNamespaceLines: 1
|
||||
# SortIncludes: CaseSensitive
|
||||
# SortJavaStaticImport: Before
|
||||
# SortUsingDeclarations: true
|
||||
# SpaceAfterCStyleCast: false
|
||||
# SpaceAfterLogicalNot: false
|
||||
# SpaceAfterTemplateKeyword: true
|
||||
# SpaceBeforeAssignmentOperators: true
|
||||
# SpaceBeforeCaseColon: false
|
||||
# SpaceBeforeCpp11BracedList: false
|
||||
# SpaceBeforeCtorInitializerColon: true
|
||||
# SpaceBeforeInheritanceColon: true
|
||||
# SpaceBeforeParens: ControlStatements
|
||||
# SpaceBeforeParensOptions:
|
||||
# AfterControlStatements: true
|
||||
# AfterForeachMacros: true
|
||||
# AfterFunctionDefinitionName: false
|
||||
# AfterFunctionDeclarationName: false
|
||||
# AfterIfMacros: true
|
||||
# AfterOverloadedOperator: false
|
||||
# BeforeNonEmptyParentheses: false
|
||||
# SpaceAroundPointerQualifiers: Default
|
||||
# SpaceBeforeRangeBasedForLoopColon: true
|
||||
# SpaceInEmptyBlock: false
|
||||
# SpaceInEmptyParentheses: false
|
||||
# SpacesBeforeTrailingComments: 1
|
||||
# SpacesInAngles: Never
|
||||
# SpacesInConditionalStatement: false
|
||||
# SpacesInContainerLiterals: true
|
||||
# SpacesInCStyleCastParentheses: false
|
||||
## Godot TODO: We'll want to use a min of 1, but we need to see how to fix
|
||||
## our comment capitalization at the same time.
|
||||
SpacesInLineCommentPrefix:
|
||||
Minimum: 0
|
||||
Maximum: -1
|
||||
# SpacesInParentheses: false
|
||||
# SpacesInSquareBrackets: false
|
||||
# SpaceBeforeSquareBrackets: false
|
||||
# BitFieldColonSpacing: Both
|
||||
# StatementAttributeLikeMacros:
|
||||
# - Q_EMIT
|
||||
# StatementMacros:
|
||||
# - Q_UNUSED
|
||||
# - QT_REQUIRE_VERSION
|
||||
TabWidth: 4
|
||||
# UseCRLF: false
|
||||
UseTab: Always
|
||||
# WhitespaceSensitiveMacros:
|
||||
# - STRINGIZE
|
||||
# - PP_STRINGIZE
|
||||
# - BOOST_PP_STRINGIZE
|
||||
# - NS_SWIFT_NAME
|
||||
# - CF_SWIFT_NAME
|
||||
---
|
||||
### C++ specific config ###
|
||||
Language: Cpp
|
||||
Standard: c++17
|
||||
---
|
||||
### ObjC specific config ###
|
||||
Language: ObjC
|
||||
# ObjCBinPackProtocolList: Auto
|
||||
ObjCBlockIndentWidth: 4
|
||||
# ObjCBreakBeforeNestedBlockParam: true
|
||||
# ObjCSpaceAfterProperty: false
|
||||
# ObjCSpaceBeforeProtocolList: true
|
||||
---
|
||||
### Java specific config ###
|
||||
Language: Java
|
||||
# BreakAfterJavaFieldAnnotations: false
|
||||
JavaImportGroups: ['org.godotengine', 'android', 'androidx', 'com.android', 'com.google', 'java', 'javax']
|
||||
...
|
|
@ -47,3 +47,12 @@ I suggest you visit the [wiki](https://github.com/Quill-OS/quill/wiki). Feel fre
|
|||
If you like this project and want to improve it in some way, feel free to fork this repository or [one of the subprojects this organization hosts](https://github.com/Quill-OS), then make a [pull request](https://github.com/Quill-OS/quill/pulls). I'll be happy to review it when I have time. You can also join the official [Matrix space](https://matrix.to/#/#inkbox-os-project:matrix.org), [Discord server](https://discord.com/invite/uSWtWbY23m) or [Linen](https://www.linen.dev/s/quill-os) if you'd like to chat a bit.
|
||||
<br><br>
|
||||
On the other hand, if you don't have the appropriate coding skills or just want to help in some way, feel free to make a donation at my [PayPal account](https://paypal.me/inkboxos/), [LiberaPay](https://liberapay.com/tux-linux/), or via Bitcoin: 3MmXq5o78b4C7ub5sb7F5WVC86jzc6PzSN . I'm a student and motivation has been the only thing that has helped me maintain this project for the last few years. Developing an entire operating system on my own was not an easy task. I have time, but I like to spend it wisely.
|
||||
|
||||
|
||||
## Building
|
||||
|
||||
Make sure you have the following requirements installed on your system:
|
||||
* a c/cpp profiler
|
||||
* `libsndfile-dev`
|
||||
|
||||
Next open the `inkbox.pro` file qith QTCreator
|
286
inkbox.pro
286
inkbox.pro
|
@ -24,148 +24,172 @@ DEFINES += GIT_COMMIT=\\\"$$GIT_COMMIT\\\"
|
|||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
src/apps/todo.cpp \
|
||||
src/platform/device.cpp \
|
||||
src/platform/device_desktop.cpp \
|
||||
src/platform/device_kindle_touch.cpp \
|
||||
src/platform/device_kobo_aura_edition2.cpp \
|
||||
src/platform/device_kobo_clarahd.cpp \
|
||||
src/platform/device_kobo_glo.cpp \
|
||||
src/platform/device_kobo_glohd.cpp \
|
||||
src/platform/device_kobo_libra.cpp \
|
||||
src/platform/device_kobo_mini.cpp \
|
||||
src/platform/device_kobo_nia.cpp \
|
||||
src/platform/device_kobo_touch.cpp \
|
||||
src/ui/apps/todo.cpp \
|
||||
src/audio/audiothread.cpp \
|
||||
src/splash/alert.cpp \
|
||||
src/apps/apps.cpp \
|
||||
src/ui/apps/apps.cpp \
|
||||
src/telemetry/telemetry.cpp \
|
||||
src/widgets/dialogs/audio/audiodialog.cpp \
|
||||
src/widgets/dialogs/audio/audiofile.cpp \
|
||||
src/widgets/dialogs/audio/audiofilequeue.cpp \
|
||||
src/widgets/dialogs/library/bookinfodialog.cpp \
|
||||
src/widgets/dialogs/library/bookoptionsdialog.cpp \
|
||||
src/widgets/dialogs/brightnessdialog.cpp \
|
||||
src/apps/calendarapp.cpp \
|
||||
src/widgets/dialogs/reader/highlightslistdialog.cpp \
|
||||
src/widgets/dialogs/reader/textdialog.cpp \
|
||||
src/widgets/dialogs/wifi/connectiondialog.cpp \
|
||||
src/widgets/dialogs/wifi/network.cpp \
|
||||
src/widgets/dialogs/wifi/wifilogger.cpp \
|
||||
src/widgets/misc/egg.cpp \
|
||||
src/widgets/reader/dictionarywidget.cpp \
|
||||
src/encfs/encryptionmanager.cpp \
|
||||
src/widgets/dialogs/generaldialog.cpp \
|
||||
src/homeWidget/homepagewidget.cpp \
|
||||
src/widgets/misc/hourglassanimationwidget.cpp \
|
||||
src/widgets/dialogs/kobox/koboxappsdialog.cpp \
|
||||
src/settings/koboxsettings.cpp \
|
||||
src/onlineLibrary/librarywidget.cpp \
|
||||
src/localLibrary/locallibrarywidget.cpp \
|
||||
src/ui/splash/splashAlert.cpp \
|
||||
src/ui/ui.cpp \
|
||||
src/ui/widgets/dialogs/audio/audiodialog.cpp \
|
||||
src/ui/widgets/dialogs/audio/audiofile.cpp \
|
||||
src/ui/widgets/dialogs/audio/audiofilequeue.cpp \
|
||||
src/ui/widgets/dialogs/library/bookinfodialog.cpp \
|
||||
src/ui/widgets/dialogs/library/bookoptionsdialog.cpp \
|
||||
src/ui/widgets/dialogs/brightnessdialog.cpp \
|
||||
src/ui/apps/calendarapp.cpp \
|
||||
src/ui/widgets/dialogs/reader/highlightslistdialog.cpp \
|
||||
src/ui/widgets/dialogs/reader/textdialog.cpp \
|
||||
src/ui/widgets/dialogs/wifi/connectiondialog.cpp \
|
||||
src/ui/widgets/dialogs/wifi/network.cpp \
|
||||
src/ui/widgets/dialogs/wifi/wifilogger.cpp \
|
||||
src/ui/widgets/misc/egg.cpp \
|
||||
src/ui/widgets/reader/dictionarywidget.cpp \
|
||||
src/ui/crypto/encryptionmanager.cpp \
|
||||
src/ui/widgets/dialogs/generaldialog.cpp \
|
||||
src/ui/home/homepagewidget.cpp \
|
||||
src/ui/widgets/misc/hourglassanimationwidget.cpp \
|
||||
src/ui/widgets/dialogs/kobox/koboxappsdialog.cpp \
|
||||
src/ui/settings/koboxsettings.cpp \
|
||||
src/ui/onlineLibrary/librarywidget.cpp \
|
||||
src/ui/localLibrary/locallibrarywidget.cpp \
|
||||
src/main.cpp \
|
||||
src/homeWidget/mainwindow.cpp \
|
||||
src/otaUpdate/otamanager.cpp \
|
||||
src/widgets/interfaceWidgets/qclickablelabel.cpp \
|
||||
src/widgets/interfaceWidgets/qtooltiplabel.cpp \
|
||||
src/quit/quit.cpp \
|
||||
src/reader/reader.cpp \
|
||||
src/apps/savedwords.cpp \
|
||||
src/widgets/text/searchresultswidget.cpp \
|
||||
src/settings/settings.cpp \
|
||||
src/settings/settingschooser.cpp \
|
||||
src/widgets/text/textwidget.cpp \
|
||||
src/widgets/interfaceWidgets/toast.cpp \
|
||||
src/splash/usbmsSplash.cpp \
|
||||
src/apps/userapps.cpp \
|
||||
src/widgets/virtualKeyboard/virtualkeyboard.cpp \
|
||||
src/widgets/virtualKeyboard/virtualkeypad.cpp \
|
||||
src/widgets/dialogs/wifi/wifidialog.cpp \
|
||||
src/widgets/dialogs/powerDaemon/sleepdialog.cpp \
|
||||
src/ui/home/mainwindow.cpp \
|
||||
src/ui/otaUpdate/otamanager.cpp \
|
||||
src/ui/widgets/interfaceWidgets/qclickablelabel.cpp \
|
||||
src/ui/widgets/interfaceWidgets/qtooltiplabel.cpp \
|
||||
src/ui/quit/quit.cpp \
|
||||
src/ui/reader/reader.cpp \
|
||||
src/ui/apps/savedwords.cpp \
|
||||
src/ui/widgets/text/searchresultswidget.cpp \
|
||||
src/ui/settings/settings.cpp \
|
||||
src/ui/settings/settingschooser.cpp \
|
||||
src/ui/widgets/text/textwidget.cpp \
|
||||
src/ui/widgets/interfaceWidgets/toast.cpp \
|
||||
src/ui/splash/usbmsSplash.cpp \
|
||||
src/ui/apps/userapps.cpp \
|
||||
src/ui/widgets/virtualKeyboard/virtualkeyboard.cpp \
|
||||
src/ui/widgets/virtualKeyboard/virtualkeypad.cpp \
|
||||
src/ui/widgets/dialogs/wifi/wifidialog.cpp \
|
||||
src/ui/widgets/dialogs/powerDaemon/sleepdialog.cpp \
|
||||
src/powerDaemon/sleepthread.cpp \
|
||||
src/settings/powerdaemonsettings.cpp
|
||||
src/ui/settings/powerdaemonsettings.cpp
|
||||
|
||||
HEADERS += \
|
||||
src/audio/audiothread.h \
|
||||
src/apps/todo.h \
|
||||
src/splash/alert.h \
|
||||
src/apps/apps.h \
|
||||
src/platform/device.h \
|
||||
src/platform/device_desktop.h \
|
||||
src/platform/device_kindle_touch.h \
|
||||
src/platform/device_kobo_aura_edition2.h \
|
||||
src/platform/device_kobo_clarahd.h \
|
||||
src/platform/device_kobo_glo.h \
|
||||
src/platform/device_kobo_glohd.h \
|
||||
src/platform/device_kobo_libra.h \
|
||||
src/platform/device_kobo_mini.h \
|
||||
src/platform/device_kobo_nia.h \
|
||||
src/platform/device_kobo_touch.h \
|
||||
src/ui/apps/todo.h \
|
||||
src/ui/apps/apps.h \
|
||||
src/telemetry/telemetry.h \
|
||||
src/widgets/dialogs/audio/audiodialog.h \
|
||||
src/widgets/dialogs/audio/audiofile.h \
|
||||
src/widgets/dialogs/audio/audiofilequeue.h \
|
||||
src/widgets/dialogs/library/bookinfodialog.h \
|
||||
src/widgets/dialogs/library/bookoptionsdialog.h \
|
||||
src/widgets/dialogs/brightnessdialog.h \
|
||||
src/apps/calendarapp.h \
|
||||
src/widgets/dialogs/reader/highlightslistdialog.h \
|
||||
src/widgets/dialogs/reader/textdialog.h \
|
||||
src/widgets/dialogs/wifi/connectiondialog.h \
|
||||
src/widgets/dialogs/wifi/network.h \
|
||||
src/widgets/dialogs/wifi/wifilogger.h \
|
||||
src/widgets/misc/egg.h \
|
||||
src/widgets/reader/dictionarywidget.h \
|
||||
src/encfs/encryptionmanager.h \
|
||||
src/ui/splash/splashAlert.h \
|
||||
src/ui/ui.h \
|
||||
src/ui/widgets/dialogs/audio/audiodialog.h \
|
||||
src/ui/widgets/dialogs/audio/audiofile.h \
|
||||
src/ui/widgets/dialogs/audio/audiofilequeue.h \
|
||||
src/ui/widgets/dialogs/library/bookinfodialog.h \
|
||||
src/ui/widgets/dialogs/library/bookoptionsdialog.h \
|
||||
src/ui/widgets/dialogs/brightnessdialog.h \
|
||||
src/ui/apps/calendarapp.h \
|
||||
src/ui/widgets/dialogs/reader/highlightslistdialog.h \
|
||||
src/ui/widgets/dialogs/reader/textdialog.h \
|
||||
src/ui/widgets/dialogs/wifi/connectiondialog.h \
|
||||
src/ui/widgets/dialogs/wifi/network.h \
|
||||
src/ui/widgets/dialogs/wifi/wifilogger.h \
|
||||
src/ui/widgets/misc/egg.h \
|
||||
src/ui/widgets/reader/dictionarywidget.h \
|
||||
src/ui/crypto/encryptionmanager.h \
|
||||
src/functions.h \
|
||||
src/widgets/dialogs/generaldialog.h \
|
||||
src/homeWidget/homepagewidget.h \
|
||||
src/widgets/misc/hourglassanimationwidget.h \
|
||||
src/widgets/dialogs/kobox/koboxappsdialog.h \
|
||||
src/settings/koboxsettings.h \
|
||||
src/onlineLibrary/librarywidget.h \
|
||||
src/localLibrary/locallibrarywidget.h \
|
||||
src/homeWidget/mainwindow.h \
|
||||
src/otaUpdate/otamanager.h \
|
||||
src/widgets/interfaceWidgets/qclickablelabel.h \
|
||||
src/widgets/interfaceWidgets/qtooltiplabel.h \
|
||||
src/quit/quit.h \
|
||||
src/reader/reader.h \
|
||||
src/apps/savedwords.h \
|
||||
src/widgets/text/searchresultswidget.h \
|
||||
src/settings/settings.h \
|
||||
src/settings/settingschooser.h \
|
||||
src/widgets/text/textwidget.h \
|
||||
src/widgets/interfaceWidgets/toast.h \
|
||||
src/splash/usbmsSplash.h \
|
||||
src/apps/userapps.h \
|
||||
src/widgets/virtualKeyboard/virtualkeyboard.h \
|
||||
src/widgets/virtualKeyboard/virtualkeypad.h \
|
||||
src/widgets/dialogs/wifi/wifidialog.h \
|
||||
src/widgets/dialogs/powerDaemon/sleepdialog.h \
|
||||
src/ui/widgets/dialogs/generaldialog.h \
|
||||
src/ui/home/homepagewidget.h \
|
||||
src/ui/widgets/misc/hourglassanimationwidget.h \
|
||||
src/ui/widgets/dialogs/kobox/koboxappsdialog.h \
|
||||
src/ui/settings/koboxsettings.h \
|
||||
src/ui/onlineLibrary/librarywidget.h \
|
||||
src/ui/localLibrary/locallibrarywidget.h \
|
||||
src/ui/home/mainwindow.h \
|
||||
src/ui/otaUpdate/otamanager.h \
|
||||
src/ui/widgets/interfaceWidgets/qclickablelabel.h \
|
||||
src/ui/widgets/interfaceWidgets/qtooltiplabel.h \
|
||||
src/ui/quit/quit.h \
|
||||
src/ui/reader/reader.h \
|
||||
src/ui/apps/savedwords.h \
|
||||
src/ui/widgets/text/searchresultswidget.h \
|
||||
src/ui/settings/settings.h \
|
||||
src/ui/settings/settingschooser.h \
|
||||
src/ui/widgets/text/textwidget.h \
|
||||
src/ui/widgets/interfaceWidgets/toast.h \
|
||||
src/ui/splash/usbmsSplash.h \
|
||||
src/ui/apps/userapps.h \
|
||||
src/ui/widgets/virtualKeyboard/virtualkeyboard.h \
|
||||
src/ui/widgets/virtualKeyboard/virtualkeypad.h \
|
||||
src/ui/widgets/dialogs/wifi/wifidialog.h \
|
||||
src/ui/widgets/dialogs/powerDaemon/sleepdialog.h \
|
||||
src/powerDaemon/sleepthread.h \
|
||||
src/settings/powerdaemonsettings.h
|
||||
src/ui/settings/powerdaemonsettings.h
|
||||
|
||||
FORMS += \
|
||||
src/apps/todo.ui \
|
||||
src/splash/alert.ui \
|
||||
src/apps/apps.ui \
|
||||
src/widgets/dialogs/audio/audiodialog.ui \
|
||||
src/widgets/dialogs/audio/audiofile.ui \
|
||||
src/widgets/dialogs/audio/audiofilequeue.ui \
|
||||
src/widgets/dialogs/library/bookinfodialog.ui \
|
||||
src/widgets/dialogs/library/bookoptionsdialog.ui \
|
||||
src/widgets/dialogs/brightnessdialog.ui \
|
||||
src/apps/calendarapp.ui \
|
||||
src/widgets/dialogs/reader/highlightslistdialog.ui \
|
||||
src/widgets/dialogs/reader/textdialog.ui \
|
||||
src/widgets/dialogs/wifi/connectiondialog.ui \
|
||||
src/widgets/dialogs/wifi/network.ui \
|
||||
src/widgets/dialogs/wifi/wifilogger.ui \
|
||||
src/widgets/misc/egg.ui \
|
||||
src/widgets/reader/dictionarywidget.ui \
|
||||
src/encfs/encryptionmanager.ui \
|
||||
src/widgets/dialogs/generaldialog.ui \
|
||||
src/homeWidget/homepagewidget.ui \
|
||||
src/widgets/misc/hourglassanimationwidget.ui \
|
||||
src/widgets/dialogs/kobox/koboxappsdialog.ui \
|
||||
src/settings/koboxsettings.ui \
|
||||
src/onlineLibrary/librarywidget.ui \
|
||||
src/localLibrary/locallibrarywidget.ui \
|
||||
src/homeWidget/mainwindow.ui \
|
||||
src/otaUpdate/otamanager.ui \
|
||||
src/quit/quit.ui \
|
||||
src/reader/reader.ui \
|
||||
src/apps/savedwords.ui \
|
||||
src/widgets/text/searchresultswidget.ui \
|
||||
src/settings/settings.ui \
|
||||
src/settings/settingschooser.ui \
|
||||
src/widgets/text/textwidget.ui \
|
||||
src/widgets/interfaceWidgets/toast.ui \
|
||||
src/splash/usbmsSplash.ui \
|
||||
src/apps/userapps.ui \
|
||||
src/widgets/virtualKeyboard/virtualkeyboard.ui \
|
||||
src/widgets/virtualKeyboard/virtualkeypad.ui \
|
||||
src/widgets/dialogs/wifi/wifidialog.ui \
|
||||
src/widgets/dialogs/powerDaemon/sleepdialog.ui \
|
||||
src/settings/powerdaemonsettings.ui
|
||||
src/ui/apps/todo.ui \
|
||||
src/ui/apps/apps.ui \
|
||||
src/ui/splash/splashAlert.ui \
|
||||
src/ui/widgets/dialogs/audio/audiodialog.ui \
|
||||
src/ui/widgets/dialogs/audio/audiofile.ui \
|
||||
src/ui/widgets/dialogs/audio/audiofilequeue.ui \
|
||||
src/ui/widgets/dialogs/library/bookinfodialog.ui \
|
||||
src/ui/widgets/dialogs/library/bookoptionsdialog.ui \
|
||||
src/ui/widgets/dialogs/brightnessdialog.ui \
|
||||
src/ui/apps/calendarapp.ui \
|
||||
src/ui/widgets/dialogs/reader/highlightslistdialog.ui \
|
||||
src/ui/widgets/dialogs/reader/textdialog.ui \
|
||||
src/ui/widgets/dialogs/wifi/connectiondialog.ui \
|
||||
src/ui/widgets/dialogs/wifi/network.ui \
|
||||
src/ui/widgets/dialogs/wifi/wifilogger.ui \
|
||||
src/ui/widgets/misc/egg.ui \
|
||||
src/ui/widgets/reader/dictionarywidget.ui \
|
||||
src/ui/crypto/encryptionmanager.ui \
|
||||
src/ui/widgets/dialogs/generaldialog.ui \
|
||||
src/ui/home/homepagewidget.ui \
|
||||
src/ui/widgets/misc/hourglassanimationwidget.ui \
|
||||
src/ui/widgets/dialogs/kobox/koboxappsdialog.ui \
|
||||
src/ui/settings/koboxsettings.ui \
|
||||
src/ui/onlineLibrary/librarywidget.ui \
|
||||
src/ui/localLibrary/locallibrarywidget.ui \
|
||||
src/ui/home/mainwindow.ui \
|
||||
src/ui/otaUpdate/otamanager.ui \
|
||||
src/ui/quit/quit.ui \
|
||||
src/ui/reader/reader.ui \
|
||||
src/ui/apps/savedwords.ui \
|
||||
src/ui/widgets/text/searchresultswidget.ui \
|
||||
src/ui/settings/settings.ui \
|
||||
src/ui/settings/settingschooser.ui \
|
||||
src/ui/widgets/text/textwidget.ui \
|
||||
src/ui/widgets/interfaceWidgets/toast.ui \
|
||||
src/ui/splash/usbmsSplash.ui \
|
||||
src/ui/apps/userapps.ui \
|
||||
src/ui/widgets/virtualKeyboard/virtualkeyboard.ui \
|
||||
src/ui/widgets/virtualKeyboard/virtualkeypad.ui \
|
||||
src/ui/widgets/dialogs/wifi/wifidialog.ui \
|
||||
src/ui/widgets/dialogs/powerDaemon/sleepdialog.ui \
|
||||
src/ui/settings/powerdaemonsettings.ui
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
|
@ -173,7 +197,7 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
|
|||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
RESOURCES += \
|
||||
src/eink.qrc
|
||||
src/ui/eink.qrc
|
||||
|
||||
INCLUDEPATH += $$system(find ./ -type d -print -path ./.git -prune | grep -v "./.git")
|
||||
INCLUDEPATH += $$PWD/libs/libsndfile/include/
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
#include "calendarapp.h"
|
||||
#include "ui_calendarapp.h"
|
||||
|
||||
#include <QFile>
|
||||
|
||||
calendarApp::calendarApp(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::calendarApp)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
calendarApp::setFont(QFont("u001"));
|
||||
ui->backBtn->setFont(QFont("Inter"));
|
||||
ui->backBtn->setStyleSheet("font-weight: bold");
|
||||
|
||||
// Stylesheet
|
||||
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
this->setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
|
||||
ui->backBtn->setProperty("type", "borderless");
|
||||
}
|
||||
|
||||
calendarApp::~calendarApp()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void calendarApp::on_backBtn_clicked()
|
||||
{
|
||||
calendarApp::close();
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
#include "savedwords.h"
|
||||
#include "ui_savedwords.h"
|
||||
#include "functions.h"
|
||||
#include <QStringListModel>
|
||||
#include <QFile>
|
||||
#include <QProcess>
|
||||
|
||||
savedwords::savedwords(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::savedwords)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
savedwords::setFont(QFont("u001"));
|
||||
ui->savedWordsLabel->setFont(QFont("Inter"));
|
||||
ui->backBtn->setFont(QFont("Inter"));
|
||||
ui->clearBtn->setFont(QFont("Inter"));
|
||||
|
||||
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
this->setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
|
||||
ui->backBtn->setProperty("type", "borderless");
|
||||
ui->clearBtn->setProperty("type", "borderless");
|
||||
|
||||
ui->savedWordsLabel->setStyleSheet("font-weight: bold");
|
||||
ui->wordsList->setStyleSheet("font-size: 10pt");
|
||||
ui->backBtn->setStyleSheet("font-weight: bold");
|
||||
ui->clearBtn->setStyleSheet("font-weight: bold");
|
||||
|
||||
checkwords();
|
||||
|
||||
QStringListModel * model = new QStringListModel(this);
|
||||
QStringList list = words.split("\n", QString::SkipEmptyParts);
|
||||
model->setStringList(list);
|
||||
ui->wordsList->setModel(model);
|
||||
ui->wordsList->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
}
|
||||
|
||||
savedwords::~savedwords()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void savedwords::on_backBtn_clicked()
|
||||
{
|
||||
// Workaround for the random strange memory corruption error
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void savedwords::on_clearBtn_clicked()
|
||||
{
|
||||
// Warning: possible memory leak here. Though, usually, when you press the "Clear" button and all clears up, you don't have to press it again ;)
|
||||
log("Wiping Saved Words list", className);
|
||||
save_word_init();
|
||||
checkwords();
|
||||
QStringListModel* model = new QStringListModel(this);
|
||||
QStringList list = words.split("\n", QString::SkipEmptyParts);
|
||||
model->setStringList(list);
|
||||
ui->wordsList->setModel(model);
|
||||
ui->wordsList->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
}
|
||||
|
||||
void savedwords::checkwords() {
|
||||
QFile words_list(".config/06-words/config");
|
||||
words_list.open(QIODevice::ReadWrite);
|
||||
QTextStream in (&words_list);
|
||||
words = in.readAll();
|
||||
words_list.close();
|
||||
}
|
||||
|
||||
void savedwords::save_word_init() {
|
||||
QFile words(".config/06-words/config");
|
||||
words.open(QIODevice::ReadWrite);
|
||||
QTextStream in (&words);
|
||||
QString words_list = in.readAll();
|
||||
string words_list_str = words_list.toStdString();
|
||||
words.close();
|
||||
|
||||
ofstream fhandler;
|
||||
fhandler.open(".config/06-words/config");
|
||||
fhandler << "";
|
||||
fhandler.close();
|
||||
}
|
|
@ -10,9 +10,9 @@
|
|||
|
||||
#include <QTimer>
|
||||
|
||||
audiothread::audiothread() {}
|
||||
AudioThread::AudioThread() {}
|
||||
|
||||
void audiothread::start() {
|
||||
void AudioThread::start() {
|
||||
log("Audio thread monitor available", className);
|
||||
|
||||
// QTimer doesn't work in such loops
|
||||
|
@ -86,7 +86,7 @@ void audiothread::start() {
|
|||
// I have no explanation as to why this needs to connect/disconnect every time.
|
||||
// while (recv(client_sockfd, buffer_tmp, 1, 0) > 0) {
|
||||
// ^ This line makes InkBox freeze
|
||||
void audiothread::sendInfo(QString message) {
|
||||
void AudioThread::sendInfo(QString message) {
|
||||
log("Sending message: *" + message + "*", className);
|
||||
// Send
|
||||
sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
|
@ -113,7 +113,7 @@ void audiothread::sendInfo(QString message) {
|
|||
}
|
||||
|
||||
// Mutex managed outside of the function
|
||||
void audiothread::audioProgress() {
|
||||
void AudioThread::audioProgress() {
|
||||
global::audio::progressSeconds = global::audio::progressSeconds + 1;
|
||||
// log("Progress, +1 sec: " + QString::number(global::audio::progressSeconds), className);
|
||||
if(global::audio::progressSeconds >= global::audio::queue[global::audio::itemCurrentlyPlaying].lengths) {
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
#include <sys/un.h>
|
||||
#include <QTimer>
|
||||
|
||||
class audiothread : public QObject
|
||||
class AudioThread : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
audiothread();
|
||||
AudioThread();
|
||||
void sendInfo(QString message);
|
||||
int sockfd;
|
||||
struct sockaddr_un addr;
|
||||
|
|
124
src/eink.qrc
124
src/eink.qrc
|
@ -1,124 +0,0 @@
|
|||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>resources/checkbox-checked.png</file>
|
||||
<file>resources/checkbox-unchecked.png</file>
|
||||
<file>resources/align-center.png</file>
|
||||
<file>resources/align-justify.png</file>
|
||||
<file>resources/align-left.png</file>
|
||||
<file>resources/align-right.png</file>
|
||||
<file>resources/chesterton.jpg</file>
|
||||
<file>resources/alcott.jpg</file>
|
||||
<file>resources/davies.jpg</file>
|
||||
<file>resources/king.jpg</file>
|
||||
<file>resources/star.png</file>
|
||||
<file>resources/starred_star.png</file>
|
||||
<file>resources/close.png</file>
|
||||
<file>resources/chevron-left.png</file>
|
||||
<file>resources/chevron-right.png</file>
|
||||
<file>resources/chevron-down.png</file>
|
||||
<file>resources/chevron-up.png</file>
|
||||
<file>resources/christie.png</file>
|
||||
<file>resources/exit.png</file>
|
||||
<file>resources/usbms.png</file>
|
||||
<file>resources/settings.png</file>
|
||||
<file>resources/search.png</file>
|
||||
<file>resources/power.png</file>
|
||||
<file>resources/book.png</file>
|
||||
<file>resources/apps.png</file>
|
||||
<file>resources/battery_half.png</file>
|
||||
<file>resources/battery_full.png</file>
|
||||
<file>resources/battery_empty.png</file>
|
||||
<file>resources/battery_charging.png</file>
|
||||
<file>resources/alert.png</file>
|
||||
<file>resources/eink-dark.qss</file>
|
||||
<file>resources/frontlight.png</file>
|
||||
<file>resources/fonts/CrimsonPro-Bold.ttf</file>
|
||||
<file>resources/fonts/CrimsonPro-Italic.ttf</file>
|
||||
<file>resources/fonts/CrimsonPro-Regular.ttf</file>
|
||||
<file>resources/check.png</file>
|
||||
<file>resources/minus.png</file>
|
||||
<file>resources/plus.png</file>
|
||||
<file>resources/battery_alert.png</file>
|
||||
<file>resources/apps-inverted.png</file>
|
||||
<file>resources/home.png</file>
|
||||
<file>resources/settings-inverted.png</file>
|
||||
<file>resources/kobox-icon.png</file>
|
||||
<file>resources/X11.png</file>
|
||||
<file>resources/info.png</file>
|
||||
<file>resources/nightmode-empty.png</file>
|
||||
<file>resources/nightmode-full.png</file>
|
||||
<file>resources/backspace.png</file>
|
||||
<file>resources/x-circle.png</file>
|
||||
<file>resources/fonts/Bitter-MediumItalic.ttf</file>
|
||||
<file>resources/fonts/Bitter-Medium.ttf</file>
|
||||
<file>resources/fonts/Bitter-Bold.ttf</file>
|
||||
<file>resources/fonts/Bitter-BoldItalic.ttf</file>
|
||||
<file>resources/fonts/CrimsonPro-BoldItalic.ttf</file>
|
||||
<file>resources/fonts/IbarraRealNova-MediumItalic.ttf</file>
|
||||
<file>resources/fonts/IbarraRealNova-Medium.ttf</file>
|
||||
<file>resources/fonts/IbarraRealNova-BoldItalic.ttf</file>
|
||||
<file>resources/fonts/IbarraRealNova-Bold.ttf</file>
|
||||
<file>resources/wifi-connected.png</file>
|
||||
<file>resources/wifi-off.png</file>
|
||||
<file>resources/wifi-standby.png</file>
|
||||
<file>resources/zoom-in.png</file>
|
||||
<file>resources/zoom-out.png</file>
|
||||
<file>resources/encryption.png</file>
|
||||
<file>resources/check-display.png</file>
|
||||
<file>resources/hourglass-bottom.png</file>
|
||||
<file>resources/hourglass-top.png</file>
|
||||
<file>resources/error.png</file>
|
||||
<file>resources/alert-triangle.png</file>
|
||||
<file>resources/online-library.png</file>
|
||||
<file>resources/online-library-inverted.png</file>
|
||||
<file>resources/cover_unavailable.png</file>
|
||||
<file>resources/clock-inverted.png</file>
|
||||
<file>resources/clock.png</file>
|
||||
<file>resources/eink-square-encfs.qss</file>
|
||||
<file>resources/tzlist</file>
|
||||
<file>resources/edit.png</file>
|
||||
<file>resources/save.png</file>
|
||||
<file>resources/book_inverted.png</file>
|
||||
<file>resources/arrow-left.png</file>
|
||||
<file>resources/arrow-right.png</file>
|
||||
<file>resources/file-text.png</file>
|
||||
<file>resources/pin.png</file>
|
||||
<file>resources/highlight.png</file>
|
||||
<file>resources/unhighlight.png</file>
|
||||
<file>resources/view-highlights.png</file>
|
||||
<file>resources/stop.png</file>
|
||||
<file>resources/refresh.png</file>
|
||||
<file>resources/hide.png</file>
|
||||
<file>resources/show.png</file>
|
||||
<file>resources/christie.jpg</file>
|
||||
<file>resources/encryption-small.png</file>
|
||||
<file>resources/lock.png</file>
|
||||
<file>resources/public.png</file>
|
||||
<file>resources/wifi-0.png</file>
|
||||
<file>resources/wifi-25.png</file>
|
||||
<file>resources/wifi-50.png</file>
|
||||
<file>resources/wifi-75.png</file>
|
||||
<file>resources/wifi-100.png</file>
|
||||
<file>resources/log.png</file>
|
||||
<file>resources/new.png</file>
|
||||
<file>resources/checkbox-unchecked-small.png</file>
|
||||
<file>resources/checkbox-checked-small.png</file>
|
||||
<file>resources/checkbox-x-small.png</file>
|
||||
<file>resources/checkbox-x.png</file>
|
||||
<file>resources/folder.png</file>
|
||||
<file>resources/question-mark.png</file>
|
||||
<file>resources/refresh-small.png</file>
|
||||
<file>resources/checkbox-indeterminate.png</file>
|
||||
<file>resources/egg/0.jpg</file>
|
||||
<file>resources/egg/1.jpg</file>
|
||||
<file>resources/music-note.png</file>
|
||||
<file>resources/music-library.png</file>
|
||||
<file>resources/next.png</file>
|
||||
<file>resources/music-queue.png</file>
|
||||
<file>resources/play.png</file>
|
||||
<file>resources/previous.png</file>
|
||||
<file>resources/pause.png</file>
|
||||
<file>resources/clean.png</file>
|
||||
<file>resources/usbms-inverted.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,384 +0,0 @@
|
|||
#include "encryptionmanager.h"
|
||||
#include "ui_encryptionmanager.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QScreen>
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QTimer>
|
||||
#include <QMessageBox>
|
||||
#include <QDateTime>
|
||||
#include "usbmsSplash.h"
|
||||
#include "functions.h"
|
||||
|
||||
encryptionManager::encryptionManager(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::encryptionManager)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->descriptionLabel->setFont(QFont("u001"));
|
||||
ui->successDescriptionLabel->setFont(QFont("u001"));
|
||||
ui->failureDescriptionLabel->setFont(QFont("u001"));
|
||||
ui->warningDescriptionLabel->setFont(QFont("u001"));
|
||||
|
||||
// Stylesheet
|
||||
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
this->setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
|
||||
ui->encryptionSetupLabel->setStyleSheet("font-size: 15pt; font-weight: bold");
|
||||
ui->descriptionLabel->setStyleSheet("font-size: 10pt");
|
||||
ui->successLabel->setStyleSheet("font-size: 15pt; font-weight: bold");
|
||||
ui->successDescriptionLabel->setStyleSheet("font-size: 10pt");
|
||||
ui->failureLabel->setStyleSheet("font-size: 15pt; font-weight: bold");
|
||||
ui->failureDescriptionLabel->setStyleSheet("font-size: 10pt");
|
||||
ui->setupContinueBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->setupAbortBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->exitSuccessBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->failureContinueBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->acceptBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->usbmsBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->warningLabel->setStyleSheet("font-size: 15pt; font-weight: bold");
|
||||
ui->warningDescriptionLabel->setStyleSheet("font-size: 10pt");
|
||||
|
||||
// Getting the screen's size
|
||||
float sW = QGuiApplication::screens()[0]->size().width();
|
||||
float sH = QGuiApplication::screens()[0]->size().height();
|
||||
float stdIconWidth;
|
||||
float stdIconHeight;
|
||||
{
|
||||
stdIconWidth = sW / 1.50;
|
||||
stdIconHeight = sH / 1.50;
|
||||
QPixmap pixmap(":/resources/encryption.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->encryptionImageLabel->setPixmap(scaledPixmap);
|
||||
}
|
||||
{
|
||||
stdIconWidth = sW / 1.65;
|
||||
stdIconHeight = sH / 1.65;
|
||||
QPixmap pixmap(":/resources/check-display.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->checkImageLabel->setPixmap(scaledPixmap);
|
||||
}
|
||||
{
|
||||
stdIconWidth = sW / 1.65;
|
||||
stdIconHeight = sH / 1.65;
|
||||
QPixmap pixmap(":/resources/error.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->failureImageLabel->setPixmap(scaledPixmap);
|
||||
}
|
||||
{
|
||||
stdIconWidth = sW / 1.50;
|
||||
stdIconHeight = sH / 1.50;
|
||||
QPixmap pixmap(":/resources/alert-triangle.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->warningImageLabel->setPixmap(scaledPixmap);
|
||||
}
|
||||
|
||||
hourglassAnimationWidgetWindow = new hourglassAnimationWidget();
|
||||
ui->hourglassWidget->insertWidget(0, hourglassAnimationWidgetWindow);
|
||||
ui->hourglassWidget->setCurrentIndex(0);
|
||||
|
||||
setDefaultWorkDir();
|
||||
if(checkconfig(".config/18-encrypted_storage/initial_setup_done") == true or checkconfig("/external_root/run/encfs_repack") == true) {
|
||||
ui->activityWidget->hide();
|
||||
if(checkconfig("/external_root/run/encfs_repack") == false) {
|
||||
setupPassphraseDialogMode = 1;
|
||||
}
|
||||
else {
|
||||
setupPassphraseDialogMode = 2;
|
||||
}
|
||||
QTimer::singleShot(500, this, SLOT(setupPassphraseDialog()));
|
||||
}
|
||||
else {
|
||||
QDir dir("/mnt/onboard/onboard/encfs-dropbox");
|
||||
if(dir.isEmpty()) {
|
||||
ui->activityWidget->setCurrentIndex(4);
|
||||
mkEncfsDirs();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
encryptionManager::~encryptionManager()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void encryptionManager::on_setupContinueBtn_clicked()
|
||||
{
|
||||
setupPassphraseDialogMode = 0;
|
||||
setupPassphraseDialog();
|
||||
}
|
||||
|
||||
void encryptionManager::setupPassphraseDialog() {
|
||||
/*
|
||||
* setupPassphraseDialogMode can be:
|
||||
* 0: Initial setup
|
||||
* 1: Normal behavior
|
||||
* 2: Repack
|
||||
*/
|
||||
log("Showing passphrase dialog for mode " + QString::number(setupPassphraseDialogMode), className);
|
||||
ui->activityWidget->hide();
|
||||
this->setStyleSheet("background-color: black");
|
||||
global::keyboard::keyboardDialog = true;
|
||||
global::keyboard::encfsDialog = true;
|
||||
global::keyboard::keyboardText = "";
|
||||
generalDialogWindow = new generalDialog();
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(generalDialogWindow, SIGNAL(refreshScreen()), SLOT(refreshScreen()));
|
||||
if(setupPassphraseDialogMode == 0) {
|
||||
connect(generalDialogWindow, SIGNAL(destroyed(QObject*)), SLOT(setupEncryptedStorage()));
|
||||
}
|
||||
else if(setupPassphraseDialogMode == 1) {
|
||||
connect(generalDialogWindow, SIGNAL(destroyed(QObject*)), SLOT(unlockEncryptedStorage()));
|
||||
}
|
||||
else {
|
||||
connect(generalDialogWindow, SIGNAL(destroyed(QObject*)), SLOT(repackEncryptedStorage()));
|
||||
}
|
||||
connect(generalDialogWindow, SIGNAL(showToast(QString)), SLOT(showToast(QString)));
|
||||
generalDialogWindow->show();
|
||||
}
|
||||
|
||||
|
||||
void encryptionManager::on_setupAbortBtn_clicked()
|
||||
{
|
||||
log("Aborting setup", className);
|
||||
setDefaultWorkDir();
|
||||
writeFile(".config/18-encrypted_storage/status", "false");
|
||||
quit_restart();
|
||||
}
|
||||
|
||||
void encryptionManager::quit_restart() {
|
||||
log("Restarting InkBox", className);
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void encryptionManager::refreshScreen() {
|
||||
this->repaint();
|
||||
}
|
||||
|
||||
void encryptionManager::showToast(QString messageToDisplay) {
|
||||
global::toast::message = messageToDisplay;
|
||||
toastWindow = new toast(this);
|
||||
toastWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(toastWindow, SIGNAL(refreshScreen()), SLOT(refreshScreen()));
|
||||
toastWindow->show();
|
||||
}
|
||||
|
||||
void encryptionManager::setupEncryptedStorage() {
|
||||
log("Setting up encrypted storage", className);
|
||||
this->setStyleSheet("background-color: white");
|
||||
ui->activityWidget->show();
|
||||
if(global::encfs::cancelSetup == true) {
|
||||
global::encfs::cancelSetup = false;
|
||||
ui->activityWidget->setCurrentIndex(0);
|
||||
}
|
||||
else {
|
||||
mkEncfsDirs();
|
||||
QString bootstrapPassphrase = global::encfs::passphrase;
|
||||
global::encfs::passphrase = "";
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_create", "true");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_bootstrap_files_location", "/data/onboard/encfs-dropbox");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_bootstrap_archive_location", "/data/onboard/data.encfs");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_bootstrap_passphrase", bootstrapPassphrase);
|
||||
setDefaultWorkDir();
|
||||
writeFile(".config/18-encrypted_storage/storage_list", "/data/onboard/encfs-decrypted");
|
||||
writeFile("/opt/ibxd", "encfs_restart\n");
|
||||
bool exitStatus;
|
||||
ui->activityWidget->setCurrentIndex(3);
|
||||
QTimer * t = new QTimer(this);
|
||||
t->setInterval(1000);
|
||||
connect(t, &QTimer::timeout, [&]() {
|
||||
if(QFile::exists("/external_root/run/encrypted_storage_bootstrap_setup")) {
|
||||
exitStatus = checkconfig("/external_root/run/encrypted_storage_bootstrap_setup");
|
||||
QFile::remove("/external_root/run/encrypted_storage_bootstrap_setup");
|
||||
setupExitWidget(exitStatus);
|
||||
}
|
||||
} );
|
||||
t->start();
|
||||
}
|
||||
}
|
||||
|
||||
void encryptionManager::unlockEncryptedStorage() {
|
||||
log("Trying to unlock encrypted storage", className);
|
||||
if(global::encfs::cancelSetup == true) {
|
||||
global::encfs::cancelSetup = false;
|
||||
poweroff(true);
|
||||
qApp->quit();
|
||||
}
|
||||
else {
|
||||
this->setStyleSheet("background-color: white");
|
||||
ui->activityWidget->show();
|
||||
mkEncfsDirs();
|
||||
QString passphrase = global::encfs::passphrase;
|
||||
global::encfs::passphrase = "";
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_archive", "/data/onboard/data.encfs");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_mountpoint", "/data/onboard/encfs-decrypted");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_bindmount", "/kobo/mnt/onboard/onboard/encfs-decrypted");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_passphrase", passphrase);
|
||||
writeFile("/opt/ibxd", "encfs_restart\n");
|
||||
bool exitStatus;
|
||||
|
||||
QString passphraseTriesStr = readFile("/inkbox/encryptedStoragePassphraseTries");
|
||||
if(passphraseTriesStr.isEmpty()) {
|
||||
passphraseTries = 0;
|
||||
}
|
||||
else {
|
||||
passphraseTries = passphraseTriesStr.toInt();
|
||||
passphraseTries++;
|
||||
}
|
||||
|
||||
ui->activityWidget->setCurrentIndex(3);
|
||||
QTimer * t = new QTimer(this);
|
||||
t->setInterval(1000);
|
||||
connect(t, &QTimer::timeout, [&]() {
|
||||
if(QFile::exists("/external_root/run/encfs_mounted")) {
|
||||
exitStatus = true;
|
||||
if(readFile("/external_root/run/encfs_mounted") != "true\n") {
|
||||
exitStatus = false;
|
||||
QFile::remove("/external_root/run/encfs_mounted");
|
||||
QString function = __func__; log(function + ": Invalid passphrase", className);
|
||||
if(setupMessageBoxRan == false) {
|
||||
int delay = 0;
|
||||
if(passphraseTries <= 3) {
|
||||
if(passphraseTries == 0) {
|
||||
writeFile("/inkbox/encryptedStoragePassphraseTries", "0");
|
||||
delay = 5000;
|
||||
}
|
||||
else if(passphraseTries == 1) {
|
||||
writeFile("/inkbox/encryptedStoragePassphraseTries", "1");
|
||||
delay = 10000;
|
||||
}
|
||||
else if(passphraseTries == 2) {
|
||||
writeFile("/inkbox/encryptedStoragePassphraseTries", "2");
|
||||
delay = 20000;
|
||||
}
|
||||
else if(passphraseTries >= 3) {
|
||||
writeFile("/inkbox/encryptedStoragePassphraseTries", "3");
|
||||
unsigned long currentEpoch = QDateTime::currentSecsSinceEpoch();
|
||||
currentEpoch += 86400;
|
||||
QString unlockTime_str = QString::number(currentEpoch);
|
||||
global::encfs::unlockTime = QDateTime::fromTime_t(currentEpoch).toString();
|
||||
global::encfs::lockdownMessage = "FATAL: 4 invalid passphrase tries, locking down device until " + global::encfs::unlockTime;
|
||||
writeFile("/external_root/boot/flags/ENCRYPT_LOCK", unlockTime_str + "\n");
|
||||
global::encfs::lockdown = true;
|
||||
setupMessageBoxRan = true;
|
||||
|
||||
alertWindow = new alert();
|
||||
alertWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
alertWindow->showFullScreen();
|
||||
}
|
||||
|
||||
if(passphraseTries <= 2) {
|
||||
QTimer::singleShot(delay, this, SLOT(setupFailedAuthenticationMessageBox()));
|
||||
setupMessageBoxRan = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
log("Unlocking successful", className);
|
||||
quit_restart();
|
||||
}
|
||||
}
|
||||
} );
|
||||
t->start();
|
||||
}
|
||||
}
|
||||
|
||||
void encryptionManager::mkEncfsDirs() {
|
||||
log("Creating encrypted storage directories", className);
|
||||
QDir encfsDir;
|
||||
QString encfsPath("/external_root/run/encfs");
|
||||
encfsDir.mkpath(encfsPath);
|
||||
QDir dumpDir;
|
||||
QString dumpPath("/mnt/onboard/onboard/encfs-dropbox");
|
||||
dumpDir.mkpath(dumpPath);
|
||||
QDir decDir;
|
||||
QString decPath("/mnt/onboard/onboard/encfs-decrypted");
|
||||
decDir.mkpath(decPath);
|
||||
}
|
||||
|
||||
void encryptionManager::on_exitSuccessBtn_clicked()
|
||||
{
|
||||
setDefaultWorkDir();
|
||||
writeFile(".config/18-encrypted_storage/initial_setup_done", "true");
|
||||
quit_restart();
|
||||
}
|
||||
|
||||
void encryptionManager::setupExitWidget(bool exitStatus) {
|
||||
if(setupExitWidgetRan == false) {
|
||||
if(exitStatus == true) {
|
||||
ui->activityWidget->setCurrentIndex(1);
|
||||
}
|
||||
else {
|
||||
writeFile(".config/18-encrypted_storage/status", "false");
|
||||
ui->activityWidget->setCurrentIndex(2);
|
||||
}
|
||||
setupExitWidgetRan = true;
|
||||
}
|
||||
}
|
||||
|
||||
void encryptionManager::on_failureContinueBtn_clicked()
|
||||
{
|
||||
setDefaultWorkDir();
|
||||
writeFile(".config/18-encrypted_storage/initial_setup_done", "true");
|
||||
quit_restart();
|
||||
}
|
||||
|
||||
void encryptionManager::setupFailedAuthenticationMessageBox() {
|
||||
log("Showing 'Authentication failed' message box", className);
|
||||
ui->activityWidget->hide();
|
||||
QMessageBox::critical(this, tr("Invalid argument"), tr("<font face='u001'>Invalid passphrase. Please try again.</font>"));
|
||||
quit_restart();
|
||||
}
|
||||
|
||||
void encryptionManager::on_acceptBtn_clicked()
|
||||
{
|
||||
writeFile(".config/18-encrypted_storage/status", "false");
|
||||
quit_restart();
|
||||
}
|
||||
|
||||
|
||||
void encryptionManager::on_usbmsBtn_clicked()
|
||||
{
|
||||
log("Showing USBMS splash", className);
|
||||
global::usbms::launchUsbms = true;
|
||||
usbmsWindow = new usbmsSplash();
|
||||
usbmsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
usbmsWindow->setGeometry(QRect(QPoint(0,0), screen()->geometry ().size()));
|
||||
usbmsWindow->show();
|
||||
}
|
||||
|
||||
void encryptionManager::repackEncryptedStorage() {
|
||||
log("Repacking encrypted storage", className);
|
||||
if(global::encfs::cancelSetup == true) {
|
||||
global::encfs::cancelSetup = false;
|
||||
quit_restart();
|
||||
}
|
||||
else {
|
||||
this->setStyleSheet("background-color: white");
|
||||
ui->activityWidget->show();
|
||||
mkEncfsDirs();
|
||||
QString passphrase = global::encfs::passphrase;
|
||||
global::encfs::passphrase = "";
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_repack_passphrase", passphrase);
|
||||
QFile::remove("/external_root/run/openrc/started/encfs");
|
||||
writeFile("/opt/ibxd", "encfs_restart\n");
|
||||
bool exitStatus;
|
||||
ui->activityWidget->setCurrentIndex(3);
|
||||
QTimer * t = new QTimer(this);
|
||||
t->setInterval(1000);
|
||||
connect(t, &QTimer::timeout, [&]() {
|
||||
if(QFile::exists("/external_root/run/encfs_repack_status")) {
|
||||
exitStatus = checkconfig("/external_root/run/encfs_repack_status");
|
||||
QFile::remove("/external_root/run/encfs_repack_status");
|
||||
setupExitWidget(exitStatus);
|
||||
}
|
||||
} );
|
||||
t->start();
|
||||
}
|
||||
}
|
2024
src/functions.h
2024
src/functions.h
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
391
src/main.cpp
391
src/main.cpp
|
@ -1,263 +1,196 @@
|
|||
/*
|
||||
InkBox: Open-source Qt-based eBook reader
|
||||
Copyright (C) 2021-2024 Nicolas Mailloux <nicolecrivain@gmail.com>
|
||||
SPDX-License-Identifier: GPL-3.0-only
|
||||
InkBox: Open-source Qt-based eBook reader
|
||||
Copyright (C) 2021-2024 Nicolas Mailloux <nicolecrivain@gmail.com>
|
||||
SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation.
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "mainwindow.h"
|
||||
#include "alert.h"
|
||||
#include "generaldialog.h"
|
||||
#include "functions.h"
|
||||
#include "reader.h"
|
||||
#include "encryptionmanager.h"
|
||||
#include "sleepthread.h"
|
||||
#include "sleepdialog.h"
|
||||
#include "audiothread.h"
|
||||
#include "encryptionmanager.h"
|
||||
#include "functions.h"
|
||||
#include "generaldialog.h"
|
||||
#include "mainwindow.h"
|
||||
#include "reader.h"
|
||||
#include "sleepdialog.h"
|
||||
#include "sleepthread.h"
|
||||
#include "splashAlert.h"
|
||||
#include "ui.h"
|
||||
|
||||
#include "device.h"
|
||||
#include <QApplication>
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
#include <QRect>
|
||||
#include <QScreen>
|
||||
#include <QTextCodec>
|
||||
#include <QTextStream>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
|
||||
int main(int argc, char *argv[]) {
|
||||
QApplication a(argc, argv);
|
||||
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
|
||||
|
||||
if(char * debug = std::getenv("DEBUG")) {
|
||||
if(std::atoi(debug) == 1) {
|
||||
global::logger::status = true;
|
||||
}
|
||||
}
|
||||
if (char *debug = std::getenv("DEBUG")) {
|
||||
if (std::atoi(debug) == 1) {
|
||||
global::logger::status = true;
|
||||
}
|
||||
}
|
||||
|
||||
global::deviceID = readFile("/opt/inkbox_device");
|
||||
log("Running on device " + global::deviceID, "main", true);
|
||||
QString deviceID = readFile("/opt/inkbox_device");
|
||||
if (deviceID.isEmpty()) {
|
||||
// we don't have a device id, assume that this is running in an emu
|
||||
deviceID = "emu";
|
||||
}
|
||||
log("Running on device " + deviceID, "main", true);
|
||||
// initialize the platform singleton
|
||||
Device::setup(deviceID);
|
||||
|
||||
// Tell the OS that we're currently running
|
||||
writeFile("/tmp/inkbox_running", "true");
|
||||
// Tell the OS that we're currently running
|
||||
writeFile("/tmp/inkbox_running", "true");
|
||||
|
||||
setDefaultWorkDir();
|
||||
if(checkconfig("/run/wifi_able") == true) {
|
||||
log("Device has Wi-Fi capabilities", "main");
|
||||
global::device::isWifiAble = true;
|
||||
}
|
||||
else {
|
||||
log("Device does not have Wi-Fi capabilities", "main");
|
||||
global::device::isWifiAble = false;
|
||||
}
|
||||
setDefaultWorkDir();
|
||||
if (Device::getSingleton()->supportsWifi()) {
|
||||
log("Device has Wi-Fi capabilities", "main");
|
||||
} else {
|
||||
log("Device does not have Wi-Fi capabilities", "main");
|
||||
}
|
||||
|
||||
if(QFile::exists("/tmp/currentlyRunningUserApplication")) {
|
||||
QFile::remove("/tmp/currentlyRunningUserApplication");
|
||||
}
|
||||
if (QFile::exists("/tmp/currentlyRunningUserApplication")) {
|
||||
QFile::remove("/tmp/currentlyRunningUserApplication");
|
||||
}
|
||||
|
||||
if(QFile::exists("/tmp/rescan_userapps")) {
|
||||
QFile::remove("/tmp/rescan_userapps");
|
||||
log("Re-scanning user applications from explicit request", "main");
|
||||
writeFile("/opt/ibxd", "gui_apps_stop\n");
|
||||
while(true) {
|
||||
if(QFile::exists("/tmp/gui_apps_stopped")) {
|
||||
QFile::remove("/tmp/gui_apps_stopped");
|
||||
break;
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
writeFile("/opt/ibxd", "gui_apps_start\n");
|
||||
while(true) {
|
||||
if(QFile::exists("/tmp/gui_apps_started")) {
|
||||
if(checkconfig("/tmp/gui_apps_started") == true) {
|
||||
log("GUI apps service started successfully", "main");
|
||||
QFile::remove("/tmp/gui_apps_started");
|
||||
updateUserAppsMainJsonFile();
|
||||
break;
|
||||
}
|
||||
else {
|
||||
log("GUI apps service failed to start", "main");
|
||||
QFile::remove("/tmp/gui_apps_started");
|
||||
break;
|
||||
}
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
updateUserAppsMainJsonFile();
|
||||
}
|
||||
if (QFile::exists("/tmp/rescan_userapps")) {
|
||||
QFile::remove("/tmp/rescan_userapps");
|
||||
log("Re-scanning user applications from explicit request", "main");
|
||||
writeFile("/opt/ibxd", "gui_apps_stop\n");
|
||||
while (true) {
|
||||
if (QFile::exists("/tmp/gui_apps_stopped")) {
|
||||
QFile::remove("/tmp/gui_apps_stopped");
|
||||
break;
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
writeFile("/opt/ibxd", "gui_apps_start\n");
|
||||
while (true) {
|
||||
if (QFile::exists("/tmp/gui_apps_started")) {
|
||||
if (checkconfig("/tmp/gui_apps_started") == true) {
|
||||
log("GUI apps service started successfully", "main");
|
||||
QFile::remove("/tmp/gui_apps_started");
|
||||
updateUserAppsMainJsonFile();
|
||||
break;
|
||||
} else {
|
||||
log("GUI apps service failed to start", "main");
|
||||
QFile::remove("/tmp/gui_apps_started");
|
||||
break;
|
||||
}
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
updateUserAppsMainJsonFile();
|
||||
}
|
||||
|
||||
// Power daemon-related stuff
|
||||
sleepDialog * sleepDialogWindow = new sleepDialog;
|
||||
// https://wiki.qt.io/QThreads_general_usage
|
||||
QThread * IPDThread = new QThread();
|
||||
sleepThread * sleepThreadWindow = new sleepThread();
|
||||
sleepThreadWindow->moveToThread(IPDThread);
|
||||
QObject::connect(IPDThread, &QThread::started, sleepThreadWindow, &sleepThread::start);
|
||||
QObject::connect(sleepThreadWindow, &sleepThread::startDialog, sleepDialogWindow, &sleepDialog::launchSleepDialog);
|
||||
QObject::connect(sleepThreadWindow, &sleepThread::stopDialog, sleepDialogWindow, &sleepDialog::hideSleepDialog);
|
||||
IPDThread->start();
|
||||
// Power daemon-related stuff
|
||||
SleepDialog *sleepDialogWindow = new SleepDialog;
|
||||
// https://wiki.qt.io/QThreads_general_usage
|
||||
QThread *IPDThread = new QThread();
|
||||
SleepThread *sleepThreadWindow = new SleepThread();
|
||||
sleepThreadWindow->moveToThread(IPDThread);
|
||||
QObject::connect(IPDThread, &QThread::started, sleepThreadWindow, &SleepThread::start);
|
||||
QObject::connect(sleepThreadWindow, &SleepThread::startDialog, sleepDialogWindow, &SleepDialog::launchSleepDialog);
|
||||
QObject::connect(sleepThreadWindow, &SleepThread::stopDialog, sleepDialogWindow, &SleepDialog::hideSleepDialog);
|
||||
IPDThread->start();
|
||||
|
||||
// Audio stuff
|
||||
if(checkconfig(".config/e-2-audio/enabled") == true) {
|
||||
log("Audio is enabled", "main");
|
||||
global::audio::enabled = true;
|
||||
QThread * audioThread = new QThread();
|
||||
audiothread * audioObject = new audiothread();
|
||||
audioObject->moveToThread(audioThread);
|
||||
QObject::connect(audioThread, &QThread::started, audioObject, &audiothread::start);
|
||||
audioThread->start();
|
||||
}
|
||||
else {
|
||||
log("Audio is disabled", "main");
|
||||
}
|
||||
// Audio stuff
|
||||
if (checkconfig(".config/e-2-audio/enabled") == true) {
|
||||
log("Audio is enabled", "main");
|
||||
global::audio::enabled = true;
|
||||
QThread *audioThread = new QThread();
|
||||
AudioThread *audioObject = new AudioThread();
|
||||
audioObject->moveToThread(audioThread);
|
||||
QObject::connect(audioThread, &QThread::started, audioObject, &AudioThread::start);
|
||||
audioThread->start();
|
||||
} else {
|
||||
log("Audio is disabled", "main");
|
||||
}
|
||||
|
||||
if(checkconfig(".config/18-encrypted_storage/status") == true and checkconfig("/external_root/run/encfs_mounted") == false) {
|
||||
// Open Encryption Manager to unlock encrypted storage
|
||||
encryptionManager w;
|
||||
const QScreen * screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0,0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
else if(checkconfig("/external_root/run/encfs_mounted") == true and checkconfig("/external_root/run/encfs_repack") == true) {
|
||||
log("Launching encryptionManager", "main");
|
||||
encryptionManager w;
|
||||
const QScreen * screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0,0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
else {
|
||||
// Variables
|
||||
global::reader::startBatteryWatchdog = false;
|
||||
global::reader::startUsbmsPrompt = false;
|
||||
if (checkconfig(".config/18-encrypted_storage/status") == true and checkconfig("/external_root/run/encfs_mounted") == false) {
|
||||
// Open Encryption Manager to unlock encrypted storage
|
||||
CryptoManagerWidget w;
|
||||
const QScreen *screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0, 0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
} else if (checkconfig("/external_root/run/encfs_mounted") == true and checkconfig("/external_root/run/encfs_repack") == true) {
|
||||
log("Launching encryptionManager", "main");
|
||||
CryptoManagerWidget w;
|
||||
const QScreen *screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0, 0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
} else {
|
||||
// Variables
|
||||
global::reader::startBatteryWatchdog = false;
|
||||
global::reader::startUsbmsPrompt = false;
|
||||
|
||||
// Checking if battery level is critical; if true (and if it is not charging), then display a "Please charge your eReader" splash and power off.
|
||||
if(global::deviceID != "emu\n") {
|
||||
if(isBatteryCritical() == true) {
|
||||
if(!isUsbPluggedIn()) {
|
||||
global::battery::showCriticalBatteryAlert = true;
|
||||
alert w;
|
||||
// Checking if battery level is critical; if true (and if it is not charging), then display a "Please charge your eReader" splash and power off.
|
||||
if (Device::getSingleton()->getBatteryLevel() <= 5) {
|
||||
if (!Device::getSingleton()->isUSBPluggedIn()) {
|
||||
global::battery::showCriticalBatteryAlert = true;
|
||||
SplashAlertWidget w;
|
||||
|
||||
const QScreen * screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0,0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
}
|
||||
}
|
||||
const QScreen *screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0, 0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
}
|
||||
|
||||
// Checking if there has been an ALERT flag set up, and if there is, show a big warning
|
||||
if(checkconfig("/external_root/boot/flags/ALERT") == true) {
|
||||
alert w;
|
||||
// Checking if there has been an ALERT flag set up, and if there is, show a big warning
|
||||
if (checkconfig("/external_root/boot/flags/ALERT") == true) {
|
||||
SplashAlertWidget w;
|
||||
|
||||
const QScreen * screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0,0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
// If we're waking from sleep and we have the lockscreen enabled, we'll "resume" the book from scratch
|
||||
else if(checkconfig("/tmp/suspendBook") == true && checkconfig("/inkbox/bookIsEpub") == false) {
|
||||
// Start the low/critical battery alert timer from the Reader framework since MainWindow is not going to be shown
|
||||
global::runningInstanceIsReaderOnly = true;
|
||||
global::reader::startBatteryWatchdog = true;
|
||||
global::reader::startUsbmsPrompt = true;
|
||||
global::reader::skipOpenDialog = true;
|
||||
const QScreen *screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0, 0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
// If we're waking from sleep and we have the lockscreen enabled, we'll "resume" the book from scratch
|
||||
else if (checkconfig("/tmp/suspendBook") == true && checkconfig("/inkbox/bookIsEpub") == false) {
|
||||
// Start the low/critical battery alert timer from the Reader framework since MainWindow is not going to be shown
|
||||
global::runningInstanceIsReaderOnly = true;
|
||||
global::reader::startBatteryWatchdog = true;
|
||||
global::reader::startUsbmsPrompt = true;
|
||||
global::reader::skipOpenDialog = true;
|
||||
|
||||
writeFile("/inkbox/skip_opendialog", "true");
|
||||
if(global::deviceID == "n705\n") {
|
||||
global::isN705 = true;
|
||||
}
|
||||
else if(global::deviceID == "n905\n") {
|
||||
global::isN905C = true;
|
||||
}
|
||||
else if(global::deviceID == "n613\n") {
|
||||
global::isN613 = true;
|
||||
}
|
||||
else if(global::deviceID == "n873\n") {
|
||||
global::isN873 = true;
|
||||
}
|
||||
else if(global::deviceID == "n236\n") {
|
||||
global::isN236 = true;
|
||||
}
|
||||
else if(global::deviceID == "n437\n") {
|
||||
global::isN437 = true;
|
||||
}
|
||||
else if(global::deviceID == "n306\n") {
|
||||
global::isN306 = true;
|
||||
}
|
||||
else if(global::deviceID == "n249\n") {
|
||||
global::isN249 = true;
|
||||
}
|
||||
else if(global::deviceID == "kt\n") {
|
||||
global::isKT = true;
|
||||
}
|
||||
else {
|
||||
;
|
||||
}
|
||||
writeFile("/inkbox/skip_opendialog", "true");
|
||||
|
||||
reader w;
|
||||
ReaderWidget w;
|
||||
|
||||
const QScreen* screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0,0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
const QScreen *screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0, 0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
|
||||
}
|
||||
else {
|
||||
QProcess::execute("remount_tmpfs_launch.sh", QStringList());
|
||||
} else {
|
||||
QProcess::execute("remount_tmpfs_launch.sh", QStringList());
|
||||
|
||||
MainWindow w;
|
||||
MainWindow w;
|
||||
|
||||
QApplication::setStyle("windows");
|
||||
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
w.setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
QApplication::setStyle("windows");
|
||||
UI::applyStyle(w, "eink");
|
||||
|
||||
if(global::deviceID == "n705\n") {
|
||||
global::isN705 = true;
|
||||
}
|
||||
else if(global::deviceID == "n905\n") {
|
||||
global::isN905C = true;
|
||||
}
|
||||
else if(global::deviceID == "n613\n") {
|
||||
global::isN613 = true;
|
||||
}
|
||||
else if(global::deviceID == "n873\n") {
|
||||
global::isN873 = true;
|
||||
}
|
||||
else if(global::deviceID == "n236\n") {
|
||||
global::isN236 = true;
|
||||
}
|
||||
else if(global::deviceID == "n437\n") {
|
||||
global::isN437 = true;
|
||||
}
|
||||
else if(global::deviceID == "n306\n") {
|
||||
global::isN306 = true;
|
||||
}
|
||||
else if(global::deviceID == "n249\n") {
|
||||
global::isN249 = true;
|
||||
}
|
||||
else if(global::deviceID == "kt\n") {
|
||||
global::isKT = true;
|
||||
}
|
||||
else {
|
||||
;
|
||||
}
|
||||
|
||||
const QScreen * screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0,0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
}
|
||||
const QScreen *screen = qApp->primaryScreen();
|
||||
w.setGeometry(QRect(QPoint(0, 0), screen->geometry().size()));
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
239
src/platform/device.cpp
Normal file
239
src/platform/device.cpp
Normal file
|
@ -0,0 +1,239 @@
|
|||
#include "device.h"
|
||||
#include "functions.h"
|
||||
|
||||
#include <QDirIterator>
|
||||
|
||||
#include "device_desktop.h"
|
||||
#include "device_kindle_touch.h"
|
||||
#include "device_kobo_aura_edition2.h"
|
||||
#include "device_kobo_clarahd.h"
|
||||
#include "device_kobo_glo.h"
|
||||
#include "device_kobo_glohd.h"
|
||||
#include "device_kobo_libra.h"
|
||||
#include "device_kobo_mini.h"
|
||||
#include "device_kobo_nia.h"
|
||||
#include "device_kobo_touch.h"
|
||||
|
||||
|
||||
Device* Device::instance = nullptr;
|
||||
|
||||
Device::Device()
|
||||
{
|
||||
powerSupplyPath = getPowerSupplyPath();
|
||||
}
|
||||
|
||||
Device* Device::getSingleton() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void Device::setup(QString &platformName){
|
||||
QString name = platformName.trimmed();
|
||||
Device* temp;
|
||||
|
||||
#define SETUP_DEVICE(x) { \
|
||||
temp = new x(); \
|
||||
if(temp->getID() == name) { \
|
||||
Device::instance = temp;\
|
||||
log("Setting up Device "+Device::instance->getID()+".", "Device::setup"); \
|
||||
return; \
|
||||
} else { \
|
||||
delete temp; \
|
||||
} \
|
||||
}
|
||||
|
||||
SETUP_DEVICE(DeviceKindleTouch)
|
||||
|
||||
SETUP_DEVICE(DeviceKoboAuraEdition2)
|
||||
SETUP_DEVICE(DeviceKoboClaraHD)
|
||||
SETUP_DEVICE(DeviceKoboGlo)
|
||||
SETUP_DEVICE(DeviceKoboGloHD)
|
||||
SETUP_DEVICE(DeviceKoboLibra)
|
||||
SETUP_DEVICE(DeviceKoboMini)
|
||||
SETUP_DEVICE(DeviceKoboNia)
|
||||
SETUP_DEVICE(DeviceKoboTouch)
|
||||
|
||||
// Fallback if none of the devices above worked
|
||||
Device::instance = new DeviceDesktop();
|
||||
|
||||
log("Setting up Device "+Device::instance->getID()+".", "Device::setup");
|
||||
fprintf(stderr, "Device has fallen back to desktop.\n");
|
||||
}
|
||||
|
||||
void Device::writeFile(QString path, QString content) {
|
||||
QFile file(path);
|
||||
if(file.open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Text)) {
|
||||
QTextStream stream(&file);
|
||||
stream << content;
|
||||
} else {
|
||||
fprintf(stderr, ("Failed to write to file: "));
|
||||
}
|
||||
}
|
||||
|
||||
QString Device::readFile(QString path) {
|
||||
QFile file(path);
|
||||
file.open(QIODevice::ReadOnly);
|
||||
QTextStream in (&file);
|
||||
QString content = in.readAll();
|
||||
file.close();
|
||||
|
||||
return content.trimmed();
|
||||
}
|
||||
|
||||
QString Device::getPowerSupplyPath() {
|
||||
// get the path to the battery so we can check the charge latter
|
||||
QString result;
|
||||
QDirIterator supplies("/sys/class/power_supply", QDirIterator::NoIteratorFlags);
|
||||
while(supplies.hasNext()) {
|
||||
QString supply = supplies.filePath();
|
||||
|
||||
// Badly-classified device by some ntx kernels, ignore
|
||||
if (supplies.fileName() == "mc13892_charger") {
|
||||
continue;
|
||||
}
|
||||
|
||||
if(QFile::exists(supply + "/type")) {
|
||||
QString content = readFile(supply + "/type");
|
||||
if(content == "Battery"){
|
||||
result = supply;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
supplies.next();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
const QString Device::getStyleSheetPath() {
|
||||
return "/mnt/onboard/.adds/inkbox/";
|
||||
}
|
||||
|
||||
Device::SysInfo Device::getSystemInfo() {
|
||||
// get UID
|
||||
QString prog ("dd");
|
||||
QStringList args;
|
||||
args << "if=/dev/mmcblk0" << "bs=512" << "skip=1" << "count=1" << "status=none";
|
||||
QProcess *proc = new QProcess();
|
||||
proc->start(prog, args);
|
||||
proc->waitForFinished();
|
||||
|
||||
QString deviceUID = proc->readAllStandardOutput();
|
||||
deviceUID = deviceUID.left(256);
|
||||
proc->deleteLater();
|
||||
|
||||
// get Kernel Version
|
||||
prog = "uname";
|
||||
args = QStringList();
|
||||
args << "-r";
|
||||
proc = new QProcess();
|
||||
proc->start(prog, args);
|
||||
proc->waitForFinished();
|
||||
|
||||
QString kernelVersion = proc->readAllStandardOutput();
|
||||
kernelVersion = kernelVersion.trimmed();
|
||||
|
||||
proc->deleteLater();
|
||||
|
||||
setDefaultWorkDir();
|
||||
writeFile("/external_root/run/initrd-fifo", "get_kernel_build_id\n");
|
||||
QThread::msleep(100);
|
||||
writeFile("/external_root/run/initrd-fifo", "get_kernel_commit\n");
|
||||
QThread::msleep(100);
|
||||
|
||||
QString kernelBuildID = readFile("/external_root/run/kernel_build_id").trimmed();
|
||||
|
||||
QString kernelCommit = readFile("/external_root/run/kernel_commit").trimmed();
|
||||
|
||||
|
||||
SysInfo info = {
|
||||
.uid= deviceUID,
|
||||
.kernelVersion= kernelVersion,
|
||||
.kernelBuild= kernelBuildID,
|
||||
.kernelCommit= kernelCommit,
|
||||
|
||||
.inkOSVersion= readFile("/external_root/opt/isa/version"),
|
||||
.inkGitVersion = GIT_VERSION,
|
||||
|
||||
.ipAddress = getConnectionInformation()
|
||||
};
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
|
||||
bool Device::supportsWifi() {
|
||||
return checkconfig("/run/wifi_able");
|
||||
}
|
||||
|
||||
int Device::getBatteryLevel() {
|
||||
int value = 100;
|
||||
if(QFile::exists("/sys/devices/platform/pmic_battery.1/power_supply/mc13892_bat/capacity")) {
|
||||
value = readFile("/sys/devices/platform/pmic_battery.1/power_supply/mc13892_bat/capacity").toInt();
|
||||
} else if(QFile::exists(powerSupplyPath + "/capacity")) {
|
||||
value = readFile(powerSupplyPath + "/capacity").toInt();
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
int Device::getBrightness() {
|
||||
if(QFile::exists("/var/run/brightness")) {
|
||||
return readFile("/var/run/brightness").toInt();
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void Device::setBrightness(int value) {
|
||||
if(QFile::exists("/var/run/brightness")) {
|
||||
std::ofstream fhandler;
|
||||
fhandler.open("/var/run/brightness");
|
||||
fhandler << value;
|
||||
fhandler.close();
|
||||
} else if(QFile::exists("/var/run/brightness_write")) {
|
||||
// this is for N249 devices. Overwrite this virtual method for that platform instead
|
||||
std::ofstream fhandler;
|
||||
fhandler.open("/var/run/brightness_write");
|
||||
fhandler << value;
|
||||
fhandler.close();
|
||||
}
|
||||
}
|
||||
|
||||
bool Device::supportsNightmode() {
|
||||
return true;
|
||||
}
|
||||
|
||||
int Device::getBaseDPI() {
|
||||
return 125;
|
||||
}
|
||||
|
||||
bool Device::isUSBPluggedIn() {
|
||||
// Thanks to https://github.com/koreader/KoboUSBMS/blob/2efdf9d920c68752b2933f21c664dc1afb28fc2e/usbms.c#L148-L158
|
||||
int ntxfd;
|
||||
if((ntxfd = open("/dev/ntx_io", O_RDWR)) == -1) {
|
||||
fprintf(stderr, "Error opening ntx_io device\n");
|
||||
return false;
|
||||
}
|
||||
unsigned long ptr = 0U;
|
||||
ioctl(ntxfd, 108, &ptr);
|
||||
close(ntxfd);
|
||||
return !!ptr;
|
||||
}
|
||||
|
||||
void Device::loadUSBMassStorageModule() {
|
||||
|
||||
}
|
||||
|
||||
QString Device::getUSBMassStorageModule() {
|
||||
return "/external_root/lib/modules/g_mass_storage.ko";
|
||||
}
|
||||
|
||||
QString Device::getNetworkInterfaceName() {
|
||||
return "wlan0";
|
||||
}
|
130
src/platform/device.h
Normal file
130
src/platform/device.h
Normal file
|
@ -0,0 +1,130 @@
|
|||
#ifndef PLATFORM_H
|
||||
#define PLATFORM_H
|
||||
|
||||
#include <QString>
|
||||
|
||||
class Device
|
||||
{
|
||||
private:
|
||||
static Device* instance;
|
||||
QString powerSupplyPath;
|
||||
|
||||
QString getPowerSupplyPath();
|
||||
|
||||
protected:
|
||||
Device();
|
||||
|
||||
void writeFile(QString path, QString content);
|
||||
QString readFile(QString path);
|
||||
|
||||
public:
|
||||
virtual ~Device() = default;
|
||||
|
||||
static void setup(QString& platformName);
|
||||
/*
|
||||
|
||||
if(global::deviceID == "n705\n") {
|
||||
global::isN705 = true;
|
||||
}
|
||||
else if(global::deviceID == "n905\n") {
|
||||
global::isN905C = true;
|
||||
}
|
||||
else if(global::deviceID == "n613\n") {
|
||||
global::isN613 = true;
|
||||
}
|
||||
else if(global::deviceID == "n873\n") {
|
||||
global::isN873 = true;
|
||||
}
|
||||
else if(global::deviceID == "n236\n") {
|
||||
global::isN236 = true;
|
||||
}
|
||||
else if(global::deviceID == "n437\n") {
|
||||
global::isN437 = true;
|
||||
}
|
||||
else if(global::deviceID == "n306\n") {
|
||||
global::isN306 = true;
|
||||
}
|
||||
^else if(global::deviceID == "n249\n") {
|
||||
global::isN249 = true;
|
||||
}
|
||||
else if(global::deviceID == "kt\n") {
|
||||
global::isKT = true;
|
||||
}
|
||||
else {
|
||||
;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
static Device* getSingleton();
|
||||
|
||||
virtual QString getID() = 0;
|
||||
|
||||
struct SysInfo {
|
||||
QString uid;
|
||||
|
||||
QString kernelVersion;
|
||||
QString kernelBuild;
|
||||
QString kernelCommit;
|
||||
|
||||
QString inkOSVersion;
|
||||
QString inkGitVersion;
|
||||
|
||||
QString ipAddress;
|
||||
};
|
||||
virtual SysInfo getSystemInfo();
|
||||
|
||||
virtual bool hasNavButtons() = 0;
|
||||
|
||||
virtual bool supportsWifi() = 0;
|
||||
|
||||
// BATTERY stuff
|
||||
|
||||
virtual bool hasBattery() = 0;
|
||||
virtual int getBatteryLevel();
|
||||
// Generic Battery Utility functions
|
||||
bool isBatteryCritical() {
|
||||
return getBatteryLevel() < 5;
|
||||
}
|
||||
bool isBatteryLow() {
|
||||
return getBatteryLevel() < 15;
|
||||
}
|
||||
|
||||
// only true for isN249 and isN873
|
||||
virtual bool supportsWarmLight() = 0;
|
||||
// 100 for N249 and 10 for N873
|
||||
virtual int getMaxWarmLightValue() = 0;
|
||||
virtual int getWarmth() = 0;
|
||||
virtual void setWarmth(int value) = 0;
|
||||
|
||||
virtual bool supportsBrightness()=0;
|
||||
|
||||
virtual int getBrightness();
|
||||
virtual void setBrightness(int value);
|
||||
|
||||
virtual bool supportsNightmode();
|
||||
|
||||
virtual int getBaseDPI();
|
||||
|
||||
enum ScreenSize {
|
||||
SMALL, // Kobo Mini (705)
|
||||
MEDIUM,
|
||||
LARGE, // Kobo Glo HD (437), 249
|
||||
VERY_LARGE // Kobo Libra (873)
|
||||
};
|
||||
virtual ScreenSize getScreenSize() = 0;
|
||||
|
||||
// USB Mass Storage Stuff
|
||||
virtual bool isUSBPluggedIn();
|
||||
virtual void loadUSBMassStorageModule();
|
||||
virtual QString getUSBMassStorageModule();
|
||||
|
||||
// NETWORK
|
||||
virtual QString getNetworkInterfaceName();
|
||||
|
||||
// PATHS
|
||||
virtual const QString getStyleSheetPath();
|
||||
|
||||
};
|
||||
|
||||
#endif // PLATFORM_H
|
6
src/platform/device_desktop.cpp
Normal file
6
src/platform/device_desktop.cpp
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include "device_desktop.h"
|
||||
|
||||
DeviceDesktop::DeviceDesktop()
|
||||
{
|
||||
|
||||
}
|
53
src/platform/device_desktop.h
Normal file
53
src/platform/device_desktop.h
Normal file
|
@ -0,0 +1,53 @@
|
|||
#ifndef DEVICEDESKTOP_H
|
||||
#define DEVICEDESKTOP_H
|
||||
|
||||
#include "device.h"
|
||||
|
||||
class DeviceDesktop : public Device
|
||||
{
|
||||
public:
|
||||
DeviceDesktop();
|
||||
|
||||
virtual QString getID() override {
|
||||
return "desktop";
|
||||
}
|
||||
|
||||
virtual bool hasNavButtons() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool supportsWifi() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// BATTERY
|
||||
virtual bool hasBattery() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// SCREEN
|
||||
// WARM LIGHT
|
||||
virtual bool supportsWarmLight() override {
|
||||
return false;
|
||||
};
|
||||
virtual int getMaxWarmLightValue() override {
|
||||
return 0;
|
||||
};
|
||||
virtual int getWarmth() override {return 0;};
|
||||
virtual void setWarmth(int value) override {};
|
||||
|
||||
// BRIGHTNESS
|
||||
virtual bool supportsBrightness() override {
|
||||
return true;
|
||||
};
|
||||
|
||||
// SIZE
|
||||
virtual int getBaseDPI() override {
|
||||
return 125;
|
||||
}
|
||||
virtual ScreenSize getScreenSize() override {
|
||||
return ScreenSize::VERY_LARGE;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // DEVICEDESKTOP_H
|
29
src/platform/device_kindle_touch.cpp
Normal file
29
src/platform/device_kindle_touch.cpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
#include "device_kindle_touch.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QProcess>
|
||||
|
||||
DeviceKindleTouch::DeviceKindleTouch()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int DeviceKindleTouch::getBatteryLevel() {
|
||||
if(QFile::exists("/sys/devices/system/yoshi_battery/yoshi_battery0/battery_capacity")) {
|
||||
return readFile("/sys/devices/system/yoshi_battery/yoshi_battery0/battery_capacity").toInt();
|
||||
|
||||
}
|
||||
return 100;
|
||||
}
|
||||
|
||||
bool DeviceKindleTouch::isUSBPluggedIn() {
|
||||
return readFile("/sys/devices/system/yoshi_battery/yoshi_battery0/battery_status").toInt() == 1;
|
||||
}
|
||||
|
||||
void DeviceKindleTouch::loadUSBMassStorageModule() {
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/2.6.35-inkbox/kernel/drivers/usb/gadget/arcotg_udc.ko");
|
||||
}
|
||||
|
||||
QString DeviceKindleTouch::getUSBMassStorageModule() {
|
||||
return "/external_root/lib/modules/2.6.35-inkbox/kernel/drivers/usb/gadget/g_file_storage.ko";
|
||||
}
|
61
src/platform/device_kindle_touch.h
Normal file
61
src/platform/device_kindle_touch.h
Normal file
|
@ -0,0 +1,61 @@
|
|||
#ifndef DEVICEKINDLETOUCH_H
|
||||
#define DEVICEKINDLETOUCH_H
|
||||
|
||||
#include "device.h"
|
||||
|
||||
class DeviceKindleTouch : public Device
|
||||
{
|
||||
public:
|
||||
DeviceKindleTouch();
|
||||
|
||||
virtual QString getID() override {
|
||||
return "kt";
|
||||
}
|
||||
|
||||
virtual bool hasNavButtons() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool supportsWifi() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// BATTERY
|
||||
virtual bool hasBattery() override {
|
||||
return true;
|
||||
}
|
||||
virtual int getBatteryLevel() override;
|
||||
|
||||
|
||||
// SCREEN
|
||||
// WARM LIGHT
|
||||
virtual bool supportsWarmLight() override {
|
||||
return false;
|
||||
};
|
||||
virtual int getMaxWarmLightValue() override {
|
||||
return 0;
|
||||
};
|
||||
virtual int getWarmth() override {return 0;};
|
||||
virtual void setWarmth(int value) override {};
|
||||
|
||||
// BRIGHTNESS
|
||||
virtual bool supportsBrightness() override {
|
||||
return true;
|
||||
};
|
||||
|
||||
// SIZE
|
||||
virtual int getBaseDPI() override {
|
||||
return 125;
|
||||
}
|
||||
virtual ScreenSize getScreenSize() override {
|
||||
return ScreenSize::MEDIUM;
|
||||
}
|
||||
|
||||
// USB
|
||||
virtual bool isUSBPluggedIn() override;
|
||||
virtual void loadUSBMassStorageModule() override;
|
||||
virtual QString getUSBMassStorageModule() override;
|
||||
|
||||
};
|
||||
|
||||
#endif // DEVICEKINDLETOUCH_H
|
6
src/platform/device_kobo_aura_edition2.cpp
Normal file
6
src/platform/device_kobo_aura_edition2.cpp
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include "device_kobo_aura_edition2.h"
|
||||
|
||||
DeviceKoboAuraEdition2::DeviceKoboAuraEdition2()
|
||||
{
|
||||
|
||||
}
|
53
src/platform/device_kobo_aura_edition2.h
Normal file
53
src/platform/device_kobo_aura_edition2.h
Normal file
|
@ -0,0 +1,53 @@
|
|||
#ifndef KOBOAURAEDITION2_H
|
||||
#define KOBOAURAEDITION2_H
|
||||
|
||||
#include "device.h"
|
||||
|
||||
class DeviceKoboAuraEdition2 : public Device
|
||||
{
|
||||
public:
|
||||
DeviceKoboAuraEdition2();
|
||||
|
||||
virtual QString getID() override {
|
||||
return "n236";
|
||||
}
|
||||
|
||||
virtual bool hasNavButtons() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool supportsWifi() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// BATTERY
|
||||
virtual bool hasBattery() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// SCREEN
|
||||
// WARM LIGHT
|
||||
virtual bool supportsWarmLight() override {
|
||||
return false;
|
||||
};
|
||||
virtual int getMaxWarmLightValue() override {
|
||||
return 0;
|
||||
};
|
||||
virtual int getWarmth() override {return 0;};
|
||||
virtual void setWarmth(int value) override {};
|
||||
|
||||
// BRIGHTNESS
|
||||
virtual bool supportsBrightness() override {
|
||||
return true;
|
||||
};
|
||||
|
||||
// SIZE
|
||||
virtual int getBaseDPI() override {
|
||||
return 175;
|
||||
}
|
||||
virtual ScreenSize getScreenSize() override {
|
||||
return ScreenSize::MEDIUM;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // KOBOAURAEDITION2_H
|
43
src/platform/device_kobo_clarahd.cpp
Normal file
43
src/platform/device_kobo_clarahd.cpp
Normal file
|
@ -0,0 +1,43 @@
|
|||
#include "device_kobo_clarahd.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QProcess>
|
||||
|
||||
DeviceKoboClaraHD::DeviceKoboClaraHD()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int DeviceKoboClaraHD::getWarmth() {
|
||||
QString sysfsWarmthPath = "/sys/class/backlight/backlight_warm/actual_brightness";
|
||||
int warmthValue;
|
||||
|
||||
QString warmthConfig = readFile(sysfsWarmthPath);
|
||||
warmthValue = warmthConfig.toInt();
|
||||
return warmthValue;
|
||||
}
|
||||
|
||||
void DeviceKoboClaraHD::setWarmth(int value) {
|
||||
QString sysfsWarmthPath = "/sys/class/backlight/backlight_warm/brightness";
|
||||
QString warmthValueStr =QString::number(value);
|
||||
|
||||
writeFile(sysfsWarmthPath, warmthValueStr);
|
||||
}
|
||||
|
||||
void DeviceKoboClaraHD::setBrightness(int value) {
|
||||
if(QFile::exists("/var/run/brightness_write")) {
|
||||
writeFile("/var/run/brightness_write", QString::number(value));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//USB
|
||||
bool DeviceKoboClaraHD::isUSBPluggedIn() {
|
||||
return (readFile("/sys/class/power_supply/rn5t618-battery/status") != "Discharging\n");
|
||||
}
|
||||
|
||||
void DeviceKoboClaraHD::loadUSBMassStorageModule() {
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/fs/configfs/configfs.ko");
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/drivers/usb/gadget/libcomposite.ko");
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/drivers/usb/gadget/function/usb_f_mass_storage.ko");
|
||||
}
|
63
src/platform/device_kobo_clarahd.h
Normal file
63
src/platform/device_kobo_clarahd.h
Normal file
|
@ -0,0 +1,63 @@
|
|||
#ifndef DEVICEKOBOCLARAHD_H
|
||||
#define DEVICEKOBOCLARAHD_H
|
||||
|
||||
#include "device.h"
|
||||
|
||||
class DeviceKoboClaraHD : public Device
|
||||
{
|
||||
public:
|
||||
DeviceKoboClaraHD();
|
||||
|
||||
virtual QString getID() override {
|
||||
return "n249";
|
||||
}
|
||||
|
||||
virtual bool hasNavButtons() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool supportsWifi() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// BATTERY
|
||||
virtual bool hasBattery() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// SCREEN
|
||||
// WARM LIGHT
|
||||
virtual bool supportsWarmLight() override {
|
||||
return true;
|
||||
};
|
||||
virtual int getMaxWarmLightValue() override {
|
||||
return 100;
|
||||
};
|
||||
virtual int getWarmth() override;
|
||||
virtual void setWarmth(int value) override;
|
||||
|
||||
// BRIGHTNESS
|
||||
virtual bool supportsBrightness() override {
|
||||
return true;
|
||||
};
|
||||
virtual void setBrightness(int value) override;
|
||||
|
||||
// SIZE
|
||||
virtual int getBaseDPI() override {
|
||||
return 225;
|
||||
}
|
||||
virtual ScreenSize getScreenSize() override {
|
||||
return ScreenSize::LARGE;
|
||||
}
|
||||
|
||||
//USB
|
||||
virtual bool isUSBPluggedIn() override;
|
||||
virtual void loadUSBMassStorageModule() override;
|
||||
|
||||
// NETWORK
|
||||
virtual QString getNetworkInterfaceName() override {
|
||||
return "etho0";
|
||||
}
|
||||
};
|
||||
|
||||
#endif // DEVICEKOBOCLARAHD_H
|
34
src/platform/device_kobo_glo.cpp
Normal file
34
src/platform/device_kobo_glo.cpp
Normal file
|
@ -0,0 +1,34 @@
|
|||
#include "device_kobo_glo.h"
|
||||
#include <sys/ioctl.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <fstream>
|
||||
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
|
||||
DeviceKoboGlo::DeviceKoboGlo()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int DeviceKoboGlo::getBrightness() {
|
||||
return readFile(".config/03-brightness/config").toInt();
|
||||
}
|
||||
|
||||
void DeviceKoboGlo::setBrightness(int value) {
|
||||
int fd;
|
||||
if((fd = open("/dev/ntx_io", O_RDWR)) == -1) {
|
||||
fprintf(stderr, "Error opening ntx_io device while setting brightness.\n");
|
||||
return;
|
||||
}
|
||||
ioctl(fd, 241, value);
|
||||
close(fd);
|
||||
|
||||
// also store it somewhere so we can load it when we need it for getBrightness
|
||||
std::ofstream fhandler;
|
||||
fhandler.open(".config/03-brightness/config");
|
||||
fhandler << value;
|
||||
fhandler.close();
|
||||
}
|
56
src/platform/device_kobo_glo.h
Normal file
56
src/platform/device_kobo_glo.h
Normal file
|
@ -0,0 +1,56 @@
|
|||
#ifndef DEVICEKOBOGLO_H
|
||||
#define DEVICEKOBOGLO_H
|
||||
|
||||
#include "device.h"
|
||||
|
||||
class DeviceKoboGlo : public Device
|
||||
{
|
||||
public:
|
||||
DeviceKoboGlo();
|
||||
|
||||
virtual QString getID() override {
|
||||
return "n613";
|
||||
}
|
||||
|
||||
virtual bool hasNavButtons() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool supportsWifi() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// BATTERY
|
||||
virtual bool hasBattery() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// SCREEN
|
||||
// WARM LIGHT
|
||||
virtual bool supportsWarmLight() override {
|
||||
return false;
|
||||
};
|
||||
virtual int getMaxWarmLightValue() override {
|
||||
return 0;
|
||||
};
|
||||
virtual int getWarmth() override {return 0;};
|
||||
virtual void setWarmth(int value) override {};
|
||||
|
||||
// BRIGHTNESS
|
||||
virtual bool supportsBrightness() override {
|
||||
return true;
|
||||
};
|
||||
virtual int getBrightness() override;
|
||||
virtual void setBrightness(int value) override;
|
||||
|
||||
|
||||
// SIZE
|
||||
virtual int getBaseDPI() override {
|
||||
return 175;
|
||||
};
|
||||
virtual ScreenSize getScreenSize() override {
|
||||
return ScreenSize::MEDIUM;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // DEVICEKOBOGLO_H
|
6
src/platform/device_kobo_glohd.cpp
Normal file
6
src/platform/device_kobo_glohd.cpp
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include "device_kobo_glohd.h"
|
||||
|
||||
DeviceKoboGloHD::DeviceKoboGloHD()
|
||||
{
|
||||
|
||||
}
|
58
src/platform/device_kobo_glohd.h
Normal file
58
src/platform/device_kobo_glohd.h
Normal file
|
@ -0,0 +1,58 @@
|
|||
#ifndef DEVICEKOBOGLOHD_H
|
||||
#define DEVICEKOBOGLOHD_H
|
||||
|
||||
#include "device.h"
|
||||
|
||||
class DeviceKoboGloHD : public Device
|
||||
{
|
||||
public:
|
||||
DeviceKoboGloHD();
|
||||
|
||||
virtual QString getID() override {
|
||||
return "n437";
|
||||
}
|
||||
|
||||
virtual bool hasNavButtons() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool supportsWifi() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// BATTERY
|
||||
virtual bool hasBattery() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// SCREEN
|
||||
// WARM LIGHT
|
||||
virtual bool supportsWarmLight() override {
|
||||
return false;
|
||||
};
|
||||
virtual int getMaxWarmLightValue() override {
|
||||
return 0;
|
||||
};
|
||||
virtual int getWarmth() override {return 0;};
|
||||
virtual void setWarmth(int value) override {};
|
||||
|
||||
// BRIGHTNESS
|
||||
virtual bool supportsBrightness() override {
|
||||
return true;
|
||||
};
|
||||
|
||||
// SIZE
|
||||
virtual int getBaseDPI() override {
|
||||
return 225;
|
||||
}
|
||||
virtual ScreenSize getScreenSize() override {
|
||||
return ScreenSize::LARGE;
|
||||
}
|
||||
|
||||
//NETWORK
|
||||
virtual QString getNetworkInterfaceName() override {
|
||||
return "eth0";
|
||||
}
|
||||
};
|
||||
|
||||
#endif // DEVICEKOBOGLOHD_H
|
35
src/platform/device_kobo_libra.cpp
Normal file
35
src/platform/device_kobo_libra.cpp
Normal file
|
@ -0,0 +1,35 @@
|
|||
#include "device_kobo_libra.h"
|
||||
#include <QProcess>
|
||||
|
||||
DeviceKoboLibra::DeviceKoboLibra()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int DeviceKoboLibra::getWarmth() {
|
||||
QString sysfsWarmthPath = "/sys/class/backlight/lm3630a_led/color";
|
||||
int warmthValue;
|
||||
QString warmthConfig = readFile(sysfsWarmthPath);
|
||||
warmthValue = warmthConfig.toInt();
|
||||
warmthValue = 10 - warmthValue;
|
||||
|
||||
return warmthValue;
|
||||
}
|
||||
|
||||
void DeviceKoboLibra::setWarmth(int value) {
|
||||
QString sysfsWarmthPath;
|
||||
QString warmthValueStr;
|
||||
// Value 0 gives a warmer lighting than value 10
|
||||
value = 10 - value;
|
||||
warmthValueStr = QString::number(value);
|
||||
sysfsWarmthPath = "/sys/class/backlight/lm3630a_led/color";
|
||||
|
||||
writeFile(sysfsWarmthPath, warmthValueStr);
|
||||
}
|
||||
|
||||
void DeviceKoboLibra::loadUSBMassStorageModule() {
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/fs/configfs/configfs.ko");
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/drivers/usb/gadget/libcomposite.ko");
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/drivers/usb/gadget/function/usb_f_mass_storage.ko");
|
||||
|
||||
}
|
56
src/platform/device_kobo_libra.h
Normal file
56
src/platform/device_kobo_libra.h
Normal file
|
@ -0,0 +1,56 @@
|
|||
#ifndef DEVICEKOBOLIBRA_H
|
||||
#define DEVICEKOBOLIBRA_H
|
||||
|
||||
#include "device.h"
|
||||
|
||||
class DeviceKoboLibra : public Device
|
||||
{
|
||||
public:
|
||||
DeviceKoboLibra();
|
||||
|
||||
virtual QString getID() override {
|
||||
return "n873";
|
||||
}
|
||||
|
||||
virtual bool hasNavButtons() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool supportsWifi() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// BATTERY
|
||||
virtual bool hasBattery() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// SCREEN
|
||||
// WARM LIGHT
|
||||
virtual bool supportsWarmLight() override {
|
||||
return true;
|
||||
};
|
||||
virtual int getMaxWarmLightValue() override {
|
||||
return 10;
|
||||
};
|
||||
virtual int getWarmth() override;
|
||||
virtual void setWarmth(int value) override;
|
||||
|
||||
// BRIGHTNESS
|
||||
virtual bool supportsBrightness() override {
|
||||
return true;
|
||||
};
|
||||
|
||||
// SIZE
|
||||
virtual int getBaseDPI() override {
|
||||
return 250;
|
||||
}
|
||||
virtual ScreenSize getScreenSize() override {
|
||||
return ScreenSize::VERY_LARGE;
|
||||
}
|
||||
|
||||
//USB
|
||||
virtual void loadUSBMassStorageModule() override;
|
||||
};
|
||||
|
||||
#endif // DEVICEKOBOLIBRA_H
|
13
src/platform/device_kobo_mini.cpp
Normal file
13
src/platform/device_kobo_mini.cpp
Normal file
|
@ -0,0 +1,13 @@
|
|||
#include "device_kobo_mini.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QTextStream>
|
||||
#include <QDirIterator>
|
||||
|
||||
|
||||
DeviceKoboMini::DeviceKoboMini()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
50
src/platform/device_kobo_mini.h
Normal file
50
src/platform/device_kobo_mini.h
Normal file
|
@ -0,0 +1,50 @@
|
|||
#ifndef DEVICEKOBOMINI_H
|
||||
#define DEVICEKOBOMINI_H
|
||||
|
||||
#include "device.h"
|
||||
|
||||
class DeviceKoboMini : public Device
|
||||
{
|
||||
public:
|
||||
DeviceKoboMini();
|
||||
|
||||
virtual QString getID() override {
|
||||
return "n705";
|
||||
}
|
||||
|
||||
virtual bool hasNavButtons() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool supportsWifi() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// BATTERY
|
||||
virtual bool hasBattery() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// SCREEN
|
||||
// WARM LIGHT
|
||||
virtual bool supportsWarmLight() override {
|
||||
return false;
|
||||
};
|
||||
virtual int getMaxWarmLightValue() override {
|
||||
return 0;
|
||||
};
|
||||
virtual int getWarmth() override {return 0;};
|
||||
virtual void setWarmth(int value) override {};
|
||||
|
||||
// BRIGHTNESS
|
||||
virtual bool supportsBrightness() override {
|
||||
return true;
|
||||
};
|
||||
|
||||
// SIZE
|
||||
virtual ScreenSize getScreenSize() override {
|
||||
return ScreenSize::SMALL;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // DEVICEKOBOMINI_H
|
16
src/platform/device_kobo_nia.cpp
Normal file
16
src/platform/device_kobo_nia.cpp
Normal file
|
@ -0,0 +1,16 @@
|
|||
#include "device_kobo_nia.h"
|
||||
|
||||
#include <QProcess>
|
||||
|
||||
DeviceKoboNia::DeviceKoboNia()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
void DeviceKoboNia::loadUSBMassStorageModule() {
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/fs/configfs/configfs.ko");
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/drivers/usb/gadget/libcomposite.ko");
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/drivers/usb/gadget/function/usb_f_mass_storage.ko");
|
||||
|
||||
}
|
56
src/platform/device_kobo_nia.h
Normal file
56
src/platform/device_kobo_nia.h
Normal file
|
@ -0,0 +1,56 @@
|
|||
#ifndef DEVICEKOBONIA_H
|
||||
#define DEVICEKOBONIA_H
|
||||
|
||||
#include "device.h"
|
||||
|
||||
class DeviceKoboNia : public Device
|
||||
{
|
||||
public:
|
||||
DeviceKoboNia();
|
||||
|
||||
virtual QString getID() override {
|
||||
return "n306";
|
||||
}
|
||||
|
||||
virtual bool hasNavButtons() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool supportsWifi() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// BATTERY
|
||||
virtual bool hasBattery() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// SCREEN
|
||||
// WARM LIGHT
|
||||
virtual bool supportsWarmLight() override {
|
||||
return false;
|
||||
};
|
||||
virtual int getMaxWarmLightValue() override {
|
||||
return 0;
|
||||
};
|
||||
virtual int getWarmth() override {return 0;};
|
||||
virtual void setWarmth(int value) override {};
|
||||
|
||||
// BRIGHTNESS
|
||||
virtual bool supportsBrightness() override {
|
||||
return true;
|
||||
};
|
||||
|
||||
// SIZE
|
||||
virtual int getBaseDPI() override {
|
||||
return 175;
|
||||
}
|
||||
virtual ScreenSize getScreenSize() override {
|
||||
return ScreenSize::MEDIUM;
|
||||
}
|
||||
|
||||
//USB
|
||||
virtual void loadUSBMassStorageModule() override;
|
||||
};
|
||||
|
||||
#endif // DEVICEKOBONIA_H
|
6
src/platform/device_kobo_touch.cpp
Normal file
6
src/platform/device_kobo_touch.cpp
Normal file
|
@ -0,0 +1,6 @@
|
|||
#include "device_kobo_touch.h"
|
||||
|
||||
DeviceKoboTouch::DeviceKoboTouch()
|
||||
{
|
||||
|
||||
}
|
53
src/platform/device_kobo_touch.h
Normal file
53
src/platform/device_kobo_touch.h
Normal file
|
@ -0,0 +1,53 @@
|
|||
#ifndef DEVICEKOBOTOUCH_H
|
||||
#define DEVICEKOBOTOUCH_H
|
||||
|
||||
#include "device.h"
|
||||
|
||||
class DeviceKoboTouch : public Device
|
||||
{
|
||||
public:
|
||||
DeviceKoboTouch();
|
||||
|
||||
|
||||
|
||||
virtual QString getID() override {
|
||||
return "n905";
|
||||
}
|
||||
|
||||
virtual bool hasNavButtons() override {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool supportsWifi() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// BATTERY
|
||||
virtual bool hasBattery() override {
|
||||
return true;
|
||||
}
|
||||
|
||||
// SCREEN
|
||||
// WARM LIGHT
|
||||
virtual bool supportsWarmLight() override {
|
||||
return false;
|
||||
};
|
||||
virtual int getMaxWarmLightValue() override {
|
||||
return 0;
|
||||
};
|
||||
virtual int getWarmth() override {return 0;};
|
||||
virtual void setWarmth(int value) override {};
|
||||
|
||||
// BRIGHTNESS
|
||||
virtual bool supportsBrightness() override {
|
||||
return true;
|
||||
};
|
||||
|
||||
// SIZE
|
||||
virtual ScreenSize getScreenSize() override {
|
||||
return ScreenSize::MEDIUM;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif // DEVICEKOBOTOUCH_H
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
#include <stdlib.h>
|
||||
|
||||
sleepThread::sleepThread() {}
|
||||
SleepThread::SleepThread() {}
|
||||
|
||||
void sleepThread::start()
|
||||
void SleepThread::start()
|
||||
{
|
||||
log("Sleep pipe thread active", className);
|
||||
QDir pipeDirPath = QDir("/dev/ipd");
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
|
||||
#include <QObject>
|
||||
|
||||
class sleepThread : public QObject {
|
||||
class SleepThread : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
sleepThread();
|
||||
SleepThread();
|
||||
|
||||
public slots:
|
||||
void start();
|
||||
|
|
|
@ -1,99 +0,0 @@
|
|||
#include "quit.h"
|
||||
#include "ui_quit.h"
|
||||
#include "functions.h"
|
||||
#include <QProcess>
|
||||
#include <QIcon>
|
||||
#include <QPixmap>
|
||||
#include <QFile>
|
||||
#include <QDebug>
|
||||
#include <QScreen>
|
||||
#include <linux/input.h>
|
||||
|
||||
quit::quit(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::quit)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->backBtn->setFont(QFont("u001"));
|
||||
|
||||
ui->pushButton->setProperty("type", "borderless");
|
||||
ui->pushButton_2->setProperty("type", "borderless");
|
||||
ui->pushButton_3->setProperty("type", "borderless");
|
||||
ui->pushButton_4->setProperty("type", "borderless");
|
||||
ui->backBtn->setProperty("type", "borderless");
|
||||
|
||||
// Stylesheet
|
||||
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
this->setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
|
||||
// Getting the screen's size
|
||||
float sW = QGuiApplication::screens()[0]->size().width();
|
||||
float sH = QGuiApplication::screens()[0]->size().height();
|
||||
// Defining what the "Quit" icon size will be
|
||||
float stdIconWidth = sW / 1.25;
|
||||
float stdIconHeight = sH / 1.25;
|
||||
|
||||
QPixmap pixmap(":/resources/exit.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->label->setPixmap(scaledPixmap);
|
||||
|
||||
if(checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/9-deepSleep") == true) {
|
||||
ui->pushButton_3->setText("Deep suspend");
|
||||
}
|
||||
}
|
||||
|
||||
quit::~quit()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void quit::on_pushButton_clicked()
|
||||
{
|
||||
// Prevent strange "appearing from nowhere" low battery or critical battery alerts due to sysfs unmount
|
||||
global::battery::showCriticalBatteryAlert = false;
|
||||
global::battery::showLowBatteryDialog = false;
|
||||
|
||||
// GUI apps
|
||||
updateUserAppsMainJsonFile();
|
||||
|
||||
poweroff(true);
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void quit::on_pushButton_2_clicked()
|
||||
{
|
||||
global::battery::showCriticalBatteryAlert = false;
|
||||
global::battery::showLowBatteryDialog = false;
|
||||
|
||||
// GUI apps
|
||||
updateUserAppsMainJsonFile();
|
||||
|
||||
reboot(true);
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void quit::on_pushButton_4_clicked()
|
||||
{
|
||||
log("Restarting InkBox", className);
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void quit::on_backBtn_clicked()
|
||||
{
|
||||
quit::close();
|
||||
}
|
||||
|
||||
void quit::on_pushButton_3_clicked()
|
||||
{
|
||||
log("Suspending", className);
|
||||
if(checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/9-deepSleep") == true) {
|
||||
writeFile("/dev/ipd/sleepCall", "deepSleep");
|
||||
}
|
||||
else {
|
||||
writeFile("/dev/ipd/sleepCall", "sleep");
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -1,136 +0,0 @@
|
|||
#include "koboxsettings.h"
|
||||
#include "ui_koboxsettings.h"
|
||||
#include "functions.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QScreen>
|
||||
|
||||
koboxSettings::koboxSettings(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::koboxSettings)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
koboxSettings::setFont(QFont("u001"));
|
||||
ui->okBtn->setFont(QFont("Inter"));
|
||||
|
||||
// UI tweaks
|
||||
ui->okBtn->setProperty("type", "borderless");
|
||||
ui->pushButton->setProperty("type", "borderless");
|
||||
ui->resetKoboxBtn->setProperty("type", "borderless");
|
||||
ui->pushButton->setStyleSheet("font-weight: bold");
|
||||
ui->resetKoboxBtn->setStyleSheet("font-weight: bold");
|
||||
ui->okBtn->setStyleSheet("font-weight: bold");
|
||||
|
||||
// Stylesheet
|
||||
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
this->setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
|
||||
if(checkconfig("/external_root/boot/flags/X11_START") == true) {
|
||||
ui->koboxStatusLabel->setText("KoBox is <b>enabled</b>");
|
||||
not_user_change = true;
|
||||
ui->checkBox->click();
|
||||
ui->runtimeSettingsWidget->setVisible(true);
|
||||
}
|
||||
else {
|
||||
ui->koboxStatusLabel->setText("KoBox is <b>disabled</b>");
|
||||
ui->runtimeSettingsWidget->setVisible(false);
|
||||
}
|
||||
|
||||
// DPI setting
|
||||
QString dpiSetting;
|
||||
QString dpiSettingStr = readFile(".config/00-kobox/dpiSetting");
|
||||
if(dpiSettingStr.isEmpty()) {
|
||||
if(global::deviceID == "n705\n" or global::deviceID == "n905\n" or global::deviceID == "kt\n") {
|
||||
dpiSetting = "125";
|
||||
}
|
||||
else if(global::deviceID == "n613\n" or global::deviceID == "n236\n" or global::deviceID == "n306\n" or global::deviceID == "emu\n") {
|
||||
dpiSetting = "175";
|
||||
}
|
||||
else if(global::deviceID == "n437\n" or global::deviceID == "n249\n") {
|
||||
dpiSetting = "225";
|
||||
}
|
||||
else if(global::deviceID == "n873\n") {
|
||||
dpiSetting = "250";
|
||||
}
|
||||
else {
|
||||
dpiSetting = "125";
|
||||
}
|
||||
writeFile(".config/00-kobox/dpiSetting", dpiSetting);
|
||||
}
|
||||
|
||||
readFile(".config/00-kobox/dpiSetting");
|
||||
int dpi_setting = dpiSettingStr.toInt();
|
||||
ui->spinBox->setValue(dpi_setting);
|
||||
}
|
||||
|
||||
koboxSettings::~koboxSettings()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void koboxSettings::on_okBtn_clicked()
|
||||
{
|
||||
koboxSettings::close();
|
||||
}
|
||||
|
||||
void koboxSettings::on_checkBox_toggled(bool checked)
|
||||
{
|
||||
if(checked == true) {
|
||||
if(not_user_change != true) {
|
||||
log("Enabling KoBox subsystem", className);
|
||||
writeFile("/external_root/boot/flags/X11_START", "true\n");
|
||||
openSettingsRebootDialog();
|
||||
}
|
||||
else {
|
||||
not_user_change = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
log("Disabling KoBox subsystem", className);
|
||||
writeFile("/external_root/boot/flags/X11_START", "false\n");
|
||||
openSettingsRebootDialog();
|
||||
}
|
||||
}
|
||||
|
||||
void koboxSettings::openSettingsRebootDialog() {
|
||||
log("Showing reboot dialog", className);
|
||||
global::settings::settingsRebootDialog = true;
|
||||
global::kobox::koboxSettingsRebootDialog = true;
|
||||
generalDialogWindow = new generalDialog(this);
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
}
|
||||
void koboxSettings::openResetKoboxDialog() {
|
||||
log("Showing KoBox reset dialog", className);
|
||||
global::kobox::resetKoboxDialog = true;
|
||||
generalDialogWindow = new generalDialog(this);
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
}
|
||||
|
||||
void koboxSettings::on_spinBox_valueChanged(int arg1)
|
||||
{
|
||||
QString number = QString::number(arg1);
|
||||
writeFile(".config/00-kobox/dpiSetting", number);
|
||||
log("X11 DPI set to " + number, className);
|
||||
}
|
||||
|
||||
void koboxSettings::on_pushButton_clicked()
|
||||
{
|
||||
// Export Extensions disk image over USB with g_mass_storage/g_file_storage
|
||||
global::usbms::usbmsDialog = false;
|
||||
global::usbms::launchUsbms = true;
|
||||
global::usbms::koboxExportExtensions = true;
|
||||
|
||||
log("Exporting KoBox extensions onboard storage via USB", className);
|
||||
log("Showing USBMS splash", className);
|
||||
usbmsWindow = new usbmsSplash();
|
||||
usbmsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
usbmsWindow->setGeometry(QRect(QPoint(0,0), screen()->geometry ().size()));
|
||||
usbmsWindow->show();
|
||||
}
|
||||
|
||||
void koboxSettings::on_resetKoboxBtn_clicked()
|
||||
{
|
||||
openResetKoboxDialog();
|
||||
}
|
|
@ -1,434 +0,0 @@
|
|||
#include "powerdaemonsettings.h"
|
||||
#include "ui_powerdaemonsettings.h"
|
||||
#include "functions.h"
|
||||
|
||||
#include <QFile>
|
||||
|
||||
powerDaemonSettings::powerDaemonSettings(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::powerDaemonSettings)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
powerDaemonSettings::setFont(QFont("u001"));
|
||||
ui->mainLabel->setFont(QFont("Inter"));
|
||||
|
||||
// Avoid some display issues (label moving because width of text would change with a proportional font)
|
||||
ui->CBSLabel->setFont(QFont("Roboto Mono"));
|
||||
ui->idleSleepLabel->setFont(QFont("Roboto Mono"));
|
||||
|
||||
// Font tweaks
|
||||
ui->label_2->setFont(QFont("Inter"));
|
||||
ui->exitBtn->setFont(QFont("Inter"));
|
||||
|
||||
// UI tweaks
|
||||
ui->exitBtn->setProperty("type", "borderless");
|
||||
ui->expBtn->setProperty("type", "borderless");
|
||||
ui->hWhenChargerSleepBtn->setProperty("type", "borderless");
|
||||
ui->hChargerWakeUpBtn->setProperty("type", "borderless");
|
||||
ui->wifiReconnectBtn->setProperty("type", "borderless");
|
||||
ui->ledUsageBtn->setProperty("type", "borderless");
|
||||
ui->hCustomCaseBtn->setProperty("type", "borderless");
|
||||
ui->deepSleepBtn->setProperty("type", "borderless");
|
||||
|
||||
ui->mainLabel->setStyleSheet("font-weight: bold");
|
||||
ui->CBSLabel->setStyleSheet("font-weight: bold");
|
||||
ui->idleSleepLabel->setStyleSheet("font-weight: bold");
|
||||
ui->exitBtn->setStyleSheet("font-weight: bold");
|
||||
// Experimental features label
|
||||
ui->label_2->setStyleSheet("font-weight: bold");
|
||||
|
||||
// Icons
|
||||
int controlBtnFixedWidth;
|
||||
if(global::deviceID == "n705\n") {
|
||||
controlBtnFixedWidth = 50;
|
||||
}
|
||||
else {
|
||||
controlBtnFixedWidth = 80;
|
||||
}
|
||||
|
||||
ui->CBSDecreaseBtn->setIcon(QIcon(":/resources/minus.png"));
|
||||
ui->CBSDecreaseBtn->setFixedWidth(controlBtnFixedWidth);
|
||||
ui->CBSIncreaseBtn->setIcon(QIcon(":/resources/plus.png"));
|
||||
ui->CBSIncreaseBtn->setFixedWidth(controlBtnFixedWidth);
|
||||
|
||||
|
||||
int idleBtnsFixedWidth;
|
||||
if(global::deviceID == "n705\n") {
|
||||
idleBtnsFixedWidth = 80;
|
||||
}
|
||||
else {
|
||||
idleBtnsFixedWidth = 100;
|
||||
}
|
||||
ui->idleSleepDecreaseBtn->setFixedWidth(idleBtnsFixedWidth);
|
||||
ui->idleSleepIncreaseBtn->setFixedWidth(idleBtnsFixedWidth);
|
||||
ui->idleSleepDecreaseMBtn->setFixedWidth(idleBtnsFixedWidth);
|
||||
ui->idleSleepIncreaseMBtn->setFixedWidth(idleBtnsFixedWidth);
|
||||
|
||||
// Padding
|
||||
ui->CBSDecreaseBtn->setStyleSheet("padding: 10px; font-size: 10pt");
|
||||
ui->CBSIncreaseBtn->setStyleSheet("padding: 10px; font-size: 10pt");
|
||||
ui->idleSleepDecreaseBtn->setStyleSheet("font-family: 'Roboto Mono'; font-weight: bold; padding: 10px; font-size: 10pt");
|
||||
ui->idleSleepIncreaseBtn->setStyleSheet("font-family: 'Roboto Mono'; font-weight: bold; padding: 10px; font-size: 10pt");
|
||||
ui->idleSleepDecreaseMBtn->setStyleSheet("font-family: 'Roboto Mono'; font-weight: bold; padding: 10px; font-size: 10pt");
|
||||
ui->idleSleepIncreaseMBtn->setStyleSheet("font-family: 'Roboto Mono'; font-weight: bold; padding: 10px; font-size: 10pt");
|
||||
|
||||
// Stylesheet
|
||||
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
this->setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
|
||||
// Button tweaks
|
||||
int autoRepeatDelay = 1250;
|
||||
int autoRepeatInterval = 20;
|
||||
|
||||
ui->CBSDecreaseBtn->setAutoRepeat(true);
|
||||
ui->CBSDecreaseBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->CBSDecreaseBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
ui->CBSIncreaseBtn->setAutoRepeat(true);
|
||||
ui->CBSIncreaseBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->CBSIncreaseBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
ui->idleSleepDecreaseBtn->setAutoRepeat(true);
|
||||
ui->idleSleepDecreaseBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->idleSleepDecreaseBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
ui->idleSleepIncreaseBtn->setAutoRepeat(true);
|
||||
ui->idleSleepIncreaseBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->idleSleepIncreaseBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
ui->idleSleepDecreaseMBtn->setAutoRepeat(true);
|
||||
ui->idleSleepDecreaseMBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->idleSleepDecreaseMBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
ui->idleSleepIncreaseMBtn->setAutoRepeat(true);
|
||||
ui->idleSleepIncreaseMBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->idleSleepIncreaseMBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
// Hide items
|
||||
ui->hLabel_3->hide();
|
||||
ui->hCpuFreqComboBox->hide();
|
||||
|
||||
ui->hWhenChargerSleepBtn->hide();
|
||||
ui->hChargerWakeUpBtn->hide();
|
||||
ui->hCustomCaseBtn->hide();
|
||||
|
||||
// Prepare variables from system configuration (20-sleep_daemon)
|
||||
log("Reading variables from power daemon configuration", className);
|
||||
|
||||
// 1 - cinematicBrightnessDelayMs
|
||||
QString cinematicBrightnessMs = readFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/1-cinematicBrightnessDelayMs");
|
||||
|
||||
cinematicBrightnessInt = cinematicBrightnessMs.toInt();
|
||||
convertCinematicInt();
|
||||
|
||||
// 2 - cpuGovernor
|
||||
QString cpuGovernor = readFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/2-cpuGovernor");
|
||||
|
||||
QStringList cpuGovernorList = QStringList{cpuGovernor};
|
||||
if(cpuGovernorList.contains("interactive") == false) {
|
||||
cpuGovernorList.append("interactive");
|
||||
}
|
||||
if(cpuGovernorList.contains("conservative") == false) {
|
||||
cpuGovernorList.append("conservative");
|
||||
}
|
||||
if(cpuGovernorList.contains("userspace") == false) {
|
||||
cpuGovernorList.append("userspace");
|
||||
}
|
||||
if(cpuGovernorList.contains("powersave") == false) {
|
||||
cpuGovernorList.append("powersave");
|
||||
}
|
||||
if(cpuGovernorList.contains("ondemand") == false) {
|
||||
cpuGovernorList.append("ondemand");
|
||||
}
|
||||
if(cpuGovernorList.contains("performance") == false) {
|
||||
cpuGovernorList.append("performance");
|
||||
}
|
||||
|
||||
ui->hCpuFreqComboBox->addItems(cpuGovernorList);
|
||||
ui->hCpuFreqComboBox->setCurrentIndex(0);
|
||||
|
||||
// 3 - whenChargerSleep
|
||||
if(checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/3-whenChargerSleep") == true) {
|
||||
whenChargerSleepBool = true;
|
||||
ui->hWhenChargerSleepBtn->click();
|
||||
}
|
||||
else {
|
||||
whenChargerSleepBool = false;
|
||||
}
|
||||
|
||||
// 4 - chargerWakeUp
|
||||
if(checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/4-chargerWakeUp") == true) {
|
||||
chargerWakeUpBool = true;
|
||||
ui->hChargerWakeUpBtn->click();
|
||||
}
|
||||
else {
|
||||
chargerWakeUpBool = false;
|
||||
}
|
||||
|
||||
// 5 - wifiReconnect
|
||||
if(checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/5-wifiReconnect") == true) {
|
||||
ui->wifiReconnectBtn->click();
|
||||
wifiReconnectBool = true;
|
||||
}
|
||||
else {
|
||||
wifiReconnectBool = false;
|
||||
}
|
||||
|
||||
// 6 - ledUsage
|
||||
if(checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/6-ledUsage") == true) {
|
||||
ui->ledUsageBtn->click();
|
||||
ledUsageBool = true;
|
||||
}
|
||||
else {
|
||||
ledUsageBool = false;
|
||||
}
|
||||
|
||||
// 7 - idleSleep
|
||||
QString idleSleepString = readFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/7-idleSleep");
|
||||
idleSleepInt = idleSleepString.replace("\n", "").toInt();
|
||||
convertIdleSleepInt();
|
||||
|
||||
// 8 - customCase
|
||||
if(checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/8-customCase") == true) {
|
||||
ui->hCustomCaseBtn->click();
|
||||
customCaseBool = true;
|
||||
}
|
||||
else {
|
||||
customCaseBool = false;
|
||||
}
|
||||
|
||||
// 9 - deepSleep
|
||||
if(checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/9-deepSleep") == true) {
|
||||
ui->deepSleepBtn->click();
|
||||
deepSleepBool = true;
|
||||
}
|
||||
else {
|
||||
deepSleepBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
powerDaemonSettings::~powerDaemonSettings()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_CBSIncreaseBtn_clicked()
|
||||
{
|
||||
if(cinematicBrightnessInt < 500) {
|
||||
cinematicBrightnessInt = cinematicBrightnessInt + 1;
|
||||
convertCinematicInt();
|
||||
}
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_CBSDecreaseBtn_clicked()
|
||||
{
|
||||
if(cinematicBrightnessInt != 0) {
|
||||
cinematicBrightnessInt = cinematicBrightnessInt - 1;
|
||||
convertCinematicInt();
|
||||
}
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_exitBtn_clicked()
|
||||
{
|
||||
// Save all to files
|
||||
// 1 - cinematicBrightnessdelayMs
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/1-cinematicBrightnessDelayMs", QString::number(cinematicBrightnessInt));
|
||||
// 2 - cpuGovernor
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/2-cpuGovernor", ui->hCpuFreqComboBox->currentText());
|
||||
// 3 - whenChargerSleep
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/3-whenChargerSleep", QVariant(whenChargerSleepBool).toString());
|
||||
// 4 - chargerWakeUp
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/4-chargerWakeUp", QVariant(chargerWakeUpBool).toString());
|
||||
// 5 - wifiReconnect
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/5-wifiReconnect", QVariant(wifiReconnectBool).toString());
|
||||
// 6 - ledUsage
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/6-ledUsage", QVariant(ledUsageBool).toString());
|
||||
// 7 - idleSleep
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/7-idleSleep", QString::number(idleSleepInt));
|
||||
// 8 - customCase
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/8-customCase", QVariant(customCaseBool).toString());
|
||||
// 9 - deepSleep
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/9-deepSleep", QVariant(deepSleepBool).toString());
|
||||
|
||||
// Notify power daemon of configuration update
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/updateConfig", "true");
|
||||
|
||||
powerDaemonSettings::close();
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_expBtn_clicked()
|
||||
{
|
||||
// TODO: Implement additional warning
|
||||
ui->hLabel_3->show();
|
||||
ui->hCpuFreqComboBox->show();
|
||||
|
||||
ui->hWhenChargerSleepBtn->show();
|
||||
ui->hChargerWakeUpBtn->show();
|
||||
ui->hCustomCaseBtn->show();
|
||||
|
||||
ui->expBtn->hide();
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_hWhenChargerSleepBtn_clicked(bool checked)
|
||||
{
|
||||
QString settingString = "suspend when charging";
|
||||
if(checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
whenChargerSleepBool = true;
|
||||
}
|
||||
else {
|
||||
logDisabled(settingString, className);
|
||||
whenChargerSleepBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_hChargerWakeUpBtn_clicked(bool checked)
|
||||
{
|
||||
QString settingString = "ignore charger wake-up events";
|
||||
if(checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
chargerWakeUpBool = true;
|
||||
}
|
||||
else {
|
||||
logDisabled(settingString, className);
|
||||
chargerWakeUpBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_wifiReconnectBtn_clicked(bool checked)
|
||||
{
|
||||
QString settingString = "Wi-Fi reconnection on wake-up";
|
||||
if(checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
wifiReconnectBool = true;
|
||||
}
|
||||
else {
|
||||
logDisabled(settingString, className);
|
||||
wifiReconnectBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_ledUsageBtn_clicked(bool checked)
|
||||
{
|
||||
QString settingString = "use LED";
|
||||
if(checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
ledUsageBool = true;
|
||||
}
|
||||
else {
|
||||
logDisabled(settingString, className);
|
||||
ledUsageBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_idleSleepIncreaseBtn_clicked()
|
||||
{
|
||||
if(idleSleepInt >= 15) {
|
||||
idleSleepInt = idleSleepInt + 1;
|
||||
}
|
||||
else {
|
||||
idleSleepInt = 15;
|
||||
}
|
||||
convertIdleSleepInt();
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_idleSleepDecreaseBtn_clicked() {
|
||||
if(idleSleepInt >= 15) {
|
||||
idleSleepInt = idleSleepInt - 1;
|
||||
if(idleSleepInt == 14) {
|
||||
idleSleepInt = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
idleSleepInt = 0;
|
||||
}
|
||||
|
||||
convertIdleSleepInt();
|
||||
}
|
||||
|
||||
void powerDaemonSettings::convertIdleSleepInt()
|
||||
{
|
||||
int copiedIdleSleepInt = idleSleepInt;
|
||||
int minutes = 0;
|
||||
int seconds = 0;
|
||||
if(copiedIdleSleepInt == 0) {
|
||||
ui->idleSleepLabel->setText("Never");
|
||||
return;
|
||||
}
|
||||
while(copiedIdleSleepInt >= 60) {
|
||||
minutes = minutes + 1;
|
||||
copiedIdleSleepInt = copiedIdleSleepInt - 60;
|
||||
}
|
||||
seconds = copiedIdleSleepInt;
|
||||
|
||||
QString text;
|
||||
if(minutes != 0) {
|
||||
text.append(QString::number(minutes) + "m");
|
||||
}
|
||||
if(seconds != 0) {
|
||||
text.append(" ");
|
||||
text.append(QString::number(seconds) + "s");
|
||||
}
|
||||
ui->idleSleepLabel->setText(text);
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_hCustomCaseBtn_clicked(bool checked)
|
||||
{
|
||||
QString settingString = "custom case";
|
||||
if(checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
customCaseBool = true;
|
||||
}
|
||||
else {
|
||||
logDisabled(settingString, className);
|
||||
customCaseBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_deepSleepBtn_clicked(bool checked)
|
||||
{
|
||||
QString settingString = "deep sleep";
|
||||
if(checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
deepSleepBool = true;
|
||||
}
|
||||
else {
|
||||
logDisabled(settingString, className);
|
||||
deepSleepBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void powerDaemonSettings::convertCinematicInt() {
|
||||
QString text = QString::number(cinematicBrightnessInt);
|
||||
// To avoid moving other widgets when the value changes
|
||||
text.append(" ms");
|
||||
ui->CBSLabel->setText(text);
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_idleSleepIncreaseMBtn_clicked()
|
||||
{
|
||||
if(idleSleepInt >= 15) {
|
||||
idleSleepInt = idleSleepInt + 60;
|
||||
}
|
||||
else {
|
||||
idleSleepInt = 60;
|
||||
}
|
||||
convertIdleSleepInt();
|
||||
}
|
||||
|
||||
void powerDaemonSettings::on_idleSleepDecreaseMBtn_clicked()
|
||||
{
|
||||
if(idleSleepInt >= 60) {
|
||||
idleSleepInt = idleSleepInt - 60;
|
||||
if(idleSleepInt < 14) {
|
||||
idleSleepInt = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
idleSleepInt = 0;
|
||||
}
|
||||
|
||||
convertIdleSleepInt();
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -1,110 +0,0 @@
|
|||
#include "settingschooser.h"
|
||||
#include "ui_settingschooser.h"
|
||||
#include "functions.h"
|
||||
#include "powerdaemonsettings.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QScreen>
|
||||
|
||||
settingsChooser::settingsChooser(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::settingsChooser)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
// Stylesheet
|
||||
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
this->setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
|
||||
// UI tweaks
|
||||
if(checkconfig("/opt/inkbox_kobox_support") == false) {
|
||||
ui->koboxSettingsBtn->hide();
|
||||
ui->line_3->hide();
|
||||
}
|
||||
|
||||
// Getting the screen's size
|
||||
sW = QGuiApplication::screens()[0]->size().width();
|
||||
sH = QGuiApplication::screens()[0]->size().height();
|
||||
|
||||
// Defining what the default icon size will be
|
||||
if(global::deviceID == "n705\n") {
|
||||
homeIconWidth = sW / 18;
|
||||
homeIconHeight = sW / 18;
|
||||
}
|
||||
else {
|
||||
homeIconWidth = sW / 20;
|
||||
homeIconHeight = sW / 20;
|
||||
}
|
||||
|
||||
ui->inkboxSettingsBtn->setProperty("type", "borderless");
|
||||
ui->koboxSettingsBtn->setProperty("type", "borderless");
|
||||
ui->powerSettingsBtn->setProperty("type", "borderless");
|
||||
|
||||
if(global::deviceID == "n705\n" or global::deviceID == "n905\n" or global::deviceID == "kt\n") {
|
||||
ui->inkboxSettingsBtn->setStyleSheet("padding: 20px; Text-align: left");
|
||||
ui->koboxSettingsBtn->setStyleSheet("padding: 20px; Text-align: left");
|
||||
ui->powerSettingsBtn->setStyleSheet("padding: 20px; Text-align: left");
|
||||
}
|
||||
else if(global::deviceID == "n613\n" or global::deviceID == "n236\n" or global::deviceID == "n306\n" or global::deviceID == "emu\n") {
|
||||
ui->inkboxSettingsBtn->setStyleSheet("padding: 25px; Text-align: left");
|
||||
ui->koboxSettingsBtn->setStyleSheet("padding:25px; Text-align: left");
|
||||
ui->powerSettingsBtn->setStyleSheet("padding:25px; Text-align: left");
|
||||
}
|
||||
else {
|
||||
ui->inkboxSettingsBtn->setStyleSheet("padding: 40px; Text-align: left");
|
||||
ui->koboxSettingsBtn->setStyleSheet("padding: 40px; Text-align: left");
|
||||
ui->powerSettingsBtn->setStyleSheet("padding: 40px; Text-align: left");
|
||||
}
|
||||
|
||||
ui->inkboxSettingsBtn->setText("\t\t\tInkBox settings");
|
||||
ui->koboxSettingsBtn->setText("\t\t\tKoBox settings");
|
||||
ui->powerSettingsBtn->setText("\t\t\tPower settings");
|
||||
|
||||
ui->inkboxSettingsBtn->setIcon(QIcon(":/resources/settings.png"));
|
||||
ui->inkboxSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
ui->koboxSettingsBtn->setIcon(QIcon(":/resources/X11.png"));
|
||||
ui->koboxSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
ui->powerSettingsBtn->setIcon(QIcon(":/resources/power.png"));
|
||||
ui->powerSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
}
|
||||
|
||||
settingsChooser::~settingsChooser()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void settingsChooser::on_inkboxSettingsBtn_clicked()
|
||||
{
|
||||
log("Launching InkBox Settings", className);
|
||||
settingsWindow = new settings();
|
||||
settingsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(settingsWindow, SIGNAL(showToast(QString)), SLOT(showToastNative(QString)));
|
||||
connect(settingsWindow, SIGNAL(closeIndefiniteToast()), SLOT(closeIndefiniteToastNative()));
|
||||
settingsWindow->showFullScreen();
|
||||
}
|
||||
|
||||
void settingsChooser::on_koboxSettingsBtn_clicked()
|
||||
{
|
||||
log("Launching KoBox Settings", className);
|
||||
koboxSettingsWindow = new koboxSettings();
|
||||
koboxSettingsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
koboxSettingsWindow->showFullScreen();
|
||||
}
|
||||
|
||||
void settingsChooser::on_powerSettingsBtn_clicked()
|
||||
{
|
||||
log("Launching Power Daemon Settings", className);
|
||||
powerDaemonSettings * powerSettingsWindow = new powerDaemonSettings();
|
||||
powerSettingsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
powerSettingsWindow->showFullScreen();
|
||||
}
|
||||
|
||||
void settingsChooser::showToastNative(QString messageToDisplay) {
|
||||
emit showToast(messageToDisplay);
|
||||
}
|
||||
|
||||
void settingsChooser::closeIndefiniteToastNative() {
|
||||
emit closeIndefiniteToast();
|
||||
}
|
|
@ -1,167 +0,0 @@
|
|||
#include "alert.h"
|
||||
#include "ui_alert.h"
|
||||
#include "functions.h"
|
||||
|
||||
#include <QPixmap>
|
||||
#include <QScreen>
|
||||
#include <QFile>
|
||||
#include <QProcess>
|
||||
|
||||
alert::alert(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::alert)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->messageLabel->setFont(QFont("u001"));
|
||||
|
||||
// Getting the screen's size
|
||||
float sW = QGuiApplication::screens()[0]->size().width();
|
||||
float sH = QGuiApplication::screens()[0]->size().height();
|
||||
// Defining what the "Alert" icon size will be
|
||||
float stdIconWidth = sW / 1.7;
|
||||
float stdIconHeight = sH / 1.7;
|
||||
|
||||
// General stylesheet
|
||||
QFile stylesheetFile(":/resources/eink-dark.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
this->setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
|
||||
// Default icon in case none of the conditions below are met
|
||||
QPixmap pixmap(":/resources/alert.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->alertIconLabel->setPixmap(scaledPixmap);
|
||||
|
||||
// Checking if the update's signature is untrusted. The signature error will always take precedence over the downgrade one (c.f. update.sh script)
|
||||
if(checkconfig("/external_root/boot/flags/ALERT_SIGN") == true) {
|
||||
QPixmap pixmap(":/resources/alert.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->alertIconLabel->setPixmap(scaledPixmap);
|
||||
|
||||
signatureError = true;
|
||||
log("Displaying signature error alert splash", className);
|
||||
ui->securityLabel->setText("Failed to update InkBox.");
|
||||
ui->messageLabel->setText("The digital signature of the update is untrusted.\nFor security reasons, it cannot be installed.");
|
||||
ui->stackedWidget->setCurrentIndex(1);
|
||||
}
|
||||
if(checkconfig("/external_root/boot/flags/ALERT_DOWNGRADE") == true) {
|
||||
QPixmap pixmap(":/resources/alert.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->alertIconLabel->setPixmap(scaledPixmap);
|
||||
|
||||
log("Displaying downgrade error alert splash", className);
|
||||
downgradeError = true;
|
||||
ui->securityLabel->setText("Failed to update InkBox.");
|
||||
ui->messageLabel->setText("An error occured during the update process.\nThe update package's version is lower than the actual installed version.");
|
||||
ui->stackedWidget->setCurrentIndex(1);
|
||||
}
|
||||
if(global::encfs::lockdown == true) {
|
||||
ui->stackedWidget->setVisible(false);
|
||||
ui->stackedWidget->deleteLater();
|
||||
QPixmap pixmap(":/resources/alert.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->alertIconLabel->setPixmap(scaledPixmap);
|
||||
|
||||
ui->warningLabel->setText("Fatal error");
|
||||
ui->securityLabel->setText("Device lockdown");
|
||||
log(global::encfs::lockdownMessage, className);
|
||||
QString message = "Due to multiple incorrect passphrase attempts, this device is locked down until\n" + global::encfs::unlockTime + "\nand won't boot.";
|
||||
ui->messageLabel->setText(message);
|
||||
poweroff(false);
|
||||
QTimer::singleShot(1000, this, SLOT(quit()));
|
||||
}
|
||||
if(global::battery::showCriticalBatteryAlert == true) {
|
||||
global::battery::showCriticalBatteryAlert = false;
|
||||
ui->stackedWidget->setVisible(false);
|
||||
ui->stackedWidget->deleteLater();
|
||||
|
||||
QPixmap pixmap(":/resources/battery_alert.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->alertIconLabel->setPixmap(scaledPixmap);
|
||||
|
||||
log("Displaying critical battery alert splash", className);
|
||||
criticalBattery = true;
|
||||
ui->warningLabel->setText("Please charge your eReader.");
|
||||
ui->securityLabel->setText("The battery's charge level is critical.");
|
||||
ui->messageLabel->setText("To prevent damage, your device has been turned off.\nPlease consider charging it.");
|
||||
// The Mini (N705) has a higher DPI and otherwise the text doesn't fit
|
||||
if(global::deviceID == "n705\n") {
|
||||
ui->warningLabel->setStyleSheet("QLabel { background-color : black; color : white; font-size: 14pt }");
|
||||
}
|
||||
else {
|
||||
ui->warningLabel->setStyleSheet("QLabel { background-color : black; color : white; font-size: 16pt }");
|
||||
}
|
||||
poweroff(false);
|
||||
QTimer::singleShot(1000, this, SLOT(quit()));
|
||||
}
|
||||
|
||||
ui->messageLabel->setStyleSheet("QLabel { background-color : black; color : white; font-size: 10pt }");
|
||||
ui->securityLabel->setStyleSheet("QLabel { background-color : black; color : white; font-size: 11pt }");
|
||||
ui->continueBtn->setProperty("type", "borderless");
|
||||
ui->resetBtn->setProperty("type", "borderless");
|
||||
ui->continueBtn->setStyleSheet("padding: 20px");
|
||||
ui->resetBtn->setStyleSheet("padding: 20px");
|
||||
ui->continue2Btn->setProperty("type", "borderless");
|
||||
ui->continue2Btn->setStyleSheet("padding: 20px");
|
||||
}
|
||||
|
||||
alert::~alert()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void alert::on_continueBtn_clicked()
|
||||
{
|
||||
// We continue anyway and re-set the ALERT flag
|
||||
writeFile("/external_root/boot/flags/ALERT", "false\n");
|
||||
writeFile("/external_root/boot/flags/ALERT_SIGN", "false\n");
|
||||
updateReset();
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void alert::on_resetBtn_clicked()
|
||||
{
|
||||
// We set the DO_FACTORY_RESET flag and we restart the device
|
||||
log("Factory reset requested; setting required flags", className);
|
||||
writeFile("/external_root/boot/flags/DO_FACTORY_RESET", "true\n");
|
||||
writeFile("/external_root/boot/flags/DIAGS_BOOT", "true\n");
|
||||
QString reboot_prog ("/sbin/reboot");
|
||||
QStringList reboot_args;
|
||||
reboot_args << "no_splash";
|
||||
QProcess *reboot_proc = new QProcess();
|
||||
reboot_proc->start(reboot_prog, reboot_args);
|
||||
reboot_proc->waitForFinished();
|
||||
reboot_proc->deleteLater();
|
||||
}
|
||||
|
||||
void alert::on_continue2Btn_clicked()
|
||||
{
|
||||
// We continue anyway and re-set the ALERT flag
|
||||
writeFile("/external_root/boot/flags/ALERT", "false\n");
|
||||
updateReset();
|
||||
|
||||
log("Restarting InkBox", className);
|
||||
if(signatureError == true) {
|
||||
writeFile("/external_root/boot/flags/ALERT_SIGN", "false\n");
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
if(downgradeError == true) {
|
||||
writeFile("/external_root/boot/flags/ALERT_DOWNGRADE", "false\n");
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
}
|
||||
|
||||
void alert::updateReset() {
|
||||
writeFile("/mnt/onboard/onboard/.inkbox/can_really_update", "false\n");
|
||||
writeFile("/mnt/onboard/onboard/.inkbox/can_update", "false\n");
|
||||
}
|
||||
|
||||
void alert::quit() {
|
||||
qApp->quit();
|
||||
}
|
|
@ -1,287 +0,0 @@
|
|||
#include "usbmsSplash.h"
|
||||
#include "ui_usbmsSplash.h"
|
||||
|
||||
#include <QPixmap>
|
||||
#include <QScreen>
|
||||
#include <QTimer>
|
||||
|
||||
#include "functions.h"
|
||||
|
||||
usbmsSplash::usbmsSplash(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::usbmsSplash)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
usbmsSplash::setFont(QFont("u001"));
|
||||
ui->label->setFont(QFont("Inter"));
|
||||
|
||||
// Getting the screen's size
|
||||
sW = QGuiApplication::screens()[0]->size().width();
|
||||
sH = QGuiApplication::screens()[0]->size().height();
|
||||
|
||||
// Defining what the default icon size will be
|
||||
if(global::kobox::showKoboxSplash == true) {
|
||||
float stdIconWidth = sW / 1.30;
|
||||
float stdIconHeight = sH / 1.30;
|
||||
|
||||
// Stylesheet
|
||||
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
this->setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
|
||||
ui->label->setFont(QFont("Inter"));
|
||||
ui->label->setText("Launching KoBox subsystem");
|
||||
ui->label->setStyleSheet("font-size: 14pt; font-weight: bold");
|
||||
ui->label_3->setText("Please wait, this could take a while.");
|
||||
if(global::deviceID == "n905\n" or global::deviceID == "kt\n") {
|
||||
ui->label_3->setStyleSheet("font-size: 11pt");
|
||||
}
|
||||
else {
|
||||
ui->label_3->setStyleSheet("font-size: 10pt");
|
||||
}
|
||||
|
||||
QPixmap pixmap(":/resources/kobox-icon.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->label_2->setPixmap(scaledPixmap);
|
||||
}
|
||||
else {
|
||||
float stdIconWidth = sW / 1.15;
|
||||
float stdIconHeight = sH / 1.15;
|
||||
|
||||
this->setStyleSheet("background-color:black;");
|
||||
ui->label->setStyleSheet("QLabel { background-color : black; color : white; font-size: 15pt; font-weight: bold }");
|
||||
ui->label_3->setStyleSheet("QLabel { background-color : black; color : white; font-size: 10pt }");
|
||||
|
||||
QPixmap pixmap(":/resources/usbms.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->label_2->setPixmap(scaledPixmap);
|
||||
}
|
||||
|
||||
if(global::usbms::launchUsbms == true) {
|
||||
global::usbms::launchUsbms = false;
|
||||
usbmsLaunch();
|
||||
}
|
||||
}
|
||||
|
||||
void usbmsSplash::usbmsLaunch()
|
||||
{
|
||||
log("Entering USBMS session", className);
|
||||
writeFile("/tmp/in_usbms", "true");
|
||||
QTimer::singleShot(1500, this, SLOT(brightnessDown()));
|
||||
QTimer::singleShot(1500, this, SLOT(warmthDown()));
|
||||
|
||||
if(global::usbms::koboxExportExtensions == true) {
|
||||
writeFile("/opt/ibxd", "kobox_extensions_storage_unmount\n");
|
||||
}
|
||||
if(checkconfig("/external_root/run/encfs_mounted") == true) {
|
||||
writeFile("/external_root/run/encfs_stop_cleanup", "true");
|
||||
writeFile("/opt/ibxd", "encfs_stop\n");
|
||||
while(true) {
|
||||
if(QFile::exists("/tmp/encfs_stopped")) {
|
||||
QFile::remove("/tmp/encfs_stopped");
|
||||
break;
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
}
|
||||
|
||||
writeFile("/opt/ibxd", "gui_apps_stop\n");
|
||||
while(true) {
|
||||
if(QFile::exists("/tmp/gui_apps_stopped")) {
|
||||
QFile::remove("/tmp/gui_apps_stopped");
|
||||
break;
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
|
||||
writeFile("/opt/ibxd", "onboard_unmount\n");
|
||||
while(true) {
|
||||
if(QFile::exists("/tmp/onboard_unmounted")) {
|
||||
QFile::remove("/tmp/onboard_unmounted");
|
||||
break;
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
|
||||
writeFile("/opt/ibxd", "usbnet_stop\n");
|
||||
while(true) {
|
||||
if(QFile::exists("/tmp/usbnet_stopped")) {
|
||||
QFile::remove("/tmp/usbnet_stopped");
|
||||
break;
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
|
||||
if(global::deviceID == "n306\n" or global::deviceID == "n249\n" or global::deviceID == "n873\n") {
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/fs/configfs/configfs.ko");
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/drivers/usb/gadget/libcomposite.ko");
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/drivers/usb/gadget/function/usb_f_mass_storage.ko");
|
||||
}
|
||||
else if(global::deviceID == "kt\n") {
|
||||
QProcess::execute("insmod", QStringList() << "/external_root/lib/modules/2.6.35-inkbox/kernel/drivers/usb/gadget/arcotg_udc.ko");
|
||||
}
|
||||
|
||||
QString prog_1 ("insmod");
|
||||
QStringList args_1;
|
||||
|
||||
if(global::deviceID == "kt\n") {
|
||||
massStorageModule = "/external_root/lib/modules/2.6.35-inkbox/kernel/drivers/usb/gadget/g_file_storage.ko";
|
||||
}
|
||||
else {
|
||||
massStorageModule = "/external_root/lib/modules/g_mass_storage.ko";
|
||||
}
|
||||
|
||||
if(global::usbms::koboxExportExtensions == true) {
|
||||
args_1 << massStorageModule << "file=/external_root/opt/storage/X11/extensions-user.img" << "removable=y" << "stall=0";
|
||||
}
|
||||
else {
|
||||
args_1 << massStorageModule << "file=/external_root/opt/storage/onboard" << "removable=y" << "stall=0";
|
||||
}
|
||||
|
||||
QProcess *proc_1 = new QProcess();
|
||||
proc_1->start(prog_1, args_1);
|
||||
proc_1->waitForFinished();
|
||||
proc_1->deleteLater();
|
||||
|
||||
bool exitUsbMsDone = false;
|
||||
QTimer *usbms_t = new QTimer(this);
|
||||
usbms_t->setInterval(1000);
|
||||
connect(usbms_t, &QTimer::timeout, [&]() {
|
||||
if(exitUsbMsDone == false) {
|
||||
if(isUsbPluggedIn() == 0) {
|
||||
if(global::usbms::koboxExportExtensions == true) {
|
||||
reboot(false);
|
||||
qApp->quit();
|
||||
}
|
||||
else {
|
||||
log("Exiting USBMS session", className);
|
||||
// '<font/>' bit: because nothing else works ...
|
||||
ui->label->setText("<font face='Inter'>Processing content</font>");
|
||||
ui->label->setFont(QFont("Inter"));
|
||||
ui->label_3->setText("Please wait");
|
||||
ui->label_3->setFont(QFont("u001"));
|
||||
ui->label->setStyleSheet("QLabel { background-color : black; color : white; font-size: 15pt; font-weight: bold }");
|
||||
ui->label_3->setStyleSheet("QLabel { background-color : black; color : white; font-size: 11pt }");
|
||||
ui->label->setFont(QFont("u001"));
|
||||
|
||||
float stdIconWidth = sW / 2;
|
||||
float stdIconHeight = sH / 2;
|
||||
|
||||
QPixmap pixmap(":/resources/clock-inverted.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->label_2->setPixmap(scaledPixmap);
|
||||
|
||||
this->repaint();
|
||||
|
||||
QString prog("rmmod");
|
||||
QStringList args;
|
||||
args << massStorageModule;
|
||||
QProcess * proc = new QProcess();
|
||||
proc->start(prog, args);
|
||||
proc->waitForFinished();
|
||||
proc->deleteLater();
|
||||
|
||||
QTimer::singleShot(500, this, SLOT(restartServices()));
|
||||
}
|
||||
exitUsbMsDone = true;
|
||||
}
|
||||
else {
|
||||
;
|
||||
}
|
||||
}
|
||||
} );
|
||||
usbms_t->start();
|
||||
}
|
||||
|
||||
usbmsSplash::~usbmsSplash()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void usbmsSplash::brightnessDown() {
|
||||
cinematicBrightness(0, 1);
|
||||
writeFile("/tmp/inkbox-cinematicBrightness_ran", "false");
|
||||
}
|
||||
|
||||
void usbmsSplash::warmthDown() {
|
||||
if(global::deviceID == "n249\n" or global::deviceID == "n873\n") {
|
||||
cinematicWarmth(0);
|
||||
}
|
||||
}
|
||||
|
||||
void usbmsSplash::quit_restart() {
|
||||
// If existing, cleaning bookconfig_mount mountpoint
|
||||
writeFile("/opt/ibxd", "bookconfig_unmount\n");
|
||||
|
||||
// Restarting InkBox
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void usbmsSplash::restartServices() {
|
||||
// Restarting USBNet
|
||||
// NOTE: USBNet is only started if required conditions are met (see https://github.com/Kobo-InkBox/rootfs/blob/master/etc/init.d/usbnet)
|
||||
writeFile("/opt/ibxd", "usbnet_start\n");
|
||||
while(true) {
|
||||
if(QFile::exists("/tmp/usbnet_started")) {
|
||||
QFile::remove("/tmp/usbnet_started");
|
||||
break;
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
|
||||
// Mounting onboard storage
|
||||
writeFile("/opt/ibxd", "onboard_mount\n");
|
||||
while(true) {
|
||||
if(QFile::exists("/tmp/onboard_mounted")) {
|
||||
QFile::remove("/tmp/onboard_mounted");
|
||||
break;
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
|
||||
// Checking for updates
|
||||
writeFile("/opt/ibxd", "update_inkbox_restart\n");
|
||||
while(true) {
|
||||
if(QFile::exists("/tmp/update_inkbox_restarted")) {
|
||||
QFile::remove("/tmp/update_inkbox_restarted");
|
||||
break;
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
|
||||
QFile::remove("/tmp/in_usbms");
|
||||
// GUI apps: update main JSON file
|
||||
writeFile("/opt/ibxd", "gui_apps_start\n");
|
||||
while(true) {
|
||||
if(QFile::exists("/tmp/gui_apps_started")) {
|
||||
if(checkconfig("/tmp/gui_apps_started") == true) {
|
||||
QFile::remove("/tmp/gui_apps_started");
|
||||
updateUserAppsMainJsonFile();
|
||||
break;
|
||||
}
|
||||
else {
|
||||
log("GUI apps service failed to start", className);
|
||||
QFile::remove("/tmp/gui_apps_started");
|
||||
break;
|
||||
}
|
||||
}
|
||||
QThread::msleep(500);
|
||||
}
|
||||
// Remove macOS dotfiles
|
||||
{
|
||||
QString prog("busybox-initrd");
|
||||
QStringList args;
|
||||
args << "find" << "/mnt/onboard/onboard" << "-type" << "f" << "-name" << "._*" << "-delete";
|
||||
QProcess * proc = new QProcess();
|
||||
proc->start(prog, args);
|
||||
proc->waitForFinished();
|
||||
proc->deleteLater();
|
||||
}
|
||||
// Re-generate local library on next launch
|
||||
QFile::remove(global::localLibrary::databasePath);
|
||||
|
||||
quit_restart();
|
||||
}
|
|
@ -1,16 +1,19 @@
|
|||
#include "telemetry.h"
|
||||
#include "device.h"
|
||||
|
||||
telemetry::telemetry(QObject *parent)
|
||||
Telemetry::Telemetry(QObject *parent)
|
||||
: QObject{parent}
|
||||
{
|
||||
QTimer::singleShot(100, this, SLOT(telemetrySlot()));
|
||||
}
|
||||
|
||||
QJsonObject telemetry::collectDeviceInformation() {
|
||||
QJsonObject Telemetry::collectDeviceInformation() {
|
||||
Device::SysInfo info = Device::getSingleton()->getSystemInfo();
|
||||
|
||||
QJsonObject data;
|
||||
data.insert("DeviceUID", getUID());
|
||||
data.insert("DeviceUID", info.uid);
|
||||
data.insert("SystemVersion", readFile("/opt/version").trimmed());
|
||||
data.insert("Device", global::deviceID.trimmed());
|
||||
data.insert("Device", Device::getSingleton()->getID());
|
||||
if(checkconfig("/external_root/opt/root/rooted")) {
|
||||
data.insert("DeviceRooted", "true");
|
||||
}
|
||||
|
@ -27,7 +30,7 @@ QJsonObject telemetry::collectDeviceInformation() {
|
|||
return data;
|
||||
}
|
||||
|
||||
bool telemetry::sendDeviceInformation(QJsonObject data) {
|
||||
bool Telemetry::sendDeviceInformation(QJsonObject data) {
|
||||
log("Telemetry data to be sent to server: " + QJsonDocument(data).toJson(QJsonDocument::Compact), className);
|
||||
|
||||
// NOTE: This URL *will* change in the future
|
||||
|
@ -46,7 +49,7 @@ bool telemetry::sendDeviceInformation(QJsonObject data) {
|
|||
return true;
|
||||
}
|
||||
|
||||
void telemetry::telemetrySlot() {
|
||||
void Telemetry::telemetrySlot() {
|
||||
QJsonObject data = collectDeviceInformation();
|
||||
if(sendDeviceInformation(data)) {
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/24-telemetry/asked", "true");
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
#include <QApplication>
|
||||
#include "functions.h"
|
||||
|
||||
class telemetry : public QObject
|
||||
class Telemetry : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit telemetry(QObject *parent = nullptr);
|
||||
explicit Telemetry(QObject *parent = nullptr);
|
||||
QString className = this->metaObject()->className();
|
||||
QString message;
|
||||
QString deviceUID;
|
||||
|
|
|
@ -1,20 +1,22 @@
|
|||
#include "apps.h"
|
||||
#include "ui_apps.h"
|
||||
#include "mainwindow.h"
|
||||
#include "ui_apps.h"
|
||||
#include "userapps.h"
|
||||
#include "ui.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QProcess>
|
||||
#include <QJsonParseError>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonValue>
|
||||
#include <QJsonArray>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonParseError>
|
||||
#include <QJsonValue>
|
||||
#include <QProcess>
|
||||
#include <QScreen>
|
||||
|
||||
apps::apps(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::apps)
|
||||
{
|
||||
AppsWidget::AppsWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::AppsWidget) {
|
||||
Device *device = Device::getSingleton();
|
||||
|
||||
ui->setupUi(this);
|
||||
ui->koboxAppsOpenButton->setProperty("type", "borderless");
|
||||
ui->calendarLaunchBtn->setProperty("type", "borderless");
|
||||
|
@ -38,23 +40,22 @@ apps::apps(QWidget *parent) :
|
|||
ui->noUserAppsAvailableLabel->hide();
|
||||
|
||||
// Hiding KoBox apps button and label if X11 isn't enabled/wasn't started
|
||||
if(checkconfig("/external_root/boot/flags/X11_START") == false or checkconfig("/external_root/boot/flags/X11_STARTED") == false) {
|
||||
if (checkconfig("/external_root/boot/flags/X11_START") == false or checkconfig("/external_root/boot/flags/X11_STARTED") == false) {
|
||||
ui->label_5->hide();
|
||||
ui->koboxAppsOpenButton->hide();
|
||||
ui->label_5->deleteLater();
|
||||
ui->koboxAppsOpenButton->deleteLater();
|
||||
}
|
||||
// Hiding VNC viewer button and label if device is not rooted and doesn't have a working Wi-Fi adapter, or if X11 is not running
|
||||
if(checkconfig("/external_root/opt/root/rooted") == false) {
|
||||
if(global::device::isWifiAble == false or checkconfig("/external_root/boot/flags/X11_START") == false or checkconfig("/external_root/boot/flags/X11_STARTED") == false) {
|
||||
if (checkconfig("/external_root/opt/root/rooted") == false) {
|
||||
if (device->supportsWifi() == false or checkconfig("/external_root/boot/flags/X11_START") == false or checkconfig("/external_root/boot/flags/X11_STARTED") == false) {
|
||||
ui->vncViewerLabel->hide();
|
||||
ui->vncLaunchBtn->hide();
|
||||
ui->vncViewerLabel->deleteLater();
|
||||
ui->vncLaunchBtn->deleteLater();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(checkconfig("/external_root/boot/flags/X11_START") == false or checkconfig("/external_root/boot/flags/X11_STARTED") == false) {
|
||||
} else {
|
||||
if (checkconfig("/external_root/boot/flags/X11_START") == false or checkconfig("/external_root/boot/flags/X11_STARTED") == false) {
|
||||
ui->vncViewerLabel->hide();
|
||||
ui->vncLaunchBtn->hide();
|
||||
ui->vncViewerLabel->deleteLater();
|
||||
|
@ -71,202 +72,191 @@ apps::apps(QWidget *parent) :
|
|||
jsonParseSuccess = parseJson();
|
||||
showUserApps(false);
|
||||
|
||||
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
|
||||
stylesheetFile.open(QFile::ReadOnly);
|
||||
this->setStyleSheet(stylesheetFile.readAll());
|
||||
stylesheetFile.close();
|
||||
UI::applyStyle(*this, "eink");
|
||||
}
|
||||
|
||||
apps::~apps()
|
||||
{
|
||||
AppsWidget::~AppsWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void apps::exitSlot() {
|
||||
apps::close();
|
||||
void AppsWidget::exitSlot() {
|
||||
AppsWidget::close();
|
||||
}
|
||||
|
||||
void apps::on_savedWordsLaunchBtn_clicked()
|
||||
{
|
||||
void AppsWidget::on_savedWordsLaunchBtn_clicked() {
|
||||
log("Launching Saved Words app", className);
|
||||
savedWordsWindow = new savedwords();
|
||||
savedWordsWindow = new SavedWordsAppWidget();
|
||||
savedWordsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
savedWordsWindow->showFullScreen();
|
||||
}
|
||||
|
||||
void apps::on_calendarLaunchBtn_clicked()
|
||||
{
|
||||
void AppsWidget::on_calendarLaunchBtn_clicked() {
|
||||
log("Launching Calendar app", className);
|
||||
calendarWindow = new calendarApp();
|
||||
calendarWindow = new CalendarAppWidget();
|
||||
calendarWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
calendarWindow->showFullScreen();
|
||||
}
|
||||
|
||||
void apps::on_calculatorLaunchBtn_clicked()
|
||||
{
|
||||
void AppsWidget::on_calculatorLaunchBtn_clicked() {
|
||||
log("Launching external Qalculate! app", className);
|
||||
QProcess process;
|
||||
process.startDetached("qalculate", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void apps::on_koboxAppsOpenButton_clicked()
|
||||
{
|
||||
void AppsWidget::on_koboxAppsOpenButton_clicked() {
|
||||
log("Showing KoBox Apps Dialog", className);
|
||||
koboxAppsDialogWindow = new koboxAppsDialog();
|
||||
koboxAppsDialogWindow = new KoboxAppsDialog();
|
||||
connect(koboxAppsDialogWindow, SIGNAL(showToast(QString)), SLOT(showToastNative(QString)));
|
||||
koboxAppsDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
koboxAppsDialogWindow->show();
|
||||
}
|
||||
|
||||
void apps::on_vncLaunchBtn_clicked()
|
||||
{
|
||||
void AppsWidget::on_vncLaunchBtn_clicked() {
|
||||
log("Showing VNC dialog", className);
|
||||
global::keyboard::keyboardDialog = true;
|
||||
global::keyboard::vncDialog = true;
|
||||
global::keyboard::keyboardText = "";
|
||||
generalDialogWindow = new generalDialog();
|
||||
generalDialogWindow = new GeneralDialog();
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(generalDialogWindow, SIGNAL(refreshScreen()), SLOT(refreshScreenNative()));
|
||||
generalDialogWindow->show();
|
||||
}
|
||||
|
||||
void apps::refreshScreenNative() {
|
||||
void AppsWidget::refreshScreenNative() {
|
||||
emit refreshScreen();
|
||||
}
|
||||
|
||||
void apps::on_reversiLaunchBtn_clicked()
|
||||
{
|
||||
void AppsWidget::on_reversiLaunchBtn_clicked() {
|
||||
log("Launching external Reversi app", className);
|
||||
QProcess process;
|
||||
process.startDetached("qreversi", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void apps::on_g2048LaunchBtn_clicked()
|
||||
{
|
||||
void AppsWidget::on_g2048LaunchBtn_clicked() {
|
||||
log("Launching external 2048 app", className);
|
||||
QProcess process;
|
||||
process.startDetached("2048", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void apps::showToastNative(QString messageToDisplay) {
|
||||
void AppsWidget::showToastNative(QString messageToDisplay) {
|
||||
emit showToast(messageToDisplay);
|
||||
}
|
||||
|
||||
/*
|
||||
* This function opens and reads the main GUI user applications' JSON file, parses and verifies its contents to avoid issues in the future.
|
||||
*/
|
||||
bool apps::parseJson() {
|
||||
*/
|
||||
bool AppsWidget::parseJson() {
|
||||
// If the path changes, it is also used statically in showUserApps()
|
||||
jsonFile.setFileName("/mnt/onboard/onboard/.apps/apps.json");
|
||||
bool jsonCheckSuccess = true;
|
||||
|
||||
if(jsonFile.exists() == false) {
|
||||
if (jsonFile.exists() == false) {
|
||||
log("GUI user applications' main JSON file is missing", className);
|
||||
jsonCheckSuccess = false;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
jsonFile.open(QIODevice::ReadOnly | QIODevice::Text);
|
||||
QString fileRead = jsonFile.readAll();
|
||||
jsonFile.close();
|
||||
|
||||
jsonDocument = QJsonDocument::fromJson(fileRead.toUtf8());
|
||||
if(jsonDocument.isNull() == true) {
|
||||
if (jsonDocument.isNull() == true) {
|
||||
log("GUI user applications' main JSON file is invalid", className);
|
||||
jsonCheckSuccess = false;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
QJsonObject jsonObject = jsonDocument.object();
|
||||
if(jsonObject["list"].isArray() == true) {
|
||||
if (jsonObject["list"].isArray() == true) {
|
||||
QJsonArray jsonArray = jsonObject["list"].toArray();
|
||||
for(QJsonValueRef refJsonObject: jsonArray) {
|
||||
if(refJsonObject.isObject()) {
|
||||
for (QJsonValueRef refJsonObject : jsonArray) {
|
||||
if (refJsonObject.isObject()) {
|
||||
QJsonObject jsonMainObject = refJsonObject.toObject();
|
||||
if(jsonMainObject.size() == 9) {
|
||||
if(!jsonMainObject["Name"].isString()) {
|
||||
QString function = __func__; log(function + ": Invalid 'Name' type inside object", className);
|
||||
if (jsonMainObject.size() == 9) {
|
||||
if (!jsonMainObject["Name"].isString()) {
|
||||
QString function = __func__;
|
||||
log(function + ": Invalid 'Name' type inside object", className);
|
||||
jsonCheckSuccess = false;
|
||||
|
||||
}
|
||||
if(!jsonMainObject["Author"].isString()) {
|
||||
QString function = __func__; log(function + ": Invalid 'Author' type inside object", className);
|
||||
if (!jsonMainObject["Author"].isString()) {
|
||||
QString function = __func__;
|
||||
log(function + ": Invalid 'Author' type inside object", className);
|
||||
jsonCheckSuccess = false;
|
||||
|
||||
}
|
||||
if(!jsonMainObject["AuthorContact"].isString()) {
|
||||
QString function = __func__; log(function + ": Invalid 'AuthorContact' type inside object", className);
|
||||
if (!jsonMainObject["AuthorContact"].isString()) {
|
||||
QString function = __func__;
|
||||
log(function + ": Invalid 'AuthorContact' type inside object", className);
|
||||
jsonCheckSuccess = false;
|
||||
|
||||
}
|
||||
if(!jsonMainObject["Version"].isString()) {
|
||||
QString function = __func__; log(function + ": Invalid 'Version' type inside object", className);
|
||||
if (!jsonMainObject["Version"].isString()) {
|
||||
QString function = __func__;
|
||||
log(function + ": Invalid 'Version' type inside object", className);
|
||||
jsonCheckSuccess = false;
|
||||
|
||||
}
|
||||
if(!jsonMainObject["IconPath"].isString()) {
|
||||
if (!jsonMainObject["IconPath"].isString()) {
|
||||
log("JSON: Invalid IconPath type inside object", className);
|
||||
jsonCheckSuccess = false;
|
||||
|
||||
}
|
||||
if(!jsonMainObject["ExecPath"].isString()) {
|
||||
QString function = __func__; log(function + ": Invalid 'ExecPath' type inside object", className);
|
||||
if (!jsonMainObject["ExecPath"].isString()) {
|
||||
QString function = __func__;
|
||||
log(function + ": Invalid 'ExecPath' type inside object", className);
|
||||
jsonCheckSuccess = false;
|
||||
}
|
||||
else {
|
||||
if(jsonMainObject["ExecPath"].toString().contains("..")) {
|
||||
} else {
|
||||
if (jsonMainObject["ExecPath"].toString().contains("..")) {
|
||||
// Possible security risk
|
||||
showToastNative("ERROR: 'ExecPath' has invalid path");
|
||||
QString function = __func__; log(function + ": 'ExecPath' contains \"..\"", className);
|
||||
QString function = __func__;
|
||||
log(function + ": 'ExecPath' contains \"..\"", className);
|
||||
jsonCheckSuccess = false;
|
||||
}
|
||||
}
|
||||
if(!jsonMainObject["Enabled"].isBool()) {
|
||||
QString function = __func__; log(function + ": Invalid 'Enabled' type inside object", className);
|
||||
if (!jsonMainObject["Enabled"].isBool()) {
|
||||
QString function = __func__;
|
||||
log(function + ": Invalid 'Enabled' type inside object", className);
|
||||
jsonCheckSuccess = false;
|
||||
}
|
||||
if (!jsonMainObject["SupportedDevices"].isArray()) {
|
||||
QString function = __func__;
|
||||
log(function + ": Invalid 'SupportedDevices' type inside object", className);
|
||||
jsonCheckSuccess = false;
|
||||
|
||||
}
|
||||
if(!jsonMainObject["SupportedDevices"].isArray()) {
|
||||
QString function = __func__; log(function + ": Invalid 'SupportedDevices' type inside object", className);
|
||||
jsonCheckSuccess = false;
|
||||
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
QJsonArray jsonArray = jsonMainObject["SupportedDevices"].toArray();
|
||||
for(QJsonValueRef refJsonObject: jsonArray) {
|
||||
for (QJsonValueRef refJsonObject : jsonArray) {
|
||||
// https://doc.qt.io/qt-5/qjsonvalue.html#toInt
|
||||
if(!refJsonObject.isString()) {
|
||||
QString function = __func__; log(function + ": Array from 'RequiredFeatures' contains a wrong type", className);
|
||||
if (!refJsonObject.isString()) {
|
||||
QString function = __func__;
|
||||
log(function + ": Array from 'RequiredFeatures' contains a wrong type", className);
|
||||
jsonCheckSuccess = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!jsonMainObject["RequiredFeatures"].isArray()) {
|
||||
QString function = __func__; log(function + ": Invalid 'RequiredFeatures' type inside object", className);
|
||||
if (!jsonMainObject["RequiredFeatures"].isArray()) {
|
||||
QString function = __func__;
|
||||
log(function + ": Invalid 'RequiredFeatures' type inside object", className);
|
||||
jsonCheckSuccess = false;
|
||||
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
QJsonArray jsonArray = jsonMainObject["RequiredFeatures"].toArray();
|
||||
for(QJsonValueRef refJsonObject: jsonArray) {
|
||||
for (QJsonValueRef refJsonObject : jsonArray) {
|
||||
// https://doc.qt.io/qt-5/qjsonvalue.html#toInt
|
||||
if(!refJsonObject.isDouble()) {
|
||||
QString function = __func__; log(function + ": Array from 'RequiredFeatures' contains a wrong type", className);
|
||||
if (!refJsonObject.isDouble()) {
|
||||
QString function = __func__;
|
||||
log(function + ": Array from 'RequiredFeatures' contains a wrong type", className);
|
||||
jsonCheckSuccess = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
QString function = __func__; QString message = function + ": An object inside list array has too many items (or not enough): ";
|
||||
} else {
|
||||
QString function = __func__;
|
||||
QString message = function + ": An object inside list array has too many items (or not enough): ";
|
||||
message.append(QString::number(jsonMainObject.size()));
|
||||
log(message, className);
|
||||
jsonCheckSuccess = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
QString function = __func__; log(function + ": List array has an item of other type than object", className);
|
||||
} else {
|
||||
QString function = __func__;
|
||||
log(function + ": List array has an item of other type than object", className);
|
||||
jsonCheckSuccess = false;
|
||||
}
|
||||
}
|
||||
|
@ -276,9 +266,8 @@ bool apps::parseJson() {
|
|||
return jsonCheckSuccess;
|
||||
}
|
||||
|
||||
void apps::on_editUserAppsBtn_clicked()
|
||||
{
|
||||
if(userAppsSecondPage == false) {
|
||||
void AppsWidget::on_editUserAppsBtn_clicked() {
|
||||
if (userAppsSecondPage == false) {
|
||||
userAppsSecondPage = true;
|
||||
|
||||
// Settings page
|
||||
|
@ -287,8 +276,7 @@ void apps::on_editUserAppsBtn_clicked()
|
|||
emit showUserAppsEdit(userAppsSecondPage);
|
||||
|
||||
QTimer::singleShot(500, this, SLOT(refreshScreenNative()));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
userAppsSecondPage = false;
|
||||
userAppsAvailable = false;
|
||||
|
||||
|
@ -307,18 +295,18 @@ void apps::on_editUserAppsBtn_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
void apps::showUserApps(bool showDisabledJson)
|
||||
{
|
||||
void AppsWidget::showUserApps(bool showDisabledJson) {
|
||||
emit clearAppsLayout();
|
||||
|
||||
if(jsonParseSuccess == true) {
|
||||
QString function = __func__; log(function + ": Main user applications' JSON is valid", className);
|
||||
if (jsonParseSuccess == true) {
|
||||
QString function = __func__;
|
||||
log(function + ": Main user applications' JSON is valid", className);
|
||||
QJsonArray jsonListArray = jsonDocument.object()["list"].toArray();
|
||||
for(QJsonValueRef refJsonObject: jsonListArray) {
|
||||
for (QJsonValueRef refJsonObject : jsonListArray) {
|
||||
QJsonObject appInfo = refJsonObject.toObject();
|
||||
if(appInfo["Enabled"].toBool() == true or showDisabledJson == true) {
|
||||
if (appInfo["Enabled"].toBool() == true or showDisabledJson == true) {
|
||||
userAppsAvailable = true;
|
||||
userapps * newUserApp = new userapps;
|
||||
UserAppsWidget *newUserApp = new UserAppsWidget;
|
||||
newUserApp->provideInfo(appInfo);
|
||||
connect(this, SIGNAL(clearAppsLayout()), newUserApp, SLOT(deleteLater()));
|
||||
connect(this, SIGNAL(showUserAppsEdit(bool)), newUserApp, SLOT(changePageEnabling(bool)));
|
||||
|
@ -330,20 +318,19 @@ void apps::showUserApps(bool showDisabledJson)
|
|||
}
|
||||
}
|
||||
|
||||
if(userAppsAvailable == false) {
|
||||
if (userAppsAvailable == false) {
|
||||
ui->noUserAppsAvailableLabel->show();
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
ui->noUserAppsAvailableLabel->hide();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(QFile::exists("/mnt/onboard/onboard/.apps/apps.json")) {
|
||||
QString function = __func__; log(function + ": Main user applications' JSON file is invalid", className);
|
||||
} else {
|
||||
if (QFile::exists("/mnt/onboard/onboard/.apps/apps.json")) {
|
||||
QString function = __func__;
|
||||
log(function + ": Main user applications' JSON file is invalid", className);
|
||||
QTimer::singleShot(500, this, SLOT(showFailedToParseMainUserAppsJsonFile()));
|
||||
}
|
||||
else {
|
||||
QString function = __func__; log(function + ": Main user applications' JSON file doesn't exist; assuming that no user applications are currently installed", className);
|
||||
} else {
|
||||
QString function = __func__;
|
||||
log(function + ": Main user applications' JSON file doesn't exist; assuming that no user applications are currently installed", className);
|
||||
}
|
||||
|
||||
ui->editUserAppsBtn->hide();
|
||||
|
@ -358,21 +345,19 @@ void apps::showUserApps(bool showDisabledJson)
|
|||
}
|
||||
}
|
||||
|
||||
void apps::updateJsonFileSlot(QJsonDocument jsonDocumentFunc)
|
||||
{
|
||||
void AppsWidget::updateJsonFileSlot(QJsonDocument jsonDocumentFunc) {
|
||||
jsonDocument = jsonDocumentFunc;
|
||||
emit updateJsonFileSignal(jsonDocument);
|
||||
}
|
||||
|
||||
void apps::showFailedToParseMainUserAppsJsonFile() {
|
||||
emit showToast("Failed to parse 'apps.json'");
|
||||
void AppsWidget::showFailedToParseMainUserAppsJsonFile() {
|
||||
emit showToast("Failed to parse 'apps.json'");
|
||||
}
|
||||
|
||||
void apps::on_todoLaunchBtn_clicked()
|
||||
{
|
||||
todo * todoWindow = new todo();
|
||||
QObject::connect(todoWindow, &todo::showToast, this, &apps::showToast);
|
||||
void AppsWidget::on_todoLaunchBtn_clicked() {
|
||||
TodoAppWidget *todoWindow = new TodoAppWidget();
|
||||
QObject::connect(todoWindow, &TodoAppWidget::showToast, this, &AppsWidget::showToast);
|
||||
todoWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
todoWindow->setGeometry(QRect(QPoint(0,0), qApp->primaryScreen()->geometry().size()));
|
||||
todoWindow->setGeometry(QRect(QPoint(0, 0), qApp->primaryScreen()->geometry().size()));
|
||||
todoWindow->show();
|
||||
}
|
|
@ -11,17 +11,17 @@
|
|||
#include <QJsonDocument>
|
||||
|
||||
namespace Ui {
|
||||
class apps;
|
||||
class AppsWidget;
|
||||
}
|
||||
|
||||
class apps : public QWidget
|
||||
class AppsWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit apps(QWidget *parent = nullptr);
|
||||
~apps();
|
||||
explicit AppsWidget(QWidget *parent = nullptr);
|
||||
~AppsWidget();
|
||||
|
||||
private slots:
|
||||
void exitSlot();
|
||||
|
@ -42,12 +42,12 @@ private slots:
|
|||
void on_todoLaunchBtn_clicked();
|
||||
|
||||
private:
|
||||
Ui::apps * ui;
|
||||
savedwords * savedWordsWindow;
|
||||
calendarApp * calendarWindow;
|
||||
koboxAppsDialog * koboxAppsDialogWindow;
|
||||
generalDialog * generalDialogWindow;
|
||||
todo * todoWindow;
|
||||
Ui::AppsWidget * ui;
|
||||
SavedWordsAppWidget * savedWordsWindow;
|
||||
CalendarAppWidget * calendarWindow;
|
||||
KoboxAppsDialog * koboxAppsDialogWindow;
|
||||
GeneralDialog * generalDialogWindow;
|
||||
TodoAppWidget * todoWindow;
|
||||
|
||||
QFile jsonFile;
|
||||
QJsonDocument jsonDocument;
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>apps</class>
|
||||
<widget class="QWidget" name="apps">
|
||||
<class>AppsWidget</class>
|
||||
<widget class="QWidget" name="AppsWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
27
src/ui/apps/calendarapp.cpp
Normal file
27
src/ui/apps/calendarapp.cpp
Normal file
|
@ -0,0 +1,27 @@
|
|||
#include "calendarapp.h"
|
||||
#include "ui.h"
|
||||
#include "ui_calendarapp.h"
|
||||
|
||||
#include <QFile>
|
||||
|
||||
CalendarAppWidget::CalendarAppWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::CalendarAppWidget) {
|
||||
ui->setupUi(this);
|
||||
CalendarAppWidget::setFont(QFont("u001"));
|
||||
ui->backBtn->setFont(QFont("Inter"));
|
||||
ui->backBtn->setStyleSheet("font-weight: bold");
|
||||
|
||||
// Stylesheet
|
||||
UI::applyStyle(*this, "eink");
|
||||
|
||||
ui->backBtn->setProperty("type", "borderless");
|
||||
}
|
||||
|
||||
CalendarAppWidget::~CalendarAppWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void CalendarAppWidget::on_backBtn_clicked() {
|
||||
CalendarAppWidget::close();
|
||||
}
|
|
@ -4,23 +4,23 @@
|
|||
#include <QWidget>
|
||||
|
||||
namespace Ui {
|
||||
class calendarApp;
|
||||
class CalendarAppWidget;
|
||||
}
|
||||
|
||||
class calendarApp : public QWidget
|
||||
class CalendarAppWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit calendarApp(QWidget *parent = nullptr);
|
||||
~calendarApp();
|
||||
explicit CalendarAppWidget(QWidget *parent = nullptr);
|
||||
~CalendarAppWidget();
|
||||
|
||||
private slots:
|
||||
void on_backBtn_clicked();
|
||||
|
||||
private:
|
||||
Ui::calendarApp *ui;
|
||||
Ui::CalendarAppWidget *ui;
|
||||
};
|
||||
|
||||
#endif // CALENDARAPP_H
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>calendarApp</class>
|
||||
<widget class="QWidget" name="calendarApp">
|
||||
<class>CalendarAppWidget</class>
|
||||
<widget class="QWidget" name="CalendarAppWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
81
src/ui/apps/savedwords.cpp
Normal file
81
src/ui/apps/savedwords.cpp
Normal file
|
@ -0,0 +1,81 @@
|
|||
#include "savedwords.h"
|
||||
#include "functions.h"
|
||||
#include "ui.h"
|
||||
#include "ui_savedwords.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QProcess>
|
||||
#include <QStringListModel>
|
||||
|
||||
SavedWordsAppWidget::SavedWordsAppWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::SavedWordsAppWidget) {
|
||||
ui->setupUi(this);
|
||||
SavedWordsAppWidget::setFont(QFont("u001"));
|
||||
ui->savedWordsLabel->setFont(QFont("Inter"));
|
||||
ui->backBtn->setFont(QFont("Inter"));
|
||||
ui->clearBtn->setFont(QFont("Inter"));
|
||||
|
||||
UI::applyStyle(*this, "eink");
|
||||
|
||||
ui->backBtn->setProperty("type", "borderless");
|
||||
ui->clearBtn->setProperty("type", "borderless");
|
||||
|
||||
ui->savedWordsLabel->setStyleSheet("font-weight: bold");
|
||||
ui->wordsList->setStyleSheet("font-size: 10pt");
|
||||
ui->backBtn->setStyleSheet("font-weight: bold");
|
||||
ui->clearBtn->setStyleSheet("font-weight: bold");
|
||||
|
||||
checkwords();
|
||||
|
||||
QStringListModel *model = new QStringListModel(this);
|
||||
QStringList list = words.split("\n", QString::SkipEmptyParts);
|
||||
model->setStringList(list);
|
||||
ui->wordsList->setModel(model);
|
||||
ui->wordsList->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
}
|
||||
|
||||
SavedWordsAppWidget::~SavedWordsAppWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void SavedWordsAppWidget::on_backBtn_clicked() {
|
||||
// Workaround for the random strange memory corruption error
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void SavedWordsAppWidget::on_clearBtn_clicked() {
|
||||
// Warning: possible memory leak here. Though, usually, when you press the "Clear" button and all clears up, you don't have to press it again ;)
|
||||
log("Wiping Saved Words list", className);
|
||||
save_word_init();
|
||||
checkwords();
|
||||
QStringListModel *model = new QStringListModel(this);
|
||||
QStringList list = words.split("\n", QString::SkipEmptyParts);
|
||||
model->setStringList(list);
|
||||
ui->wordsList->setModel(model);
|
||||
ui->wordsList->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
}
|
||||
|
||||
void SavedWordsAppWidget::checkwords() {
|
||||
QFile words_list(".config/06-words/config");
|
||||
words_list.open(QIODevice::ReadWrite);
|
||||
QTextStream in(&words_list);
|
||||
words = in.readAll();
|
||||
words_list.close();
|
||||
}
|
||||
|
||||
void SavedWordsAppWidget::save_word_init() {
|
||||
QFile words(".config/06-words/config");
|
||||
words.open(QIODevice::ReadWrite);
|
||||
QTextStream in(&words);
|
||||
QString words_list = in.readAll();
|
||||
string words_list_str = words_list.toStdString();
|
||||
words.close();
|
||||
|
||||
ofstream fhandler;
|
||||
fhandler.open(".config/06-words/config");
|
||||
fhandler << "";
|
||||
fhandler.close();
|
||||
}
|
|
@ -11,17 +11,17 @@
|
|||
using namespace std;
|
||||
|
||||
namespace Ui {
|
||||
class savedwords;
|
||||
class SavedWordsAppWidget;
|
||||
}
|
||||
|
||||
class savedwords : public QWidget
|
||||
class SavedWordsAppWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit savedwords(QWidget *parent = nullptr);
|
||||
~savedwords();
|
||||
explicit SavedWordsAppWidget(QWidget *parent = nullptr);
|
||||
~SavedWordsAppWidget();
|
||||
QString words;
|
||||
void checkwords();
|
||||
void save_word_init();
|
||||
|
@ -31,7 +31,7 @@ private slots:
|
|||
void on_clearBtn_clicked();
|
||||
|
||||
private:
|
||||
Ui::savedwords *ui;
|
||||
Ui::SavedWordsAppWidget *ui;
|
||||
};
|
||||
|
||||
#endif // SAVEDWORDS_H
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>savedwords</class>
|
||||
<widget class="QWidget" name="savedwords">
|
||||
<class>SavedWordsAppWidget</class>
|
||||
<widget class="QWidget" name="SavedWordsAppWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
|
@ -1,12 +1,14 @@
|
|||
#include "todo.h"
|
||||
#include "ui_todo.h"
|
||||
#include "device.h"
|
||||
|
||||
#include "functions.h"
|
||||
|
||||
todo::todo(QWidget *parent) :
|
||||
TodoAppWidget::TodoAppWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::todo)
|
||||
ui(new Ui::TodoAppWidget)
|
||||
{
|
||||
Device* device = Device::getSingleton();
|
||||
ui->setupUi(this);
|
||||
this->setStyleSheet(readFile("/mnt/onboard/.adds/inkbox/eink.qss"));
|
||||
this->setFont(QFont("u001"));
|
||||
|
@ -17,7 +19,7 @@ todo::todo(QWidget *parent) :
|
|||
ui->setupBtn->setEnabled(false);
|
||||
|
||||
buttonPadding;
|
||||
if(global::deviceID == "n705\n" or global::deviceID == "n905\n" or global::deviceID == "kt\n") {
|
||||
if(device->getScreenSize() <= Device::ScreenSize::MEDIUM) {
|
||||
buttonPadding = 5;
|
||||
}
|
||||
else {
|
||||
|
@ -66,12 +68,12 @@ todo::todo(QWidget *parent) :
|
|||
refreshList();
|
||||
}
|
||||
|
||||
todo::~todo()
|
||||
TodoAppWidget::~TodoAppWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void todo::on_closeBtn_clicked()
|
||||
void TodoAppWidget::on_closeBtn_clicked()
|
||||
{
|
||||
if(currentView == currentView::home) {
|
||||
this->close();
|
||||
|
@ -82,19 +84,19 @@ void todo::on_closeBtn_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
void todo::on_newBtn_clicked()
|
||||
void TodoAppWidget::on_newBtn_clicked()
|
||||
{
|
||||
global::keyboard::embed = false;
|
||||
global::keyboard::keyboardText = "";
|
||||
virtualkeyboard * virtualKeyboardWidget = new virtualkeyboard(this);
|
||||
virtualKeyboardWidget->setAttribute(Qt::WA_DeleteOnClose);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::enterBtnPressed, this, &todo::createNewList);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::closeBtnPressed, this, &todo::setDefaultHomePageStatusText);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::enterBtnPressed, this, &TodoAppWidget::createNewList);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::closeBtnPressed, this, &TodoAppWidget::setDefaultHomePageStatusText);
|
||||
ui->statusLabel->setText("Enter the list's name");
|
||||
virtualKeyboardWidget->show();
|
||||
}
|
||||
|
||||
void todo::createNewList(QString listName) {
|
||||
void TodoAppWidget::createNewList(QString listName) {
|
||||
log("Initializing new To-Do list with name '" + listName + "'", className);
|
||||
QJsonDocument document;
|
||||
QJsonArray mainArray;
|
||||
|
@ -117,7 +119,7 @@ void todo::createNewList(QString listName) {
|
|||
refreshList();
|
||||
}
|
||||
|
||||
void todo::addItem(QString itemName) {
|
||||
void TodoAppWidget::addItem(QString itemName) {
|
||||
log("Adding item with name '" + itemName + "' to current list", className);
|
||||
// Accessing the current list's items array
|
||||
QJsonDocument document = readTodoDatabase();
|
||||
|
@ -142,7 +144,7 @@ void todo::addItem(QString itemName) {
|
|||
setupList(listArray.at(0).toString());
|
||||
}
|
||||
|
||||
void todo::refreshList() {
|
||||
void TodoAppWidget::refreshList() {
|
||||
if(QFile::exists(global::localLibrary::todoDatabasePath)) {
|
||||
ui->listWidget->clear();
|
||||
QJsonArray array = readTodoDatabase().object()["List"].toArray();
|
||||
|
@ -155,7 +157,7 @@ void todo::refreshList() {
|
|||
}
|
||||
}
|
||||
|
||||
void todo::setupList(QString listName) {
|
||||
void TodoAppWidget::setupList(QString listName) {
|
||||
log("Setting up list with name '" + listName + "'", className);
|
||||
QJsonArray array = readTodoDatabase().object()["List"].toArray();
|
||||
// Iterate through the To-Do lists array to find the list's array index
|
||||
|
@ -197,7 +199,7 @@ void todo::setupList(QString listName) {
|
|||
ui->statusLabel->setText("Select or create a new item");
|
||||
}
|
||||
|
||||
void todo::on_setupBtn_clicked()
|
||||
void TodoAppWidget::on_setupBtn_clicked()
|
||||
{
|
||||
ui->deleteBtn->setEnabled(false);
|
||||
ui->setupBtn->setEnabled(false);
|
||||
|
@ -205,13 +207,13 @@ void todo::on_setupBtn_clicked()
|
|||
}
|
||||
|
||||
|
||||
void todo::on_listWidget_itemClicked(QListWidgetItem *item)
|
||||
void TodoAppWidget::on_listWidget_itemClicked(QListWidgetItem *item)
|
||||
{
|
||||
ui->deleteBtn->setEnabled(true);
|
||||
ui->setupBtn->setEnabled(true);
|
||||
}
|
||||
|
||||
void todo::saveCurrentList() {
|
||||
void TodoAppWidget::saveCurrentList() {
|
||||
QJsonDocument document = readTodoDatabase();
|
||||
QJsonObject object = document.object();
|
||||
QJsonArray mainArray = object["List"].toArray();
|
||||
|
@ -235,7 +237,7 @@ void todo::saveCurrentList() {
|
|||
writeTodoDatabase(document);
|
||||
}
|
||||
|
||||
void todo::on_deleteBtn_clicked()
|
||||
void TodoAppWidget::on_deleteBtn_clicked()
|
||||
{
|
||||
QJsonDocument document = readTodoDatabase();
|
||||
QJsonObject object = document.object();
|
||||
|
@ -251,19 +253,19 @@ void todo::on_deleteBtn_clicked()
|
|||
refreshList();
|
||||
}
|
||||
|
||||
void todo::on_newItemBtn_clicked()
|
||||
void TodoAppWidget::on_newItemBtn_clicked()
|
||||
{
|
||||
global::keyboard::embed = false;
|
||||
global::keyboard::keyboardText = "";
|
||||
virtualkeyboard * virtualKeyboardWidget = new virtualkeyboard(this);
|
||||
virtualKeyboardWidget->setAttribute(Qt::WA_DeleteOnClose);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::enterBtnPressed, this, &todo::addItem);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::closeBtnPressed, this, &todo::setDefaultListPageStatusText);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::enterBtnPressed, this, &TodoAppWidget::addItem);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::closeBtnPressed, this, &TodoAppWidget::setDefaultListPageStatusText);
|
||||
ui->statusLabel->setText("Enter the item's name");
|
||||
virtualKeyboardWidget->show();
|
||||
}
|
||||
|
||||
void todo::switchViewHome() {
|
||||
void TodoAppWidget::switchViewHome() {
|
||||
ui->itemsListWidget->clear();
|
||||
switchItemsSelectionMode(false);
|
||||
ui->stackedWidget->setCurrentIndex(0);
|
||||
|
@ -276,7 +278,7 @@ void todo::switchViewHome() {
|
|||
currentView = currentView::home;
|
||||
}
|
||||
|
||||
void todo::on_selectItemsModeBtn_clicked()
|
||||
void TodoAppWidget::on_selectItemsModeBtn_clicked()
|
||||
{
|
||||
if(selectItemsMode == false) {
|
||||
switchItemsSelectionMode(true);
|
||||
|
@ -286,7 +288,7 @@ void todo::on_selectItemsModeBtn_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
void todo::switchItemsSelectionMode(bool selectionMode) {
|
||||
void TodoAppWidget::switchItemsSelectionMode(bool selectionMode) {
|
||||
if(selectionMode == true) {
|
||||
log("Entering selection mode", className);
|
||||
saveCurrentList();
|
||||
|
@ -308,7 +310,7 @@ void todo::switchItemsSelectionMode(bool selectionMode) {
|
|||
QTimer::singleShot(500, this, SLOT(resize()));
|
||||
}
|
||||
|
||||
void todo::on_deleteItemBtn_clicked()
|
||||
void TodoAppWidget::on_deleteItemBtn_clicked()
|
||||
{
|
||||
QList<int> itemsToDelete;
|
||||
for(int i = 1; i < ui->itemsListWidget->count() + 1; i++) {
|
||||
|
@ -350,7 +352,7 @@ void todo::on_deleteItemBtn_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
void todo::on_selectAllItemsBtn_clicked()
|
||||
void TodoAppWidget::on_selectAllItemsBtn_clicked()
|
||||
{
|
||||
int range = ui->itemsListWidget->count();
|
||||
for(int i = 0; i < range; i++) {
|
||||
|
@ -358,15 +360,15 @@ void todo::on_selectAllItemsBtn_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
void todo::setDefaultHomePageStatusText() {
|
||||
void TodoAppWidget::setDefaultHomePageStatusText() {
|
||||
ui->statusLabel->setText("Select or create a new list");
|
||||
}
|
||||
|
||||
void todo::setDefaultListPageStatusText() {
|
||||
void TodoAppWidget::setDefaultListPageStatusText() {
|
||||
ui->statusLabel->setText("Select or create a new item");
|
||||
}
|
||||
|
||||
void todo::on_deselectAllItemsBtn_clicked()
|
||||
void TodoAppWidget::on_deselectAllItemsBtn_clicked()
|
||||
{
|
||||
int range = ui->itemsListWidget->count();
|
||||
for(int i = 0; i < range; i++) {
|
||||
|
@ -374,13 +376,13 @@ void todo::on_deselectAllItemsBtn_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
void todo::on_saveCurrentListViewBtn_clicked()
|
||||
void TodoAppWidget::on_saveCurrentListViewBtn_clicked()
|
||||
{
|
||||
saveCurrentList();
|
||||
switchItemsSelectionMode(false);
|
||||
}
|
||||
|
||||
void todo::on_editItemBtn_clicked()
|
||||
void TodoAppWidget::on_editItemBtn_clicked()
|
||||
{
|
||||
QList<int> selectedItems;
|
||||
for(int i = 1; i < ui->itemsListWidget->count() + 1; i++) {
|
||||
|
@ -395,8 +397,8 @@ void todo::on_editItemBtn_clicked()
|
|||
global::keyboard::keyboardText = ui->itemsListWidget->item(currentEditItemIndex - 1)->text();
|
||||
virtualkeyboard * virtualKeyboardWidget = new virtualkeyboard(this);
|
||||
virtualKeyboardWidget->setAttribute(Qt::WA_DeleteOnClose);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::enterBtnPressed, this, &todo::editItemWrapper);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::closeBtnPressed, this, &todo::setDefaultListPageStatusText);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::enterBtnPressed, this, &TodoAppWidget::editItemWrapper);
|
||||
QObject::connect(virtualKeyboardWidget, &virtualkeyboard::closeBtnPressed, this, &TodoAppWidget::setDefaultListPageStatusText);
|
||||
ui->statusLabel->setText("Enter the edited item's name");
|
||||
virtualKeyboardWidget->show();
|
||||
}
|
||||
|
@ -410,7 +412,7 @@ void todo::on_editItemBtn_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
void todo::editItem(int index, QString replacement) {
|
||||
void TodoAppWidget::editItem(int index, QString replacement) {
|
||||
QJsonDocument document = readTodoDatabase();
|
||||
QJsonObject object = document.object();
|
||||
QJsonArray mainArray = object["List"].toArray();
|
||||
|
@ -430,17 +432,17 @@ void todo::editItem(int index, QString replacement) {
|
|||
setupList(listArray.at(0).toString());
|
||||
}
|
||||
|
||||
void todo::editItemWrapper(QString replacement) {
|
||||
void TodoAppWidget::editItemWrapper(QString replacement) {
|
||||
editItem(currentEditItemIndex, replacement);
|
||||
currentEditItemIndex = NULL;
|
||||
}
|
||||
|
||||
void todo::resize() {
|
||||
void TodoAppWidget::resize() {
|
||||
this->setGeometry(QRect(QPoint(0,0), qApp->primaryScreen()->geometry().size()));
|
||||
this->repaint();
|
||||
}
|
||||
|
||||
void todo::on_itemsListWidget_itemClicked(QListWidgetItem *item)
|
||||
void TodoAppWidget::on_itemsListWidget_itemClicked(QListWidgetItem *item)
|
||||
{
|
||||
if(item->checkState() == Qt::Unchecked) {
|
||||
item->setCheckState(Qt::Checked);
|
|
@ -8,17 +8,17 @@
|
|||
#include "virtualkeyboard.h"
|
||||
|
||||
namespace Ui {
|
||||
class todo;
|
||||
class TodoAppWidget;
|
||||
}
|
||||
|
||||
class todo : public QWidget
|
||||
class TodoAppWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit todo(QWidget *parent = nullptr);
|
||||
~todo();
|
||||
explicit TodoAppWidget(QWidget *parent = nullptr);
|
||||
~TodoAppWidget();
|
||||
enum class currentView {
|
||||
home,
|
||||
list
|
||||
|
@ -61,7 +61,7 @@ signals:
|
|||
void showToast(QString messageToDisplay);
|
||||
|
||||
private:
|
||||
Ui::todo *ui;
|
||||
Ui::TodoAppWidget *ui;
|
||||
virtualkeyboard * virtualKeyboardWidget;
|
||||
};
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>todo</class>
|
||||
<widget class="QWidget" name="todo">
|
||||
<class>TodoAppWidget</class>
|
||||
<widget class="QWidget" name="TodoAppWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
|
@ -3,9 +3,9 @@
|
|||
#include "mainwindow.h"
|
||||
#include "generaldialog.h"
|
||||
|
||||
userapps::userapps(QWidget *parent) :
|
||||
UserAppsWidget::UserAppsWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::userapps)
|
||||
ui(new Ui::UserAppsWidget)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
ui->launchBtn->setProperty("type", "borderless");
|
||||
|
@ -21,12 +21,12 @@ userapps::userapps(QWidget *parent) :
|
|||
ui->statusBtn->setStyleSheet("background: lightGrey; font-size: 9pt; padding: 8px");
|
||||
}
|
||||
|
||||
userapps::~userapps()
|
||||
UserAppsWidget::~UserAppsWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void userapps::provideInfo(QJsonObject jsonInfo)
|
||||
void UserAppsWidget::provideInfo(QJsonObject jsonInfo)
|
||||
{
|
||||
QString name = jsonInfo["Name"].toString();
|
||||
appName = name; // It is for searching for json entry while disabling / enabling
|
||||
|
@ -67,7 +67,7 @@ void userapps::provideInfo(QJsonObject jsonInfo)
|
|||
}
|
||||
|
||||
// This function is needed when we dont want to repaint all widgets, but only change the the page (when no changes to the main JSON file were applied)
|
||||
void userapps::changePageEnabling(bool SecondPage)
|
||||
void UserAppsWidget::changePageEnabling(bool SecondPage)
|
||||
{
|
||||
if(SecondPage == true){
|
||||
ui->stackedWidget->setCurrentIndex(1);
|
||||
|
@ -77,7 +77,7 @@ void userapps::changePageEnabling(bool SecondPage)
|
|||
}
|
||||
}
|
||||
|
||||
void userapps::on_infoBtn_clicked()
|
||||
void UserAppsWidget::on_infoBtn_clicked()
|
||||
{
|
||||
log("Launching user application information dialog", className);
|
||||
// https://stackoverflow.com/questions/28181627/how-to-convert-a-qjsonobject-to-qstring
|
||||
|
@ -85,12 +85,12 @@ void userapps::on_infoBtn_clicked()
|
|||
global::text::textBrowserContents = jsonStringParsed;
|
||||
|
||||
global::userApps::appInfoDialog = true;
|
||||
generalDialogWindow = new generalDialog();
|
||||
generalDialogWindow = new GeneralDialog();
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
generalDialogWindow->show();
|
||||
}
|
||||
|
||||
void userapps::on_statusBtn_clicked()
|
||||
void UserAppsWidget::on_statusBtn_clicked()
|
||||
{
|
||||
ui->statusBtn->setEnabled(false);
|
||||
|
||||
|
@ -129,22 +129,22 @@ void userapps::on_statusBtn_clicked()
|
|||
ui->statusBtn->setEnabled(true);
|
||||
}
|
||||
|
||||
void userapps::updateJsonFileSlotUA(QJsonDocument jsonDocumentProvided)
|
||||
void UserAppsWidget::updateJsonFileSlotUA(QJsonDocument jsonDocumentProvided)
|
||||
{
|
||||
jsonDocument = jsonDocumentProvided;
|
||||
}
|
||||
|
||||
void userapps::on_launchBtn_clicked()
|
||||
void UserAppsWidget::on_launchBtn_clicked()
|
||||
{
|
||||
// Some command to execute script or binary at "ExecPath"
|
||||
QJsonArray supportedDevices = jsonObject["SupportedDevices"].toArray();
|
||||
|
||||
// This will work even if we are looking for 'n306' and there is a device named 'n306b' because QJsonArray::contains() works that way
|
||||
if(supportedDevices.contains("all") == false and supportedDevices.contains(global::deviceID.trimmed()) == false) {
|
||||
if(supportedDevices.contains("all") == false and supportedDevices.contains(Device::getSingleton()->getID()) == false) {
|
||||
log("Warning: User application '" + appName + "' does not support this device", className);
|
||||
global::userApps::appCompatibilityDialog = true;
|
||||
global::userApps::appCompatibilityText = "<font face='u001'>Your device is not compatible with this app.<br>Continue anyway</font><font face='Inter'>?</font>";
|
||||
generalDialogWindow = new generalDialog();
|
||||
generalDialogWindow = new GeneralDialog();
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
|
||||
generalDialogWindow->exec();
|
||||
|
@ -173,7 +173,7 @@ void userapps::on_launchBtn_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
bool userapps::manageRequiredFeatures()
|
||||
bool UserAppsWidget::manageRequiredFeatures()
|
||||
{
|
||||
// This should be already set to 'true', but just in case
|
||||
global::userApps::appCompatibilityLastContinueStatus = true;
|
||||
|
@ -183,13 +183,11 @@ bool userapps::manageRequiredFeatures()
|
|||
int featureId = refJsonObject.toInt();
|
||||
// Wi-Fi connection required
|
||||
if(featureId == 0) {
|
||||
// Double 'if' conditions to avoid launching unnecesery testPing() in emu
|
||||
if(global::deviceID != "emu\n") {
|
||||
if(checkWifiState() != global::wifi::wifiState::configured) {
|
||||
global::userApps::appCompatibilityText = "<font face='u001'>This app needs a Wi-Fi connection, continue anyway</font><font face='Inter'>?</font>";
|
||||
launchDialog = true;
|
||||
}
|
||||
if(checkWifiState() != global::wifi::wifiState::configured) {
|
||||
global::userApps::appCompatibilityText = "<font face='u001'>This app needs a Wi-Fi connection, continue anyway</font><font face='Inter'>?</font>";
|
||||
launchDialog = true;
|
||||
}
|
||||
|
||||
}
|
||||
// Rooted kernel required
|
||||
if(featureId == 1) {
|
||||
|
@ -202,7 +200,7 @@ bool userapps::manageRequiredFeatures()
|
|||
|
||||
if(launchDialog == true) {
|
||||
global::userApps::appCompatibilityDialog = true;
|
||||
generalDialogWindow = new generalDialog();
|
||||
generalDialogWindow = new GeneralDialog();
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
generalDialogWindow->exec();
|
||||
}
|
||||
|
@ -214,7 +212,7 @@ bool userapps::manageRequiredFeatures()
|
|||
return true;
|
||||
}
|
||||
|
||||
QString userapps::parseJsonShow(QJsonObject json)
|
||||
QString UserAppsWidget::parseJsonShow(QJsonObject json)
|
||||
{
|
||||
QString mainString;
|
||||
foreach(const QString& key, json.keys()) {
|
|
@ -13,17 +13,17 @@
|
|||
#include <QFile>
|
||||
|
||||
namespace Ui {
|
||||
class userapps;
|
||||
class UserAppsWidget;
|
||||
}
|
||||
|
||||
class userapps : public QWidget
|
||||
class UserAppsWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit userapps(QWidget * parent = nullptr);
|
||||
~userapps();
|
||||
explicit UserAppsWidget(QWidget * parent = nullptr);
|
||||
~UserAppsWidget();
|
||||
QJsonDocument jsonDocument; // TODO: Optimize for RAM usage
|
||||
QJsonObject jsonObject; // Needed for 'App info' button
|
||||
QString jsonFilePath;
|
||||
|
@ -46,8 +46,8 @@ private slots:
|
|||
void on_launchBtn_clicked();
|
||||
|
||||
private:
|
||||
Ui::userapps * ui;
|
||||
generalDialog * generalDialogWindow;
|
||||
Ui::UserAppsWidget * ui;
|
||||
GeneralDialog * generalDialogWindow;
|
||||
|
||||
QDir appDir;
|
||||
QFile execPath;
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>userapps</class>
|
||||
<widget class="QWidget" name="userapps">
|
||||
<class>UserAppsWidget</class>
|
||||
<widget class="QWidget" name="UserAppsWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
360
src/ui/crypto/encryptionmanager.cpp
Normal file
360
src/ui/crypto/encryptionmanager.cpp
Normal file
|
@ -0,0 +1,360 @@
|
|||
#include "encryptionmanager.h"
|
||||
#include "ui.h"
|
||||
#include "ui_encryptionmanager.h"
|
||||
|
||||
#include "functions.h"
|
||||
#include "usbmsSplash.h"
|
||||
#include <QDateTime>
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QFile>
|
||||
#include <QMessageBox>
|
||||
#include <QScreen>
|
||||
#include <QTimer>
|
||||
|
||||
CryptoManagerWidget::CryptoManagerWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::CryptoManagerWidget) {
|
||||
ui->setupUi(this);
|
||||
ui->descriptionLabel->setFont(QFont("u001"));
|
||||
ui->successDescriptionLabel->setFont(QFont("u001"));
|
||||
ui->failureDescriptionLabel->setFont(QFont("u001"));
|
||||
ui->warningDescriptionLabel->setFont(QFont("u001"));
|
||||
|
||||
// Stylesheet
|
||||
UI::applyStyle(*this, "eink");
|
||||
|
||||
ui->encryptionSetupLabel->setStyleSheet("font-size: 15pt; font-weight: bold");
|
||||
ui->descriptionLabel->setStyleSheet("font-size: 10pt");
|
||||
ui->successLabel->setStyleSheet("font-size: 15pt; font-weight: bold");
|
||||
ui->successDescriptionLabel->setStyleSheet("font-size: 10pt");
|
||||
ui->failureLabel->setStyleSheet("font-size: 15pt; font-weight: bold");
|
||||
ui->failureDescriptionLabel->setStyleSheet("font-size: 10pt");
|
||||
ui->setupContinueBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->setupAbortBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->exitSuccessBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->failureContinueBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->acceptBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->usbmsBtn->setStyleSheet("background: lightGrey; border: 3px solid black; color: black; padding: 10px; outline: none; font-size: 10pt; font-weight: bold; border-radius: 10px");
|
||||
ui->warningLabel->setStyleSheet("font-size: 15pt; font-weight: bold");
|
||||
ui->warningDescriptionLabel->setStyleSheet("font-size: 10pt");
|
||||
|
||||
// Getting the screen's size
|
||||
float sW = QGuiApplication::screens()[0]->size().width();
|
||||
float sH = QGuiApplication::screens()[0]->size().height();
|
||||
float stdIconWidth;
|
||||
float stdIconHeight;
|
||||
{
|
||||
stdIconWidth = sW / 1.50;
|
||||
stdIconHeight = sH / 1.50;
|
||||
QPixmap pixmap(":/resources/encryption.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->encryptionImageLabel->setPixmap(scaledPixmap);
|
||||
}
|
||||
{
|
||||
stdIconWidth = sW / 1.65;
|
||||
stdIconHeight = sH / 1.65;
|
||||
QPixmap pixmap(":/resources/check-display.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->checkImageLabel->setPixmap(scaledPixmap);
|
||||
}
|
||||
{
|
||||
stdIconWidth = sW / 1.65;
|
||||
stdIconHeight = sH / 1.65;
|
||||
QPixmap pixmap(":/resources/error.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->failureImageLabel->setPixmap(scaledPixmap);
|
||||
}
|
||||
{
|
||||
stdIconWidth = sW / 1.50;
|
||||
stdIconHeight = sH / 1.50;
|
||||
QPixmap pixmap(":/resources/alert-triangle.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->warningImageLabel->setPixmap(scaledPixmap);
|
||||
}
|
||||
|
||||
hourglassAnimationWidgetWindow = new hourglassAnimationWidget();
|
||||
ui->hourglassWidget->insertWidget(0, hourglassAnimationWidgetWindow);
|
||||
ui->hourglassWidget->setCurrentIndex(0);
|
||||
|
||||
setDefaultWorkDir();
|
||||
if (checkconfig(".config/18-encrypted_storage/initial_setup_done") == true or checkconfig("/external_root/run/encfs_repack") == true) {
|
||||
ui->activityWidget->hide();
|
||||
if (checkconfig("/external_root/run/encfs_repack") == false) {
|
||||
setupPassphraseDialogMode = 1;
|
||||
} else {
|
||||
setupPassphraseDialogMode = 2;
|
||||
}
|
||||
QTimer::singleShot(500, this, SLOT(setupPassphraseDialog()));
|
||||
} else {
|
||||
QDir dir("/mnt/onboard/onboard/encfs-dropbox");
|
||||
if (dir.isEmpty()) {
|
||||
ui->activityWidget->setCurrentIndex(4);
|
||||
mkEncfsDirs();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CryptoManagerWidget::~CryptoManagerWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::on_setupContinueBtn_clicked() {
|
||||
setupPassphraseDialogMode = 0;
|
||||
setupPassphraseDialog();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::setupPassphraseDialog() {
|
||||
/*
|
||||
* setupPassphraseDialogMode can be:
|
||||
* 0: Initial setup
|
||||
* 1: Normal behavior
|
||||
* 2: Repack
|
||||
*/
|
||||
log("Showing passphrase dialog for mode " + QString::number(setupPassphraseDialogMode), className);
|
||||
ui->activityWidget->hide();
|
||||
this->setStyleSheet("background-color: black");
|
||||
global::keyboard::keyboardDialog = true;
|
||||
global::keyboard::encfsDialog = true;
|
||||
global::keyboard::keyboardText = "";
|
||||
generalDialogWindow = new GeneralDialog();
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(generalDialogWindow, SIGNAL(refreshScreen()), SLOT(refreshScreen()));
|
||||
if (setupPassphraseDialogMode == 0) {
|
||||
connect(generalDialogWindow, SIGNAL(destroyed(QObject *)), SLOT(setupEncryptedStorage()));
|
||||
} else if (setupPassphraseDialogMode == 1) {
|
||||
connect(generalDialogWindow, SIGNAL(destroyed(QObject *)), SLOT(unlockEncryptedStorage()));
|
||||
} else {
|
||||
connect(generalDialogWindow, SIGNAL(destroyed(QObject *)), SLOT(repackEncryptedStorage()));
|
||||
}
|
||||
connect(generalDialogWindow, SIGNAL(showToast(QString)), SLOT(showToast(QString)));
|
||||
generalDialogWindow->show();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::on_setupAbortBtn_clicked() {
|
||||
log("Aborting setup", className);
|
||||
setDefaultWorkDir();
|
||||
writeFile(".config/18-encrypted_storage/status", "false");
|
||||
quit_restart();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::quit_restart() {
|
||||
log("Restarting InkBox", className);
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::refreshScreen() {
|
||||
this->repaint();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::showToast(QString messageToDisplay) {
|
||||
global::toast::message = messageToDisplay;
|
||||
toastWindow = new toast(this);
|
||||
toastWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(toastWindow, SIGNAL(refreshScreen()), SLOT(refreshScreen()));
|
||||
toastWindow->show();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::setupEncryptedStorage() {
|
||||
log("Setting up encrypted storage", className);
|
||||
this->setStyleSheet("background-color: white");
|
||||
ui->activityWidget->show();
|
||||
if (global::encfs::cancelSetup == true) {
|
||||
global::encfs::cancelSetup = false;
|
||||
ui->activityWidget->setCurrentIndex(0);
|
||||
} else {
|
||||
mkEncfsDirs();
|
||||
QString bootstrapPassphrase = global::encfs::passphrase;
|
||||
global::encfs::passphrase = "";
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_create", "true");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_bootstrap_files_location", "/data/onboard/encfs-dropbox");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_bootstrap_archive_location", "/data/onboard/data.encfs");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_bootstrap_passphrase", bootstrapPassphrase);
|
||||
setDefaultWorkDir();
|
||||
writeFile(".config/18-encrypted_storage/storage_list", "/data/onboard/encfs-decrypted");
|
||||
writeFile("/opt/ibxd", "encfs_restart\n");
|
||||
bool exitStatus;
|
||||
ui->activityWidget->setCurrentIndex(3);
|
||||
QTimer *t = new QTimer(this);
|
||||
t->setInterval(1000);
|
||||
connect(t, &QTimer::timeout, [&]() {
|
||||
if (QFile::exists("/external_root/run/encrypted_storage_bootstrap_setup")) {
|
||||
exitStatus = checkconfig("/external_root/run/encrypted_storage_bootstrap_setup");
|
||||
QFile::remove("/external_root/run/encrypted_storage_bootstrap_setup");
|
||||
setupExitWidget(exitStatus);
|
||||
}
|
||||
});
|
||||
t->start();
|
||||
}
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::unlockEncryptedStorage() {
|
||||
log("Trying to unlock encrypted storage", className);
|
||||
if (global::encfs::cancelSetup == true) {
|
||||
global::encfs::cancelSetup = false;
|
||||
poweroff(true);
|
||||
qApp->quit();
|
||||
} else {
|
||||
this->setStyleSheet("background-color: white");
|
||||
ui->activityWidget->show();
|
||||
mkEncfsDirs();
|
||||
QString passphrase = global::encfs::passphrase;
|
||||
global::encfs::passphrase = "";
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_archive", "/data/onboard/data.encfs");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_mountpoint", "/data/onboard/encfs-decrypted");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_bindmount", "/kobo/mnt/onboard/onboard/encfs-decrypted");
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_passphrase", passphrase);
|
||||
writeFile("/opt/ibxd", "encfs_restart\n");
|
||||
bool exitStatus;
|
||||
|
||||
QString passphraseTriesStr = readFile("/inkbox/encryptedStoragePassphraseTries");
|
||||
if (passphraseTriesStr.isEmpty()) {
|
||||
passphraseTries = 0;
|
||||
} else {
|
||||
passphraseTries = passphraseTriesStr.toInt();
|
||||
passphraseTries++;
|
||||
}
|
||||
|
||||
ui->activityWidget->setCurrentIndex(3);
|
||||
QTimer *t = new QTimer(this);
|
||||
t->setInterval(1000);
|
||||
connect(t, &QTimer::timeout, [&]() {
|
||||
if (QFile::exists("/external_root/run/encfs_mounted")) {
|
||||
exitStatus = true;
|
||||
if (readFile("/external_root/run/encfs_mounted") != "true\n") {
|
||||
exitStatus = false;
|
||||
QFile::remove("/external_root/run/encfs_mounted");
|
||||
QString function = __func__;
|
||||
log(function + ": Invalid passphrase", className);
|
||||
if (setupMessageBoxRan == false) {
|
||||
int delay = 0;
|
||||
if (passphraseTries <= 3) {
|
||||
if (passphraseTries == 0) {
|
||||
writeFile("/inkbox/encryptedStoragePassphraseTries", "0");
|
||||
delay = 5000;
|
||||
} else if (passphraseTries == 1) {
|
||||
writeFile("/inkbox/encryptedStoragePassphraseTries", "1");
|
||||
delay = 10000;
|
||||
} else if (passphraseTries == 2) {
|
||||
writeFile("/inkbox/encryptedStoragePassphraseTries", "2");
|
||||
delay = 20000;
|
||||
} else if (passphraseTries >= 3) {
|
||||
writeFile("/inkbox/encryptedStoragePassphraseTries", "3");
|
||||
unsigned long currentEpoch = QDateTime::currentSecsSinceEpoch();
|
||||
currentEpoch += 86400;
|
||||
QString unlockTime_str = QString::number(currentEpoch);
|
||||
global::encfs::unlockTime = QDateTime::fromTime_t(currentEpoch).toString();
|
||||
global::encfs::lockdownMessage = "FATAL: 4 invalid passphrase tries, locking down device until " + global::encfs::unlockTime;
|
||||
writeFile("/external_root/boot/flags/ENCRYPT_LOCK", unlockTime_str + "\n");
|
||||
global::encfs::lockdown = true;
|
||||
setupMessageBoxRan = true;
|
||||
|
||||
alertWindow = new SplashAlertWidget();
|
||||
alertWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
alertWindow->showFullScreen();
|
||||
}
|
||||
|
||||
if (passphraseTries <= 2) {
|
||||
QTimer::singleShot(delay, this, SLOT(setupFailedAuthenticationMessageBox()));
|
||||
setupMessageBoxRan = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log("Unlocking successful", className);
|
||||
quit_restart();
|
||||
}
|
||||
}
|
||||
});
|
||||
t->start();
|
||||
}
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::mkEncfsDirs() {
|
||||
log("Creating encrypted storage directories", className);
|
||||
QDir encfsDir;
|
||||
QString encfsPath("/external_root/run/encfs");
|
||||
encfsDir.mkpath(encfsPath);
|
||||
QDir dumpDir;
|
||||
QString dumpPath("/mnt/onboard/onboard/encfs-dropbox");
|
||||
dumpDir.mkpath(dumpPath);
|
||||
QDir decDir;
|
||||
QString decPath("/mnt/onboard/onboard/encfs-decrypted");
|
||||
decDir.mkpath(decPath);
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::on_exitSuccessBtn_clicked() {
|
||||
setDefaultWorkDir();
|
||||
writeFile(".config/18-encrypted_storage/initial_setup_done", "true");
|
||||
quit_restart();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::setupExitWidget(bool exitStatus) {
|
||||
if (setupExitWidgetRan == false) {
|
||||
if (exitStatus == true) {
|
||||
ui->activityWidget->setCurrentIndex(1);
|
||||
} else {
|
||||
writeFile(".config/18-encrypted_storage/status", "false");
|
||||
ui->activityWidget->setCurrentIndex(2);
|
||||
}
|
||||
setupExitWidgetRan = true;
|
||||
}
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::on_failureContinueBtn_clicked() {
|
||||
setDefaultWorkDir();
|
||||
writeFile(".config/18-encrypted_storage/initial_setup_done", "true");
|
||||
quit_restart();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::setupFailedAuthenticationMessageBox() {
|
||||
log("Showing 'Authentication failed' message box", className);
|
||||
ui->activityWidget->hide();
|
||||
QMessageBox::critical(this, tr("Invalid argument"), tr("<font face='u001'>Invalid passphrase. Please try again.</font>"));
|
||||
quit_restart();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::on_acceptBtn_clicked() {
|
||||
writeFile(".config/18-encrypted_storage/status", "false");
|
||||
quit_restart();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::on_usbmsBtn_clicked() {
|
||||
log("Showing USBMS splash", className);
|
||||
global::usbms::launchUsbms = true;
|
||||
usbmsWindow = new USBMSSplashWidget();
|
||||
usbmsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
usbmsWindow->setGeometry(QRect(QPoint(0, 0), screen()->geometry().size()));
|
||||
usbmsWindow->show();
|
||||
}
|
||||
|
||||
void CryptoManagerWidget::repackEncryptedStorage() {
|
||||
log("Repacking encrypted storage", className);
|
||||
if (global::encfs::cancelSetup == true) {
|
||||
global::encfs::cancelSetup = false;
|
||||
quit_restart();
|
||||
} else {
|
||||
this->setStyleSheet("background-color: white");
|
||||
ui->activityWidget->show();
|
||||
mkEncfsDirs();
|
||||
QString passphrase = global::encfs::passphrase;
|
||||
global::encfs::passphrase = "";
|
||||
writeFile("/external_root/run/encfs/encrypted_storage_repack_passphrase", passphrase);
|
||||
QFile::remove("/external_root/run/openrc/started/encfs");
|
||||
writeFile("/opt/ibxd", "encfs_restart\n");
|
||||
bool exitStatus;
|
||||
ui->activityWidget->setCurrentIndex(3);
|
||||
QTimer *t = new QTimer(this);
|
||||
t->setInterval(1000);
|
||||
connect(t, &QTimer::timeout, [&]() {
|
||||
if (QFile::exists("/external_root/run/encfs_repack_status")) {
|
||||
exitStatus = checkconfig("/external_root/run/encfs_repack_status");
|
||||
QFile::remove("/external_root/run/encfs_repack_status");
|
||||
setupExitWidget(exitStatus);
|
||||
}
|
||||
});
|
||||
t->start();
|
||||
}
|
||||
}
|
|
@ -5,20 +5,20 @@
|
|||
#include "generaldialog.h"
|
||||
#include "toast.h"
|
||||
#include "hourglassanimationwidget.h"
|
||||
#include "alert.h"
|
||||
#include "splashAlert.h"
|
||||
|
||||
namespace Ui {
|
||||
class encryptionManager;
|
||||
class CryptoManagerWidget;
|
||||
}
|
||||
|
||||
class encryptionManager : public QWidget
|
||||
class CryptoManagerWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit encryptionManager(QWidget *parent = nullptr);
|
||||
~encryptionManager();
|
||||
explicit CryptoManagerWidget(QWidget *parent = nullptr);
|
||||
~CryptoManagerWidget();
|
||||
bool setupExitWidgetRan = false;
|
||||
int setupPassphraseDialogMode;
|
||||
bool setupMessageBoxRan = false;
|
||||
|
@ -43,12 +43,12 @@ private slots:
|
|||
void repackEncryptedStorage();
|
||||
|
||||
private:
|
||||
Ui::encryptionManager *ui;
|
||||
generalDialog * generalDialogWindow;
|
||||
Ui::CryptoManagerWidget *ui;
|
||||
GeneralDialog * generalDialogWindow;
|
||||
toast * toastWindow;
|
||||
hourglassAnimationWidget * hourglassAnimationWidgetWindow;
|
||||
alert * alertWindow;
|
||||
usbmsSplash *usbmsWindow;
|
||||
SplashAlertWidget * alertWindow;
|
||||
USBMSSplashWidget *usbmsWindow;
|
||||
};
|
||||
|
||||
#endif // ENCRYPTIONMANAGER_H
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>encryptionManager</class>
|
||||
<widget class="QWidget" name="encryptionManager">
|
||||
<class>CryptoManagerWidget</class>
|
||||
<widget class="QWidget" name="CryptoManagerWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
124
src/ui/eink.qrc
Normal file
124
src/ui/eink.qrc
Normal file
|
@ -0,0 +1,124 @@
|
|||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>../resources/checkbox-checked.png</file>
|
||||
<file>../resources/checkbox-unchecked.png</file>
|
||||
<file>../resources/align-center.png</file>
|
||||
<file>../resources/align-justify.png</file>
|
||||
<file>../resources/align-left.png</file>
|
||||
<file>../resources/align-right.png</file>
|
||||
<file>../resources/chesterton.jpg</file>
|
||||
<file>../resources/alcott.jpg</file>
|
||||
<file>../resources/davies.jpg</file>
|
||||
<file>../resources/king.jpg</file>
|
||||
<file>../resources/star.png</file>
|
||||
<file>../resources/starred_star.png</file>
|
||||
<file>../resources/close.png</file>
|
||||
<file>../resources/chevron-left.png</file>
|
||||
<file>../resources/chevron-right.png</file>
|
||||
<file>../resources/chevron-down.png</file>
|
||||
<file>../resources/chevron-up.png</file>
|
||||
<file>../resources/christie.png</file>
|
||||
<file>../resources/exit.png</file>
|
||||
<file>../resources/usbms.png</file>
|
||||
<file>../resources/settings.png</file>
|
||||
<file>../resources/search.png</file>
|
||||
<file>../resources/power.png</file>
|
||||
<file>../resources/book.png</file>
|
||||
<file>../resources/apps.png</file>
|
||||
<file>../resources/battery_half.png</file>
|
||||
<file>../resources/battery_full.png</file>
|
||||
<file>../resources/battery_empty.png</file>
|
||||
<file>../resources/battery_charging.png</file>
|
||||
<file>../resources/alert.png</file>
|
||||
<file>../resources/eink-dark.qss</file>
|
||||
<file>../resources/frontlight.png</file>
|
||||
<file>../resources/fonts/CrimsonPro-Bold.ttf</file>
|
||||
<file>../resources/fonts/CrimsonPro-Italic.ttf</file>
|
||||
<file>../resources/fonts/CrimsonPro-Regular.ttf</file>
|
||||
<file>../resources/check.png</file>
|
||||
<file>../resources/minus.png</file>
|
||||
<file>../resources/plus.png</file>
|
||||
<file>../resources/battery_alert.png</file>
|
||||
<file>../resources/apps-inverted.png</file>
|
||||
<file>../resources/home.png</file>
|
||||
<file>../resources/settings-inverted.png</file>
|
||||
<file>../resources/kobox-icon.png</file>
|
||||
<file>../resources/X11.png</file>
|
||||
<file>../resources/info.png</file>
|
||||
<file>../resources/nightmode-empty.png</file>
|
||||
<file>../resources/nightmode-full.png</file>
|
||||
<file>../resources/backspace.png</file>
|
||||
<file>../resources/x-circle.png</file>
|
||||
<file>../resources/fonts/Bitter-MediumItalic.ttf</file>
|
||||
<file>../resources/fonts/Bitter-Medium.ttf</file>
|
||||
<file>../resources/fonts/Bitter-Bold.ttf</file>
|
||||
<file>../resources/fonts/Bitter-BoldItalic.ttf</file>
|
||||
<file>../resources/fonts/CrimsonPro-BoldItalic.ttf</file>
|
||||
<file>../resources/fonts/IbarraRealNova-MediumItalic.ttf</file>
|
||||
<file>../resources/fonts/IbarraRealNova-Medium.ttf</file>
|
||||
<file>../resources/fonts/IbarraRealNova-BoldItalic.ttf</file>
|
||||
<file>../resources/fonts/IbarraRealNova-Bold.ttf</file>
|
||||
<file>../resources/wifi-connected.png</file>
|
||||
<file>../resources/wifi-off.png</file>
|
||||
<file>../resources/wifi-standby.png</file>
|
||||
<file>../resources/zoom-in.png</file>
|
||||
<file>../resources/zoom-out.png</file>
|
||||
<file>../resources/encryption.png</file>
|
||||
<file>../resources/check-display.png</file>
|
||||
<file>../resources/hourglass-bottom.png</file>
|
||||
<file>../resources/hourglass-top.png</file>
|
||||
<file>../resources/error.png</file>
|
||||
<file>../resources/alert-triangle.png</file>
|
||||
<file>../resources/online-library.png</file>
|
||||
<file>../resources/online-library-inverted.png</file>
|
||||
<file>../resources/cover_unavailable.png</file>
|
||||
<file>../resources/clock-inverted.png</file>
|
||||
<file>../resources/clock.png</file>
|
||||
<file>../resources/eink-square-encfs.qss</file>
|
||||
<file>../resources/tzlist</file>
|
||||
<file>../resources/edit.png</file>
|
||||
<file>../resources/save.png</file>
|
||||
<file>../resources/book_inverted.png</file>
|
||||
<file>../resources/arrow-left.png</file>
|
||||
<file>../resources/arrow-right.png</file>
|
||||
<file>../resources/file-text.png</file>
|
||||
<file>../resources/pin.png</file>
|
||||
<file>../resources/highlight.png</file>
|
||||
<file>../resources/unhighlight.png</file>
|
||||
<file>../resources/view-highlights.png</file>
|
||||
<file>../resources/stop.png</file>
|
||||
<file>../resources/refresh.png</file>
|
||||
<file>../resources/hide.png</file>
|
||||
<file>../resources/show.png</file>
|
||||
<file>../resources/christie.jpg</file>
|
||||
<file>../resources/encryption-small.png</file>
|
||||
<file>../resources/lock.png</file>
|
||||
<file>../resources/public.png</file>
|
||||
<file>../resources/wifi-0.png</file>
|
||||
<file>../resources/wifi-25.png</file>
|
||||
<file>../resources/wifi-50.png</file>
|
||||
<file>../resources/wifi-75.png</file>
|
||||
<file>../resources/wifi-100.png</file>
|
||||
<file>../resources/log.png</file>
|
||||
<file>../resources/new.png</file>
|
||||
<file>../resources/checkbox-unchecked-small.png</file>
|
||||
<file>../resources/checkbox-checked-small.png</file>
|
||||
<file>../resources/checkbox-x-small.png</file>
|
||||
<file>../resources/checkbox-x.png</file>
|
||||
<file>../resources/folder.png</file>
|
||||
<file>../resources/question-mark.png</file>
|
||||
<file>../resources/refresh-small.png</file>
|
||||
<file>../resources/checkbox-indeterminate.png</file>
|
||||
<file>../resources/egg/0.jpg</file>
|
||||
<file>../resources/egg/1.jpg</file>
|
||||
<file>../resources/music-note.png</file>
|
||||
<file>../resources/music-library.png</file>
|
||||
<file>../resources/next.png</file>
|
||||
<file>../resources/music-queue.png</file>
|
||||
<file>../resources/play.png</file>
|
||||
<file>../resources/previous.png</file>
|
||||
<file>../resources/pause.png</file>
|
||||
<file>../resources/clean.png</file>
|
||||
<file>../resources/usbms-inverted.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
|
@ -1,36 +1,52 @@
|
|||
#include "homepagewidget.h"
|
||||
#include "ui_homepagewidget.h"
|
||||
#include "device.h"
|
||||
|
||||
#include <QScreen>
|
||||
|
||||
#include "functions.h"
|
||||
|
||||
homePageWidget::homePageWidget(QWidget *parent) :
|
||||
HomePageWidget::HomePageWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::homePageWidget)
|
||||
ui(new Ui::HomePageWidget)
|
||||
{
|
||||
Device * device = Device::getSingleton();
|
||||
Device::ScreenSize screenSize = device->getScreenSize();
|
||||
|
||||
ui->setupUi(this);
|
||||
|
||||
// Getting the screen's size
|
||||
sW = QGuiApplication::screens()[0]->size().width();
|
||||
sH = QGuiApplication::screens()[0]->size().height();
|
||||
|
||||
if(global::deviceID == "n705\n") {
|
||||
|
||||
if(screenSize == Device::ScreenSize::SMALL) {
|
||||
stdIconWidth = sW / 23;
|
||||
stdIconHeight = sH / 23;
|
||||
}
|
||||
else if(global::deviceID == "n905\n" or global::deviceID == "kt\n") {
|
||||
stdIconWidth = sW / 25;
|
||||
stdIconHeight = sH / 25;
|
||||
}
|
||||
else if(global::deviceID == "n613\n" or global::deviceID == "n236\n" or global::deviceID == "n437\n" or global::deviceID == "n306\n" or global::deviceID == "n249\n" or global::deviceID == "emu\n") {
|
||||
bookTitleTruncateThreshold = 20;
|
||||
stdIconWidthDivider = 8;
|
||||
stdIconHeightDivider = 8;
|
||||
} else if(screenSize == Device::ScreenSize::MEDIUM) {
|
||||
stdIconWidth = sW / 23.5;
|
||||
stdIconHeight = sH / 23.5;
|
||||
}
|
||||
else {
|
||||
bookTitleTruncateThreshold = 25;
|
||||
stdIconWidthDivider = 7;
|
||||
stdIconHeightDivider = 7;
|
||||
} else if(screenSize == Device::ScreenSize::LARGE) {
|
||||
stdIconWidth = sW / 24;
|
||||
stdIconHeight = sH / 24;
|
||||
bookTitleTruncateThreshold = 25;
|
||||
stdIconWidthDivider = 6.5;
|
||||
stdIconHeightDivider = 6.5;
|
||||
} else if(screenSize == Device::ScreenSize::VERY_LARGE) {
|
||||
stdIconWidth = sW / 25;
|
||||
stdIconHeight = sH / 25;
|
||||
bookTitleTruncateThreshold = 35;
|
||||
stdIconWidthDivider = 6;
|
||||
stdIconHeightDivider = 6;
|
||||
}
|
||||
|
||||
|
||||
ui->recentBooksIconLabel->setPixmap(QPixmap(":/resources/file-text.png").scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||
ui->pinnedBooksIconLabel->setPixmap(QPixmap(":/resources/pin.png").scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||
|
||||
|
@ -43,46 +59,8 @@ homePageWidget::homePageWidget(QWidget *parent) :
|
|||
pinnedBooksBtnArray.resize(global::homePageWidget::pinnedBooksNumber);
|
||||
pinnedBooksTitleArray.resize(global::homePageWidget::pinnedBooksNumber);
|
||||
|
||||
if(global::deviceID == "n705\n") {
|
||||
bookTitleTruncateThreshold = 20;
|
||||
}
|
||||
else if(global::deviceID == "n873\n") {
|
||||
bookTitleTruncateThreshold = 35;
|
||||
}
|
||||
else {
|
||||
bookTitleTruncateThreshold = 25;
|
||||
}
|
||||
|
||||
if(global::deviceID == "n705\n" or global::deviceID == "n905\n" or global::deviceID == "kt\n") {
|
||||
stdIconWidthDivider = 8;
|
||||
stdIconHeightDivider = 8;
|
||||
stdIconWidth = sW / stdIconWidthDivider;
|
||||
stdIconHeight = sH / stdIconHeightDivider;
|
||||
}
|
||||
else if(global::deviceID == "n613\n" or global::deviceID == "n236\n" or global::deviceID == "n306\n" or global::deviceID == "emu\n") {
|
||||
stdIconWidthDivider = 7;
|
||||
stdIconHeightDivider = 7;
|
||||
stdIconWidth = sW / stdIconWidthDivider;
|
||||
stdIconHeight = sH / stdIconHeightDivider;
|
||||
}
|
||||
else if(global::deviceID == "n437\n" or global::deviceID == "n249\n") {
|
||||
stdIconWidthDivider = 6.5;
|
||||
stdIconHeightDivider = 6.5;
|
||||
stdIconWidth = sW / stdIconWidthDivider;
|
||||
stdIconHeight = sH / stdIconHeightDivider;
|
||||
}
|
||||
else if(global::deviceID == "n873\n") {
|
||||
stdIconWidthDivider = 6;
|
||||
stdIconHeightDivider = 6;
|
||||
stdIconWidth = sW / stdIconWidthDivider;
|
||||
stdIconHeight = sH / stdIconHeightDivider;
|
||||
}
|
||||
else {
|
||||
stdIconWidthDivider = 8;
|
||||
stdIconHeightDivider = 8;
|
||||
stdIconWidth = sW / stdIconWidthDivider;
|
||||
stdIconHeight = sH / stdIconHeightDivider;
|
||||
}
|
||||
stdIconWidth = sW / stdIconWidthDivider;
|
||||
stdIconHeight = sH / stdIconHeightDivider;
|
||||
|
||||
if(!QFile::exists(global::localLibrary::databasePath)) {
|
||||
global::toast::modalToast = true;
|
||||
|
@ -95,12 +73,12 @@ homePageWidget::homePageWidget(QWidget *parent) :
|
|||
}
|
||||
}
|
||||
|
||||
homePageWidget::~homePageWidget()
|
||||
HomePageWidget::~HomePageWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void homePageWidget::openBook(QString bookPath) {
|
||||
void HomePageWidget::openBook(QString bookPath) {
|
||||
if(!bookPath.isEmpty()) {
|
||||
emit openBookSignal(bookPath, false);
|
||||
}
|
||||
|
@ -109,11 +87,11 @@ void homePageWidget::openBook(QString bookPath) {
|
|||
}
|
||||
}
|
||||
|
||||
void homePageWidget::refreshScreenNative() {
|
||||
void HomePageWidget::refreshScreenNative() {
|
||||
emit refreshScreen();
|
||||
}
|
||||
|
||||
void homePageWidget::setupDisplay(bool databaseGenerated) {
|
||||
void HomePageWidget::setupDisplay(bool databaseGenerated) {
|
||||
if(databaseGenerated == true) {
|
||||
toastWindow->close();
|
||||
}
|
||||
|
@ -173,8 +151,8 @@ void homePageWidget::setupDisplay(bool databaseGenerated) {
|
|||
verticalLayoutArray[i] = new QVBoxLayout();
|
||||
|
||||
// Book icon button
|
||||
QObject::connect(bookBtnArray[i], &QClickableLabel::bookPath, this, &homePageWidget::openBook);
|
||||
QObject::connect(bookBtnArray[i], &QClickableLabel::longPressString, this, &homePageWidget::openBookOptionsDialog);
|
||||
QObject::connect(bookBtnArray[i], &QClickableLabel::bookPath, this, &HomePageWidget::openBook);
|
||||
QObject::connect(bookBtnArray[i], &QClickableLabel::longPressString, this, &HomePageWidget::openBookOptionsDialog);
|
||||
bookBtnArray[i]->setAlignment(Qt::AlignCenter);
|
||||
bookBtnArray[i]->setFont(QFont("u001"));
|
||||
bookBtnArray[i]->setStyleSheet("color: black; background-color: white; border-radius: 10px; padding: 10px");
|
||||
|
@ -277,8 +255,8 @@ void homePageWidget::setupDisplay(bool databaseGenerated) {
|
|||
pinnedBooksVerticalLayoutArray[i] = new QVBoxLayout();
|
||||
|
||||
// Book icon button
|
||||
QObject::connect(pinnedBooksBtnArray[i], &QClickableLabel::bookPath, this, &homePageWidget::openBook);
|
||||
QObject::connect(pinnedBooksBtnArray[i], &QClickableLabel::longPressString, this, &homePageWidget::openBookOptionsDialog);
|
||||
QObject::connect(pinnedBooksBtnArray[i], &QClickableLabel::bookPath, this, &HomePageWidget::openBook);
|
||||
QObject::connect(pinnedBooksBtnArray[i], &QClickableLabel::longPressString, this, &HomePageWidget::openBookOptionsDialog);
|
||||
pinnedBooksBtnArray[i]->setAlignment(Qt::AlignCenter);
|
||||
pinnedBooksBtnArray[i]->setFont(QFont("u001"));
|
||||
pinnedBooksBtnArray[i]->setStyleSheet("color: black; background-color: white; border-radius: 10px; padding: 10px");
|
||||
|
@ -355,26 +333,26 @@ void homePageWidget::setupDisplay(bool databaseGenerated) {
|
|||
QTimer::singleShot(500, this, SLOT(refreshScreenNative()));
|
||||
}
|
||||
|
||||
void homePageWidget::setupDisplaySlot() {
|
||||
void HomePageWidget::setupDisplaySlot() {
|
||||
setupDisplay(true);
|
||||
}
|
||||
|
||||
void homePageWidget::setupDisplayWithDatabase() {
|
||||
void HomePageWidget::setupDisplayWithDatabase() {
|
||||
global::localLibrary::headless = true;
|
||||
localLibraryWidget * localLibraryWidgetWindow = new localLibraryWidget(this);
|
||||
LocalLibraryWidget * localLibraryWidgetWindow = new LocalLibraryWidget(this);
|
||||
localLibraryWidgetWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
localLibraryWidgetWindow->hide();
|
||||
QObject::connect(localLibraryWidgetWindow, &localLibraryWidget::destroyed, this, &homePageWidget::setupDisplaySlot);
|
||||
QObject::connect(localLibraryWidgetWindow, &LocalLibraryWidget::destroyed, this, &HomePageWidget::setupDisplaySlot);
|
||||
}
|
||||
|
||||
void homePageWidget::showToast(QString messageToDisplay) {
|
||||
void HomePageWidget::showToast(QString messageToDisplay) {
|
||||
global::toast::message = messageToDisplay;
|
||||
toastWindow = new toast(this);
|
||||
toastWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
toastWindow->show();
|
||||
}
|
||||
|
||||
void homePageWidget::openBookOptionsDialog(QString bookPath) {
|
||||
void HomePageWidget::openBookOptionsDialog(QString bookPath) {
|
||||
int bookID;
|
||||
|
||||
// Finding bookID from bookPath
|
||||
|
@ -403,23 +381,23 @@ void homePageWidget::openBookOptionsDialog(QString bookPath) {
|
|||
log("Opening book options dialog for book with path '" + bookPath + "', ID " + QString::number(bookID), className);
|
||||
global::localLibrary::bookOptionsDialog::bookID = bookID;
|
||||
global::localLibrary::bookOptionsDialog::deleteOption = false;
|
||||
bookOptionsDialog * bookOptionsDialogWindow = new bookOptionsDialog(this);
|
||||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::openLocalBookInfoDialog, this, &homePageWidget::openLocalBookInfoDialog);
|
||||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::showToast, this, &homePageWidget::showToast);
|
||||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::destroyed, this, &homePageWidget::handlePossibleBookPin);
|
||||
BookOptionsDialog * bookOptionsDialogWindow = new BookOptionsDialog(this);
|
||||
QObject::connect(bookOptionsDialogWindow, &BookOptionsDialog::openLocalBookInfoDialog, this, &HomePageWidget::openLocalBookInfoDialog);
|
||||
QObject::connect(bookOptionsDialogWindow, &BookOptionsDialog::showToast, this, &HomePageWidget::showToast);
|
||||
QObject::connect(bookOptionsDialogWindow, &BookOptionsDialog::destroyed, this, &HomePageWidget::handlePossibleBookPin);
|
||||
bookOptionsDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
bookOptionsDialogWindow->setWindowFlags(Qt::FramelessWindowHint | Qt::Popup);
|
||||
bookOptionsDialogWindow->show();
|
||||
}
|
||||
|
||||
void homePageWidget::openLocalBookInfoDialog() {
|
||||
void HomePageWidget::openLocalBookInfoDialog() {
|
||||
global::bookInfoDialog::localInfoDialog = true;
|
||||
bookInfoDialog * bookInfoDialogWindow = new bookInfoDialog(this);
|
||||
BookInfoDialog * bookInfoDialogWindow = new BookInfoDialog(this);
|
||||
bookInfoDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
bookInfoDialogWindow->show();
|
||||
}
|
||||
|
||||
void homePageWidget::handlePossibleBookPin() {
|
||||
void HomePageWidget::handlePossibleBookPin() {
|
||||
if(global::localLibrary::bookOptionsDialog::bookPinAction == true) {
|
||||
QTimer::singleShot(3100, this, [&]() {
|
||||
emit relaunchHomePageWidget();
|
|
@ -11,17 +11,17 @@
|
|||
#include "bookinfodialog.h"
|
||||
|
||||
namespace Ui {
|
||||
class homePageWidget;
|
||||
class HomePageWidget;
|
||||
}
|
||||
|
||||
class homePageWidget : public QWidget
|
||||
class HomePageWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit homePageWidget(QWidget *parent = nullptr);
|
||||
~homePageWidget();
|
||||
explicit HomePageWidget(QWidget *parent = nullptr);
|
||||
~HomePageWidget();
|
||||
int sW;
|
||||
int sH;
|
||||
int stdIconWidth;
|
||||
|
@ -48,11 +48,11 @@ private slots:
|
|||
void handlePossibleBookPin();
|
||||
|
||||
private:
|
||||
Ui::homePageWidget *ui;
|
||||
localLibraryWidget * localLibraryWidgetWindow;
|
||||
Ui::HomePageWidget *ui;
|
||||
LocalLibraryWidget * localLibraryWidgetWindow;
|
||||
toast * toastWindow;
|
||||
bookOptionsDialog * bookOptionsDialogWindow;
|
||||
bookInfoDialog * bookInfoDialogWindow;
|
||||
BookOptionsDialog * bookOptionsDialogWindow;
|
||||
BookInfoDialog * bookInfoDialogWindow;
|
||||
QVector<QToolTipLabel*> bookTitleArray;
|
||||
QVector<QHBoxLayout*> horizontalLayoutArray;
|
||||
QVector<QVBoxLayout*> verticalLayoutArray;
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>homePageWidget</class>
|
||||
<widget class="QWidget" name="homePageWidget">
|
||||
<class>HomePageWidget</class>
|
||||
<widget class="QWidget" name="HomePageWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
1032
src/ui/home/mainwindow.cpp
Normal file
1032
src/ui/home/mainwindow.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -7,7 +7,7 @@
|
|||
#include "apps.h"
|
||||
#include "reader.h"
|
||||
#include "quit.h"
|
||||
#include "alert.h"
|
||||
#include "splashAlert.h"
|
||||
#include "usbmsSplash.h"
|
||||
#include "brightnessdialog.h"
|
||||
#include "generaldialog.h"
|
||||
|
@ -110,24 +110,24 @@ private slots:
|
|||
|
||||
private:
|
||||
Ui::MainWindow * ui;
|
||||
settingsChooser * settingsChooserWindow;
|
||||
apps * appsWindow;
|
||||
reader * readerWindow;
|
||||
quit * quitWindow;
|
||||
alert * alertWindow;
|
||||
usbmsSplash * usbmsWindow;
|
||||
brightnessDialog * brightnessDialogWindow;
|
||||
generalDialog * generalDialogWindow;
|
||||
koboxSettings * koboxSettingsWindow;
|
||||
koboxAppsDialog * koboxAppsDialogWindow;
|
||||
SettingsChooserWidget * settingsChooserWindow;
|
||||
AppsWidget * appsWindow;
|
||||
ReaderWidget * readerWindow;
|
||||
QuitWidget * quitWindow;
|
||||
SplashAlertWidget * alertWindow;
|
||||
USBMSSplashWidget * usbmsWindow;
|
||||
BrightnessDialog * brightnessDialogWindow;
|
||||
GeneralDialog * generalDialogWindow;
|
||||
KoboxSettingsWidget * koboxSettingsWindow;
|
||||
KoboxAppsDialog * koboxAppsDialogWindow;
|
||||
textwidget * textwidgetWindow;
|
||||
virtualkeypad * keypadWidget;
|
||||
toast * toastWindow;
|
||||
otaManager * otaManagerWindow;
|
||||
libraryWidget * libraryWidgetWindow;
|
||||
localLibraryWidget * localLibraryWidgetWindow;
|
||||
homePageWidget * homePageWidgetWindow;
|
||||
telemetry * telemetryInstance;
|
||||
OTAUpdateManagerWidget * otaManagerWindow;
|
||||
LibraryWidget * libraryWidgetWindow;
|
||||
LocalLibraryWidget * localLibraryWidgetWindow;
|
||||
HomePageWidget * homePageWidgetWindow;
|
||||
Telemetry * telemetryInstance;
|
||||
};
|
||||
|
||||
#endif // MAINWINDOW_H
|
|
@ -1,17 +1,21 @@
|
|||
#include "locallibrarywidget.h"
|
||||
#include "ui_locallibrarywidget.h"
|
||||
#include "device.h"
|
||||
|
||||
#include <QVBoxLayout>
|
||||
#include <QSpacerItem>
|
||||
#include <QScreen>
|
||||
|
||||
localLibraryWidget::localLibraryWidget(QWidget *parent) :
|
||||
LocalLibraryWidget::LocalLibraryWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::localLibraryWidget)
|
||||
ui(new Ui::LocalLibraryWidget)
|
||||
{
|
||||
Device *device = Device::getSingleton();
|
||||
Device::ScreenSize screenSize = device->getScreenSize();
|
||||
|
||||
ui->setupUi(this);
|
||||
this->setFont(QFont("u001"));
|
||||
QObject::connect(ui->pageNumberLabel, &QClickableLabel::clicked, this, &localLibraryWidget::openGoToPageDialog);
|
||||
QObject::connect(ui->pageNumberLabel, &QClickableLabel::clicked, this, &LocalLibraryWidget::openGoToPageDialog);
|
||||
|
||||
ui->previousPageBtn->setProperty("type", "borderless");
|
||||
ui->previousPageBtn->setEnabled(false);
|
||||
|
@ -25,23 +29,23 @@ localLibraryWidget::localLibraryWidget(QWidget *parent) :
|
|||
|
||||
ui->goUpBtn->setEnabled(false);
|
||||
|
||||
if(global::deviceID == "n705\n") {
|
||||
if(screenSize == Device::ScreenSize::SMALL) {
|
||||
buttonsNumber = 3;
|
||||
}
|
||||
else if(global::deviceID == "n873\n") {
|
||||
else if(screenSize >= Device::ScreenSize::VERY_LARGE) {
|
||||
buttonsNumber = 5;
|
||||
}
|
||||
else {
|
||||
buttonsNumber = 4;
|
||||
}
|
||||
|
||||
if(global::deviceID == "n705\n") {
|
||||
if(screenSize == Device::ScreenSize::SMALL) {
|
||||
bookTitleTruncateThreshold = 27;
|
||||
}
|
||||
else if(global::deviceID == "n873\n") {
|
||||
else if(screenSize >= Device::ScreenSize::VERY_LARGE) {
|
||||
bookTitleTruncateThreshold = 45;
|
||||
}
|
||||
else if(global::deviceID == "n306\n") {
|
||||
else if(screenSize == Device::ScreenSize::MEDIUM) {
|
||||
bookTitleTruncateThreshold = 32;
|
||||
}
|
||||
else {
|
||||
|
@ -57,34 +61,21 @@ localLibraryWidget::localLibraryWidget(QWidget *parent) :
|
|||
sW = QGuiApplication::screens()[0]->size().width();
|
||||
sH = QGuiApplication::screens()[0]->size().height();
|
||||
|
||||
if(global::deviceID == "n705\n") {
|
||||
|
||||
if(screenSize == Device::ScreenSize::SMALL) {
|
||||
stdIconWidthDivider = 7.2;
|
||||
stdIconHeightDivider = 7.2;
|
||||
}
|
||||
else if(global::deviceID == "n905\n" or global::deviceID == "kt\n") {
|
||||
stdIconWidthDivider = 9.5;
|
||||
stdIconHeightDivider = 9.5;
|
||||
}
|
||||
else if(global::deviceID == "n613\n" or global::deviceID == "emu\n") {
|
||||
stdIconWidthDivider = 8.7;
|
||||
stdIconHeightDivider = 8.7;
|
||||
}
|
||||
else if(global::deviceID == "n437\n" or global::deviceID == "n249\n") {
|
||||
} else if(screenSize == Device::ScreenSize::MEDIUM) {
|
||||
stdIconWidthDivider = 8.1;
|
||||
stdIconHeightDivider = 8.1;
|
||||
}
|
||||
else if(global::deviceID == "n873\n") {
|
||||
} else if(screenSize == Device::ScreenSize::LARGE) {
|
||||
stdIconWidthDivider = 8.5;
|
||||
stdIconHeightDivider = 8.5;
|
||||
} else if(screenSize >= Device::ScreenSize::VERY_LARGE) {
|
||||
stdIconWidthDivider = 9.7;
|
||||
stdIconHeightDivider = 9.7;
|
||||
}
|
||||
else if(global::deviceID == "n236\n" or global::deviceID == "n306\n") {
|
||||
stdIconWidthDivider = 9.1;
|
||||
stdIconHeightDivider = 9.1;
|
||||
}
|
||||
else {
|
||||
stdIconWidthDivider = 9.5;
|
||||
stdIconHeightDivider = 9.5;
|
||||
}
|
||||
|
||||
stdIconWidth = sW / stdIconWidthDivider;
|
||||
stdIconHeight = sH / stdIconHeightDivider;
|
||||
|
||||
|
@ -109,12 +100,12 @@ localLibraryWidget::localLibraryWidget(QWidget *parent) :
|
|||
}
|
||||
}
|
||||
|
||||
localLibraryWidget::~localLibraryWidget()
|
||||
LocalLibraryWidget::~LocalLibraryWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void localLibraryWidget::setupDatabase() {
|
||||
void LocalLibraryWidget::setupDatabase() {
|
||||
setDefaultWorkDir();
|
||||
if(!QFile::exists(global::localLibrary::databasePath)) {
|
||||
log("Generating database", className);
|
||||
|
@ -195,11 +186,11 @@ void localLibraryWidget::setupDatabase() {
|
|||
|
||||
if(global::localLibrary::headless == true) {
|
||||
global::localLibrary::headless = false;
|
||||
localLibraryWidget::close();
|
||||
LocalLibraryWidget::close();
|
||||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::setupBooksList(int pageNumber) {
|
||||
void LocalLibraryWidget::setupBooksList(int pageNumber) {
|
||||
idList.clear();
|
||||
int in = 1;
|
||||
for(int i = (1 * pageNumber * buttonsNumber) - (buttonsNumber - 1); i <= (1 * pageNumber * buttonsNumber); i++) {
|
||||
|
@ -279,7 +270,7 @@ void localLibraryWidget::setupBooksList(int pageNumber) {
|
|||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::on_previousPageBtn_clicked()
|
||||
void LocalLibraryWidget::on_previousPageBtn_clicked()
|
||||
{
|
||||
log("Previous button clicked", className);
|
||||
|
||||
|
@ -303,7 +294,7 @@ void localLibraryWidget::on_previousPageBtn_clicked()
|
|||
}
|
||||
|
||||
|
||||
void localLibraryWidget::on_nextPageBtn_clicked()
|
||||
void LocalLibraryWidget::on_nextPageBtn_clicked()
|
||||
{
|
||||
currentPageNumber++;
|
||||
setupBooksListToggle(currentPageNumber);
|
||||
|
@ -315,14 +306,14 @@ void localLibraryWidget::on_nextPageBtn_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::openBook(int bookID) {
|
||||
void LocalLibraryWidget::openBook(int bookID) {
|
||||
QJsonObject jsonObject = databaseJsonArrayList.at(bookID - 1).toObject();
|
||||
QString bookPath = jsonObject["BookPath"].toString();
|
||||
log("Opening book with ID " + QString::number(bookID) + ", path '" + bookPath + "'", className);
|
||||
emit openBookSignal(bookPath, false);
|
||||
}
|
||||
|
||||
void localLibraryWidget::btnOpenBook(int buttonNumber) {
|
||||
void LocalLibraryWidget::btnOpenBook(int buttonNumber) {
|
||||
log("Book/directory button clicked, buttonNumber is " + QString::number(buttonNumber), className);
|
||||
if(mainPathIsEmpty == true) {
|
||||
return void();
|
||||
|
@ -339,23 +330,23 @@ void localLibraryWidget::btnOpenBook(int buttonNumber) {
|
|||
else {
|
||||
log("A book was selected", className);
|
||||
openBook(id);
|
||||
localLibraryWidget::close();
|
||||
LocalLibraryWidget::close();
|
||||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::openGoToPageDialog() {
|
||||
void LocalLibraryWidget::openGoToPageDialog() {
|
||||
if(mainPathIsEmpty == true) {
|
||||
return void();
|
||||
}
|
||||
|
||||
log("Showing 'Go to page' dialog", className);
|
||||
global::keyboard::keypadDialog = true;
|
||||
generalDialogWindow = new generalDialog();
|
||||
generalDialogWindow = new GeneralDialog();
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
QObject::connect(generalDialogWindow, &generalDialog::gotoPageSelected, this, &localLibraryWidget::goToPage);
|
||||
QObject::connect(generalDialogWindow, &GeneralDialog::gotoPageSelected, this, &LocalLibraryWidget::goToPage);
|
||||
}
|
||||
|
||||
void localLibraryWidget::goToPage(int page) {
|
||||
void LocalLibraryWidget::goToPage(int page) {
|
||||
checkIfMainPathIsEmpty();
|
||||
if(mainPathIsEmpty == true) {
|
||||
return void();
|
||||
|
@ -375,11 +366,11 @@ void localLibraryWidget::goToPage(int page) {
|
|||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::refreshScreenNative() {
|
||||
void LocalLibraryWidget::refreshScreenNative() {
|
||||
emit refreshScreen();
|
||||
}
|
||||
|
||||
void localLibraryWidget::setupDisplay() {
|
||||
void LocalLibraryWidget::setupDisplay() {
|
||||
setupDatabase();
|
||||
if(noBooksInDatabase == false) {
|
||||
// Prevent segmentation fault if a book was the last of its page
|
||||
|
@ -403,14 +394,14 @@ void localLibraryWidget::setupDisplay() {
|
|||
global::localLibrary::bookOptionsDialog::bookDeleted = false;
|
||||
}
|
||||
|
||||
void localLibraryWidget::showToast(QString messageToDisplay) {
|
||||
void LocalLibraryWidget::showToast(QString messageToDisplay) {
|
||||
global::toast::message = messageToDisplay;
|
||||
toastWindow = new toast(this);
|
||||
toastWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
toastWindow->show();
|
||||
}
|
||||
|
||||
void localLibraryWidget::openBookOptionsDialog(int pseudoBookID) {
|
||||
void LocalLibraryWidget::openBookOptionsDialog(int pseudoBookID) {
|
||||
if(mainPathIsEmpty == true) {
|
||||
return void();
|
||||
}
|
||||
|
@ -440,17 +431,17 @@ void localLibraryWidget::openBookOptionsDialog(int pseudoBookID) {
|
|||
log("Opening book options dialog for book with pseudo-ID " + QString::number(pseudoBookID) + ", ID " + QString::number(bookID), className);
|
||||
// Here, ID should go because of idList.at(pseudoBookID - 1);
|
||||
global::localLibrary::bookOptionsDialog::bookID = id;
|
||||
bookOptionsDialog * bookOptionsDialogWindow = new bookOptionsDialog(this);
|
||||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::openLocalBookInfoDialog, this, &localLibraryWidget::openLocalBookInfoDialog);
|
||||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::showToast, this, &localLibraryWidget::showToast);
|
||||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::destroyed, this, &localLibraryWidget::handlePossibleBookDeletion);
|
||||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::removedFolder, this, &localLibraryWidget::refreshFolders);
|
||||
BookOptionsDialog * bookOptionsDialogWindow = new BookOptionsDialog(this);
|
||||
QObject::connect(bookOptionsDialogWindow, &BookOptionsDialog::openLocalBookInfoDialog, this, &LocalLibraryWidget::openLocalBookInfoDialog);
|
||||
QObject::connect(bookOptionsDialogWindow, &BookOptionsDialog::showToast, this, &LocalLibraryWidget::showToast);
|
||||
QObject::connect(bookOptionsDialogWindow, &BookOptionsDialog::destroyed, this, &LocalLibraryWidget::handlePossibleBookDeletion);
|
||||
QObject::connect(bookOptionsDialogWindow, &BookOptionsDialog::removedFolder, this, &LocalLibraryWidget::refreshFolders);
|
||||
bookOptionsDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
bookOptionsDialogWindow->setWindowFlags(Qt::FramelessWindowHint | Qt::Popup);
|
||||
bookOptionsDialogWindow->show();
|
||||
}
|
||||
|
||||
void localLibraryWidget::handlePossibleBookDeletion() {
|
||||
void LocalLibraryWidget::handlePossibleBookDeletion() {
|
||||
if(global::localLibrary::bookOptionsDialog::bookDeleted == true) {
|
||||
QTimer::singleShot(3100, this, [&]() {
|
||||
global::toast::modalToast = true;
|
||||
|
@ -461,14 +452,14 @@ void localLibraryWidget::handlePossibleBookDeletion() {
|
|||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::openLocalBookInfoDialog() {
|
||||
void LocalLibraryWidget::openLocalBookInfoDialog() {
|
||||
global::bookInfoDialog::localInfoDialog = true;
|
||||
bookInfoDialog * bookInfoDialogWindow = new bookInfoDialog(this);
|
||||
BookInfoDialog * bookInfoDialogWindow = new BookInfoDialog(this);
|
||||
bookInfoDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
bookInfoDialogWindow->show();
|
||||
}
|
||||
|
||||
void localLibraryWidget::setupBooksListToggle(int pageNumber) {
|
||||
void LocalLibraryWidget::setupBooksListToggle(int pageNumber) {
|
||||
if(folderFeatureEnabled == true) {
|
||||
setupBooksListFolders(pageNumber);
|
||||
}
|
||||
|
@ -477,7 +468,7 @@ void localLibraryWidget::setupBooksListToggle(int pageNumber) {
|
|||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::setupBooksListFolders(int pageNumber) {
|
||||
void LocalLibraryWidget::setupBooksListFolders(int pageNumber) {
|
||||
log("Showing folders for page: " + QString::number(pageNumber), className);
|
||||
QStringList directoryList = QDir(pathForFolders).entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
|
||||
log("Full directory list is '" + directoryList.join(", ") + "'", className);
|
||||
|
@ -644,7 +635,7 @@ void localLibraryWidget::setupBooksListFolders(int pageNumber) {
|
|||
}
|
||||
|
||||
// Sets pagesNumber for folders feature, and everything else
|
||||
void localLibraryWidget::calculateMaximumPagesNumberForFolders() {
|
||||
void LocalLibraryWidget::calculateMaximumPagesNumberForFolders() {
|
||||
log("Main path is '" + pathForFolders + "'", className);
|
||||
|
||||
checkIfMainPathIsEmpty();
|
||||
|
@ -713,7 +704,7 @@ void localLibraryWidget::calculateMaximumPagesNumberForFolders() {
|
|||
// Sorting the vector if needed should be done here
|
||||
}
|
||||
|
||||
void localLibraryWidget::calculateIndexForPage(int pageNumber) {
|
||||
void LocalLibraryWidget::calculateIndexForPage(int pageNumber) {
|
||||
if(pageNumber == firstPageForBooks + 1) {
|
||||
log("Variable firstPageForBooks is 0", className);
|
||||
bookIndexVector = 0;
|
||||
|
@ -747,7 +738,7 @@ void localLibraryWidget::calculateIndexForPage(int pageNumber) {
|
|||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::changePathAndRefresh(QString directory) {
|
||||
void LocalLibraryWidget::changePathAndRefresh(QString directory) {
|
||||
log("Changing path", className);
|
||||
QString temporaryPathForFolders = pathForFolders + directory + "/";
|
||||
if(QDir(temporaryPathForFolders).isEmpty() == false) {
|
||||
|
@ -762,12 +753,12 @@ void localLibraryWidget::changePathAndRefresh(QString directory) {
|
|||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::on_goUpBtn_clicked()
|
||||
void LocalLibraryWidget::on_goUpBtn_clicked()
|
||||
{
|
||||
goUpFunction();
|
||||
}
|
||||
|
||||
void localLibraryWidget::goUpFunction() {
|
||||
void LocalLibraryWidget::goUpFunction() {
|
||||
if(pathForFolders != "/mnt/onboard/onboard/") {
|
||||
log("Changing path; going back", className);
|
||||
// This can't be a one-liner
|
||||
|
@ -786,7 +777,7 @@ void localLibraryWidget::goUpFunction() {
|
|||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::on_pathBtn_clicked()
|
||||
void LocalLibraryWidget::on_pathBtn_clicked()
|
||||
{
|
||||
log("Showing path dialog", className);
|
||||
QString pathForFoldersSaved = pathForFolders;
|
||||
|
@ -794,14 +785,14 @@ void localLibraryWidget::on_pathBtn_clicked()
|
|||
pathForFolders = pathForFoldersSaved;
|
||||
}
|
||||
|
||||
void localLibraryWidget::refreshFolders() {
|
||||
void LocalLibraryWidget::refreshFolders() {
|
||||
log("Called refresh folders");
|
||||
calculateMaximumPagesNumberForFolders();
|
||||
bookIndexVector = 0;
|
||||
goToPage(1);
|
||||
}
|
||||
|
||||
void localLibraryWidget::checkIfMainPathIsEmpty() {
|
||||
void LocalLibraryWidget::checkIfMainPathIsEmpty() {
|
||||
if(folderFeatureEnabled == true) {
|
||||
// If the main path is empty, prevent it from freezing and using the CPU at 100% because of a while loop
|
||||
if(pathForFolders == "/mnt/onboard/onboard/") {
|
||||
|
@ -827,8 +818,8 @@ void localLibraryWidget::checkIfMainPathIsEmpty() {
|
|||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::setupButtonsLook() {
|
||||
for(int i = 1; i <= buttonsNumber; i++) {
|
||||
void LocalLibraryWidget::setupButtonsLook() {
|
||||
for(int i = 0; i < buttonsNumber; i++) {
|
||||
// Horizontal layout that will contain the book button and its icon
|
||||
horizontalLayoutArray[i] = new QHBoxLayout(this);
|
||||
|
||||
|
@ -839,8 +830,8 @@ void localLibraryWidget::setupButtonsLook() {
|
|||
// Book button
|
||||
bookBtnArray[i] = new QClickableLabel(this);
|
||||
bookBtnArray[i]->setObjectName(QString::number(i));
|
||||
QObject::connect(bookBtnArray[i], &QClickableLabel::bookID, this, &localLibraryWidget::btnOpenBook);
|
||||
QObject::connect(bookBtnArray[i], &QClickableLabel::longPressInt, this, &localLibraryWidget::openBookOptionsDialog);
|
||||
QObject::connect(bookBtnArray[i], &QClickableLabel::bookID, this, &LocalLibraryWidget::btnOpenBook);
|
||||
QObject::connect(bookBtnArray[i], &QClickableLabel::longPressInt, this, &LocalLibraryWidget::openBookOptionsDialog);
|
||||
bookBtnArray[i]->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
|
||||
bookBtnArray[i]->setStyleSheet("color: black; background-color: white; border-radius: 10px; padding: 10px");
|
||||
bookBtnArray[i]->setFont(QFont("u001"));
|
||||
|
@ -860,7 +851,7 @@ void localLibraryWidget::setupButtonsLook() {
|
|||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::cleanButtons() {
|
||||
void LocalLibraryWidget::cleanButtons() {
|
||||
log("Hiding items", className);
|
||||
for(int i = 1; i <= buttonsNumber; i++) {
|
||||
if(bookIconArray[i]->isHidden() == false) {
|
|
@ -13,17 +13,17 @@
|
|||
#include "bookinfodialog.h"
|
||||
|
||||
namespace Ui {
|
||||
class localLibraryWidget;
|
||||
class LocalLibraryWidget;
|
||||
}
|
||||
|
||||
class localLibraryWidget : public QWidget
|
||||
class LocalLibraryWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit localLibraryWidget(QWidget *parent = nullptr);
|
||||
~localLibraryWidget();
|
||||
explicit LocalLibraryWidget(QWidget *parent = nullptr);
|
||||
~LocalLibraryWidget();
|
||||
int buttonsNumber;
|
||||
int sW;
|
||||
int sH;
|
||||
|
@ -87,11 +87,11 @@ private slots:
|
|||
void on_pathBtn_clicked();
|
||||
|
||||
private:
|
||||
Ui::localLibraryWidget * ui;
|
||||
generalDialog * generalDialogWindow;
|
||||
bookOptionsDialog * bookOptionsDialogWindow;
|
||||
Ui::LocalLibraryWidget * ui;
|
||||
GeneralDialog * generalDialogWindow;
|
||||
BookOptionsDialog * bookOptionsDialogWindow;
|
||||
toast * toastWindow;
|
||||
bookInfoDialog * bookInfoDialogWindow;
|
||||
BookInfoDialog * bookInfoDialogWindow;
|
||||
QVector<QHBoxLayout*> horizontalLayoutArray;
|
||||
QVector<QLabel*> bookIconArray;
|
||||
QVector<QClickableLabel*> bookBtnArray;
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>localLibraryWidget</class>
|
||||
<widget class="QWidget" name="localLibraryWidget">
|
||||
<class>LocalLibraryWidget</class>
|
||||
<widget class="QWidget" name="LocalLibraryWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
|
@ -1,6 +1,7 @@
|
|||
#include "librarywidget.h"
|
||||
#include "ui_librarywidget.h"
|
||||
#include "functions.h"
|
||||
#include "device.h"
|
||||
|
||||
#include <QProcess>
|
||||
#include <QDebug>
|
||||
|
@ -8,10 +9,11 @@
|
|||
#include <QScreen>
|
||||
#include <QFontDatabase>
|
||||
|
||||
libraryWidget::libraryWidget(QWidget *parent) :
|
||||
LibraryWidget::LibraryWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::libraryWidget)
|
||||
ui(new Ui::LibraryWidget)
|
||||
{
|
||||
Device* device = Device::getSingleton();
|
||||
ui->setupUi(this);
|
||||
ui->booksStackedWidget->hide();
|
||||
|
||||
|
@ -34,7 +36,9 @@ libraryWidget::libraryWidget(QWidget *parent) :
|
|||
}
|
||||
QFont crimson(family);
|
||||
|
||||
if(global::deviceID != "n705\n" and global::deviceID != "n905\n" and global::deviceID != "kt\n") {
|
||||
|
||||
|
||||
if(device->getScreenSize() <= Device::ScreenSize::MEDIUM) {
|
||||
ui->previousBtn->setText("");
|
||||
ui->previousBtn->setProperty("type", "borderless");
|
||||
ui->nextBtn->setText("");
|
||||
|
@ -70,7 +74,7 @@ libraryWidget::libraryWidget(QWidget *parent) :
|
|||
ui->book6Btn->setProperty("type", "borderless");
|
||||
ui->book7Btn->setProperty("type", "borderless");
|
||||
ui->book8Btn->setProperty("type", "borderless");
|
||||
if(global::deviceID != "n705\n" and global::deviceID != "n905\n" and global::deviceID != "kt\n") {
|
||||
if(device->getScreenSize() > Device::ScreenSize::MEDIUM) {
|
||||
ui->book9Btn->setText("");
|
||||
ui->book10Btn->setText("");
|
||||
ui->book11Btn->setText("");
|
||||
|
@ -114,7 +118,7 @@ libraryWidget::libraryWidget(QWidget *parent) :
|
|||
ui->book6Label->setStyleSheet("font-size: 8.5pt; font-style: italic");
|
||||
ui->book7Label->setStyleSheet("font-size: 8.5pt; font-style: italic");
|
||||
ui->book8Label->setStyleSheet("font-size: 8.5pt; font-style: italic");
|
||||
if(global::deviceID != "n705\n" and global::deviceID != "n905\n" and global::deviceID != "kt\n") {
|
||||
if(device->getScreenSize() > Device::ScreenSize::MEDIUM) {
|
||||
ui->book9Label->setStyleSheet("font-size: 8.5pt; font-style: italic");
|
||||
ui->book10Label->setStyleSheet("font-size: 8.5pt; font-style: italic");
|
||||
ui->book11Label->setStyleSheet("font-size: 8.5pt; font-style: italic");
|
||||
|
@ -150,7 +154,7 @@ libraryWidget::libraryWidget(QWidget *parent) :
|
|||
ui->book6Label->setFont(crimson);
|
||||
ui->book7Label->setFont(crimson);
|
||||
ui->book8Label->setFont(crimson);
|
||||
if(global::deviceID != "n705\n" and global::deviceID != "n905\n" and global::deviceID != "kt\n") {
|
||||
if(device->getScreenSize() > Device::ScreenSize::MEDIUM) {
|
||||
ui->book9Label->setFont(crimson);
|
||||
ui->book10Label->setFont(crimson);
|
||||
ui->book11Label->setFont(crimson);
|
||||
|
@ -183,15 +187,16 @@ libraryWidget::libraryWidget(QWidget *parent) :
|
|||
}
|
||||
}
|
||||
|
||||
libraryWidget::~libraryWidget()
|
||||
LibraryWidget::~LibraryWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void libraryWidget::setupView() {
|
||||
void LibraryWidget::setupView() {
|
||||
Device *device = Device::getSingleton();
|
||||
ui->booksStackedWidget->show();
|
||||
|
||||
if(global::deviceID == "n705\n") {
|
||||
if(device->getScreenSize() == Device::ScreenSize::SMALL) {
|
||||
stdIconWidth = sW / 7
|
||||
;
|
||||
stdIconHeight = sH / 7;
|
||||
|
@ -209,7 +214,7 @@ void libraryWidget::setupView() {
|
|||
ui->book6Label->setText(readFile("/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/6/title"));
|
||||
ui->book7Label->setText(readFile("/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/7/title"));
|
||||
ui->book8Label->setText(readFile("/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/8/title"));
|
||||
if(global::deviceID != "n705\n" and global::deviceID != "n905\n" and global::deviceID != "kt\n") {
|
||||
if(device->getScreenSize() > Device::ScreenSize::MEDIUM) {
|
||||
ui->book9Label->setText(readFile("/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/9/title"));
|
||||
ui->book10Label->setText(readFile("/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/10/title"));
|
||||
ui->book11Label->setText(readFile("/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/11/title"));
|
||||
|
@ -236,7 +241,7 @@ void libraryWidget::setupView() {
|
|||
ui->book7Btn->setIconSize(QSize(stdIconWidth, stdIconHeight));
|
||||
ui->book8Btn->setIcon(QIcon("/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/8/cover.jpg"));
|
||||
ui->book8Btn->setIconSize(QSize(stdIconWidth, stdIconHeight));
|
||||
if(global::deviceID != "n705\n" and global::deviceID != "n905\n" and global::deviceID != "kt\n") {
|
||||
if(device->getScreenSize() > Device::ScreenSize::MEDIUM) {
|
||||
ui->book9Btn->setIcon(QIcon("/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/9/cover.jpg"));
|
||||
ui->book9Btn->setIconSize(QSize(stdIconWidth, stdIconHeight));
|
||||
ui->book10Btn->setIcon(QIcon("/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/10/cover.jpg"));
|
||||
|
@ -256,19 +261,19 @@ void libraryWidget::setupView() {
|
|||
}
|
||||
}
|
||||
|
||||
void libraryWidget::showToast(QString messageToDisplay) {
|
||||
void LibraryWidget::showToast(QString messageToDisplay) {
|
||||
global::toast::message = messageToDisplay;
|
||||
toastWindow = new toast(this);
|
||||
toastWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
toastWindow->show();
|
||||
}
|
||||
|
||||
void libraryWidget::closeIndefiniteToast() {
|
||||
void LibraryWidget::closeIndefiniteToast() {
|
||||
// Warning: use with caution
|
||||
toastWindow->close();
|
||||
}
|
||||
|
||||
void libraryWidget::syncCatalog() {
|
||||
void LibraryWidget::syncCatalog() {
|
||||
global::toast::modalToast = true;
|
||||
global::toast::indefiniteToast = true;
|
||||
log("Gutenberg sync in progress", className);
|
||||
|
@ -276,7 +281,7 @@ void libraryWidget::syncCatalog() {
|
|||
QTimer::singleShot(500, this, SLOT(syncCatalogSlot()));
|
||||
}
|
||||
|
||||
void libraryWidget::syncCatalogSlot() {
|
||||
void LibraryWidget::syncCatalogSlot() {
|
||||
bool syncDone = false;
|
||||
writeFile("/opt/ibxd", "gutenberg_sync\n");
|
||||
while(true) {
|
||||
|
@ -301,20 +306,20 @@ void libraryWidget::syncCatalogSlot() {
|
|||
}
|
||||
}
|
||||
|
||||
void libraryWidget::on_previousBtn_clicked()
|
||||
void LibraryWidget::on_previousBtn_clicked()
|
||||
{
|
||||
ui->booksStackedWidget->setCurrentIndex(0);
|
||||
ui->pageLabel->setText("1 <i>of</i> 2");
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_nextBtn_clicked()
|
||||
void LibraryWidget::on_nextBtn_clicked()
|
||||
{
|
||||
ui->booksStackedWidget->setCurrentIndex(1);
|
||||
ui->pageLabel->setText("2 <i>of</i> 2");
|
||||
}
|
||||
|
||||
QString libraryWidget::getTitle(int bookNumber) {
|
||||
QString LibraryWidget::getTitle(int bookNumber) {
|
||||
QString bookNumberQstr = QString::number(bookNumber);
|
||||
QString fullTitlePath = "/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/";
|
||||
fullTitlePath = fullTitlePath.append(bookNumberQstr);
|
||||
|
@ -323,7 +328,7 @@ QString libraryWidget::getTitle(int bookNumber) {
|
|||
return readFile(fullTitlePath);
|
||||
}
|
||||
|
||||
void libraryWidget::openLatestBookInfoDialog(int bookNumber, QString title) {
|
||||
void LibraryWidget::openLatestBookInfoDialog(int bookNumber, QString title) {
|
||||
QString idPath = "/mnt/onboard/onboard/.inkbox/gutenberg-data/latest-books/";
|
||||
idPath = idPath.append(bookNumber);
|
||||
idPath = idPath.append("/id");
|
||||
|
@ -332,7 +337,7 @@ void libraryWidget::openLatestBookInfoDialog(int bookNumber, QString title) {
|
|||
global::library::latestBookNumber = bookNumber;
|
||||
global::library::bookTitle = title;
|
||||
|
||||
bookInfoDialogWindow = new bookInfoDialog(this);
|
||||
bookInfoDialogWindow = new BookInfoDialog(this);
|
||||
connect(bookInfoDialogWindow, SIGNAL(showToast(QString)), SLOT(showToast(QString)));
|
||||
connect(bookInfoDialogWindow, SIGNAL(closeIndefiniteToast()), SLOT(closeIndefiniteToast()));
|
||||
bookInfoDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
|
@ -341,111 +346,111 @@ void libraryWidget::openLatestBookInfoDialog(int bookNumber, QString title) {
|
|||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book1Btn_clicked()
|
||||
void LibraryWidget::on_book1Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(1);
|
||||
openLatestBookInfoDialog(1, title);
|
||||
}
|
||||
|
||||
void libraryWidget::on_book2Btn_clicked()
|
||||
void LibraryWidget::on_book2Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(2);
|
||||
openLatestBookInfoDialog(2, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book3Btn_clicked()
|
||||
void LibraryWidget::on_book3Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(3);
|
||||
openLatestBookInfoDialog(3, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book4Btn_clicked()
|
||||
void LibraryWidget::on_book4Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(4);
|
||||
openLatestBookInfoDialog(4, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book5Btn_clicked()
|
||||
void LibraryWidget::on_book5Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(5);
|
||||
openLatestBookInfoDialog(5, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book6Btn_clicked()
|
||||
void LibraryWidget::on_book6Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(6);
|
||||
openLatestBookInfoDialog(6, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book7Btn_clicked()
|
||||
void LibraryWidget::on_book7Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(7);
|
||||
openLatestBookInfoDialog(7, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book8Btn_clicked()
|
||||
void LibraryWidget::on_book8Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(8);
|
||||
openLatestBookInfoDialog(8, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book9Btn_clicked()
|
||||
void LibraryWidget::on_book9Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(9);
|
||||
openLatestBookInfoDialog(9, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book10Btn_clicked()
|
||||
void LibraryWidget::on_book10Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(10);
|
||||
openLatestBookInfoDialog(10, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book11Btn_clicked()
|
||||
void LibraryWidget::on_book11Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(11);
|
||||
openLatestBookInfoDialog(11, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book12Btn_clicked()
|
||||
void LibraryWidget::on_book12Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(12);
|
||||
openLatestBookInfoDialog(12, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book13Btn_clicked()
|
||||
void LibraryWidget::on_book13Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(13);
|
||||
openLatestBookInfoDialog(13, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book14Btn_clicked()
|
||||
void LibraryWidget::on_book14Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(14);
|
||||
openLatestBookInfoDialog(14, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book15Btn_clicked()
|
||||
void LibraryWidget::on_book15Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(15);
|
||||
openLatestBookInfoDialog(15, title);
|
||||
}
|
||||
|
||||
|
||||
void libraryWidget::on_book16Btn_clicked()
|
||||
void LibraryWidget::on_book16Btn_clicked()
|
||||
{
|
||||
QString title = getTitle(16);
|
||||
openLatestBookInfoDialog(16, title);
|
|
@ -6,26 +6,26 @@
|
|||
#include <bookinfodialog.h>
|
||||
|
||||
namespace Ui {
|
||||
class libraryWidget;
|
||||
class LibraryWidget;
|
||||
}
|
||||
|
||||
class libraryWidget : public QWidget
|
||||
class LibraryWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit libraryWidget(QWidget *parent = nullptr);
|
||||
~libraryWidget();
|
||||
explicit LibraryWidget(QWidget *parent = nullptr);
|
||||
~LibraryWidget();
|
||||
float sH;
|
||||
float sW;
|
||||
float stdIconHeight;
|
||||
float stdIconWidth;
|
||||
|
||||
private:
|
||||
Ui::libraryWidget * ui;
|
||||
Ui::LibraryWidget * ui;
|
||||
toast * toastWindow;
|
||||
bookInfoDialog * bookInfoDialogWindow;
|
||||
BookInfoDialog * bookInfoDialogWindow;
|
||||
|
||||
private slots:
|
||||
void syncCatalog();
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>libraryWidget</class>
|
||||
<widget class="QWidget" name="libraryWidget">
|
||||
<class>LibraryWidget</class>
|
||||
<widget class="QWidget" name="LibraryWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
|
@ -6,9 +6,9 @@
|
|||
#include <QDebug>
|
||||
#include <QDateTime>
|
||||
|
||||
otaManager::otaManager(QWidget *parent) :
|
||||
OTAUpdateManagerWidget::OTAUpdateManagerWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::otaManager)
|
||||
ui(new Ui::OTAUpdateManagerWidget)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
QThread::msleep(500);
|
||||
|
@ -30,7 +30,7 @@ otaManager::otaManager(QWidget *parent) :
|
|||
unsigned long currentEpoch = QDateTime::currentSecsSinceEpoch();
|
||||
writeFile("/external_root/opt/storage/update/last_sync", QString::number(currentEpoch));
|
||||
QFile::remove("/run/can_ota_update");
|
||||
otaManager::close();
|
||||
OTAUpdateManagerWidget::close();
|
||||
}
|
||||
} );
|
||||
otaCheckTimer->start();
|
||||
|
@ -54,14 +54,14 @@ otaManager::otaManager(QWidget *parent) :
|
|||
global::otaUpdate::downloadOta = false;
|
||||
}
|
||||
QFile::remove("/external_root/opt/storage/update/last_sync");
|
||||
otaManager::close();
|
||||
OTAUpdateManagerWidget::close();
|
||||
}
|
||||
} );
|
||||
otaDownloadTimer->start();
|
||||
}
|
||||
}
|
||||
|
||||
otaManager::~otaManager()
|
||||
OTAUpdateManagerWidget::~OTAUpdateManagerWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
|
@ -4,20 +4,20 @@
|
|||
#include <QWidget>
|
||||
|
||||
namespace Ui {
|
||||
class otaManager;
|
||||
class OTAUpdateManagerWidget;
|
||||
}
|
||||
|
||||
class otaManager : public QWidget
|
||||
class OTAUpdateManagerWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit otaManager(QWidget *parent = nullptr);
|
||||
~otaManager();
|
||||
explicit OTAUpdateManagerWidget(QWidget *parent = nullptr);
|
||||
~OTAUpdateManagerWidget();
|
||||
|
||||
private:
|
||||
Ui::otaManager *ui;
|
||||
Ui::OTAUpdateManagerWidget *ui;
|
||||
|
||||
signals:
|
||||
void canOtaUpdate(bool yesno);
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>otaManager</class>
|
||||
<widget class="QWidget" name="otaManager">
|
||||
<class>OTAUpdateManagerWidget</class>
|
||||
<widget class="QWidget" name="OTAUpdateManagerWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
89
src/ui/quit/quit.cpp
Normal file
89
src/ui/quit/quit.cpp
Normal file
|
@ -0,0 +1,89 @@
|
|||
#include "quit.h"
|
||||
#include "functions.h"
|
||||
#include "ui.h"
|
||||
#include "ui_quit.h"
|
||||
#include <linux/input.h>
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
#include <QIcon>
|
||||
#include <QPixmap>
|
||||
#include <QProcess>
|
||||
#include <QScreen>
|
||||
|
||||
QuitWidget::QuitWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::QuitWidget) {
|
||||
ui->setupUi(this);
|
||||
ui->backBtn->setFont(QFont("u001"));
|
||||
|
||||
ui->pushButton->setProperty("type", "borderless");
|
||||
ui->pushButton_2->setProperty("type", "borderless");
|
||||
ui->pushButton_3->setProperty("type", "borderless");
|
||||
ui->pushButton_4->setProperty("type", "borderless");
|
||||
ui->backBtn->setProperty("type", "borderless");
|
||||
|
||||
// Stylesheet
|
||||
UI::applyStyle(*this, "eink");
|
||||
|
||||
// Getting the screen's size
|
||||
float sW = QGuiApplication::screens()[0]->size().width();
|
||||
float sH = QGuiApplication::screens()[0]->size().height();
|
||||
// Defining what the "Quit" icon size will be
|
||||
float stdIconWidth = sW / 1.25;
|
||||
float stdIconHeight = sH / 1.25;
|
||||
|
||||
QPixmap pixmap(":/resources/exit.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->label->setPixmap(scaledPixmap);
|
||||
|
||||
if (checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/9-deepSleep") == true) {
|
||||
ui->pushButton_3->setText("Deep suspend");
|
||||
}
|
||||
}
|
||||
|
||||
QuitWidget::~QuitWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void QuitWidget::on_pushButton_clicked() {
|
||||
// Prevent strange "appearing from nowhere" low battery or critical battery alerts due to sysfs unmount
|
||||
global::battery::showCriticalBatteryAlert = false;
|
||||
global::battery::showLowBatteryDialog = false;
|
||||
|
||||
// GUI apps
|
||||
updateUserAppsMainJsonFile();
|
||||
|
||||
poweroff(true);
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void QuitWidget::on_pushButton_2_clicked() {
|
||||
global::battery::showCriticalBatteryAlert = false;
|
||||
global::battery::showLowBatteryDialog = false;
|
||||
|
||||
// GUI apps
|
||||
updateUserAppsMainJsonFile();
|
||||
|
||||
reboot(true);
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void QuitWidget::on_pushButton_4_clicked() {
|
||||
log("Restarting InkBox", className);
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void QuitWidget::on_backBtn_clicked() {
|
||||
QuitWidget::close();
|
||||
}
|
||||
|
||||
void QuitWidget::on_pushButton_3_clicked() {
|
||||
log("Suspending", className);
|
||||
if (checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/9-deepSleep") == true) {
|
||||
writeFile("/dev/ipd/sleepCall", "deepSleep");
|
||||
} else {
|
||||
writeFile("/dev/ipd/sleepCall", "sleep");
|
||||
}
|
||||
}
|
|
@ -6,17 +6,17 @@
|
|||
using namespace std;
|
||||
|
||||
namespace Ui {
|
||||
class quit;
|
||||
class QuitWidget;
|
||||
}
|
||||
|
||||
class quit : public QWidget
|
||||
class QuitWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit quit(QWidget *parent = nullptr);
|
||||
~quit();
|
||||
explicit QuitWidget(QWidget *parent = nullptr);
|
||||
~QuitWidget();
|
||||
|
||||
private slots:
|
||||
void on_pushButton_clicked();
|
||||
|
@ -26,7 +26,7 @@ private slots:
|
|||
void on_pushButton_3_clicked();
|
||||
|
||||
private:
|
||||
Ui::quit *ui;
|
||||
Ui::QuitWidget *ui;
|
||||
};
|
||||
|
||||
#endif // QUIT_H
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>quit</class>
|
||||
<widget class="QWidget" name="quit">
|
||||
<class>QuitWidget</class>
|
||||
<widget class="QWidget" name="QuitWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
2115
src/ui/reader/reader.cpp
Normal file
2115
src/ui/reader/reader.cpp
Normal file
File diff suppressed because it is too large
Load diff
|
@ -2,7 +2,7 @@
|
|||
#define READER_H
|
||||
|
||||
#include "functions.h"
|
||||
#include "alert.h"
|
||||
#include "splashAlert.h"
|
||||
#include "generaldialog.h"
|
||||
#include "toast.h"
|
||||
#include "quit.h"
|
||||
|
@ -41,17 +41,17 @@ namespace mupdf {
|
|||
}
|
||||
|
||||
namespace Ui {
|
||||
class reader;
|
||||
class ReaderWidget;
|
||||
}
|
||||
|
||||
class reader : public QWidget
|
||||
class ReaderWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit reader(QWidget *parent = nullptr);
|
||||
~reader();
|
||||
explicit ReaderWidget(QWidget *parent = nullptr);
|
||||
~ReaderWidget();
|
||||
|
||||
int split_total;
|
||||
int split_files_number;
|
||||
|
@ -174,15 +174,15 @@ signals:
|
|||
void openBookFile(QString book, bool relativePath);
|
||||
|
||||
private:
|
||||
Ui::reader * ui;
|
||||
alert * alertWindow;
|
||||
generalDialog * generalDialogWindow;
|
||||
Ui::ReaderWidget * ui;
|
||||
SplashAlertWidget * alertWindow;
|
||||
GeneralDialog * generalDialogWindow;
|
||||
toast * toastWindow;
|
||||
quit * quitWindow;
|
||||
textDialog * textDialogWindow;
|
||||
highlightsListDialog * highlightsListDialogWindow;
|
||||
QuitWidget * quitWindow;
|
||||
TextDialog * textDialogWindow;
|
||||
HighlightsListDialog * highlightsListDialogWindow;
|
||||
QGraphicsScene * graphicsScene;
|
||||
brightnessDialog * brightnessDialogWindow;
|
||||
BrightnessDialog * brightnessDialogWindow;
|
||||
};
|
||||
|
||||
#endif // READER_H
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>reader</class>
|
||||
<widget class="QWidget" name="reader">
|
||||
<class>ReaderWidget</class>
|
||||
<widget class="QWidget" name="ReaderWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
110
src/ui/settings/koboxsettings.cpp
Normal file
110
src/ui/settings/koboxsettings.cpp
Normal file
|
@ -0,0 +1,110 @@
|
|||
#include "koboxsettings.h"
|
||||
#include "device.h"
|
||||
#include "functions.h"
|
||||
#include "ui.h"
|
||||
#include "ui_koboxsettings.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QScreen>
|
||||
|
||||
KoboxSettingsWidget::KoboxSettingsWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::KoboxSettingsWidget) {
|
||||
ui->setupUi(this);
|
||||
KoboxSettingsWidget::setFont(QFont("u001"));
|
||||
ui->okBtn->setFont(QFont("Inter"));
|
||||
|
||||
// UI tweaks
|
||||
ui->okBtn->setProperty("type", "borderless");
|
||||
ui->pushButton->setProperty("type", "borderless");
|
||||
ui->resetKoboxBtn->setProperty("type", "borderless");
|
||||
ui->pushButton->setStyleSheet("font-weight: bold");
|
||||
ui->resetKoboxBtn->setStyleSheet("font-weight: bold");
|
||||
ui->okBtn->setStyleSheet("font-weight: bold");
|
||||
|
||||
// Stylesheet
|
||||
UI::applyStyle(*this, "eink");
|
||||
|
||||
if (checkconfig("/external_root/boot/flags/X11_START") == true) {
|
||||
ui->koboxStatusLabel->setText("KoBox is <b>enabled</b>");
|
||||
not_user_change = true;
|
||||
ui->checkBox->click();
|
||||
ui->runtimeSettingsWidget->setVisible(true);
|
||||
} else {
|
||||
ui->koboxStatusLabel->setText("KoBox is <b>disabled</b>");
|
||||
ui->runtimeSettingsWidget->setVisible(false);
|
||||
}
|
||||
|
||||
// DPI setting
|
||||
QString dpiSetting;
|
||||
QString dpiSettingStr = readFile(".config/00-kobox/dpiSetting");
|
||||
int dpi = dpiSettingStr.toInt();
|
||||
if (dpiSettingStr.isEmpty()) {
|
||||
dpi = Device::getSingleton()->getSingleton()->getBaseDPI();
|
||||
writeFile(".config/00-kobox/dpiSetting", QString(dpi));
|
||||
}
|
||||
|
||||
ui->spinBox->setValue(dpi);
|
||||
}
|
||||
|
||||
KoboxSettingsWidget::~KoboxSettingsWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void KoboxSettingsWidget::on_okBtn_clicked() {
|
||||
KoboxSettingsWidget::close();
|
||||
}
|
||||
|
||||
void KoboxSettingsWidget::on_checkBox_toggled(bool checked) {
|
||||
if (checked == true) {
|
||||
if (not_user_change != true) {
|
||||
log("Enabling KoBox subsystem", className);
|
||||
writeFile("/external_root/boot/flags/X11_START", "true\n");
|
||||
openSettingsRebootDialog();
|
||||
} else {
|
||||
not_user_change = false;
|
||||
}
|
||||
} else {
|
||||
log("Disabling KoBox subsystem", className);
|
||||
writeFile("/external_root/boot/flags/X11_START", "false\n");
|
||||
openSettingsRebootDialog();
|
||||
}
|
||||
}
|
||||
|
||||
void KoboxSettingsWidget::openSettingsRebootDialog() {
|
||||
log("Showing reboot dialog", className);
|
||||
global::settings::settingsRebootDialog = true;
|
||||
global::kobox::koboxSettingsRebootDialog = true;
|
||||
generalDialogWindow = new GeneralDialog(this);
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
}
|
||||
void KoboxSettingsWidget::openResetKoboxDialog() {
|
||||
log("Showing KoBox reset dialog", className);
|
||||
global::kobox::resetKoboxDialog = true;
|
||||
generalDialogWindow = new GeneralDialog(this);
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
}
|
||||
|
||||
void KoboxSettingsWidget::on_spinBox_valueChanged(int arg1) {
|
||||
QString number = QString::number(arg1);
|
||||
writeFile(".config/00-kobox/dpiSetting", number);
|
||||
log("X11 DPI set to " + number, className);
|
||||
}
|
||||
|
||||
void KoboxSettingsWidget::on_pushButton_clicked() {
|
||||
// Export Extensions disk image over USB with g_mass_storage/g_file_storage
|
||||
global::usbms::usbmsDialog = false;
|
||||
global::usbms::launchUsbms = true;
|
||||
global::usbms::koboxExportExtensions = true;
|
||||
|
||||
log("Exporting KoBox extensions onboard storage via USB", className);
|
||||
log("Showing USBMS splash", className);
|
||||
usbmsWindow = new USBMSSplashWidget();
|
||||
usbmsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
usbmsWindow->setGeometry(QRect(QPoint(0, 0), screen()->geometry().size()));
|
||||
usbmsWindow->show();
|
||||
}
|
||||
|
||||
void KoboxSettingsWidget::on_resetKoboxBtn_clicked() {
|
||||
openResetKoboxDialog();
|
||||
}
|
|
@ -7,17 +7,17 @@
|
|||
#include "usbmsSplash.h"
|
||||
|
||||
namespace Ui {
|
||||
class koboxSettings;
|
||||
class KoboxSettingsWidget;
|
||||
}
|
||||
|
||||
class koboxSettings : public QWidget
|
||||
class KoboxSettingsWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit koboxSettings(QWidget *parent = nullptr);
|
||||
~koboxSettings();
|
||||
explicit KoboxSettingsWidget(QWidget *parent = nullptr);
|
||||
~KoboxSettingsWidget();
|
||||
|
||||
bool not_user_change = false;
|
||||
void openSettingsRebootDialog();
|
||||
|
@ -31,9 +31,9 @@ private slots:
|
|||
void on_resetKoboxBtn_clicked();
|
||||
|
||||
private:
|
||||
Ui::koboxSettings *ui;
|
||||
generalDialog *generalDialogWindow;
|
||||
usbmsSplash *usbmsWindow;
|
||||
Ui::KoboxSettingsWidget *ui;
|
||||
GeneralDialog *generalDialogWindow;
|
||||
USBMSSplashWidget *usbmsWindow;
|
||||
};
|
||||
|
||||
#endif // KOBOXSETTINGS_H
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>koboxSettings</class>
|
||||
<widget class="QWidget" name="koboxSettings">
|
||||
<class>KoboxSettingsWidget</class>
|
||||
<widget class="QWidget" name="KoboxSettingsWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
399
src/ui/settings/powerdaemonsettings.cpp
Normal file
399
src/ui/settings/powerdaemonsettings.cpp
Normal file
|
@ -0,0 +1,399 @@
|
|||
#include "powerdaemonsettings.h"
|
||||
#include "device.h"
|
||||
#include "functions.h"
|
||||
#include "ui_powerdaemonsettings.h"
|
||||
#include "ui.h"
|
||||
#include <QFile>
|
||||
|
||||
PowerDaemonSettingsWidget::PowerDaemonSettingsWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::PowerDaemonSettingsWidget) {
|
||||
ui->setupUi(this);
|
||||
PowerDaemonSettingsWidget::setFont(QFont("u001"));
|
||||
ui->mainLabel->setFont(QFont("Inter"));
|
||||
|
||||
// Avoid some display issues (label moving because width of text would change with a proportional font)
|
||||
ui->CBSLabel->setFont(QFont("Roboto Mono"));
|
||||
ui->idleSleepLabel->setFont(QFont("Roboto Mono"));
|
||||
|
||||
// Font tweaks
|
||||
ui->label_2->setFont(QFont("Inter"));
|
||||
ui->exitBtn->setFont(QFont("Inter"));
|
||||
|
||||
// UI tweaks
|
||||
ui->exitBtn->setProperty("type", "borderless");
|
||||
ui->expBtn->setProperty("type", "borderless");
|
||||
ui->hWhenChargerSleepBtn->setProperty("type", "borderless");
|
||||
ui->hChargerWakeUpBtn->setProperty("type", "borderless");
|
||||
ui->wifiReconnectBtn->setProperty("type", "borderless");
|
||||
ui->ledUsageBtn->setProperty("type", "borderless");
|
||||
ui->hCustomCaseBtn->setProperty("type", "borderless");
|
||||
ui->deepSleepBtn->setProperty("type", "borderless");
|
||||
|
||||
ui->mainLabel->setStyleSheet("font-weight: bold");
|
||||
ui->CBSLabel->setStyleSheet("font-weight: bold");
|
||||
ui->idleSleepLabel->setStyleSheet("font-weight: bold");
|
||||
ui->exitBtn->setStyleSheet("font-weight: bold");
|
||||
// Experimental features label
|
||||
ui->label_2->setStyleSheet("font-weight: bold");
|
||||
|
||||
Device::ScreenSize screenSize = Device::getSingleton()->getScreenSize();
|
||||
|
||||
// Icons
|
||||
int controlBtnFixedWidth;
|
||||
if (screenSize == Device::ScreenSize::SMALL) {
|
||||
controlBtnFixedWidth = 50;
|
||||
} else {
|
||||
controlBtnFixedWidth = 80;
|
||||
}
|
||||
|
||||
ui->CBSDecreaseBtn->setIcon(QIcon(":/resources/minus.png"));
|
||||
ui->CBSDecreaseBtn->setFixedWidth(controlBtnFixedWidth);
|
||||
ui->CBSIncreaseBtn->setIcon(QIcon(":/resources/plus.png"));
|
||||
ui->CBSIncreaseBtn->setFixedWidth(controlBtnFixedWidth);
|
||||
|
||||
int idleBtnsFixedWidth;
|
||||
if (screenSize == Device::ScreenSize::SMALL) {
|
||||
idleBtnsFixedWidth = 80;
|
||||
} else {
|
||||
idleBtnsFixedWidth = 100;
|
||||
}
|
||||
ui->idleSleepDecreaseBtn->setFixedWidth(idleBtnsFixedWidth);
|
||||
ui->idleSleepIncreaseBtn->setFixedWidth(idleBtnsFixedWidth);
|
||||
ui->idleSleepDecreaseMBtn->setFixedWidth(idleBtnsFixedWidth);
|
||||
ui->idleSleepIncreaseMBtn->setFixedWidth(idleBtnsFixedWidth);
|
||||
|
||||
// Padding
|
||||
ui->CBSDecreaseBtn->setStyleSheet("padding: 10px; font-size: 10pt");
|
||||
ui->CBSIncreaseBtn->setStyleSheet("padding: 10px; font-size: 10pt");
|
||||
ui->idleSleepDecreaseBtn->setStyleSheet("font-family: 'Roboto Mono'; font-weight: bold; padding: 10px; font-size: 10pt");
|
||||
ui->idleSleepIncreaseBtn->setStyleSheet("font-family: 'Roboto Mono'; font-weight: bold; padding: 10px; font-size: 10pt");
|
||||
ui->idleSleepDecreaseMBtn->setStyleSheet("font-family: 'Roboto Mono'; font-weight: bold; padding: 10px; font-size: 10pt");
|
||||
ui->idleSleepIncreaseMBtn->setStyleSheet("font-family: 'Roboto Mono'; font-weight: bold; padding: 10px; font-size: 10pt");
|
||||
|
||||
// Stylesheet
|
||||
UI::applyStyle(*this, "eink");
|
||||
|
||||
// Button tweaks
|
||||
int autoRepeatDelay = 1250;
|
||||
int autoRepeatInterval = 20;
|
||||
|
||||
ui->CBSDecreaseBtn->setAutoRepeat(true);
|
||||
ui->CBSDecreaseBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->CBSDecreaseBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
ui->CBSIncreaseBtn->setAutoRepeat(true);
|
||||
ui->CBSIncreaseBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->CBSIncreaseBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
ui->idleSleepDecreaseBtn->setAutoRepeat(true);
|
||||
ui->idleSleepDecreaseBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->idleSleepDecreaseBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
ui->idleSleepIncreaseBtn->setAutoRepeat(true);
|
||||
ui->idleSleepIncreaseBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->idleSleepIncreaseBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
ui->idleSleepDecreaseMBtn->setAutoRepeat(true);
|
||||
ui->idleSleepDecreaseMBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->idleSleepDecreaseMBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
ui->idleSleepIncreaseMBtn->setAutoRepeat(true);
|
||||
ui->idleSleepIncreaseMBtn->setAutoRepeatDelay(autoRepeatDelay);
|
||||
ui->idleSleepIncreaseMBtn->setAutoRepeatInterval(autoRepeatInterval);
|
||||
|
||||
// Hide items
|
||||
ui->hLabel_3->hide();
|
||||
ui->hCpuFreqComboBox->hide();
|
||||
|
||||
ui->hWhenChargerSleepBtn->hide();
|
||||
ui->hChargerWakeUpBtn->hide();
|
||||
ui->hCustomCaseBtn->hide();
|
||||
|
||||
// Prepare variables from system configuration (20-sleep_daemon)
|
||||
log("Reading variables from power daemon configuration", className);
|
||||
|
||||
// 1 - cinematicBrightnessDelayMs
|
||||
QString cinematicBrightnessMs = readFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/1-cinematicBrightnessDelayMs");
|
||||
|
||||
cinematicBrightnessInt = cinematicBrightnessMs.toInt();
|
||||
convertCinematicInt();
|
||||
|
||||
// 2 - cpuGovernor
|
||||
QString cpuGovernor = readFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/2-cpuGovernor");
|
||||
|
||||
QStringList cpuGovernorList = QStringList{ cpuGovernor };
|
||||
if (cpuGovernorList.contains("interactive") == false) {
|
||||
cpuGovernorList.append("interactive");
|
||||
}
|
||||
if (cpuGovernorList.contains("conservative") == false) {
|
||||
cpuGovernorList.append("conservative");
|
||||
}
|
||||
if (cpuGovernorList.contains("userspace") == false) {
|
||||
cpuGovernorList.append("userspace");
|
||||
}
|
||||
if (cpuGovernorList.contains("powersave") == false) {
|
||||
cpuGovernorList.append("powersave");
|
||||
}
|
||||
if (cpuGovernorList.contains("ondemand") == false) {
|
||||
cpuGovernorList.append("ondemand");
|
||||
}
|
||||
if (cpuGovernorList.contains("performance") == false) {
|
||||
cpuGovernorList.append("performance");
|
||||
}
|
||||
|
||||
ui->hCpuFreqComboBox->addItems(cpuGovernorList);
|
||||
ui->hCpuFreqComboBox->setCurrentIndex(0);
|
||||
|
||||
// 3 - whenChargerSleep
|
||||
if (checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/3-whenChargerSleep") == true) {
|
||||
whenChargerSleepBool = true;
|
||||
ui->hWhenChargerSleepBtn->click();
|
||||
} else {
|
||||
whenChargerSleepBool = false;
|
||||
}
|
||||
|
||||
// 4 - chargerWakeUp
|
||||
if (checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/4-chargerWakeUp") == true) {
|
||||
chargerWakeUpBool = true;
|
||||
ui->hChargerWakeUpBtn->click();
|
||||
} else {
|
||||
chargerWakeUpBool = false;
|
||||
}
|
||||
|
||||
// 5 - wifiReconnect
|
||||
if (checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/5-wifiReconnect") == true) {
|
||||
ui->wifiReconnectBtn->click();
|
||||
wifiReconnectBool = true;
|
||||
} else {
|
||||
wifiReconnectBool = false;
|
||||
}
|
||||
|
||||
// 6 - ledUsage
|
||||
if (checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/6-ledUsage") == true) {
|
||||
ui->ledUsageBtn->click();
|
||||
ledUsageBool = true;
|
||||
} else {
|
||||
ledUsageBool = false;
|
||||
}
|
||||
|
||||
// 7 - idleSleep
|
||||
QString idleSleepString = readFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/7-idleSleep");
|
||||
idleSleepInt = idleSleepString.replace("\n", "").toInt();
|
||||
convertIdleSleepInt();
|
||||
|
||||
// 8 - customCase
|
||||
if (checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/8-customCase") == true) {
|
||||
ui->hCustomCaseBtn->click();
|
||||
customCaseBool = true;
|
||||
} else {
|
||||
customCaseBool = false;
|
||||
}
|
||||
|
||||
// 9 - deepSleep
|
||||
if (checkconfig("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/9-deepSleep") == true) {
|
||||
ui->deepSleepBtn->click();
|
||||
deepSleepBool = true;
|
||||
} else {
|
||||
deepSleepBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
PowerDaemonSettingsWidget::~PowerDaemonSettingsWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_CBSIncreaseBtn_clicked() {
|
||||
if (cinematicBrightnessInt < 500) {
|
||||
cinematicBrightnessInt = cinematicBrightnessInt + 1;
|
||||
convertCinematicInt();
|
||||
}
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_CBSDecreaseBtn_clicked() {
|
||||
if (cinematicBrightnessInt != 0) {
|
||||
cinematicBrightnessInt = cinematicBrightnessInt - 1;
|
||||
convertCinematicInt();
|
||||
}
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_exitBtn_clicked() {
|
||||
// Save all to files
|
||||
// 1 - cinematicBrightnessdelayMs
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/1-cinematicBrightnessDelayMs", QString::number(cinematicBrightnessInt));
|
||||
// 2 - cpuGovernor
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/2-cpuGovernor", ui->hCpuFreqComboBox->currentText());
|
||||
// 3 - whenChargerSleep
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/3-whenChargerSleep", QVariant(whenChargerSleepBool).toString());
|
||||
// 4 - chargerWakeUp
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/4-chargerWakeUp", QVariant(chargerWakeUpBool).toString());
|
||||
// 5 - wifiReconnect
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/5-wifiReconnect", QVariant(wifiReconnectBool).toString());
|
||||
// 6 - ledUsage
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/6-ledUsage", QVariant(ledUsageBool).toString());
|
||||
// 7 - idleSleep
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/7-idleSleep", QString::number(idleSleepInt));
|
||||
// 8 - customCase
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/8-customCase", QVariant(customCaseBool).toString());
|
||||
// 9 - deepSleep
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/9-deepSleep", QVariant(deepSleepBool).toString());
|
||||
|
||||
// Notify power daemon of configuration update
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/updateConfig", "true");
|
||||
|
||||
PowerDaemonSettingsWidget::close();
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_expBtn_clicked() {
|
||||
// TODO: Implement additional warning
|
||||
ui->hLabel_3->show();
|
||||
ui->hCpuFreqComboBox->show();
|
||||
|
||||
ui->hWhenChargerSleepBtn->show();
|
||||
ui->hChargerWakeUpBtn->show();
|
||||
ui->hCustomCaseBtn->show();
|
||||
|
||||
ui->expBtn->hide();
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_hWhenChargerSleepBtn_clicked(bool checked) {
|
||||
QString settingString = "suspend when charging";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
whenChargerSleepBool = true;
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
whenChargerSleepBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_hChargerWakeUpBtn_clicked(bool checked) {
|
||||
QString settingString = "ignore charger wake-up events";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
chargerWakeUpBool = true;
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
chargerWakeUpBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_wifiReconnectBtn_clicked(bool checked) {
|
||||
QString settingString = "Wi-Fi reconnection on wake-up";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
wifiReconnectBool = true;
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
wifiReconnectBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_ledUsageBtn_clicked(bool checked) {
|
||||
QString settingString = "use LED";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
ledUsageBool = true;
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
ledUsageBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_idleSleepIncreaseBtn_clicked() {
|
||||
if (idleSleepInt >= 15) {
|
||||
idleSleepInt = idleSleepInt + 1;
|
||||
} else {
|
||||
idleSleepInt = 15;
|
||||
}
|
||||
convertIdleSleepInt();
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_idleSleepDecreaseBtn_clicked() {
|
||||
if (idleSleepInt >= 15) {
|
||||
idleSleepInt = idleSleepInt - 1;
|
||||
if (idleSleepInt == 14) {
|
||||
idleSleepInt = 0;
|
||||
}
|
||||
} else {
|
||||
idleSleepInt = 0;
|
||||
}
|
||||
|
||||
convertIdleSleepInt();
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::convertIdleSleepInt() {
|
||||
int copiedIdleSleepInt = idleSleepInt;
|
||||
int minutes = 0;
|
||||
int seconds = 0;
|
||||
if (copiedIdleSleepInt == 0) {
|
||||
ui->idleSleepLabel->setText("Never");
|
||||
return;
|
||||
}
|
||||
while (copiedIdleSleepInt >= 60) {
|
||||
minutes = minutes + 1;
|
||||
copiedIdleSleepInt = copiedIdleSleepInt - 60;
|
||||
}
|
||||
seconds = copiedIdleSleepInt;
|
||||
|
||||
QString text;
|
||||
if (minutes != 0) {
|
||||
text.append(QString::number(minutes) + "m");
|
||||
}
|
||||
if (seconds != 0) {
|
||||
text.append(" ");
|
||||
text.append(QString::number(seconds) + "s");
|
||||
}
|
||||
ui->idleSleepLabel->setText(text);
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_hCustomCaseBtn_clicked(bool checked) {
|
||||
QString settingString = "custom case";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
customCaseBool = true;
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
customCaseBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_deepSleepBtn_clicked(bool checked) {
|
||||
QString settingString = "deep sleep";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
deepSleepBool = true;
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
deepSleepBool = false;
|
||||
}
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::convertCinematicInt() {
|
||||
QString text = QString::number(cinematicBrightnessInt);
|
||||
// To avoid moving other widgets when the value changes
|
||||
text.append(" ms");
|
||||
ui->CBSLabel->setText(text);
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_idleSleepIncreaseMBtn_clicked() {
|
||||
if (idleSleepInt >= 15) {
|
||||
idleSleepInt = idleSleepInt + 60;
|
||||
} else {
|
||||
idleSleepInt = 60;
|
||||
}
|
||||
convertIdleSleepInt();
|
||||
}
|
||||
|
||||
void PowerDaemonSettingsWidget::on_idleSleepDecreaseMBtn_clicked() {
|
||||
if (idleSleepInt >= 60) {
|
||||
idleSleepInt = idleSleepInt - 60;
|
||||
if (idleSleepInt < 14) {
|
||||
idleSleepInt = 0;
|
||||
}
|
||||
} else {
|
||||
idleSleepInt = 0;
|
||||
}
|
||||
|
||||
convertIdleSleepInt();
|
||||
}
|
|
@ -4,17 +4,17 @@
|
|||
#include <QWidget>
|
||||
|
||||
namespace Ui {
|
||||
class powerDaemonSettings;
|
||||
class PowerDaemonSettingsWidget;
|
||||
}
|
||||
|
||||
class powerDaemonSettings : public QWidget
|
||||
class PowerDaemonSettingsWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit powerDaemonSettings(QWidget *parent = nullptr);
|
||||
~powerDaemonSettings();
|
||||
explicit PowerDaemonSettingsWidget(QWidget *parent = nullptr);
|
||||
~PowerDaemonSettingsWidget();
|
||||
int cinematicBrightnessMs;
|
||||
|
||||
private slots:
|
||||
|
@ -39,7 +39,7 @@ private slots:
|
|||
void on_idleSleepDecreaseMBtn_clicked();
|
||||
|
||||
private:
|
||||
Ui::powerDaemonSettings * ui;
|
||||
Ui::PowerDaemonSettingsWidget * ui;
|
||||
bool whenChargerSleepBool;
|
||||
bool chargerWakeUpBool;
|
||||
bool wifiReconnectBool;
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>powerDaemonSettings</class>
|
||||
<widget class="QWidget" name="powerDaemonSettings">
|
||||
<class>PowerDaemonSettingsWidget</class>
|
||||
<widget class="QWidget" name="PowerDaemonSettingsWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
944
src/ui/settings/settings.cpp
Normal file
944
src/ui/settings/settings.cpp
Normal file
|
@ -0,0 +1,944 @@
|
|||
#include "settings.h"
|
||||
#include "device.h"
|
||||
#include "functions.h"
|
||||
#include "mainwindow.h"
|
||||
#include "ui.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "ui_settings.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QIcon>
|
||||
#include <QMessageBox>
|
||||
#include <QProcess>
|
||||
#include <QScreen>
|
||||
#include <QSettings>
|
||||
#include <QTimer>
|
||||
#include <QWidget>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <streambuf>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
SettingsWidget::SettingsWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::SettingsWidget) {
|
||||
Device *device = Device::getSingleton();
|
||||
|
||||
ui->setupUi(this);
|
||||
SettingsWidget::setFont(QFont("u001"));
|
||||
ui->comboBox->setFont(QFont("u001"));
|
||||
ui->tzComboBox->setFont(QFont("u001"));
|
||||
ui->aboutBtn->setFont(QFont("u001"));
|
||||
ui->headerBtn->setFont(QFont("Inter"));
|
||||
ui->headerLabel->setFont(QFont("Chivo"));
|
||||
ui->readingSettingsBtn->setFont(QFont("Chivo"));
|
||||
ui->homeSettingsBtn->setFont(QFont("Chivo"));
|
||||
ui->librarySettingsBtn->setFont(QFont("Chivo"));
|
||||
ui->storageSettingsBtn->setFont(QFont("Chivo"));
|
||||
ui->systemSettingsBtn->setFont(QFont("Chivo"));
|
||||
ui->securitySettingsBtn->setFont(QFont("Chivo"));
|
||||
ui->okBtn->setFont(QFont("Inter"));
|
||||
|
||||
ui->setPasscodeBtn->setProperty("type", "borderless");
|
||||
ui->okBtn->setProperty("type", "borderless");
|
||||
ui->aboutBtn->setProperty("type", "borderless");
|
||||
ui->requestLeaseBtn->setProperty("type", "borderless");
|
||||
ui->usbmsBtn->setProperty("type", "borderless");
|
||||
ui->updateBtn->setProperty("type", "borderless");
|
||||
ui->resetBtn->setProperty("type", "borderless");
|
||||
ui->showSystemInfoBtn->setProperty("type", "borderless");
|
||||
ui->generateSystemReportBtn->setProperty("type", "borderless");
|
||||
ui->checkOtaUpdateBtn->setProperty("type", "borderless");
|
||||
ui->repackBtn->setProperty("type", "borderless");
|
||||
ui->exportHighlightsBtn->setProperty("type", "borderless");
|
||||
ui->label->setStyleSheet("font-size: 10.5pt; font-weight: bold");
|
||||
ui->okBtn->setStyleSheet("font-weight: bold");
|
||||
ui->aboutBtn->setStyleSheet("font-size: 9pt");
|
||||
ui->requestLeaseBtn->setStyleSheet("font-size: 9pt");
|
||||
ui->usbmsBtn->setStyleSheet("font-size: 9pt");
|
||||
ui->updateBtn->setStyleSheet("font-size: 9pt");
|
||||
ui->resetBtn->setStyleSheet("font-size: 9pt");
|
||||
ui->showSystemInfoBtn->setStyleSheet("font-size: 9pt");
|
||||
ui->generateSystemReportBtn->setStyleSheet("font-size: 9pt");
|
||||
ui->checkOtaUpdateBtn->setStyleSheet("font-size: 9pt");
|
||||
ui->comboBox->setStyleSheet("font-size: 9pt");
|
||||
ui->tzComboBox->setStyleSheet("font-size: 9pt");
|
||||
ui->setPasscodeBtn->setStyleSheet("font-size: 9pt");
|
||||
ui->repackBtn->setStyleSheet("font-size: 9pt");
|
||||
ui->exportHighlightsBtn->setStyleSheet("font-size: 9pt");
|
||||
|
||||
// Getting the screen's size
|
||||
sW = QGuiApplication::screens()[0]->size().width();
|
||||
sH = QGuiApplication::screens()[0]->size().height();
|
||||
|
||||
// Defining what the default icon size will be
|
||||
if (device->getScreenSize() == Device::ScreenSize::SMALL) {
|
||||
homeIconWidth = sW / 18;
|
||||
homeIconHeight = sW / 18;
|
||||
} else {
|
||||
homeIconWidth = sW / 20;
|
||||
homeIconHeight = sW / 20;
|
||||
}
|
||||
|
||||
ui->headerStackedWidget->hide();
|
||||
|
||||
ui->headerBtn->setIcon(QIcon(":/resources/chevron-left.png"));
|
||||
ui->headerBtn->setProperty("type", "borderless");
|
||||
ui->headerBtn->setStyleSheet("font-size: 9pt; font-weight: bold; padding: 15px");
|
||||
ui->headerLabel->setStyleSheet("padding: 15px");
|
||||
|
||||
ui->readingSettingsBtn->setText("\t\t\tReading");
|
||||
ui->readingSettingsBtn->setProperty("type", "borderless");
|
||||
ui->readingSettingsBtn->setStyleSheet("padding: 25px; Text-align: left");
|
||||
ui->readingSettingsBtn->setIcon(QIcon(":/resources/book.png"));
|
||||
ui->readingSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
|
||||
ui->homeSettingsBtn->setText("\t\t\tHome");
|
||||
ui->homeSettingsBtn->setProperty("type", "borderless");
|
||||
ui->homeSettingsBtn->setStyleSheet("padding: 25px; Text-align:left");
|
||||
ui->homeSettingsBtn->setIcon(QIcon(":/resources/home.png"));
|
||||
ui->homeSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
|
||||
ui->librarySettingsBtn->setText("\t\t\t Library");
|
||||
ui->librarySettingsBtn->setProperty("type", "borderless");
|
||||
ui->librarySettingsBtn->setStyleSheet("padding: 25px; Text-align:left");
|
||||
ui->librarySettingsBtn->setIcon(QIcon(":/resources/online-library.png"));
|
||||
ui->storageSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
|
||||
ui->storageSettingsBtn->setText("\t\t\tStorage");
|
||||
ui->storageSettingsBtn->setProperty("type", "borderless");
|
||||
ui->storageSettingsBtn->setStyleSheet("padding: 25px; Text-align:left");
|
||||
ui->storageSettingsBtn->setIcon(QIcon(":/resources/usbms-inverted.png"));
|
||||
ui->storageSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
|
||||
ui->systemSettingsBtn->setText("\t\t\tSystem");
|
||||
ui->systemSettingsBtn->setProperty("type", "borderless");
|
||||
ui->systemSettingsBtn->setStyleSheet("padding: 25px; Text-align:left");
|
||||
ui->systemSettingsBtn->setIcon(QIcon(":/resources/settings.png"));
|
||||
ui->systemSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
|
||||
ui->securitySettingsBtn->setText("\t\t\tSecurity");
|
||||
ui->securitySettingsBtn->setProperty("type", "borderless");
|
||||
ui->securitySettingsBtn->setStyleSheet("padding: 25px; Text-align:left");
|
||||
ui->securitySettingsBtn->setIcon(QIcon(":/resources/lock.png"));
|
||||
ui->securitySettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
|
||||
ui->usbNetworkingCheckBox->hide();
|
||||
ui->requestLeaseBtn->hide();
|
||||
ui->usbmsBtn->hide();
|
||||
ui->label_4->hide();
|
||||
ui->label_6->hide();
|
||||
ui->updateBtn->hide();
|
||||
ui->updateLabel->hide();
|
||||
ui->enableLockscreenCheckBox->hide();
|
||||
ui->setPasscodeBtn->hide();
|
||||
ui->setPasscodeLabel->hide();
|
||||
|
||||
// Variables
|
||||
defineDefaultPageSize(0);
|
||||
defineDefaultPageSize(1);
|
||||
|
||||
// Settings tweaking + enabling specific features whether it's running on the provided integrated OS or Kobo firmware
|
||||
if (checkconfig(".config/01-demo/config") == true) {
|
||||
ui->demoCheckBox->click();
|
||||
}
|
||||
if (checkconfig(".config/02-clock/config") == true) {
|
||||
ui->clockCheckBox->click();
|
||||
}
|
||||
if (checkconfig(".config/05-quote/config") == true) {
|
||||
ui->quoteCheckBox->click();
|
||||
}
|
||||
|
||||
if (device->supportsNightmode()) {
|
||||
if (checkconfig(".config/10-dark_mode/config") == true) {
|
||||
ui->darkModeCheckBox->click();
|
||||
}
|
||||
} else {
|
||||
ui->darkModeCheckBox->hide();
|
||||
ui->darkModeCheckBox->deleteLater();
|
||||
}
|
||||
|
||||
// Words number
|
||||
QString wordsNumberConfigStr = readFile(".config/07-words_number/config");
|
||||
if (wordsNumberConfigStr.isEmpty()) {
|
||||
Device::ScreenSize size = device->getScreenSize();
|
||||
if (size == Device::ScreenSize::SMALL) {
|
||||
wordsNumberSaved = 120;
|
||||
} else if (size == Device::ScreenSize::VERY_LARGE) {
|
||||
wordsNumberSaved = 250;
|
||||
} else {
|
||||
wordsNumberSaved = 175;
|
||||
}
|
||||
} else {
|
||||
QString words_number = wordsNumberConfigStr;
|
||||
wordsNumberSaved = wordsNumberConfigStr.toInt();
|
||||
}
|
||||
ui->wordsNumberValueLabel->setText(QString::number(wordsNumberSaved));
|
||||
|
||||
// ePUB page size
|
||||
if (checkconfig(".config/13-epub_page_size/set") == true) {
|
||||
QString epubPageWidthSettingStr = readFile(".config/13-epub_page_size/width");
|
||||
if (!epubPageWidthSettingStr.isEmpty()) {
|
||||
QString pageWidth = epubPageWidthSettingStr;
|
||||
ui->pageSizeWidthLabel->setText(pageWidth);
|
||||
pageSizeWidthSaved = pageWidth.toInt();
|
||||
} else {
|
||||
// Failsafe: setting default
|
||||
ui->pageSizeWidthLabel->setText(QString::number(defaultEpubPageWidth));
|
||||
pageSizeWidthSaved = defaultEpubPageWidth;
|
||||
}
|
||||
QString epubPageHeightSettingStr = readFile(".config/13-epub_page_size/height");
|
||||
if (!epubPageHeightSettingStr.isEmpty()) {
|
||||
QString pageHeight = epubPageHeightSettingStr;
|
||||
ui->pageSizeHeightLabel->setText(pageHeight);
|
||||
pageSizeHeightSaved = pageHeight.toInt();
|
||||
} else {
|
||||
// Failsafe: setting default
|
||||
ui->pageSizeHeightLabel->setText(QString::number(defaultEpubPageHeight));
|
||||
pageSizeHeightSaved = defaultEpubPageHeight;
|
||||
}
|
||||
} else {
|
||||
ui->pageSizeWidthLabel->setText(QString::number(defaultEpubPageWidth));
|
||||
ui->pageSizeHeightLabel->setText(QString::number(defaultEpubPageHeight));
|
||||
pageSizeHeightSaved = defaultEpubPageHeight;
|
||||
pageSizeWidthSaved = defaultEpubPageWidth;
|
||||
}
|
||||
|
||||
// QTextEdit scroll bar in Reader framework
|
||||
if (checkconfig(".config/14-reader_scrollbar/config") == true) {
|
||||
ui->readerScrollBarCheckBox->click();
|
||||
}
|
||||
|
||||
// Sticky menubar
|
||||
if (checkconfig(".config/11-menubar/sticky") == true) {
|
||||
ui->menuBarCheckBox->click();
|
||||
}
|
||||
|
||||
// Refresh
|
||||
QString refreshSettingStr = readFile(".config/04-book/refresh");
|
||||
if (refreshSettingStr.isEmpty()) {
|
||||
// Set default option, 3
|
||||
writeFile(".config/04-book/refresh", "3");
|
||||
ui->comboBox->setCurrentText("3 pages");
|
||||
} else {
|
||||
int refreshInt = refreshSettingStr.toInt();
|
||||
if (refreshInt == -1) {
|
||||
ui->comboBox->setCurrentText("Never refresh");
|
||||
}
|
||||
if (refreshInt == 0) {
|
||||
ui->comboBox->setCurrentText("Every page");
|
||||
}
|
||||
if (refreshInt == 1) {
|
||||
ui->comboBox->setCurrentText("1 page");
|
||||
}
|
||||
if (refreshInt == 2) {
|
||||
ui->comboBox->setCurrentText("2 pages");
|
||||
}
|
||||
if (refreshInt == 3) {
|
||||
ui->comboBox->setCurrentText("3 pages");
|
||||
}
|
||||
if (refreshInt == 4) {
|
||||
ui->comboBox->setCurrentText("4 pages");
|
||||
}
|
||||
if (refreshInt == 5) {
|
||||
ui->comboBox->setCurrentText("5 pages");
|
||||
}
|
||||
if (refreshInt == 6) {
|
||||
ui->comboBox->setCurrentText("6 pages");
|
||||
}
|
||||
}
|
||||
|
||||
// Lock screen
|
||||
if (checkconfig(".config/12-lockscreen/config") == true) {
|
||||
ui->enableLockscreenCheckBox->click();
|
||||
}
|
||||
|
||||
// Global reading settings
|
||||
if (checkconfig(".config/16-global_reading_settings/config") == true) {
|
||||
ui->globalReadingSettingsCheckBox->click();
|
||||
}
|
||||
|
||||
// Encrypted storage
|
||||
if (checkconfig(".config/18-encrypted_storage/status") == true) {
|
||||
ui->enableEncryptedStorageCheckBox->click();
|
||||
} else {
|
||||
// Next interaction will be by the user
|
||||
enableEncryptedStorageUserChange = true;
|
||||
}
|
||||
if (getEncFSStatus() == false) {
|
||||
ui->repackLabel->hide();
|
||||
ui->repackBtn->hide();
|
||||
}
|
||||
|
||||
// Timezone
|
||||
ui->tzComboBox->addItems(QStringList(readFile(":/resources/tzlist").split("\n", Qt::SkipEmptyParts)));
|
||||
timezone_not_user_change = true;
|
||||
if (readFile(".config/19-timezone/config-name").isEmpty()) {
|
||||
ui->tzComboBox->setCurrentText("UTC");
|
||||
} else {
|
||||
ui->tzComboBox->setCurrentText(readFile(".config/19-timezone/config-name"));
|
||||
}
|
||||
|
||||
// Local library folders support
|
||||
if (checkconfig(".config/21-local_library/folders") == true) {
|
||||
ui->localLibraryShowFoldersCheckBox->click();
|
||||
}
|
||||
|
||||
// USB show dialog
|
||||
if (checkconfig(".config/22-usb/show-dialog") == true) {
|
||||
ui->usbmsDialogBox->click();
|
||||
}
|
||||
|
||||
// Automatic updates
|
||||
if (checkconfig(".config/23-updates/check-updates") == true) {
|
||||
ui->autoCheckUpdatesBox->click();
|
||||
}
|
||||
|
||||
// 'Export highlights' button
|
||||
if (!QFile::exists(global::localLibrary::highlightsDatabasePath) or readFile(global::localLibrary::highlightsDatabasePath).isEmpty()) {
|
||||
ui->exportHighlightsBtn->setEnabled(false);
|
||||
}
|
||||
|
||||
if (readFile(".config/12-lockscreen/background") == "blank") {
|
||||
ui->lockscreenBackgroundComboBox->setCurrentIndex(0);
|
||||
} else if (readFile(".config/12-lockscreen/background") == "screenSaver") {
|
||||
ui->lockscreenBackgroundComboBox->setCurrentIndex(1);
|
||||
} else if (readFile(".config/12-lockscreen/background") == "background") {
|
||||
ui->lockscreenBackgroundComboBox->setCurrentIndex(2);
|
||||
}
|
||||
|
||||
if (checkconfig("/opt/inkbox_genuine") == true) {
|
||||
// Enforcing security policy if the user has not rooted the device
|
||||
if (checkconfig("/external_root/opt/root/rooted") == true) {
|
||||
ui->usbNetworkingCheckBox->show();
|
||||
if (checkconfig("/external_root/boot/flags/USBNET_ENABLE")) {
|
||||
ui->usbNetworkingCheckBox->click();
|
||||
}
|
||||
ui->requestLeaseBtn->show();
|
||||
ui->label_4->show();
|
||||
} else {
|
||||
ui->usbNetworkingCheckBox->hide();
|
||||
ui->requestLeaseBtn->hide();
|
||||
ui->label_4->hide();
|
||||
}
|
||||
ui->enableLockscreenCheckBox->show();
|
||||
ui->setPasscodeBtn->show();
|
||||
ui->setPasscodeLabel->show();
|
||||
ui->usbmsBtn->show();
|
||||
ui->label_6->show();
|
||||
} else {
|
||||
ui->label_8->setText("Reset InkBox");
|
||||
}
|
||||
|
||||
if (!device->supportsWifi()) {
|
||||
ui->checkOtaUpdateLabel->hide();
|
||||
ui->checkOtaUpdateBtn->hide();
|
||||
ui->checkOtaUpdateLabel->deleteLater();
|
||||
ui->checkOtaUpdateBtn->deleteLater();
|
||||
ui->checkOtaUpdateGridLayout->deleteLater();
|
||||
}
|
||||
|
||||
UI::applyStyle(*this, "eink");
|
||||
}
|
||||
|
||||
SettingsWidget::~SettingsWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void SettingsWidget::on_okBtn_clicked() {
|
||||
saveDeferredSettings();
|
||||
|
||||
// Prevent potential unknown damage launching via shell script this could do
|
||||
if (launch_sh == true) {
|
||||
if (ui_enable_changed == true) {
|
||||
ui_enable_changed = false;
|
||||
global::settings::settingsRebootDialog = true;
|
||||
generalDialogWindow = new GeneralDialog();
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
} else {
|
||||
QProcess process;
|
||||
process.startDetached("inkbox.sh", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
} else {
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::saveDeferredSettings() {
|
||||
// Save things
|
||||
writeFile(".config/07-words_number/config", QString::number(wordsNumberSaved));
|
||||
log("Set text files words number to " + QString::number(wordsNumberSaved), className);
|
||||
|
||||
writeFile(".config/13-epub_page_size/width", QString::number(pageSizeWidthSaved));
|
||||
writeFile(".config/13-epub_page_size/set", "true");
|
||||
|
||||
writeFile(".config/13-epub_page_size/height", QString::number(pageSizeHeightSaved));
|
||||
writeFile(".config/13-epub_page_size/set", "true");
|
||||
|
||||
// Notify power daemon of a potential configuration update
|
||||
writeFile("/mnt/onboard/.adds/inkbox/.config/20-sleep_daemon/updateConfig", "true");
|
||||
}
|
||||
|
||||
void SettingsWidget::on_aboutBtn_clicked() {
|
||||
log("Showing About message box", className);
|
||||
if (checkconfig("/opt/inkbox_genuine") == true) {
|
||||
QString aboutmsg = "InkBox is an open-source, Qt-based eBook reader. It aims to bring you the latest Qt features while being also fast and responsive.";
|
||||
aboutmsg.prepend("<font face='u001'>");
|
||||
aboutmsg.append("<br><br>InkBox ");
|
||||
aboutmsg.append(readFile("/external_root/opt/isa/version"));
|
||||
aboutmsg.append("</font>");
|
||||
QMessageBox::information(this, tr("Information"), aboutmsg);
|
||||
} else {
|
||||
QMessageBox::information(this, tr("About"), tr("InkBox is an open-source Qt-based eBook reader. It aims to bring you the latest Qt features while being also fast and responsive."));
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_demoCheckBox_toggled(bool checked) {
|
||||
QString settingString = "change MainWindow label demo";
|
||||
// Write to config file
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
checked_box = true;
|
||||
writeconfig(".config/01-demo/config", "InkboxChangeLabel=");
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
checked_box = false;
|
||||
writeconfig(".config/01-demo/config", "InkboxChangeLabel=");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_clockCheckBox_toggled(bool checked) {
|
||||
QString settingString = "clock with seconds";
|
||||
// Write to config file
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
checked_box = true;
|
||||
writeconfig(".config/02-clock/config", "ClockShowSeconds=");
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
checked_box = false;
|
||||
writeconfig(".config/02-clock/config", "ClockShowSeconds=");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_quoteCheckBox_toggled(bool checked) {
|
||||
QString settingString = "disable show quotes";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
checked_box = true;
|
||||
writeconfig(".config/05-quote/config", "DisableQuote=");
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
checked_box = false;
|
||||
writeconfig(".config/05-quote/config", "DisableQuote=");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_requestLeaseBtn_clicked() {
|
||||
log("Requesting DHCP lease", className);
|
||||
QString prog("chroot");
|
||||
QStringList args;
|
||||
args << "/external_root"
|
||||
<< "/usr/sbin/dhclient";
|
||||
QProcess *proc = new QProcess();
|
||||
proc->start(prog, args);
|
||||
proc->waitForFinished();
|
||||
proc->deleteLater();
|
||||
}
|
||||
|
||||
void SettingsWidget::on_usbmsBtn_clicked() {
|
||||
usbms_launch();
|
||||
}
|
||||
|
||||
void SettingsWidget::on_updateBtn_clicked() {
|
||||
log("'Update' button clicked", className);
|
||||
writeFile("/mnt/onboard/onboard/.inkbox/can_really_update", "true\n");
|
||||
writeFile("/external_root/opt/update/will_update", "true\n");
|
||||
writeFile("/external_root/boot/flags/WILL_UPDATE", "true\n");
|
||||
QString prog("/sbin/reboot");
|
||||
QStringList args;
|
||||
QProcess *proc = new QProcess();
|
||||
proc->start(prog, args);
|
||||
proc->waitForFinished();
|
||||
proc->deleteLater();
|
||||
}
|
||||
|
||||
void SettingsWidget::on_darkModeCheckBox_toggled(bool checked) {
|
||||
QString settingString = "dark mode";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
writeFile(".config/10-dark_mode/config", "true");
|
||||
writeFile("/tmp/invertScreen", "y");
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
writeFile(".config/10-dark_mode/config", "false");
|
||||
writeFile("/tmp/invertScreen", "n");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_menuBarCheckBox_toggled(bool checked) {
|
||||
QString settingString = "sticky menu bar";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
checked_box = true;
|
||||
writeconfig(".config/11-menubar/sticky", "StickyMenuBar=");
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
checked_box = false;
|
||||
writeconfig(".config/11-menubar/sticky", "StickyMenuBar=");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_comboBox_currentIndexChanged(const QString &arg1) {
|
||||
log("Setting page refresh setting to " + arg1, className);
|
||||
if (arg1 == "Every page") {
|
||||
writeFile(".config/04-book/refresh", "0");
|
||||
}
|
||||
if (arg1 == "1 page") {
|
||||
writeFile(".config/04-book/refresh", "1");
|
||||
}
|
||||
if (arg1 == "2 pages") {
|
||||
writeFile(".config/04-book/refresh", "2");
|
||||
}
|
||||
if (arg1 == "3 pages") {
|
||||
writeFile(".config/04-book/refresh", "3");
|
||||
}
|
||||
if (arg1 == "4 pages") {
|
||||
writeFile(".config/04-book/refresh", "4");
|
||||
}
|
||||
if (arg1 == "5 pages") {
|
||||
writeFile(".config/04-book/refresh", "5");
|
||||
}
|
||||
if (arg1 == "6 pages") {
|
||||
writeFile(".config/04-book/refresh", "6");
|
||||
}
|
||||
if (arg1 == "Never refresh") {
|
||||
writeFile(".config/04-book/refresh", "-1");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_resetBtn_clicked() {
|
||||
log("'Reset' button clicked", className);
|
||||
// We write to a temporary file to show a "Reset" prompt
|
||||
writeFile("/inkbox/resetDialog", "true");
|
||||
|
||||
// We setup the dialog
|
||||
log("Showing reset dialog", className);
|
||||
generalDialogWindow = new GeneralDialog();
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
}
|
||||
|
||||
void SettingsWidget::on_setPasscodeBtn_clicked() {
|
||||
log("'Set passcode' button clicked", className);
|
||||
log("Launching lockscreen binary", className);
|
||||
saveDeferredSettings();
|
||||
writeFile("/tmp/setPasscode", "true");
|
||||
QProcess process;
|
||||
process.startDetached("lockscreen", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void SettingsWidget::on_enableLockscreenCheckBox_toggled(bool checked) {
|
||||
QString settingString = "lockscreen";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
writeFile(".config/12-lockscreen/config", "true");
|
||||
// Launching passcode setup wizard if none seems to be set at the moment
|
||||
if (!(QFile::exists(".config/12-lockscreen/passcode") && QFile::exists(".config/12-lockscreen/salt"))) {
|
||||
ui->setPasscodeBtn->click();
|
||||
}
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
writeFile(".config/12-lockscreen/config", "false");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_showSystemInfoBtn_clicked() {
|
||||
log("'Show system info' button clicked", className);
|
||||
global::usbms::usbmsDialog = false;
|
||||
|
||||
Device::SysInfo info = Device::getSingleton()->getSystemInfo();
|
||||
|
||||
QString text;
|
||||
text = "<b>InkBox OS version ";
|
||||
text.append(readFile("/external_root/opt/isa/version"));
|
||||
text.append("</b><br>Copyright <font face='Inter'>©</font> 2021-2024 Nicolas Mailloux and contributors<br>Special thanks to: Szybet, NiLuJe, akemnade, Rain92, Ansraer (GitHub)");
|
||||
text.append("<br><b>GUI Git commit:</b> ");
|
||||
text.append(info.inkGitVersion);
|
||||
text.append("<br><b>Device UID:</b> ");
|
||||
text.append(info.uid);
|
||||
text.append("<br><b>Kernel version:</b> ");
|
||||
text.append(info.kernelVersion);
|
||||
text.append("<br><b>Kernel build:</b> ");
|
||||
text.append(info.kernelBuild);
|
||||
text.append("<br><b>Kernel commit:</b> ");
|
||||
text.append(info.kernelCommit);
|
||||
text.append("<br><b>Device:</b> ");
|
||||
QString device = Device::getSingleton()->getID();
|
||||
text.append(device);
|
||||
text.append("<br><b>IP address: </b>");
|
||||
text.append(info.ipAddress);
|
||||
|
||||
global::text::textBrowserContents = text;
|
||||
global::text::textBrowserDialog = true;
|
||||
|
||||
// Show a system info dialog
|
||||
log("Showing system info dialog", className);
|
||||
generalDialogWindow = new GeneralDialog();
|
||||
generalDialogWindow->yIncrease = determineYIncrease();
|
||||
generalDialogWindow->increaseSize();
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
}
|
||||
|
||||
void SettingsWidget::on_readerScrollBarCheckBox_toggled(bool checked) {
|
||||
QString settingString = "scrollbar display if necessary";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
writeFile(".config/14-reader_scrollbar/config", "true");
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
writeFile(".config/14-reader_scrollbar/config", "false");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::brightnessDown() {
|
||||
UI::transitionBrightness(0);
|
||||
}
|
||||
|
||||
void SettingsWidget::on_globalReadingSettingsCheckBox_toggled(bool checked) {
|
||||
QString settingString = "global reading settings";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
checked_box = true;
|
||||
writeconfig(".config/16-global_reading_settings/config", "GlobalReadingSettings=");
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
checked_box = false;
|
||||
writeconfig(".config/16-global_reading_settings/config", "GlobalReadingSettings=");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_checkOtaUpdateBtn_clicked() {
|
||||
log("'Check for OTA update' button clicked", className);
|
||||
if (testPing() == 0) {
|
||||
launchOtaUpdater();
|
||||
} else {
|
||||
emit showToast("Wi-Fi connection error");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::openUpdateDialog() {
|
||||
log("Showing update dialog", className);
|
||||
global::mainwindow::updateDialog = true;
|
||||
// Write to a temporary file to show an "Update" prompt
|
||||
writeFile("/inkbox/updateDialog", "true");
|
||||
|
||||
// Show the dialog
|
||||
generalDialogWindow = new GeneralDialog(this);
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(generalDialogWindow, SIGNAL(showToast(QString)), SLOT(showToastNative(QString)));
|
||||
connect(generalDialogWindow, SIGNAL(closeIndefiniteToast()), SLOT(closeIndefiniteToastNative()));
|
||||
QApplication::processEvents();
|
||||
}
|
||||
|
||||
void SettingsWidget::launchOtaUpdater() {
|
||||
global::toast::modalToast = true;
|
||||
global::toast::indefiniteToast = true;
|
||||
emit showToast("Checking for updates");
|
||||
otaManagerWindow = new OTAUpdateManagerWidget(this);
|
||||
connect(otaManagerWindow, SIGNAL(canOtaUpdate(bool)), SLOT(openUpdateDialogOTA(bool)));
|
||||
otaManagerWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
}
|
||||
|
||||
void SettingsWidget::openUpdateDialogOTA(bool open) {
|
||||
emit closeIndefiniteToast();
|
||||
if (open == true) {
|
||||
global::otaUpdate::isUpdateOta = true;
|
||||
openUpdateDialog();
|
||||
} else {
|
||||
emit showToast("No update available");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::showToastNative(QString messageToDisplay) {
|
||||
emit showToast(messageToDisplay);
|
||||
}
|
||||
|
||||
void SettingsWidget::closeIndefiniteToastNative() {
|
||||
emit closeIndefiniteToast();
|
||||
}
|
||||
|
||||
void SettingsWidget::usbms_launch() {
|
||||
log("Showing USBMS splash", className);
|
||||
global::usbms::launchUsbms = true;
|
||||
|
||||
usbmsWindow = new USBMSSplashWidget();
|
||||
usbmsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
usbmsWindow->setGeometry(QRect(QPoint(0, 0), screen()->geometry().size()));
|
||||
usbmsWindow->show();
|
||||
}
|
||||
|
||||
void SettingsWidget::quit_restart() {
|
||||
// If existing, cleaning bookconfig_mount mountpoint
|
||||
writeFile("/opt/ibxd", "bookconfig_unmount\n");
|
||||
|
||||
// Restarting InkBox
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void SettingsWidget::on_enableEncryptedStorageCheckBox_toggled(bool checked) {
|
||||
QString settingString = "encrypted storage";
|
||||
if (checked == true) {
|
||||
if (enableEncryptedStorageUserChange == true) {
|
||||
logEnabled(settingString, className);
|
||||
setDefaultWorkDir();
|
||||
writeFile(".config/18-encrypted_storage/initial_setup_done", "false");
|
||||
writeFile(".config/18-encrypted_storage/status", "true");
|
||||
if (QFile::exists(".config/18-encrypted_storage/storage_list")) {
|
||||
QFile::remove(".config/18-encrypted_storage/storage_list");
|
||||
}
|
||||
global::settings::settingsRebootDialog = true;
|
||||
global::encfs::enableStorageEncryptionDialog = true;
|
||||
generalDialogWindow = new GeneralDialog(this);
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
} else {
|
||||
enableEncryptedStorageUserChange = true;
|
||||
}
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
global::encfs::disableStorageEncryptionDialog = true;
|
||||
generalDialogWindow = new GeneralDialog(this);
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(generalDialogWindow, SIGNAL(cancelDisableStorageEncryption()), SLOT(cancelDisableStorageEncryption()));
|
||||
connect(generalDialogWindow, SIGNAL(disableStorageEncryption()), SLOT(disableStorageEncryption()));
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::disableStorageEncryption() {
|
||||
log("Disabling encrypted storage", className);
|
||||
setDefaultWorkDir();
|
||||
writeFile("/external_root/run/encfs_stop_cleanup", "true");
|
||||
writeFile("/opt/ibxd", "encfs_stop\n");
|
||||
QThread::msleep(5000);
|
||||
|
||||
writeFile(".config/18-encrypted_storage/status", "false");
|
||||
QFile::remove(".config/18-encrypted_storage/initial_setup_done");
|
||||
QFile::remove(".config/18-encrypted_storage/storage_list");
|
||||
QFile::remove("/mnt/onboard/onboard/data.encfs");
|
||||
|
||||
QDir dumpDir("/mnt/onboard/onboard/encfs-dropbox");
|
||||
dumpDir.removeRecursively();
|
||||
QDir decDir("/mnt/onboard/onboard/encfs-decrypted");
|
||||
decDir.removeRecursively();
|
||||
|
||||
global::settings::settingsRebootDialog = true;
|
||||
generalDialogWindow = new GeneralDialog(this);
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
}
|
||||
|
||||
void SettingsWidget::cancelDisableStorageEncryption() {
|
||||
enableEncryptedStorageUserChange = false;
|
||||
ui->enableEncryptedStorageCheckBox->click();
|
||||
}
|
||||
|
||||
void SettingsWidget::on_repackBtn_clicked() {
|
||||
log("'Repack encrypted storage' button clicked", className);
|
||||
QDir dir("/mnt/onboard/onboard/encfs-dropbox");
|
||||
if (dir.isEmpty()) {
|
||||
log("Showing encrypted storage repack error dialog ('encfs-dropbox' directory is empty)", className);
|
||||
global::encfs::errorNoBooksInDropboxDialog = true;
|
||||
generalDialogWindow = new GeneralDialog(this);
|
||||
generalDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
} else {
|
||||
log("Showing encrypted storage repack dialog", className);
|
||||
writeFile("/external_root/run/encfs_repack", "true");
|
||||
quit_restart();
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_generateSystemReportBtn_clicked() {
|
||||
log("'Generate system report' button clicked", className);
|
||||
log("Generating system report", className);
|
||||
writeFile("/opt/ibxd", "generate_system_report\n");
|
||||
while (true) {
|
||||
if (QFile::exists("/inkbox/systemReportDone")) {
|
||||
if (checkconfig("/inkbox/systemReportDone") == true) {
|
||||
QFile::remove(global::localLibrary::databasePath);
|
||||
emit showToast("System report generated successfully");
|
||||
} else {
|
||||
emit showToast("Error in generating system report");
|
||||
}
|
||||
QFile::remove("/inkbox/systemReportDone");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_tzComboBox_currentTextChanged(const QString &arg1) {
|
||||
if (timezone_not_user_change == true) {
|
||||
timezone_not_user_change = false;
|
||||
} else {
|
||||
log("Setting timezone to " + arg1, className);
|
||||
setDefaultWorkDir();
|
||||
// Preventing unnecessary (e)MMC writes
|
||||
if (readFile(".config/19-timezone/config-name") != arg1) {
|
||||
QProcess::execute("ln", QStringList() << "-sf"
|
||||
<< "/usr/share/zoneinfo/" + arg1 << ".config/19-timezone/config");
|
||||
writeFile(".config/19-timezone/config-name", arg1);
|
||||
writeFile("/opt/ibxd", "gui_remount_localtime\n");
|
||||
QThread::msleep(500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_exportHighlightsBtn_clicked() {
|
||||
QJsonObject jsonObject = readHighlightsDatabase();
|
||||
writeFile("/mnt/onboard/onboard/highlights-" + QDateTime::currentDateTime().toString("dd-MM-yy_hh.mm.ss") + ".json", QJsonDocument(jsonObject).toJson());
|
||||
showToast("Highlights exported successfully");
|
||||
}
|
||||
|
||||
void SettingsWidget::on_wordsNumberIncBtn_clicked() {
|
||||
wordsNumberSaved = wordsNumberSaved + 5;
|
||||
ui->wordsNumberValueLabel->setText(QString::number(wordsNumberSaved));
|
||||
}
|
||||
|
||||
void SettingsWidget::on_wordsNumberDecBtn_clicked() {
|
||||
if (wordsNumberSaved > 10) {
|
||||
wordsNumberSaved = wordsNumberSaved - 5;
|
||||
ui->wordsNumberValueLabel->setText(QString::number(wordsNumberSaved));
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_pageSizeHeightDecBtn_clicked() {
|
||||
if (pageSizeHeightSaved > 100) {
|
||||
pageSizeHeightSaved = pageSizeHeightSaved - 5;
|
||||
ui->pageSizeHeightLabel->setText(QString::number(pageSizeHeightSaved));
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_pageSizeHeightIncBtn_clicked() {
|
||||
pageSizeHeightSaved = pageSizeHeightSaved + 5;
|
||||
ui->pageSizeHeightLabel->setText(QString::number(pageSizeHeightSaved));
|
||||
}
|
||||
|
||||
void SettingsWidget::on_pageSizeWidthDecBtn_clicked() {
|
||||
if (pageSizeWidthSaved > 100) {
|
||||
pageSizeWidthSaved = pageSizeWidthSaved - 5;
|
||||
ui->pageSizeWidthLabel->setText(QString::number(pageSizeWidthSaved));
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_pageSizeWidthIncBtn_clicked() {
|
||||
pageSizeWidthSaved = pageSizeWidthSaved + 5;
|
||||
ui->pageSizeWidthLabel->setText(QString::number(pageSizeWidthSaved));
|
||||
}
|
||||
|
||||
void SettingsWidget::on_localLibraryShowFoldersCheckBox_toggled(bool checked) {
|
||||
QString settingString = "local library folders support";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
checked_box = true;
|
||||
writeconfig(".config/21-local_library/folders", "Folders=");
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
checked_box = false;
|
||||
writeconfig(".config/21-local_library/folders", "Folders=");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_usbmsDialogBox_clicked(bool checked) {
|
||||
QString settingString = "USB Mass Storage dialog display";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
writeFile(".config/22-usb/show-dialog", "true");
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
writeFile(".config/22-usb/show-dialog", "false");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_autoCheckUpdatesBox_clicked(bool checked) {
|
||||
QString settingString = "automatic updates checking";
|
||||
if (checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
writeFile(".config/23-updates/check-updates", "true");
|
||||
} else {
|
||||
logDisabled(settingString, className);
|
||||
writeFile(".config/23-updates/check-updates", "false");
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_lockscreenBackgroundComboBox_currentTextChanged(const QString &arg1) {
|
||||
if (arg1 == "Blank") {
|
||||
writeFile(".config/12-lockscreen/background", "blank");
|
||||
log("Set lockscreen background to 'blank'", className);
|
||||
} else if (arg1 == "Screensaver picture") {
|
||||
writeFile(".config/12-lockscreen/background", "screenSaver");
|
||||
log("Set lockscreen background to 'screenSaver'", className);
|
||||
} else if (arg1 == "Device's screen") {
|
||||
writeFile(".config/12-lockscreen/background", "background");
|
||||
log("Set lockscreen background to 'background'", className);
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_settingsStackedWidget_currentChanged(int arg1) {
|
||||
if (ui->settingsStackedWidget->currentIndex() != 0) {
|
||||
ui->headerLabel->setText(ui->settingsStackedWidget->currentWidget()->objectName());
|
||||
ui->headerStackedWidget->show();
|
||||
} else {
|
||||
ui->headerStackedWidget->hide();
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsWidget::on_readingSettingsBtn_clicked() {
|
||||
log("'Reading settings' button clicked", className);
|
||||
ui->settingsStackedWidget->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
void SettingsWidget::on_homeSettingsBtn_clicked() {
|
||||
log("'Home settings' button clicked", className);
|
||||
ui->settingsStackedWidget->setCurrentIndex(2);
|
||||
}
|
||||
|
||||
void SettingsWidget::on_librarySettingsBtn_clicked() {
|
||||
log("'Library settings' button clicked", className);
|
||||
ui->settingsStackedWidget->setCurrentIndex(3);
|
||||
}
|
||||
|
||||
void SettingsWidget::on_storageSettingsBtn_clicked() {
|
||||
log("'Storage settings' button clicked", className);
|
||||
ui->settingsStackedWidget->setCurrentIndex(4);
|
||||
}
|
||||
|
||||
void SettingsWidget::on_systemSettingsBtn_clicked() {
|
||||
log("'System settings' button clicked", className);
|
||||
ui->settingsStackedWidget->setCurrentIndex(5);
|
||||
}
|
||||
|
||||
void SettingsWidget::on_securitySettingsBtn_clicked() {
|
||||
log("'Security settings' button clicked", className);
|
||||
ui->settingsStackedWidget->setCurrentIndex(6);
|
||||
}
|
||||
|
||||
void SettingsWidget::on_headerBtn_clicked() {
|
||||
// "Home" button
|
||||
log("'Home' button clicked", className);
|
||||
ui->settingsStackedWidget->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
void SettingsWidget::on_usbNetworkingCheckBox_toggled(bool checked) {
|
||||
if (checked) {
|
||||
writeFile("/external_root/boot/flags/USBNET_ENABLE", "true");
|
||||
writeFile("/opt/ibxd", "usbnet_start\n");
|
||||
} else {
|
||||
writeFile("/external_root/boot/flags/USBNET_ENABLE", "false");
|
||||
writeFile("/opt/ibxd", "usbnet_stop\n");
|
||||
}
|
||||
}
|
|
@ -11,10 +11,10 @@
|
|||
using namespace std;
|
||||
|
||||
namespace Ui {
|
||||
class settings;
|
||||
class SettingsWidget;
|
||||
}
|
||||
|
||||
class settings : public QWidget
|
||||
class SettingsWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
@ -33,8 +33,8 @@ public:
|
|||
float homeIconWidth;
|
||||
float homeIconHeight;
|
||||
|
||||
explicit settings(QWidget *parent = nullptr);
|
||||
~settings();
|
||||
explicit SettingsWidget(QWidget *parent = nullptr);
|
||||
~SettingsWidget();
|
||||
|
||||
private slots:
|
||||
void on_demoCheckBox_toggled(bool);
|
||||
|
@ -46,7 +46,6 @@ private slots:
|
|||
void on_usbmsBtn_clicked();
|
||||
void on_updateBtn_clicked();
|
||||
void on_darkModeCheckBox_toggled(bool checked);
|
||||
void on_uiScalingSlider_valueChanged(int value);
|
||||
void on_menuBarCheckBox_toggled(bool checked);
|
||||
void on_comboBox_currentIndexChanged(const QString &arg1);
|
||||
void on_resetBtn_clicked();
|
||||
|
@ -97,10 +96,10 @@ signals:
|
|||
void closeIndefiniteToast();
|
||||
|
||||
private:
|
||||
Ui::settings * ui;
|
||||
usbmsSplash * usbmsWindow;
|
||||
generalDialog * generalDialogWindow;
|
||||
otaManager * otaManagerWindow;
|
||||
Ui::SettingsWidget * ui;
|
||||
USBMSSplashWidget * usbmsWindow;
|
||||
GeneralDialog * generalDialogWindow;
|
||||
OTAUpdateManagerWidget * otaManagerWindow;
|
||||
toast * toastWindow;
|
||||
|
||||
int pageSizeHeightSaved;
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>settings</class>
|
||||
<widget class="QWidget" name="settings">
|
||||
<class>SettingsWidget</class>
|
||||
<widget class="QWidget" name="SettingsWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
|
@ -64,6 +64,7 @@
|
|||
<widget class="QLabel" name="label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -169,7 +170,7 @@
|
|||
<item>
|
||||
<widget class="QStackedWidget" name="settingsStackedWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
<number>5</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="General">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
|
@ -200,8 +201,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>461</width>
|
||||
<height>636</height>
|
||||
<width>457</width>
|
||||
<height>622</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
|
@ -363,6 +364,7 @@
|
|||
<widget class="QPushButton" name="okBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -407,8 +409,8 @@ Save && Quit
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>423</width>
|
||||
<height>738</height>
|
||||
<width>235</width>
|
||||
<height>258</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
|
@ -690,6 +692,7 @@ Save && Quit
|
|||
<widget class="QPushButton" name="exportHighlightsBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -868,6 +871,7 @@ Save && Quit
|
|||
<widget class="QPushButton" name="usbmsBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -937,7 +941,7 @@ Save && Quit
|
|||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="5" column="0">
|
||||
<item row="4" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_7">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
|
@ -969,6 +973,7 @@ Save && Quit
|
|||
<widget class="QPushButton" name="showSystemInfoBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -979,7 +984,54 @@ Save && Quit
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<item row="5" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_19">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="generateSystemReportBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Generate</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_15">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="text">
|
||||
<string>Generate system report</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="usbNetworkingCheckBox">
|
||||
<property name="text">
|
||||
<string>Enable USB networking</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<layout class="QGridLayout" name="checkOtaUpdateGridLayout">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
|
@ -988,6 +1040,7 @@ Save && Quit
|
|||
<widget class="QPushButton" name="checkOtaUpdateBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -1018,7 +1071,80 @@ Save && Quit
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="11" column="0">
|
||||
<item row="7" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_14">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="updateBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Update</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_10">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="updateLabel">
|
||||
<property name="text">
|
||||
<string>Update InkBox</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_18">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_16">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QComboBox" name="tzComboBox"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="text">
|
||||
<string>Timezone</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<spacer name="verticalSpacer_8">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
|
@ -1060,6 +1186,7 @@ Save && Quit
|
|||
<widget class="QPushButton" name="requestLeaseBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -1070,56 +1197,27 @@ Save && Quit
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_14">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<item row="9" column="0">
|
||||
<widget class="QCheckBox" name="autoCheckUpdatesBox">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="updateBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Update</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_10">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="updateLabel">
|
||||
<property name="text">
|
||||
<string>Update InkBox</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<property name="text">
|
||||
<string>Automatically check for updates</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="darkModeCheckBox">
|
||||
<property name="text">
|
||||
<string>Enable night mode</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<item row="3" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_12">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
|
@ -1128,6 +1226,7 @@ Save && Quit
|
|||
<widget class="QPushButton" name="resetBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -1158,146 +1257,6 @@ Save && Quit
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_8">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLabel" name="uiScaleNumberLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>1</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSlider" name="uiScalingSlider">
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="pageStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="uiScalingLabel">
|
||||
<property name="text">
|
||||
<string>UI scaling factor</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_19">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="generateSystemReportBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Generate</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_15">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="text">
|
||||
<string>Generate system report</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<widget class="QCheckBox" name="autoCheckUpdatesBox">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Automatically check for updates</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_18">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_16">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QComboBox" name="tzComboBox"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="text">
|
||||
<string>Timezone</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="usbNetworkingCheckBox">
|
||||
<property name="text">
|
||||
<string>Enable USB networking</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
@ -1350,6 +1309,7 @@ Save && Quit
|
|||
<widget class="QPushButton" name="repackBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
|
@ -1472,6 +1432,7 @@ Save && Quit
|
|||
<widget class="QPushButton" name="setPasscodeBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
101
src/ui/settings/settingschooser.cpp
Normal file
101
src/ui/settings/settingschooser.cpp
Normal file
|
@ -0,0 +1,101 @@
|
|||
#include "settingschooser.h"
|
||||
#include "device.h"
|
||||
#include "functions.h"
|
||||
#include "powerdaemonsettings.h"
|
||||
#include "ui.h"
|
||||
#include "ui_settingschooser.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QScreen>
|
||||
|
||||
SettingsChooserWidget::SettingsChooserWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::SettingsChooserWidget) {
|
||||
ui->setupUi(this);
|
||||
|
||||
// Stylesheet
|
||||
UI::applyStyle(*this, "eink");
|
||||
|
||||
// UI tweaks
|
||||
if (checkconfig("/opt/inkbox_kobox_support") == false) {
|
||||
ui->koboxSettingsBtn->hide();
|
||||
ui->line_3->hide();
|
||||
}
|
||||
|
||||
// Getting the screen's size
|
||||
sW = QGuiApplication::screens()[0]->size().width();
|
||||
sH = QGuiApplication::screens()[0]->size().height();
|
||||
|
||||
Device::ScreenSize screenSize = Device::getSingleton()->getScreenSize();
|
||||
QString padding = "";
|
||||
if (screenSize == Device::ScreenSize::SMALL) {
|
||||
homeIconWidth = sW / 18;
|
||||
homeIconHeight = sW / 18;
|
||||
padding = "18px";
|
||||
} else if (screenSize == Device::ScreenSize::MEDIUM) {
|
||||
homeIconWidth = sW / 20;
|
||||
homeIconHeight = sW / 20;
|
||||
padding = "20px";
|
||||
} else if (screenSize == Device::ScreenSize::LARGE) {
|
||||
homeIconWidth = sW / 20;
|
||||
homeIconHeight = sW / 20;
|
||||
padding = "25px";
|
||||
} else if (screenSize == Device::ScreenSize::VERY_LARGE) {
|
||||
homeIconWidth = sW / 20;
|
||||
homeIconHeight = sW / 20;
|
||||
padding = "40px";
|
||||
}
|
||||
ui->inkboxSettingsBtn->setStyleSheet("padding: " + padding + "; Text-align: left");
|
||||
ui->koboxSettingsBtn->setStyleSheet("padding: " + padding + "; Text-align: left");
|
||||
ui->powerSettingsBtn->setStyleSheet("padding: " + padding + "; Text-align: left");
|
||||
|
||||
ui->inkboxSettingsBtn->setProperty("type", "borderless");
|
||||
ui->koboxSettingsBtn->setProperty("type", "borderless");
|
||||
ui->powerSettingsBtn->setProperty("type", "borderless");
|
||||
|
||||
ui->inkboxSettingsBtn->setText("\t\t\tInkBox settings");
|
||||
ui->koboxSettingsBtn->setText("\t\t\tKoBox settings");
|
||||
ui->powerSettingsBtn->setText("\t\t\tPower settings");
|
||||
|
||||
ui->inkboxSettingsBtn->setIcon(QIcon(":/resources/settings.png"));
|
||||
ui->inkboxSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
ui->koboxSettingsBtn->setIcon(QIcon(":/resources/X11.png"));
|
||||
ui->koboxSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
ui->powerSettingsBtn->setIcon(QIcon(":/resources/power.png"));
|
||||
ui->powerSettingsBtn->setIconSize(QSize(homeIconWidth, homeIconHeight));
|
||||
}
|
||||
|
||||
SettingsChooserWidget::~SettingsChooserWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void SettingsChooserWidget::on_inkboxSettingsBtn_clicked() {
|
||||
log("Launching InkBox Settings", className);
|
||||
settingsWindow = new SettingsWidget();
|
||||
settingsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
connect(settingsWindow, SIGNAL(showToast(QString)), SLOT(showToastNative(QString)));
|
||||
connect(settingsWindow, SIGNAL(closeIndefiniteToast()), SLOT(closeIndefiniteToastNative()));
|
||||
settingsWindow->showFullScreen();
|
||||
}
|
||||
|
||||
void SettingsChooserWidget::on_koboxSettingsBtn_clicked() {
|
||||
log("Launching KoBox Settings", className);
|
||||
koboxSettingsWindow = new KoboxSettingsWidget();
|
||||
koboxSettingsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
koboxSettingsWindow->showFullScreen();
|
||||
}
|
||||
|
||||
void SettingsChooserWidget::on_powerSettingsBtn_clicked() {
|
||||
log("Launching Power Daemon Settings", className);
|
||||
PowerDaemonSettingsWidget *powerSettingsWindow = new PowerDaemonSettingsWidget();
|
||||
powerSettingsWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
powerSettingsWindow->showFullScreen();
|
||||
}
|
||||
|
||||
void SettingsChooserWidget::showToastNative(QString messageToDisplay) {
|
||||
emit showToast(messageToDisplay);
|
||||
}
|
||||
|
||||
void SettingsChooserWidget::closeIndefiniteToastNative() {
|
||||
emit closeIndefiniteToast();
|
||||
}
|
|
@ -7,17 +7,17 @@
|
|||
#include "koboxsettings.h"
|
||||
|
||||
namespace Ui {
|
||||
class settingsChooser;
|
||||
class SettingsChooserWidget;
|
||||
}
|
||||
|
||||
class settingsChooser : public QWidget
|
||||
class SettingsChooserWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit settingsChooser(QWidget *parent = nullptr);
|
||||
~settingsChooser();
|
||||
explicit SettingsChooserWidget(QWidget *parent = nullptr);
|
||||
~SettingsChooserWidget();
|
||||
|
||||
float sW;
|
||||
float sH;
|
||||
|
@ -36,9 +36,9 @@ signals:
|
|||
void closeIndefiniteToast();
|
||||
|
||||
private:
|
||||
Ui::settingsChooser *ui;
|
||||
settings *settingsWindow;
|
||||
koboxSettings *koboxSettingsWindow;
|
||||
Ui::SettingsChooserWidget *ui;
|
||||
SettingsWidget *settingsWindow;
|
||||
KoboxSettingsWidget *koboxSettingsWindow;
|
||||
};
|
||||
|
||||
#endif // SETTINGSCHOOSER_H
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>settingsChooser</class>
|
||||
<widget class="QWidget" name="settingsChooser">
|
||||
<class>SettingsChooserWidget</class>
|
||||
<widget class="QWidget" name="SettingsChooserWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
161
src/ui/splash/splashAlert.cpp
Normal file
161
src/ui/splash/splashAlert.cpp
Normal file
|
@ -0,0 +1,161 @@
|
|||
#include "splashAlert.h"
|
||||
#include "device.h"
|
||||
#include "functions.h"
|
||||
#include "ui.h"
|
||||
#include "ui_splashAlert.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QPixmap>
|
||||
#include <QProcess>
|
||||
#include <QScreen>
|
||||
|
||||
SplashAlertWidget::SplashAlertWidget(QWidget *parent) :
|
||||
QWidget(parent),
|
||||
ui(new Ui::SplashAlertWidget) {
|
||||
ui->setupUi(this);
|
||||
ui->messageLabel->setFont(QFont("u001"));
|
||||
|
||||
// Getting the screen's size
|
||||
float sW = QGuiApplication::screens()[0]->size().width();
|
||||
float sH = QGuiApplication::screens()[0]->size().height();
|
||||
// Defining what the "Alert" icon size will be
|
||||
float stdIconWidth = sW / 1.7;
|
||||
float stdIconHeight = sH / 1.7;
|
||||
|
||||
// General stylesheet
|
||||
UI::applyStyle(*this, ":/resources/eink-dark.qss");
|
||||
|
||||
// Default icon in case none of the conditions below are met
|
||||
QPixmap pixmap(":/resources/alert.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->alertIconLabel->setPixmap(scaledPixmap);
|
||||
|
||||
// Checking if the update's signature is untrusted. The signature error will always take precedence over the downgrade one (c.f. update.sh script)
|
||||
if (checkconfig("/external_root/boot/flags/ALERT_SIGN") == true) {
|
||||
QPixmap pixmap(":/resources/alert.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->alertIconLabel->setPixmap(scaledPixmap);
|
||||
|
||||
signatureError = true;
|
||||
log("Displaying signature error alert splash", className);
|
||||
ui->securityLabel->setText("Failed to update InkBox.");
|
||||
ui->messageLabel->setText("The digital signature of the update is untrusted.\nFor security reasons, it cannot be installed.");
|
||||
ui->stackedWidget->setCurrentIndex(1);
|
||||
}
|
||||
if (checkconfig("/external_root/boot/flags/ALERT_DOWNGRADE") == true) {
|
||||
QPixmap pixmap(":/resources/alert.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->alertIconLabel->setPixmap(scaledPixmap);
|
||||
|
||||
log("Displaying downgrade error alert splash", className);
|
||||
downgradeError = true;
|
||||
ui->securityLabel->setText("Failed to update InkBox.");
|
||||
ui->messageLabel->setText("An error occured during the update process.\nThe update package's version is lower than the actual installed version.");
|
||||
ui->stackedWidget->setCurrentIndex(1);
|
||||
}
|
||||
if (global::encfs::lockdown == true) {
|
||||
ui->stackedWidget->setVisible(false);
|
||||
ui->stackedWidget->deleteLater();
|
||||
QPixmap pixmap(":/resources/alert.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->alertIconLabel->setPixmap(scaledPixmap);
|
||||
|
||||
ui->warningLabel->setText("Fatal error");
|
||||
ui->securityLabel->setText("Device lockdown");
|
||||
log(global::encfs::lockdownMessage, className);
|
||||
QString message = "Due to multiple incorrect passphrase attempts, this device is locked down until\n" + global::encfs::unlockTime + "\nand won't boot.";
|
||||
ui->messageLabel->setText(message);
|
||||
poweroff(false);
|
||||
QTimer::singleShot(1000, this, SLOT(quit()));
|
||||
}
|
||||
if (global::battery::showCriticalBatteryAlert == true) {
|
||||
global::battery::showCriticalBatteryAlert = false;
|
||||
ui->stackedWidget->setVisible(false);
|
||||
ui->stackedWidget->deleteLater();
|
||||
|
||||
QPixmap pixmap(":/resources/battery_alert.png");
|
||||
QPixmap scaledPixmap = pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
ui->alertIconLabel->setPixmap(scaledPixmap);
|
||||
|
||||
log("Displaying critical battery alert splash", className);
|
||||
criticalBattery = true;
|
||||
ui->warningLabel->setText("Please charge your eReader.");
|
||||
ui->securityLabel->setText("The battery's charge level is critical.");
|
||||
ui->messageLabel->setText("To prevent damage, your device has been turned off.\nPlease consider charging it.");
|
||||
// The Mini (N705) has a higher DPI and otherwise the text doesn't fit
|
||||
Device::ScreenSize screenSize = Device::getSingleton()->getScreenSize();
|
||||
if (screenSize == Device::ScreenSize::SMALL) {
|
||||
ui->warningLabel->setStyleSheet("QLabel { background-color : black; color : white; font-size: 14pt }");
|
||||
} else {
|
||||
ui->warningLabel->setStyleSheet("QLabel { background-color : black; color : white; font-size: 16pt }");
|
||||
}
|
||||
poweroff(false);
|
||||
QTimer::singleShot(1000, this, SLOT(quit()));
|
||||
}
|
||||
|
||||
ui->messageLabel->setStyleSheet("QLabel { background-color : black; color : white; font-size: 10pt }");
|
||||
ui->securityLabel->setStyleSheet("QLabel { background-color : black; color : white; font-size: 11pt }");
|
||||
ui->continueBtn->setProperty("type", "borderless");
|
||||
ui->resetBtn->setProperty("type", "borderless");
|
||||
ui->continueBtn->setStyleSheet("padding: 20px");
|
||||
ui->resetBtn->setStyleSheet("padding: 20px");
|
||||
ui->continue2Btn->setProperty("type", "borderless");
|
||||
ui->continue2Btn->setStyleSheet("padding: 20px");
|
||||
}
|
||||
|
||||
SplashAlertWidget::~SplashAlertWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void SplashAlertWidget::on_continueBtn_clicked() {
|
||||
// We continue anyway and re-set the ALERT flag
|
||||
writeFile("/external_root/boot/flags/ALERT", "false\n");
|
||||
writeFile("/external_root/boot/flags/ALERT_SIGN", "false\n");
|
||||
updateReset();
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
void SplashAlertWidget::on_resetBtn_clicked() {
|
||||
// We set the DO_FACTORY_RESET flag and we restart the device
|
||||
log("Factory reset requested; setting required flags", className);
|
||||
writeFile("/external_root/boot/flags/DO_FACTORY_RESET", "true\n");
|
||||
writeFile("/external_root/boot/flags/DIAGS_BOOT", "true\n");
|
||||
QString reboot_prog("/sbin/reboot");
|
||||
QStringList reboot_args;
|
||||
reboot_args << "no_splash";
|
||||
QProcess *reboot_proc = new QProcess();
|
||||
reboot_proc->start(reboot_prog, reboot_args);
|
||||
reboot_proc->waitForFinished();
|
||||
reboot_proc->deleteLater();
|
||||
}
|
||||
|
||||
void SplashAlertWidget::on_continue2Btn_clicked() {
|
||||
// We continue anyway and re-set the ALERT flag
|
||||
writeFile("/external_root/boot/flags/ALERT", "false\n");
|
||||
updateReset();
|
||||
|
||||
log("Restarting InkBox", className);
|
||||
if (signatureError == true) {
|
||||
writeFile("/external_root/boot/flags/ALERT_SIGN", "false\n");
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
if (downgradeError == true) {
|
||||
writeFile("/external_root/boot/flags/ALERT_DOWNGRADE", "false\n");
|
||||
QProcess process;
|
||||
process.startDetached("inkbox", QStringList());
|
||||
qApp->quit();
|
||||
}
|
||||
}
|
||||
|
||||
void SplashAlertWidget::updateReset() {
|
||||
writeFile("/mnt/onboard/onboard/.inkbox/can_really_update", "false\n");
|
||||
writeFile("/mnt/onboard/onboard/.inkbox/can_update", "false\n");
|
||||
}
|
||||
|
||||
void SplashAlertWidget::quit() {
|
||||
qApp->quit();
|
||||
}
|
|
@ -1,22 +1,22 @@
|
|||
#ifndef ALERT_H
|
||||
#define ALERT_H
|
||||
#ifndef SPLASHALERT_H
|
||||
#define SPLASHALERT_H
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
namespace Ui {
|
||||
class alert;
|
||||
class SplashAlertWidget;
|
||||
}
|
||||
|
||||
using namespace std;
|
||||
|
||||
class alert : public QWidget
|
||||
class SplashAlertWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QString className = this->metaObject()->className();
|
||||
explicit alert(QWidget *parent = nullptr);
|
||||
~alert();
|
||||
explicit SplashAlertWidget(QWidget *parent = nullptr);
|
||||
~SplashAlertWidget();
|
||||
bool signatureError = false;
|
||||
bool downgradeError = false;
|
||||
bool criticalBattery = false;
|
||||
|
@ -29,7 +29,7 @@ private slots:
|
|||
void quit();
|
||||
|
||||
private:
|
||||
Ui::alert *ui;
|
||||
Ui::SplashAlertWidget *ui;
|
||||
};
|
||||
|
||||
#endif // ALERT_H
|
||||
#endif // SPLASHALERT_H
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue