mirror of
				https://github.com/arcan1s/awesome-widgets.git
				synced 2025-10-31 13:13:41 +00:00 
			
		
		
		
	Compare commits
	
		
			16 Commits
		
	
	
		
			V.3.4.2
			...
			803d6d631a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 803d6d631a | |||
| 5fd3a4a21a | |||
| eecb128865 | |||
| 0565d3533f | |||
| 88f70c0ea6 | |||
| 338828da88 | |||
| 09a3c32d0c | |||
| e9beea2d7a | |||
| 1e69aa93f5 | |||
| 73f1617cbf | |||
| dea9d488df | |||
| 84de9755b5 | |||
| ff40ac96d8 | |||
| de9d90df4a | |||
| 883659272d | |||
| 0c443e9278 | 
| @ -1,12 +0,0 @@ | |||||||
| FROM archlinux |  | ||||||
|  |  | ||||||
| RUN pacman -Sy |  | ||||||
|  |  | ||||||
| # toolchain |  | ||||||
| RUN echo -e 'y\ny' | pacman -S util-linux-libs |  | ||||||
| RUN pacman -S --noconfirm base-devel cmake extra-cmake-modules python util-linux-libs |  | ||||||
| # kf5 and qt5 libraries |  | ||||||
| RUN pacman -S --noconfirm plasma-framework |  | ||||||
|  |  | ||||||
| # required by tests |  | ||||||
| RUN pacman -S --noconfirm xorg-server-xvfb |  | ||||||
| @ -1,12 +0,0 @@ | |||||||
| FROM ubuntu:bionic |  | ||||||
|  |  | ||||||
| RUN apt-get update |  | ||||||
| # toolchain |  | ||||||
| RUN apt-get install -y cmake extra-cmake-modules g++ git gettext |  | ||||||
| # kf5 and qt5 libraries |  | ||||||
| RUN apt-get install -y libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ |  | ||||||
|       libkf5windowsystem-dev plasma-framework-dev qtbase5-dev qtdeclarative5-dev \ |  | ||||||
|       plasma-framework |  | ||||||
|  |  | ||||||
| # required by tests |  | ||||||
| RUN apt-get install -y xvfb |  | ||||||
| @ -1,12 +0,0 @@ | |||||||
| FROM multiarch/ubuntu-core:i386-bionic |  | ||||||
|  |  | ||||||
| RUN apt-get update |  | ||||||
| # toolchain |  | ||||||
| RUN apt-get install -y cmake extra-cmake-modules g++ git gettext |  | ||||||
| # kf5 and qt5 libraries |  | ||||||
| RUN apt-get install -y libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ |  | ||||||
|       libkf5windowsystem-dev plasma-framework-dev qtbase5-dev qtdeclarative5-dev \ |  | ||||||
|       plasma-framework |  | ||||||
|  |  | ||||||
| # required by tests |  | ||||||
| RUN apt-get install -y xvfb |  | ||||||
| @ -1,14 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| set -e |  | ||||||
|  |  | ||||||
| rm -rf build-arch |  | ||||||
| mkdir build-arch |  | ||||||
|  |  | ||||||
| # build |  | ||||||
| cd build-arch |  | ||||||
| cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_TESTING=ON ../sources |  | ||||||
| make |  | ||||||
|  |  | ||||||
| # tests |  | ||||||
| xvfb-run -a make test |  | ||||||
| @ -1,16 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| set -e |  | ||||||
|  |  | ||||||
| rm -rf build-ubuntu |  | ||||||
| mkdir build-ubuntu |  | ||||||
|  |  | ||||||
| # patches |  | ||||||
| #git apply patches/qt5.6-qversionnumber.patch |  | ||||||
| #git apply patches/qt5.5-qstringlist-and-qinfo.patch |  | ||||||
|  |  | ||||||
| # build |  | ||||||
| cd build-ubuntu |  | ||||||
| cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON ../sources |  | ||||||
| make package |  | ||||||
|  |  | ||||||
| @ -1,18 +0,0 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| set -e |  | ||||||
|  |  | ||||||
| rm -rf build-ubuntu |  | ||||||
| mkdir build-ubuntu |  | ||||||
|  |  | ||||||
| # patches |  | ||||||
| git apply patches/qt5.6-qversionnumber.patch |  | ||||||
| git apply patches/qt5.5-qstringlist-and-qinfo.patch |  | ||||||
|  |  | ||||||
| # build |  | ||||||
| cd build-ubuntu |  | ||||||
| cmake -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_BUILD_TYPE=Optimization -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_FUTURE=ON -DBUILD_TESTING=ON ../sources |  | ||||||
| make |  | ||||||
|  |  | ||||||
| # tests |  | ||||||
| xvfb-run -a make test |  | ||||||
							
								
								
									
										41
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | name: build & tests | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     branches: [ development, master ] | ||||||
|  |   pull_request: | ||||||
|  |     branches: [ development, master ] | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |   BUILD_TYPE: Release | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   run-tests: | ||||||
|  |      | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |      | ||||||
|  |     container: | ||||||
|  |       image: archlinux:latest | ||||||
|  |       volumes: | ||||||
|  |         - ${{ github.workspace }}:/repo | ||||||
|  |       options: -w /repo | ||||||
|  |  | ||||||
|  |     steps: | ||||||
|  |     - uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|  |     - name: create build environment | ||||||
|  |       run: pacman -Sy --noconfirm base-devel cmake extra-cmake-modules python util-linux-libs xorg-server-xvfb | ||||||
|  |      | ||||||
|  |     - name: install dependencies | ||||||
|  |       run: pacman -S --noconfirm plasma-workspace ksysguard | ||||||
|  |      | ||||||
|  |     - name: configure cmake | ||||||
|  |       run: cmake -B build -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DBUILD_FUTURE=ON -DBUILD_TESTING=ON sources | ||||||
|  |      | ||||||
|  |     - name: build | ||||||
|  |       working-directory: /repo/build | ||||||
|  |       run: make | ||||||
|  |      | ||||||
|  |     - name: test | ||||||
|  |       working-directory: /repo/build | ||||||
|  |       run: xvfb-run -a make test | ||||||
							
								
								
									
										51
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | |||||||
|  | name: release | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     tags: | ||||||
|  |       - '*' | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   make-release: | ||||||
|  |  | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |  | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v3 | ||||||
|  |  | ||||||
|  |       - name: create changelog | ||||||
|  |         id: changelog | ||||||
|  |         uses: jaywcjlove/changelog-generator@main | ||||||
|  |         with: | ||||||
|  |           token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |           filter: 'Release \d+\.\d+\.\d+' | ||||||
|  |  | ||||||
|  |       - name: create archive | ||||||
|  |         run: bash create_archive.sh | ||||||
|  |         env: | ||||||
|  |           VERSION: ${{ steps.version.outputs.VERSION }} | ||||||
|  |  | ||||||
|  |       - name: build debian package | ||||||
|  |         run: | | ||||||
|  |           sudo apt update && \ | ||||||
|  |           sudo apt install -yq cmake extra-cmake-modules g++ git gettext make && \ | ||||||
|  |           sudo apt install -yq libkf5i18n-dev libkf5notifications-dev libkf5service-dev \ | ||||||
|  |             libkf5windowsystem-dev libkf5plasma-dev qtbase5-dev qtdeclarative5-dev \ | ||||||
|  |             plasma-workspace-dev && \ | ||||||
|  |           cmake -B build-deb -DKDE_INSTALL_USE_QT_SYS_PATHS=ON -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Optimization -DBUILD_FUTURE=ON -DBUILD_DEB_PACKAGE=ON sources && \ | ||||||
|  |           cd build-deb && \ | ||||||
|  |           make package && \ | ||||||
|  |           cd .. | ||||||
|  |  | ||||||
|  |       - name: release | ||||||
|  |         uses: softprops/action-gh-release@v1 | ||||||
|  |         with: | ||||||
|  |           body: | | ||||||
|  |             ${{ steps.changelog.outputs.compareurl }} | ||||||
|  |             ${{ steps.changelog.outputs.changelog }} | ||||||
|  |           files: | | ||||||
|  |             awesome-widgets-*-src.tar.xz | ||||||
|  |             build-deb/plasma-widget-awesome-widgets-*.deb | ||||||
|  |           fail_on_unmatched_files: true | ||||||
|  |         env: | ||||||
|  |           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||||
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @ -1,3 +0,0 @@ | |||||||
| [submodule "sources/3rdparty/fontdialog"] |  | ||||||
| 	path = sources/3rdparty/fontdialog |  | ||||||
| 	url = https://github.com/arcan1s/qtadds-fontdialog.git |  | ||||||
							
								
								
									
										14
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								.travis.yml
									
									
									
									
									
								
							| @ -1,14 +0,0 @@ | |||||||
| sudo: required |  | ||||||
| language: generic |  | ||||||
|  |  | ||||||
| env: |  | ||||||
|   - DOCKER_TAG_ARCH="arcan1s/awesome-widgets-arch" |  | ||||||
|  |  | ||||||
| services: |  | ||||||
|   - docker |  | ||||||
|  |  | ||||||
| before_install: |  | ||||||
|   - docker build --tag="${DOCKER_TAG_ARCH}" -f ".docker/Dockerfile-arch" ".docker" |  | ||||||
|  |  | ||||||
| script: |  | ||||||
|   - docker run --rm -v "$(pwd):/opt/build" -w /opt/build "${DOCKER_TAG_ARCH}" sh -c ".docker/build-arch.sh" |  | ||||||
| @ -1,3 +1,8 @@ | |||||||
|  | Ver.3.5.0: | ||||||
|  | + wayland support | ||||||
|  | * update code to latest standards | ||||||
|  | - drop support of windows preview | ||||||
|  |  | ||||||
| Ver.3.4.2: | Ver.3.4.2: | ||||||
| + Italian translation (#136, thanks to @avivace) | + Italian translation (#136, thanks to @avivace) | ||||||
| + stooq quotes support (default) (#131) | + stooq quotes support (default) (#131) | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| awesome-widgets (ex-pytextmonitor) | awesome-widgets (ex-pytextmonitor) | ||||||
| ================================== | ================================== | ||||||
|  |  | ||||||
| [](https://travis-ci.org/arcan1s/awesome-widgets) | [](https://github.com/arcan1s/awesome-widgets/actions/workflows/build.yml) | ||||||
| [](https://scan.coverity.com/projects/awesome-widgets) | [](https://scan.coverity.com/projects/awesome-widgets) | ||||||
|  |  | ||||||
| Information | Information | ||||||
| @ -31,6 +31,7 @@ Dependencies | |||||||
| ------------ | ------------ | ||||||
|  |  | ||||||
| * plasma-framework | * plasma-framework | ||||||
|  | * ksysguard (since plasma 5.22) | ||||||
|  |  | ||||||
| Optional dependencies | Optional dependencies | ||||||
| --------------------- | --------------------- | ||||||
| @ -61,10 +62,6 @@ Installation | |||||||
|  |  | ||||||
|   **NOTE** on Plasma 5 it very likely requires `-DKDE_INSTALL_USE_QT_SYS_PATHS=ON` flag |   **NOTE** on Plasma 5 it very likely requires `-DKDE_INSTALL_USE_QT_SYS_PATHS=ON` flag | ||||||
|  |  | ||||||
|   **NOTE** if you are going to build from git, you need to init submodules first, e.g.: |  | ||||||
|  |  | ||||||
|         git submodule update --init --recursive |  | ||||||
|  |  | ||||||
| Additional information | Additional information | ||||||
| ====================== | ====================== | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,32 +1,20 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
|  |  | ||||||
| SRCDIR="sources" | SRCDIR="sources" | ||||||
| MAJOR=$(grep -m1 PROJECT_VERSION_MAJOR sources/CMakeLists.txt | awk '{print $2}' | sed 's/^.\(.*\)..$/\1/') | VERSION="$(git describe --tags --abbrev=0)" | ||||||
| MINOR=$(grep -m1 PROJECT_VERSION_MINOR sources/CMakeLists.txt | awk '{print $2}' | sed 's/^.\(.*\)..$/\1/') |  | ||||||
| PATCH=$(grep -m1 PROJECT_VERSION_PATCH sources/CMakeLists.txt | awk '{print $2}' | sed 's/^.\(.*\)..$/\1/') |  | ||||||
| VERSION="${MAJOR}.${MINOR}.${PATCH}" |  | ||||||
|  |  | ||||||
| # update submodules |  | ||||||
| git submodule update --init --recursive |  | ||||||
|  |  | ||||||
| # build widget | # build widget | ||||||
| ARCHIVE="awesome-widgets" | ARCHIVE="awesome-widgets" | ||||||
| FILES="AUTHORS CHANGELOG COPYING packages patches" | FILES="AUTHORS CHANGELOG COPYING packages patches sources" | ||||||
| IGNORELIST="build usr .kdev4 *.kdev4 .idea packages/*src.tar.xz" | IGNORELIST="build usr .kdev4 *.kdev4 .idea packages/*src.tar.xz" | ||||||
| # create archive | # create archive | ||||||
| [[ -e ${ARCHIVE}-${VERSION}-src.tar.xz ]] && rm -f "${ARCHIVE}-${VERSION}-src.tar.xz" | [[ -e ${ARCHIVE}-${VERSION}-src.tar.xz ]] && rm -f "${ARCHIVE}-${VERSION}-src.tar.xz" | ||||||
| [[ -d ${ARCHIVE} ]] && rm -rf "${ARCHIVE}" | [[ -d ${ARCHIVE} ]] && rm -rf "${ARCHIVE}" | ||||||
|  |  | ||||||
| cp -r "${SRCDIR}" "${ARCHIVE}" | cp -r "${SRCDIR}" "${ARCHIVE}" | ||||||
| for FILE in ${FILES[*]}; do cp -r "$FILE" "${ARCHIVE}"; done | for FILE in ${FILES[*]}; do cp -r "$FILE" "${ARCHIVE}"; done | ||||||
| for FILE in ${IGNORELIST[*]}; do rm -rf "${ARCHIVE}/${FILE}"; done | for FILE in ${IGNORELIST[*]}; do rm -rf "${ARCHIVE}/${FILE}"; done | ||||||
| tar cJf "${ARCHIVE}-${VERSION}-src.tar.xz" "${ARCHIVE}" |  | ||||||
| ln -sf "../${ARCHIVE}-${VERSION}-src.tar.xz" packages |  | ||||||
| rm -rf "${ARCHIVE}" |  | ||||||
|  |  | ||||||
| # update md5sum | tar cJf "${ARCHIVE}-${VERSION}-src.tar.xz" "${ARCHIVE}" | ||||||
| MD5SUMS=$(md5sum ${ARCHIVE}-${VERSION}-src.tar.xz | awk '{print $1}') |  | ||||||
| sed -i "/md5sums=('[0-9A-Fa-f]*/s/[^'][^)]*/md5sums=('${MD5SUMS}'/" packages/PKGBUILD | rm -rf "${ARCHIVE}" | ||||||
| sed -i "s/pkgver=[0-9.]*/pkgver=${VERSION}/" packages/PKGBUILD |  | ||||||
| # clear |  | ||||||
| find . -type f -name '*src.tar.xz' -not -name "*${VERSION}-src.tar.xz" -exec rm -rf {} \; |  | ||||||
| find packages -type l -xtype l -exec rm -rf {} \; |  | ||||||
|  | |||||||
| @ -2,13 +2,13 @@ | |||||||
|  |  | ||||||
| pkgname=plasma5-applet-awesome-widgets | pkgname=plasma5-applet-awesome-widgets | ||||||
| _pkgname=awesome-widgets | _pkgname=awesome-widgets | ||||||
| pkgver=3.4.2 | pkgver=3.4.3 | ||||||
| pkgrel=1 | pkgrel=1 | ||||||
| pkgdesc="Collection of minimalistic Plasmoids which look like Awesome WM widgets (ex-PyTextMonitor)" | pkgdesc="Collection of minimalistic Plasmoids which look like Awesome WM widgets (ex-PyTextMonitor)" | ||||||
| arch=('i686' 'x86_64') | arch=('i686' 'x86_64') | ||||||
| url="https://arcanis.me/projects/awesome-widgets" | url="https://arcanis.me/projects/awesome-widgets" | ||||||
| license=('GPL3') | license=('GPL3') | ||||||
| depends=('plasma-framework') | depends=('ksysguard' 'plasma-framework') | ||||||
| optdepends=("catalyst: for GPU monitor" | optdepends=("catalyst: for GPU monitor" | ||||||
|             "hddtemp: for HDD temperature monitor" |             "hddtemp: for HDD temperature monitor" | ||||||
|             "smartmontools: for HDD temperature monitor" |             "smartmontools: for HDD temperature monitor" | ||||||
| @ -17,7 +17,7 @@ optdepends=("catalyst: for GPU monitor" | |||||||
| makedepends=('cmake' 'extra-cmake-modules' 'python') | makedepends=('cmake' 'extra-cmake-modules' 'python') | ||||||
| source=(https://github.com/arcan1s/awesome-widgets/releases/download/V.${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) | source=(https://github.com/arcan1s/awesome-widgets/releases/download/V.${pkgver}/${_pkgname}-${pkgver}-src.tar.xz) | ||||||
| install=${pkgname}.install | install=${pkgname}.install | ||||||
| md5sums=('df3ad1c626fdc1893f0f6e0b0fe636c2') | md5sums=('5953ba518191bb6fff83cdb8633c735c') | ||||||
| backup=('etc/xdg/plasma-dataengine-extsysmon.conf') | backup=('etc/xdg/plasma-dataengine-extsysmon.conf') | ||||||
|  |  | ||||||
| prepare() { | prepare() { | ||||||
|  | |||||||
| @ -1,11 +0,0 @@ | |||||||
| cmake |  | ||||||
| extra-cmake-modules |  | ||||||
| g++ |  | ||||||
| git |  | ||||||
| libkf5i18n-dev |  | ||||||
| libkf5notifications-dev |  | ||||||
| libkf5service-dev |  | ||||||
| libkf5windowsystem-dev |  | ||||||
| plasma-framework-dev |  | ||||||
| qtbase5-dev |  | ||||||
| qtdeclarative5-dev |  | ||||||
| @ -1,33 +0,0 @@ | |||||||
| diff --git a/sources/awdebug.h b/sources/awdebug.h |  | ||||||
| index 8447c65..4eef49a 100644 |  | ||||||
| --- a/sources/awdebug.h |  | ||||||
| +++ b/sources/awdebug.h |  | ||||||
| @@ -23,10 +23,15 @@ |  | ||||||
|   |  | ||||||
|  #include "version.h" |  | ||||||
|   |  | ||||||
| +#ifndef qCInfo |  | ||||||
| +#define qCInfo qCDebug |  | ||||||
| +#endif |  | ||||||
| + |  | ||||||
| + |  | ||||||
|  namespace AWDebug |  | ||||||
|  { |  | ||||||
|  const char LOG_FORMAT[] = "[%{time " |  | ||||||
| -                          "process}][%{if-debug}DD%{endif}%{if-info}II%{endif}%" |  | ||||||
| +                          "process}][%{if-debug}DD%{endif}%" |  | ||||||
|                            "{if-warning}WW%{endif}%{if-critical}CC%{endif}%{if-" |  | ||||||
|                            "fatal}FF%{endif}][%{category}][%{function}] " |  | ||||||
|                            "%{message}"; |  | ||||||
| diff --git a/sources/awesome-widget/plugin/awkeysaggregator.h b/sources/awesome-widget/plugin/awkeysaggregator.h |  | ||||||
| index d6d5d1a..ee301df 100644 |  | ||||||
| --- a/sources/awesome-widget/plugin/awkeysaggregator.h |  | ||||||
| +++ b/sources/awesome-widget/plugin/awkeysaggregator.h |  | ||||||
| @@ -21,6 +21,7 @@ |  | ||||||
|   |  | ||||||
|  #include <QHash> |  | ||||||
|  #include <QObject> |  | ||||||
| +#include <QStringList> |  | ||||||
|   |  | ||||||
|   |  | ||||||
|  class AWFormatterHelper; |  | ||||||
| @ -1,139 +0,0 @@ | |||||||
| diff --git a/sources/awesome-widget/plugin/awupdatehelper.cpp b/sources/awesome-widget/plugin/awupdatehelper.cpp |  | ||||||
| index f6b5338..b5a3163 100644 |  | ||||||
| --- a/sources/awesome-widget/plugin/awupdatehelper.cpp |  | ||||||
| +++ b/sources/awesome-widget/plugin/awupdatehelper.cpp |  | ||||||
| @@ -35,7 +35,7 @@ AWUpdateHelper::AWUpdateHelper(QObject *_parent) |  | ||||||
|  { |  | ||||||
|      qCDebug(LOG_AW) << __PRETTY_FUNCTION__; |  | ||||||
|   |  | ||||||
| -    m_foundVersion = QVersionNumber::fromString(VERSION); |  | ||||||
| +    m_foundVersion = VERSION; |  | ||||||
|      m_genericConfig = QString("%1/awesomewidgets/general.ini") |  | ||||||
|                            .arg(QStandardPaths::writableLocation( |  | ||||||
|                                QStandardPaths::GenericDataLocation)); |  | ||||||
| @@ -67,8 +67,7 @@ void AWUpdateHelper::checkUpdates(const bool _showAnyway) |  | ||||||
|  bool AWUpdateHelper::checkVersion() |  | ||||||
|  { |  | ||||||
|      QSettings settings(m_genericConfig, QSettings::IniFormat); |  | ||||||
| -    QVersionNumber version = QVersionNumber::fromString( |  | ||||||
| -        settings.value("Version", QString(VERSION)).toString()); |  | ||||||
| +    QString version = settings.value("Version", VERSION).toString(); |  | ||||||
|      // update version |  | ||||||
|      settings.setValue("Version", QString(VERSION)); |  | ||||||
|      settings.sync(); |  | ||||||
| @@ -91,12 +90,11 @@ bool AWUpdateHelper::checkVersion() |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -void AWUpdateHelper::showInfo(const QVersionNumber &_version) |  | ||||||
| +void AWUpdateHelper::showInfo(const QString &_version) |  | ||||||
|  { |  | ||||||
|      qCDebug(LOG_AW) << "Version" << _version; |  | ||||||
|   |  | ||||||
| -    QString text |  | ||||||
| -        = i18n("You are using the actual version %1", _version.toString()); |  | ||||||
| +    QString text = i18n("You are using the actual version %1", _version); |  | ||||||
|      if (!QString(COMMIT_SHA).isEmpty()) |  | ||||||
|          text += QString(" (%1)").arg(QString(COMMIT_SHA)); |  | ||||||
|      return genMessageBox(i18n("No new version found"), text, QMessageBox::Ok) |  | ||||||
| @@ -104,7 +102,7 @@ void AWUpdateHelper::showInfo(const QVersionNumber &_version) |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| -void AWUpdateHelper::showUpdates(const QVersionNumber &_version) |  | ||||||
| +void AWUpdateHelper::showUpdates(const QString &_version) |  | ||||||
|  { |  | ||||||
|      qCDebug(LOG_AW) << "Version" << _version; |  | ||||||
|   |  | ||||||
| @@ -113,7 +111,7 @@ void AWUpdateHelper::showUpdates(const QVersionNumber &_version) |  | ||||||
|      text += QString(COMMIT_SHA).isEmpty() |  | ||||||
|                  ? "\n" |  | ||||||
|                  : QString(" (%1)\n").arg(QString(COMMIT_SHA)); |  | ||||||
| -    text += i18n("New version : %1", _version.toString()) + "\n\n"; |  | ||||||
| +    text += i18n("New version : %1", _version) + "\n\n"; |  | ||||||
|      text += i18n("Click \"Ok\" to download"); |  | ||||||
|   |  | ||||||
|      genMessageBox(i18n("There are updates"), text, |  | ||||||
| @@ -130,8 +128,7 @@ void AWUpdateHelper::userReplyOnUpdates(QAbstractButton *_button) |  | ||||||
|   |  | ||||||
|      switch (ret) { |  | ||||||
|      case QMessageBox::AcceptRole: |  | ||||||
| -        QDesktopServices::openUrl(QString(RELEASES) |  | ||||||
| -                                  + m_foundVersion.toString()); |  | ||||||
| +        QDesktopServices::openUrl(QString(RELEASES) + m_foundVersion); |  | ||||||
|          break; |  | ||||||
|      case QMessageBox::RejectRole: |  | ||||||
|      default: |  | ||||||
| @@ -162,14 +159,23 @@ void AWUpdateHelper::versionReplyRecieved(QNetworkReply *_reply, |  | ||||||
|      QVariantMap firstRelease = jsonDoc.toVariant().toList().first().toMap(); |  | ||||||
|      QString version = firstRelease["tag_name"].toString(); |  | ||||||
|      version.remove("V."); |  | ||||||
| -    m_foundVersion = QVersionNumber::fromString(version); |  | ||||||
| +    m_foundVersion = version; |  | ||||||
|      qCInfo(LOG_AW) << "Update found version to" << m_foundVersion; |  | ||||||
|   |  | ||||||
| -    QVersionNumber oldVersion = QVersionNumber::fromString(VERSION); |  | ||||||
| -    if (oldVersion < m_foundVersion) |  | ||||||
| -        return showUpdates(m_foundVersion); |  | ||||||
| +    // FIXME: possible there is a better way to check versions |  | ||||||
| +    int old_major = QString(VERSION).split(QChar('.')).at(0).toInt(); |  | ||||||
| +    int old_minor = QString(VERSION).split(QChar('.')).at(1).toInt(); |  | ||||||
| +    int old_patch = QString(VERSION).split(QChar('.')).at(2).toInt(); |  | ||||||
| +    int new_major = version.split(QChar('.')).at(0).toInt(); |  | ||||||
| +    int new_minor = version.split(QChar('.')).at(1).toInt(); |  | ||||||
| +    int new_patch = version.split(QChar('.')).at(2).toInt(); |  | ||||||
| +    if ((old_major < new_major) |  | ||||||
| +        || ((old_major == new_major) && (old_minor < new_minor)) |  | ||||||
| +        || ((old_major == new_major) && (old_minor == new_minor) |  | ||||||
| +            && (old_patch < new_patch))) |  | ||||||
| +        return showUpdates(version); |  | ||||||
|      else if (_showAnyway) |  | ||||||
| -        return showInfo(m_foundVersion); |  | ||||||
| +        return showInfo(version); |  | ||||||
|  } |  | ||||||
|   |  | ||||||
|   |  | ||||||
| diff --git a/sources/awesome-widget/plugin/awupdatehelper.h b/sources/awesome-widget/plugin/awupdatehelper.h |  | ||||||
| index cfd26e7..b311be2 100644 |  | ||||||
| --- a/sources/awesome-widget/plugin/awupdatehelper.h |  | ||||||
| +++ b/sources/awesome-widget/plugin/awupdatehelper.h |  | ||||||
| @@ -21,7 +21,6 @@ |  | ||||||
|   |  | ||||||
|  #include <QMessageBox> |  | ||||||
|  #include <QObject> |  | ||||||
| -#include <QVersionNumber> |  | ||||||
|   |  | ||||||
|   |  | ||||||
|  class QNetworkReply; |  | ||||||
| @@ -37,15 +36,15 @@ public: |  | ||||||
|      bool checkVersion(); |  | ||||||
|   |  | ||||||
|  private slots: |  | ||||||
| -    void showInfo(const QVersionNumber &_version); |  | ||||||
| -    void showUpdates(const QVersionNumber &_version); |  | ||||||
| +    void showInfo(const QString &_version); |  | ||||||
| +    void showUpdates(const QString &_version); |  | ||||||
|      void userReplyOnUpdates(QAbstractButton *_button); |  | ||||||
|      void versionReplyRecieved(QNetworkReply *_reply, const bool _showAnyway); |  | ||||||
|   |  | ||||||
|  private: |  | ||||||
|      QMessageBox *genMessageBox(const QString &_title, const QString &_body, |  | ||||||
|                                 const QMessageBox::StandardButtons _buttons); |  | ||||||
| -    QVersionNumber m_foundVersion; |  | ||||||
| +    QString m_foundVersion; |  | ||||||
|      QString m_genericConfig; |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
| diff --git a/sources/libraries.cmake b/sources/libraries.cmake |  | ||||||
| index 6f171a6..004b39f 100644 |  | ||||||
| --- a/sources/libraries.cmake |  | ||||||
| +++ b/sources/libraries.cmake |  | ||||||
| @@ -2,7 +2,7 @@ |  | ||||||
|  find_package(Gettext REQUIRED) |  | ||||||
|   |  | ||||||
|  # main qt libraries |  | ||||||
| -find_package(Qt5 5.6.0 REQUIRED COMPONENTS Core DBus Network Qml Test Widgets) |  | ||||||
| +find_package(Qt5 5.5.0 REQUIRED COMPONENTS Core DBus Network Qml Test Widgets) |  | ||||||
|  add_definitions( |  | ||||||
|          ${Qt5Core_DEFINITIONS} ${Qt5DBus_DEFINITIONS} ${Qt5Network_DEFINITIONS} |  | ||||||
|          ${Qt5Qml_DEFINITIONS} ${Qt5Widgets_DEFINITIONS} |  | ||||||
| @ -2,11 +2,11 @@ | |||||||
| Language:        Cpp | Language:        Cpp | ||||||
| AccessModifierOffset: -4 | AccessModifierOffset: -4 | ||||||
| AlignAfterOpenBracket: Align | AlignAfterOpenBracket: Align | ||||||
| AlignConsecutiveAssignments: false | AlignConsecutiveAssignments: None | ||||||
| AlignOperands:   true | AlignOperands:   true | ||||||
| AlignTrailingComments: true | AlignTrailingComments: true | ||||||
| AllowAllParametersOfDeclarationOnNextLine: true | AllowAllParametersOfDeclarationOnNextLine: true | ||||||
| AllowShortBlocksOnASingleLine: false | AllowShortBlocksOnASingleLine: Never | ||||||
| AllowShortCaseLabelsOnASingleLine: false | AllowShortCaseLabelsOnASingleLine: false | ||||||
| AllowShortFunctionsOnASingleLine: Inline | AllowShortFunctionsOnASingleLine: Inline | ||||||
| AllowShortIfStatementsOnASingleLine: Never | AllowShortIfStatementsOnASingleLine: Never | ||||||
| @ -20,7 +20,7 @@ BreakBeforeBinaryOperators: All | |||||||
| BreakBeforeBraces: Linux | BreakBeforeBraces: Linux | ||||||
| BreakBeforeTernaryOperators: true | BreakBeforeTernaryOperators: true | ||||||
| BreakConstructorInitializersBeforeComma: true | BreakConstructorInitializersBeforeComma: true | ||||||
| ColumnLimit:     100 | ColumnLimit:     120 | ||||||
| CommentPragmas:  '^ IWYU pragma:' | CommentPragmas:  '^ IWYU pragma:' | ||||||
| ConstructorInitializerAllOnOneLineOrOnePerLine: false | ConstructorInitializerAllOnOneLineOrOnePerLine: false | ||||||
| ConstructorInitializerIndentWidth: 4 | ConstructorInitializerIndentWidth: 4 | ||||||
| @ -58,7 +58,7 @@ SpacesInContainerLiterals: true | |||||||
| SpacesInCStyleCastParentheses: false | SpacesInCStyleCastParentheses: false | ||||||
| SpacesInParentheses: false | SpacesInParentheses: false | ||||||
| SpacesInSquareBrackets: false | SpacesInSquareBrackets: false | ||||||
| Standard:        Cpp11 | Standard:        Latest | ||||||
| TabWidth:        8 | TabWidth:        8 | ||||||
| UseTab:          Never | UseTab:          Never | ||||||
| ... | ... | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								sources/3rdparty/fontdialog
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								sources/3rdparty/fontdialog
									
									
									
									
										vendored
									
									
								
							 Submodule sources/3rdparty/fontdialog deleted from e7bcf8ee85
									
								
							
							
								
								
									
										165
									
								
								sources/3rdparty/fontdialog/COPYING
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								sources/3rdparty/fontdialog/COPYING
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,165 @@ | |||||||
|  | GNU LESSER GENERAL PUBLIC LICENSE | ||||||
|  |                        Version 3, 29 June 2007 | ||||||
|  |  | ||||||
|  |  Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | ||||||
|  |  Everyone is permitted to copy and distribute verbatim copies | ||||||
|  |  of this license document, but changing it is not allowed. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   This version of the GNU Lesser General Public License incorporates | ||||||
|  | the terms and conditions of version 3 of the GNU General Public | ||||||
|  | License, supplemented by the additional permissions listed below. | ||||||
|  |  | ||||||
|  |   0. Additional Definitions. | ||||||
|  |  | ||||||
|  |   As used herein, "this License" refers to version 3 of the GNU Lesser | ||||||
|  | General Public License, and the "GNU GPL" refers to version 3 of the GNU | ||||||
|  | General Public License. | ||||||
|  |  | ||||||
|  |   "The Library" refers to a covered work governed by this License, | ||||||
|  | other than an Application or a Combined Work as defined below. | ||||||
|  |  | ||||||
|  |   An "Application" is any work that makes use of an interface provided | ||||||
|  | by the Library, but which is not otherwise based on the Library. | ||||||
|  | Defining a subclass of a class defined by the Library is deemed a mode | ||||||
|  | of using an interface provided by the Library. | ||||||
|  |  | ||||||
|  |   A "Combined Work" is a work produced by combining or linking an | ||||||
|  | Application with the Library.  The particular version of the Library | ||||||
|  | with which the Combined Work was made is also called the "Linked | ||||||
|  | Version". | ||||||
|  |  | ||||||
|  |   The "Minimal Corresponding Source" for a Combined Work means the | ||||||
|  | Corresponding Source for the Combined Work, excluding any source code | ||||||
|  | for portions of the Combined Work that, considered in isolation, are | ||||||
|  | based on the Application, and not on the Linked Version. | ||||||
|  |  | ||||||
|  |   The "Corresponding Application Code" for a Combined Work means the | ||||||
|  | object code and/or source code for the Application, including any data | ||||||
|  | and utility programs needed for reproducing the Combined Work from the | ||||||
|  | Application, but excluding the System Libraries of the Combined Work. | ||||||
|  |  | ||||||
|  |   1. Exception to Section 3 of the GNU GPL. | ||||||
|  |  | ||||||
|  |   You may convey a covered work under sections 3 and 4 of this License | ||||||
|  | without being bound by section 3 of the GNU GPL. | ||||||
|  |  | ||||||
|  |   2. Conveying Modified Versions. | ||||||
|  |  | ||||||
|  |   If you modify a copy of the Library, and, in your modifications, a | ||||||
|  | facility refers to a function or data to be supplied by an Application | ||||||
|  | that uses the facility (other than as an argument passed when the | ||||||
|  | facility is invoked), then you may convey a copy of the modified | ||||||
|  | version: | ||||||
|  |  | ||||||
|  |    a) under this License, provided that you make a good faith effort to | ||||||
|  |    ensure that, in the event an Application does not supply the | ||||||
|  |    function or data, the facility still operates, and performs | ||||||
|  |    whatever part of its purpose remains meaningful, or | ||||||
|  |  | ||||||
|  |    b) under the GNU GPL, with none of the additional permissions of | ||||||
|  |    this License applicable to that copy. | ||||||
|  |  | ||||||
|  |   3. Object Code Incorporating Material from Library Header Files. | ||||||
|  |  | ||||||
|  |   The object code form of an Application may incorporate material from | ||||||
|  | a header file that is part of the Library.  You may convey such object | ||||||
|  | code under terms of your choice, provided that, if the incorporated | ||||||
|  | material is not limited to numerical parameters, data structure | ||||||
|  | layouts and accessors, or small macros, inline functions and templates | ||||||
|  | (ten or fewer lines in length), you do both of the following: | ||||||
|  |  | ||||||
|  |    a) Give prominent notice with each copy of the object code that the | ||||||
|  |    Library is used in it and that the Library and its use are | ||||||
|  |    covered by this License. | ||||||
|  |  | ||||||
|  |    b) Accompany the object code with a copy of the GNU GPL and this license | ||||||
|  |    document. | ||||||
|  |  | ||||||
|  |   4. Combined Works. | ||||||
|  |  | ||||||
|  |   You may convey a Combined Work under terms of your choice that, | ||||||
|  | taken together, effectively do not restrict modification of the | ||||||
|  | portions of the Library contained in the Combined Work and reverse | ||||||
|  | engineering for debugging such modifications, if you also do each of | ||||||
|  | the following: | ||||||
|  |  | ||||||
|  |    a) Give prominent notice with each copy of the Combined Work that | ||||||
|  |    the Library is used in it and that the Library and its use are | ||||||
|  |    covered by this License. | ||||||
|  |  | ||||||
|  |    b) Accompany the Combined Work with a copy of the GNU GPL and this license | ||||||
|  |    document. | ||||||
|  |  | ||||||
|  |    c) For a Combined Work that displays copyright notices during | ||||||
|  |    execution, include the copyright notice for the Library among | ||||||
|  |    these notices, as well as a reference directing the user to the | ||||||
|  |    copies of the GNU GPL and this license document. | ||||||
|  |  | ||||||
|  |    d) Do one of the following: | ||||||
|  |  | ||||||
|  |        0) Convey the Minimal Corresponding Source under the terms of this | ||||||
|  |        License, and the Corresponding Application Code in a form | ||||||
|  |        suitable for, and under terms that permit, the user to | ||||||
|  |        recombine or relink the Application with a modified version of | ||||||
|  |        the Linked Version to produce a modified Combined Work, in the | ||||||
|  |        manner specified by section 6 of the GNU GPL for conveying | ||||||
|  |        Corresponding Source. | ||||||
|  |  | ||||||
|  |        1) Use a suitable shared library mechanism for linking with the | ||||||
|  |        Library.  A suitable mechanism is one that (a) uses at run time | ||||||
|  |        a copy of the Library already present on the user's computer | ||||||
|  |        system, and (b) will operate properly with a modified version | ||||||
|  |        of the Library that is interface-compatible with the Linked | ||||||
|  |        Version. | ||||||
|  |  | ||||||
|  |    e) Provide Installation Information, but only if you would otherwise | ||||||
|  |    be required to provide such information under section 6 of the | ||||||
|  |    GNU GPL, and only to the extent that such information is | ||||||
|  |    necessary to install and execute a modified version of the | ||||||
|  |    Combined Work produced by recombining or relinking the | ||||||
|  |    Application with a modified version of the Linked Version. (If | ||||||
|  |    you use option 4d0, the Installation Information must accompany | ||||||
|  |    the Minimal Corresponding Source and Corresponding Application | ||||||
|  |    Code. If you use option 4d1, you must provide the Installation | ||||||
|  |    Information in the manner specified by section 6 of the GNU GPL | ||||||
|  |    for conveying Corresponding Source.) | ||||||
|  |  | ||||||
|  |   5. Combined Libraries. | ||||||
|  |  | ||||||
|  |   You may place library facilities that are a work based on the | ||||||
|  | Library side by side in a single library together with other library | ||||||
|  | facilities that are not Applications and are not covered by this | ||||||
|  | License, and convey such a combined library under terms of your | ||||||
|  | choice, if you do both of the following: | ||||||
|  |  | ||||||
|  |    a) Accompany the combined library with a copy of the same work based | ||||||
|  |    on the Library, uncombined with any other library facilities, | ||||||
|  |    conveyed under the terms of this License. | ||||||
|  |  | ||||||
|  |    b) Give prominent notice with the combined library that part of it | ||||||
|  |    is a work based on the Library, and explaining where to find the | ||||||
|  |    accompanying uncombined form of the same work. | ||||||
|  |  | ||||||
|  |   6. Revised Versions of the GNU Lesser General Public License. | ||||||
|  |  | ||||||
|  |   The Free Software Foundation may publish revised and/or new versions | ||||||
|  | of the GNU Lesser General Public License from time to time. Such new | ||||||
|  | versions will be similar in spirit to the present version, but may | ||||||
|  | differ in detail to address new problems or concerns. | ||||||
|  |  | ||||||
|  |   Each version is given a distinguishing version number. If the | ||||||
|  | Library as you received it specifies that a certain numbered version | ||||||
|  | of the GNU Lesser General Public License "or any later version" | ||||||
|  | applies to it, you have the option of following the terms and | ||||||
|  | conditions either of that published version or of any later version | ||||||
|  | published by the Free Software Foundation. If the Library as you | ||||||
|  | received it does not specify a version number of the GNU Lesser | ||||||
|  | General Public License, you may choose any version of the GNU Lesser | ||||||
|  | General Public License ever published by the Free Software Foundation. | ||||||
|  |  | ||||||
|  |   If the Library as you received it specifies that a proxy can decide | ||||||
|  | whether future versions of the GNU Lesser General Public License shall | ||||||
|  | apply, that proxy's public statement of acceptance of any version is | ||||||
|  | permanent authorization for you to choose that version for the | ||||||
|  | Library. | ||||||
							
								
								
									
										4
									
								
								sources/3rdparty/fontdialog/README.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								sources/3rdparty/fontdialog/README.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | qtadds-fontdialog | ||||||
|  | ================= | ||||||
|  |  | ||||||
|  | Font dialog which provides a font color settings | ||||||
							
								
								
									
										215
									
								
								sources/3rdparty/fontdialog/fontdialog.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										215
									
								
								sources/3rdparty/fontdialog/fontdialog.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,215 @@ | |||||||
|  | /*************************************************************************** | ||||||
|  |  *  Copyright (C) 2014  Evgeniy Alekseev                                      * | ||||||
|  |  *                                                                         * | ||||||
|  |  *  This library is free software; you can redistribute it and/or          * | ||||||
|  |  *  modify it under the terms of the GNU Lesser General Public             * | ||||||
|  |  *  License as published by the Free Software Foundation; either           * | ||||||
|  |  *  version 3.0 of the License, or (at your option) any later version.     * | ||||||
|  |  *                                                                         * | ||||||
|  |  *  This library 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       * | ||||||
|  |  *  Lesser General Public License for more details.                        * | ||||||
|  |  *                                                                         * | ||||||
|  |  *  You should have received a copy of the GNU Lesser General Public       * | ||||||
|  |  *  License along with this library.                                       * | ||||||
|  |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | #include "fontdialog.h" | ||||||
|  |  | ||||||
|  | #include <QGridLayout> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | CFont::CFont(const QString family, int pointSize, int weight, bool italic, QColor color) | ||||||
|  |     : QFont(family, pointSize, weight, italic) | ||||||
|  | { | ||||||
|  |     setCurrentColor(color); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | QColor CFont::color() | ||||||
|  | { | ||||||
|  |     return currentColor; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void CFont::setCurrentColor(const QColor color) | ||||||
|  | { | ||||||
|  |     currentColor = color; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | int CFont::html2QFont(const int htmlWeight) | ||||||
|  | { | ||||||
|  |     int weight = 16; | ||||||
|  |     switch(htmlWeight) { | ||||||
|  |     case 100: | ||||||
|  |         weight = 16; | ||||||
|  |         break; | ||||||
|  |     case 200: | ||||||
|  |     case 300: | ||||||
|  |         weight = 25; | ||||||
|  |         break; | ||||||
|  |     case 400: | ||||||
|  |         weight = 50; | ||||||
|  |         break; | ||||||
|  |     case 500: | ||||||
|  |     case 600: | ||||||
|  |         weight = 63; | ||||||
|  |         break; | ||||||
|  |     case 700: | ||||||
|  |     case 800: | ||||||
|  |         weight = 75; | ||||||
|  |         break; | ||||||
|  |     case 900: | ||||||
|  |         weight = 87; | ||||||
|  |         break; | ||||||
|  |     default: | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return weight; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | int CFont::qFont2html(const int weight) | ||||||
|  | { | ||||||
|  |     int htmlWeight = 400; | ||||||
|  |     switch(weight) { | ||||||
|  |     case 16: | ||||||
|  |         htmlWeight = 100; | ||||||
|  |         break; | ||||||
|  |     case 25: | ||||||
|  |         htmlWeight = 300; | ||||||
|  |         break; | ||||||
|  |     case 50: | ||||||
|  |         htmlWeight = 400; | ||||||
|  |         break; | ||||||
|  |     case 63: | ||||||
|  |         htmlWeight = 600; | ||||||
|  |         break; | ||||||
|  |     case 75: | ||||||
|  |         htmlWeight = 800; | ||||||
|  |         break; | ||||||
|  |     case 87: | ||||||
|  |         htmlWeight = 900; | ||||||
|  |         break; | ||||||
|  |     default: | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return htmlWeight; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | int CFont::htmlWeight() | ||||||
|  | { | ||||||
|  |     return CFont::qFont2html(weight()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void CFont::setHtmlWeight(const int htmlWeight) | ||||||
|  | { | ||||||
|  |     setWeight(CFont::html2QFont(htmlWeight)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | CFont CFont::fromQFont(const QFont font, const QColor color) | ||||||
|  | { | ||||||
|  |     return CFont(font.family(), font.pointSize(), font.weight(), font.italic(), color); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | QFont CFont::toQFont() | ||||||
|  | { | ||||||
|  |     return QFont(family(), pointSize(), weight(), italic()); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | CFontDialog::CFontDialog(QWidget *parent, bool needWeight, bool needItalic) | ||||||
|  |     : QDialog(parent) | ||||||
|  | { | ||||||
|  |     QGridLayout *mainGrid = new QGridLayout(this); | ||||||
|  |     setLayout(mainGrid); | ||||||
|  |  | ||||||
|  |     colorBox = new QComboBox(this); | ||||||
|  |     connect(colorBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(updateColor(QString))); | ||||||
|  |     QStringList colorNames = QColor::colorNames(); | ||||||
|  |     int index = 0; | ||||||
|  |     for (int i=0; i<colorNames.count(); i++) { | ||||||
|  |         QColor color(colorNames[i]); | ||||||
|  |         colorBox->addItem(colorNames[i], color); | ||||||
|  |         QModelIndex idx = colorBox->model()->index(index++, 0); | ||||||
|  |         colorBox->model()->setData(idx, color, Qt::BackgroundRole); | ||||||
|  |     } | ||||||
|  |     mainGrid->addWidget(colorBox, 0, 0); | ||||||
|  |     fontBox = new QFontComboBox(this); | ||||||
|  |     mainGrid->addWidget(fontBox, 0, 1); | ||||||
|  |     sizeBox = new QSpinBox(this); | ||||||
|  |     mainGrid->addWidget(sizeBox, 0, 2); | ||||||
|  |     weightBox = new QSpinBox(this); | ||||||
|  |     mainGrid->addWidget(weightBox, 0, 3); | ||||||
|  |     italicBox = new QComboBox(this); | ||||||
|  |     italicBox->addItem(tr("normal")); | ||||||
|  |     italicBox->addItem(tr("italic")); | ||||||
|  |     mainGrid->addWidget(italicBox, 0, 4); | ||||||
|  |  | ||||||
|  |     buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, | ||||||
|  |                                    Qt::Horizontal, this); | ||||||
|  |     QObject::connect(buttons, SIGNAL(accepted()), this, SLOT(accept())); | ||||||
|  |     QObject::connect(buttons, SIGNAL(rejected()), this, SLOT(reject())); | ||||||
|  |     mainGrid->addWidget(buttons, 1, 0, 1, 5); | ||||||
|  |  | ||||||
|  |     italicBox->setHidden(!needItalic); | ||||||
|  |     weightBox->setHidden(!needWeight); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | CFontDialog::~CFontDialog() | ||||||
|  | { | ||||||
|  |     delete colorBox; | ||||||
|  |     delete buttons; | ||||||
|  |     delete fontBox; | ||||||
|  |     delete italicBox; | ||||||
|  |     delete sizeBox; | ||||||
|  |     delete weightBox; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void CFontDialog::updateColor(const QString color) | ||||||
|  | { | ||||||
|  |     colorBox->setStyleSheet(QString("background:%1").arg(QColor(color).name())); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | CFont CFontDialog::getFont(const QString title, CFont defaultFont, bool needWeight, bool needItalic, int *status) | ||||||
|  | { | ||||||
|  |     CFontDialog dlg(0, needWeight, needItalic); | ||||||
|  |  | ||||||
|  |     dlg.setWindowTitle(title); | ||||||
|  |     QStringList colorNames = QColor::colorNames(); | ||||||
|  |     for (int i=0; i<colorNames.count(); i++) | ||||||
|  |         if (QColor(colorNames[i]) == defaultFont.color()) { | ||||||
|  |             dlg.colorBox->setCurrentIndex(i); | ||||||
|  |             break; | ||||||
|  |         } | ||||||
|  |     dlg.fontBox->setCurrentFont(defaultFont); | ||||||
|  |     dlg.sizeBox->setValue(defaultFont.pointSize()); | ||||||
|  |     dlg.weightBox->setValue(defaultFont.weight()); | ||||||
|  |     if (defaultFont.italic()) | ||||||
|  |         dlg.italicBox->setCurrentIndex(1); | ||||||
|  |     else | ||||||
|  |         dlg.italicBox->setCurrentIndex(0); | ||||||
|  |  | ||||||
|  |     CFont font = CFont(defaultFont); | ||||||
|  |     int ret = dlg.exec(); | ||||||
|  |     if (ret == 1) | ||||||
|  |         font = CFont(dlg.fontBox->currentFont().family(), | ||||||
|  |                      dlg.sizeBox->value(), | ||||||
|  |                      dlg.weightBox->value(), | ||||||
|  |                      dlg.italicBox->currentIndex() == 1, | ||||||
|  |                      QColor(dlg.colorBox->currentText())); | ||||||
|  |     if (status != nullptr) | ||||||
|  |         *status = ret; | ||||||
|  |     return font; | ||||||
|  | } | ||||||
							
								
								
									
										82
									
								
								sources/3rdparty/fontdialog/fontdialog.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								sources/3rdparty/fontdialog/fontdialog.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,82 @@ | |||||||
|  | /*************************************************************************** | ||||||
|  |  *  Copyright (C) 2014  Evgeniy Alekseev                                      * | ||||||
|  |  *                                                                         * | ||||||
|  |  *  This library is free software; you can redistribute it and/or          * | ||||||
|  |  *  modify it under the terms of the GNU Lesser General Public             * | ||||||
|  |  *  License as published by the Free Software Foundation; either           * | ||||||
|  |  *  version 3.0 of the License, or (at your option) any later version.     * | ||||||
|  |  *                                                                         * | ||||||
|  |  *  This library 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       * | ||||||
|  |  *  Lesser General Public License for more details.                        * | ||||||
|  |  *                                                                         * | ||||||
|  |  *  You should have received a copy of the GNU Lesser General Public       * | ||||||
|  |  *  License along with this library.                                       * | ||||||
|  |  ***************************************************************************/ | ||||||
|  |  | ||||||
|  | #ifndef FONTDIALOG_H | ||||||
|  | #define FONTDIALOG_H | ||||||
|  |  | ||||||
|  | #include <QComboBox> | ||||||
|  | #include <QDialog> | ||||||
|  | #include <QDialogButtonBox> | ||||||
|  | #include <QFontComboBox> | ||||||
|  | #include <QSpinBox> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class CFont : public QFont | ||||||
|  | { | ||||||
|  | public: | ||||||
|  |     explicit CFont(const QString family, int pointSize = -1, | ||||||
|  |                    int weight = -1, bool italic = false, | ||||||
|  |                    QColor color = QColor(QString("#000000"))); | ||||||
|  |     // color properties | ||||||
|  |     QColor color(); | ||||||
|  |     void setCurrentColor(const QColor color); | ||||||
|  |     // html weight properties | ||||||
|  |     static int html2QFont(const int htmlWeight); | ||||||
|  |     static int qFont2html(const int weight); | ||||||
|  |     int htmlWeight(); | ||||||
|  |     void setHtmlWeight(const int htmlWeight); | ||||||
|  |     // conversion to QFont | ||||||
|  |     static CFont fromQFont(const QFont font, | ||||||
|  |                            const QColor color = QColor(QString("#000000"))); | ||||||
|  |     QFont toQFont(); | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     QColor currentColor; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class CFontDialog : public QDialog | ||||||
|  | { | ||||||
|  |     Q_OBJECT | ||||||
|  |  | ||||||
|  | public: | ||||||
|  |     explicit CFontDialog(QWidget *parent = 0, | ||||||
|  |                          const bool needWeight = true, | ||||||
|  |                          const bool needItalic = true); | ||||||
|  |     ~CFontDialog(); | ||||||
|  |     static CFont getFont(const QString title = tr("Select font"), | ||||||
|  |                          CFont defaultFont = CFont(QString("Arial"), | ||||||
|  |                                                    12, 400, false, | ||||||
|  |                                                    QColor(QString("#000000"))), | ||||||
|  |                          const bool needWeight = true, | ||||||
|  |                          const bool needItalic = true, | ||||||
|  |                          int *status = nullptr); | ||||||
|  |  | ||||||
|  | private slots: | ||||||
|  |     void updateColor(const QString color); | ||||||
|  |  | ||||||
|  | private: | ||||||
|  |     QComboBox *colorBox; | ||||||
|  |     QDialogButtonBox *buttons; | ||||||
|  |     QFontComboBox *fontBox; | ||||||
|  |     QComboBox *italicBox; | ||||||
|  |     QSpinBox *sizeBox; | ||||||
|  |     QSpinBox *weightBox; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #endif /* FONTDIALOG_H */ | ||||||
| @ -1,4 +1,4 @@ | |||||||
| cmake_minimum_required(VERSION 2.8.12) | cmake_minimum_required(VERSION 3.16.0) | ||||||
|  |  | ||||||
| # some fucking magic | # some fucking magic | ||||||
| cmake_policy(SET CMP0011 NEW) | cmake_policy(SET CMP0011 NEW) | ||||||
| @ -15,8 +15,8 @@ set(PROJECT_AUTHOR "Evgeniy Alekseev") | |||||||
| set(PROJECT_CONTACT "esalexeev@gmail.com") | set(PROJECT_CONTACT "esalexeev@gmail.com") | ||||||
| set(PROJECT_LICENSE "GPL3") | set(PROJECT_LICENSE "GPL3") | ||||||
| set(PROJECT_VERSION_MAJOR "3") | set(PROJECT_VERSION_MAJOR "3") | ||||||
| set(PROJECT_VERSION_MINOR "4") | set(PROJECT_VERSION_MINOR "5") | ||||||
| set(PROJECT_VERSION_PATCH "2") | set(PROJECT_VERSION_PATCH "1") | ||||||
| set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") | set(PROJECT_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") | ||||||
| # append git version if any | # append git version if any | ||||||
| set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") | set(PROJECT_COMMIT_SHA "Commit hash" CACHE INTERNAL "") | ||||||
|  | |||||||
| @ -41,25 +41,15 @@ QString AWDebug::getAboutText(const QString &_type) | |||||||
|     } else if (_type == "description") { |     } else if (_type == "description") { | ||||||
|         text = i18n("A set of minimalistic plasmoid widgets"); |         text = i18n("A set of minimalistic plasmoid widgets"); | ||||||
|     } else if (_type == "links") { |     } else if (_type == "links") { | ||||||
|         text = i18n("Links:") + "<ul>" |         text = i18n("Links:") + "<ul>" + QString("<li><a href=\"%1\">%2</a></li>").arg(HOMEPAGE).arg(i18n("Homepage")) | ||||||
|                + QString("<li><a href=\"%1\">%2</a></li>").arg(HOMEPAGE).arg(i18n("Homepage")) |  | ||||||
|                + QString("<li><a href=\"%1\">%2</a></li>").arg(REPOSITORY).arg(i18n("Repository")) |                + QString("<li><a href=\"%1\">%2</a></li>").arg(REPOSITORY).arg(i18n("Repository")) | ||||||
|                + QString("<li><a href=\"%1\">%2</a></li>").arg(BUGTRACKER).arg(i18n("Bugtracker")) |                + QString("<li><a href=\"%1\">%2</a></li>").arg(BUGTRACKER).arg(i18n("Bugtracker")) | ||||||
|                + QString("<li><a href=\"%1\">%2</a></li>") |                + QString("<li><a href=\"%1\">%2</a></li>").arg(TRANSLATION).arg(i18n("Translation issue")) | ||||||
|                      .arg(TRANSLATION) |                + QString("<li><a href=\"%1\">%2</a></li>").arg(AUR_PACKAGES).arg(i18n("AUR packages")) | ||||||
|                      .arg(i18n("Translation issue")) |                + QString("<li><a href=\"%1\">%2</a></li>").arg(OPENSUSE_PACKAGES).arg(i18n("openSUSE packages")) | ||||||
|                + QString("<li><a href=\"%1\">%2</a></li>") |  | ||||||
|                      .arg(AUR_PACKAGES) |  | ||||||
|                      .arg(i18n("AUR packages")) |  | ||||||
|                + QString("<li><a href=\"%1\">%2</a></li>") |  | ||||||
|                      .arg(OPENSUSE_PACKAGES) |  | ||||||
|                      .arg(i18n("openSUSE packages")) |  | ||||||
|                + "</ul>"; |                + "</ul>"; | ||||||
|     } else if (_type == "copy") { |     } else if (_type == "copy") { | ||||||
|         text = QString("<small>© %1 <a href=\"mailto:%2\">%3</a><br>") |         text = QString("<small>© %1 <a href=\"mailto:%2\">%3</a><br>").arg(DATE).arg(EMAIL).arg(AUTHOR) | ||||||
|                    .arg(DATE) |  | ||||||
|                    .arg(EMAIL) |  | ||||||
|                    .arg(AUTHOR) |  | ||||||
|                + i18nc("This software is licensed under %1", LICENSE) + "</small>"; |                + i18nc("This software is licensed under %1", LICENSE) + "</small>"; | ||||||
|     } else if (_type == "translators") { |     } else if (_type == "translators") { | ||||||
|         QStringList translatorList = QString(TRANSLATORS).split(','); |         QStringList translatorList = QString(TRANSLATORS).split(','); | ||||||
| @ -114,8 +104,7 @@ QStringList AWDebug::getBuildData() | |||||||
|     metadata.append(QString("    CMAKE_CXX_FLAGS: %1").arg(CMAKE_CXX_FLAGS)); |     metadata.append(QString("    CMAKE_CXX_FLAGS: %1").arg(CMAKE_CXX_FLAGS)); | ||||||
|     metadata.append(QString("    CMAKE_CXX_FLAGS_DEBUG: %1").arg(CMAKE_CXX_FLAGS_DEBUG)); |     metadata.append(QString("    CMAKE_CXX_FLAGS_DEBUG: %1").arg(CMAKE_CXX_FLAGS_DEBUG)); | ||||||
|     metadata.append(QString("    CMAKE_CXX_FLAGS_RELEASE: %1").arg(CMAKE_CXX_FLAGS_RELEASE)); |     metadata.append(QString("    CMAKE_CXX_FLAGS_RELEASE: %1").arg(CMAKE_CXX_FLAGS_RELEASE)); | ||||||
|     metadata.append( |     metadata.append(QString("    CMAKE_CXX_FLAGS_OPTIMIZATION: %1").arg(CMAKE_CXX_FLAGS_OPTIMIZATION)); | ||||||
|         QString("    CMAKE_CXX_FLAGS_OPTIMIZATION: %1").arg(CMAKE_CXX_FLAGS_OPTIMIZATION)); |  | ||||||
|     metadata.append(QString("    CMAKE_DEFINITIONS: %1").arg(CMAKE_DEFINITIONS)); |     metadata.append(QString("    CMAKE_DEFINITIONS: %1").arg(CMAKE_DEFINITIONS)); | ||||||
|     metadata.append(QString("    CMAKE_INSTALL_PREFIX: %1").arg(CMAKE_INSTALL_PREFIX)); |     metadata.append(QString("    CMAKE_INSTALL_PREFIX: %1").arg(CMAKE_INSTALL_PREFIX)); | ||||||
|     metadata.append(QString("    CMAKE_MODULE_LINKER_FLAGS: %1").arg(CMAKE_MODULE_LINKER_FLAGS)); |     metadata.append(QString("    CMAKE_MODULE_LINKER_FLAGS: %1").arg(CMAKE_MODULE_LINKER_FLAGS)); | ||||||
|  | |||||||
| @ -22,6 +22,5 @@ X-KDE-PluginInfo-Name=org.kde.plasma.awesomewidget | |||||||
| X-KDE-PluginInfo-Version=@PROJECT_VERSION@ | X-KDE-PluginInfo-Version=@PROJECT_VERSION@ | ||||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||||
| X-KDE-PluginInfo-Category=System Information | X-KDE-PluginInfo-Category=System Information | ||||||
| X-KDE-PluginInfo-Depends= |  | ||||||
| X-KDE-PluginInfo-License=GPLv3 | X-KDE-PluginInfo-License=GPLv3 | ||||||
| X-KDE-PluginInfo-EnabledByDefault=true | X-KDE-PluginInfo-EnabledByDefault=true | ||||||
|  | |||||||
							
								
								
									
										29
									
								
								sources/awesome-widget/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sources/awesome-widget/metadata.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | { | ||||||
|  |     "KPlugin": { | ||||||
|  |         "Authors": [ | ||||||
|  |             { | ||||||
|  |                 "Email": "esalexeev@gmail.com", | ||||||
|  |                 "Name": "Evgeniy Alekseev aka arcanis" | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "Category": "System Information", | ||||||
|  |         "Description": "A minimalistic Plasmoid", | ||||||
|  |         "Description[en]": "A minimalistic Plasmoid", | ||||||
|  |         "Description[es]": "Un script Plasmoïde minimaliste", | ||||||
|  |         "Description[pt_BR]": "Um script Plasmoid", | ||||||
|  |         "Description[ru]": "Минималистичный плазмоид", | ||||||
|  |         "Description[uk]": "Мінімалістичний плазмоїд", | ||||||
|  |         "EnabledByDefault": true, | ||||||
|  |         "Icon": "utilities-system-monitor", | ||||||
|  |         "Id": "org.kde.plasma.awesomewidget", | ||||||
|  |         "License": "GPLv3", | ||||||
|  |         "Name": "Awesome Widget", | ||||||
|  |         "ServiceTypes": [ | ||||||
|  |             "Plasma/Applet" | ||||||
|  |         ], | ||||||
|  |         "Version": "@PROJECT_VERSION@", | ||||||
|  |         "Website": "https://arcanis.me/projects/awesome-widgets/" | ||||||
|  |     }, | ||||||
|  |     "X-Plasma-API": "declarativeappletscript", | ||||||
|  |     "X-Plasma-MainScript": "ui/main.qml" | ||||||
|  | } | ||||||
| @ -3,25 +3,25 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| # common QML constants | # common QML constants | ||||||
| singleton General 1.0 file:///usr/share/awesomewidgets/qml/General.qml | singleton General 1.0 file:///usr//awesomewidgets/qml/General.qml | ||||||
|  |  | ||||||
| # custom QML UI classes | # custom QML UI classes | ||||||
| AboutTab file:///usr/share/awesomewidgets/qml/AboutTab.qml | AboutTab file:///usr//awesomewidgets/qml/AboutTab.qml | ||||||
| AWExtensions file:///usr/share/awesomewidgets/qml/AWExtensions.qml | AWExtensions file:///usr//awesomewidgets/qml/AWExtensions.qml | ||||||
| AWInfoLabel file:///usr/share/awesomewidgets/qml/AWInfoLabel.qml | AWInfoLabel file:///usr//awesomewidgets/qml/AWInfoLabel.qml | ||||||
| AWTagSelector file:///usr/share/awesomewidgets/qml/AWTagSelector.qml | AWTagSelector file:///usr//awesomewidgets/qml/AWTagSelector.qml | ||||||
| AWTextEditor file:///usr/share/awesomewidgets/qml/AWTextEditor.qml | AWTextEditor file:///usr//awesomewidgets/qml/AWTextEditor.qml | ||||||
| BugReport file:///usr/share/awesomewidgets/qml/BugReport.qml | BugReport file:///usr//awesomewidgets/qml/BugReport.qml | ||||||
| ButtonSelector file:///usr/share/awesomewidgets/qml/ButtonSelector.qml | ButtonSelector file:///usr//awesomewidgets/qml/ButtonSelector.qml | ||||||
| CheckBoxSelector file:///usr/share/awesomewidgets/qml/CheckBoxSelector.qml | CheckBoxSelector file:///usr//awesomewidgets/qml/CheckBoxSelector.qml | ||||||
| ColorSelector file:///usr/share/awesomewidgets/qml/ColorSelector.qml | ColorSelector file:///usr//awesomewidgets/qml/ColorSelector.qml | ||||||
| ComboBoxSelector file:///usr/share/awesomewidgets/qml/ComboBoxSelector.qml | ComboBoxSelector file:///usr//awesomewidgets/qml/ComboBoxSelector.qml | ||||||
| ExportDialog file:///usr/share/awesomewidgets/qml/ExportDialog.qml | ExportDialog file:///usr//awesomewidgets/qml/ExportDialog.qml | ||||||
| FontSelector file:///usr/share/awesomewidgets/qml/FontSelector.qml | FontSelector file:///usr//awesomewidgets/qml/FontSelector.qml | ||||||
| HtmlDefaultFunctionsBar file:///usr/share/awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | HtmlDefaultFunctionsBar file:///usr//awesomewidgets/qml/HtmlDefaultFunctionsBar.qml | ||||||
| HtmlEditorButton file:///usr/share/awesomewidgets/qml/HtmlEditorButton.qml | HtmlEditorButton file:///usr//awesomewidgets/qml/HtmlEditorButton.qml | ||||||
| HtmlEditorColor file:///usr/share/awesomewidgets/qml/HtmlEditorColor.qml | HtmlEditorColor file:///usr//awesomewidgets/qml/HtmlEditorColor.qml | ||||||
| HtmlEditorFont file:///usr/share/awesomewidgets/qml/HtmlEditorFont.qml | HtmlEditorFont file:///usr//awesomewidgets/qml/HtmlEditorFont.qml | ||||||
| ImportDialog file:///usr/share/awesomewidgets/qml/ImportDialog.qml | ImportDialog file:///usr//awesomewidgets/qml/ImportDialog.qml | ||||||
| IntegerSelector file:///usr/share/awesomewidgets/qml/IntegerSelector.qml | IntegerSelector file:///usr//awesomewidgets/qml/IntegerSelector.qml | ||||||
| LineSelector file:///usr/share/awesomewidgets/qml/LineSelector.qml | LineSelector file:///usr//awesomewidgets/qml/LineSelector.qml | ||||||
|  | |||||||
| @ -19,9 +19,8 @@ X-Plasma-MainScript=ui/main.qml | |||||||
| X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis | X-KDE-PluginInfo-Author=Evgeniy Alekseev aka arcanis | ||||||
| X-KDE-PluginInfo-Email=esalexeev@gmail.com | X-KDE-PluginInfo-Email=esalexeev@gmail.com | ||||||
| X-KDE-PluginInfo-Name=org.kde.plasma.awesomewidget | X-KDE-PluginInfo-Name=org.kde.plasma.awesomewidget | ||||||
| X-KDE-PluginInfo-Version=3.4.2 | X-KDE-PluginInfo-Version=3.5.1 | ||||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||||
| X-KDE-PluginInfo-Category=System Information | X-KDE-PluginInfo-Category=System Information | ||||||
| X-KDE-PluginInfo-Depends= |  | ||||||
| X-KDE-PluginInfo-License=GPLv3 | X-KDE-PluginInfo-License=GPLv3 | ||||||
| X-KDE-PluginInfo-EnabledByDefault=true | X-KDE-PluginInfo-EnabledByDefault=true | ||||||
|  | |||||||
| @ -7,17 +7,17 @@ include_directories( | |||||||
|         ${CMAKE_CURRENT_SOURCE_DIR}/../../${PROJECT_LIBRARY}/ |         ${CMAKE_CURRENT_SOURCE_DIR}/../../${PROJECT_LIBRARY}/ | ||||||
|         ${PROJECT_TRDPARTY_DIR} |         ${PROJECT_TRDPARTY_DIR} | ||||||
|         ${Qt_INCLUDE} |         ${Qt_INCLUDE} | ||||||
|         ${Kf5_INCLUDE} |         ${Kf6_INCLUDE} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) | file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) | ||||||
| file(GLOB SUBPROJECT_UI *.ui) | file(GLOB SUBPROJECT_UI *.ui) | ||||||
| file(GLOB SUBPROJECT_NOTIFY *.notifyrc) | file(GLOB SUBPROJECT_NOTIFY *.notifyrc) | ||||||
|  |  | ||||||
| qt5_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) | qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) | ||||||
| add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER}) | add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER}) | ||||||
| target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) | target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||||
|  |  | ||||||
| install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) | install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) | ||||||
| install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) | install(FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) | ||||||
| install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KNOTIFYRC_INSTALL_DIR}) | install(FILES ${SUBPROJECT_NOTIFY} DESTINATION ${KDE_INSTALL_KNOTIFYRCDIR}) | ||||||
|  | |||||||
| @ -107,8 +107,7 @@ void AWAbstractPairConfig::updateUi() | |||||||
| void AWAbstractPairConfig::addSelector(const QStringList &_keys, const QStringList &_values, | void AWAbstractPairConfig::addSelector(const QStringList &_keys, const QStringList &_values, | ||||||
|                                        const QPair<QString, QString> &_current) |                                        const QPair<QString, QString> &_current) | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Add selector with keys" << _keys << "values" << _values |     qCDebug(LOG_AW) << "Add selector with keys" << _keys << "values" << _values << "and current ones" << _current; | ||||||
|                     << "and current ones" << _current; |  | ||||||
|  |  | ||||||
|     auto *selector = new AWAbstractSelector(ui->scrollAreaWidgetContents, m_editable); |     auto *selector = new AWAbstractSelector(ui->scrollAreaWidgetContents, m_editable); | ||||||
|     selector->init(_keys, _values, _current); |     selector->init(_keys, _values, _current); | ||||||
|  | |||||||
| @ -35,8 +35,7 @@ class AWAbstractPairConfig : public QDialog | |||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWAbstractPairConfig(QWidget *_parent = nullptr, bool _hasEdit = false, |     explicit AWAbstractPairConfig(QWidget *_parent = nullptr, bool _hasEdit = false, QStringList _keys = QStringList()); | ||||||
|                                   QStringList _keys = QStringList()); |  | ||||||
|     ~AWAbstractPairConfig() override; |     ~AWAbstractPairConfig() override; | ||||||
|     template <class T> void initHelper() |     template <class T> void initHelper() | ||||||
|     { |     { | ||||||
| @ -62,8 +61,7 @@ private: | |||||||
|     bool m_hasEdit = false; |     bool m_hasEdit = false; | ||||||
|     QStringList m_keys; |     QStringList m_keys; | ||||||
|     // methods |     // methods | ||||||
|     void addSelector(const QStringList &_keys, const QStringList &_values, |     void addSelector(const QStringList &_keys, const QStringList &_values, const QPair<QString, QString> &_current); | ||||||
|                      const QPair<QString, QString> &_current); |  | ||||||
|     void clearSelectors(); |     void clearSelectors(); | ||||||
|     void execDialog(); |     void execDialog(); | ||||||
|     [[nodiscard]] QPair<QStringList, QStringList> initKeys() const; |     [[nodiscard]] QPair<QStringList, QStringList> initKeys() const; | ||||||
|  | |||||||
| @ -61,7 +61,7 @@ QStringList AWAbstractPairHelper::values() const | |||||||
| QSet<QString> AWAbstractPairHelper::valuesSet() const | QSet<QString> AWAbstractPairHelper::valuesSet() const | ||||||
| { | { | ||||||
|     auto values = m_pairs.values(); |     auto values = m_pairs.values(); | ||||||
|     return QSet(values.cbegin(), values.cend()); |     return {values.cbegin(), values.cend()}; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -69,8 +69,7 @@ void AWAbstractPairHelper::initItems() | |||||||
| { | { | ||||||
|     m_pairs.clear(); |     m_pairs.clear(); | ||||||
|  |  | ||||||
|     QStringList configs |     QStringList configs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, m_filePath); | ||||||
|         = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, m_filePath); |  | ||||||
|  |  | ||||||
|     for (auto &fileName : configs) { |     for (auto &fileName : configs) { | ||||||
|         QSettings settings(fileName, QSettings::IniFormat); |         QSettings settings(fileName, QSettings::IniFormat); | ||||||
| @ -80,8 +79,7 @@ void AWAbstractPairHelper::initItems() | |||||||
|         QStringList keys = settings.childKeys(); |         QStringList keys = settings.childKeys(); | ||||||
|         for (auto &key : keys) { |         for (auto &key : keys) { | ||||||
|             QString value = settings.value(key).toString(); |             QString value = settings.value(key).toString(); | ||||||
|             qCInfo(LOG_AW) << "Found key" << key << "for value" << value << "in" |             qCInfo(LOG_AW) << "Found key" << key << "for value" << value << "in" << settings.fileName(); | ||||||
|                            << settings.fileName(); |  | ||||||
|             if (value.isEmpty()) { |             if (value.isEmpty()) { | ||||||
|                 qCInfo(LOG_AW) << "Skip empty value for" << key; |                 qCInfo(LOG_AW) << "Skip empty value for" << key; | ||||||
|                 continue; |                 continue; | ||||||
| @ -98,9 +96,7 @@ bool AWAbstractPairHelper::writeItems(const QHash<QString, QString> &_configurat | |||||||
|     qCDebug(LOG_AW) << "Write configuration" << _configuration; |     qCDebug(LOG_AW) << "Write configuration" << _configuration; | ||||||
|  |  | ||||||
|     QString fileName |     QString fileName | ||||||
|         = QString("%1/%2") |         = QString("%1/%2").arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)).arg(m_filePath); | ||||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) |  | ||||||
|               .arg(m_filePath); |  | ||||||
|     QSettings settings(fileName, QSettings::IniFormat); |     QSettings settings(fileName, QSettings::IniFormat); | ||||||
|     qCInfo(LOG_AW) << "Configuration file" << fileName; |     qCInfo(LOG_AW) << "Configuration file" << fileName; | ||||||
|  |  | ||||||
| @ -120,9 +116,7 @@ bool AWAbstractPairHelper::removeUnusedKeys(const QStringList &_keys) const | |||||||
|     qCDebug(LOG_AW) << "Remove keys" << _keys; |     qCDebug(LOG_AW) << "Remove keys" << _keys; | ||||||
|  |  | ||||||
|     QString fileName |     QString fileName | ||||||
|         = QString("%1/%2") |         = QString("%1/%2").arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)).arg(m_filePath); | ||||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) |  | ||||||
|               .arg(m_filePath); |  | ||||||
|     QSettings settings(fileName, QSettings::IniFormat); |     QSettings settings(fileName, QSettings::IniFormat); | ||||||
|     qCInfo(LOG_AW) << "Configuration file" << fileName; |     qCInfo(LOG_AW) << "Configuration file" << fileName; | ||||||
|  |  | ||||||
|  | |||||||
| @ -60,8 +60,8 @@ void AWAbstractSelector::init(const QStringList &_keys, const QStringList &_valu | |||||||
|         qCWarning(LOG_AW) << "Invalid current value" << _current << "not found in default ones"; |         qCWarning(LOG_AW) << "Invalid current value" << _current << "not found in default ones"; | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     qCDebug(LOG_AW) << "Init selector with keys" << _keys << "and values" << _values |     qCDebug(LOG_AW) << "Init selector with keys" << _keys << "and values" << _values << "and current ones are" | ||||||
|                     << "and current ones are" << _current; |                     << _current; | ||||||
|  |  | ||||||
|     // set data |     // set data | ||||||
|     ui->comboBox_key->clear(); |     ui->comboBox_key->clear(); | ||||||
|  | |||||||
| @ -32,12 +32,10 @@ class AWAbstractSelector : public QWidget | |||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWAbstractSelector(QWidget *_parent = nullptr, |     explicit AWAbstractSelector(QWidget *_parent = nullptr, const QPair<bool, bool> &_editable = {false, false}); | ||||||
|                                 const QPair<bool, bool> &_editable = {false, false}); |  | ||||||
|     ~AWAbstractSelector() override; |     ~AWAbstractSelector() override; | ||||||
|     [[nodiscard]] QPair<QString, QString> current() const; |     [[nodiscard]] QPair<QString, QString> current() const; | ||||||
|     void init(const QStringList &_keys, const QStringList &_values, |     void init(const QStringList &_keys, const QStringList &_values, const QPair<QString, QString> &_current); | ||||||
|               const QPair<QString, QString> &_current); |  | ||||||
|  |  | ||||||
| signals: | signals: | ||||||
|     void selectionChanged(); |     void selectionChanged(); | ||||||
|  | |||||||
| @ -124,8 +124,8 @@ QVariantMap AWActions::getFont(const QVariantMap &_defaultFont) | |||||||
|  |  | ||||||
|     QVariantMap fontMap; |     QVariantMap fontMap; | ||||||
|     int ret = 0; |     int ret = 0; | ||||||
|     CFont defaultCFont = CFont(_defaultFont["family"].toString(), _defaultFont["size"].toInt(), 400, |     CFont defaultCFont = CFont(_defaultFont["family"].toString(), _defaultFont["size"].toInt(), 400, false, | ||||||
|                                false, _defaultFont["color"].toString()); |                                _defaultFont["color"].toString()); | ||||||
|     CFont font = CFontDialog::getFont(i18n("Select font"), defaultCFont, false, false, &ret); |     CFont font = CFontDialog::getFont(i18n("Select font"), defaultCFont, false, false, &ret); | ||||||
|  |  | ||||||
|     fontMap["applied"] = ret; |     fontMap["applied"] = ret; | ||||||
|  | |||||||
| @ -44,13 +44,12 @@ AWBugReporter::~AWBugReporter() | |||||||
| void AWBugReporter::doConnect() | void AWBugReporter::doConnect() | ||||||
| { | { | ||||||
|     // additional method for testing needs |     // additional method for testing needs | ||||||
|     connect(this, SIGNAL(replyReceived(const int, const QString &)), this, |     connect(this, SIGNAL(replyReceived(const int, const QString &)), this, SLOT(showInformation(int, const QString &))); | ||||||
|             SLOT(showInformation(int, const QString &))); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QString AWBugReporter::generateText(const QString &_description, const QString &_reproduce, | QString AWBugReporter::generateText(const QString &_description, const QString &_reproduce, const QString &_expected, | ||||||
|                                     const QString &_expected, const QString &_logs) |                                     const QString &_logs) | ||||||
| { | { | ||||||
|     // do not log _logs here, it may have quite large size |     // do not log _logs here, it may have quite large size | ||||||
|     qCDebug(LOG_AW) << "Generate text with description" << _description << "steps" << _reproduce |     qCDebug(LOG_AW) << "Generate text with description" << _description << "steps" << _reproduce | ||||||
| @ -73,8 +72,7 @@ void AWBugReporter::sendBugReport(const QString &_title, const QString &_body) | |||||||
|     qCDebug(LOG_AW) << "Send bug report with title" << _title << "and body" << _body; |     qCDebug(LOG_AW) << "Send bug report with title" << _title << "and body" << _body; | ||||||
|  |  | ||||||
|     auto *manager = new QNetworkAccessManager(nullptr); |     auto *manager = new QNetworkAccessManager(nullptr); | ||||||
|     connect(manager, SIGNAL(finished(QNetworkReply *)), this, |     connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(issueReplyRecieved(QNetworkReply *))); | ||||||
|             SLOT(issueReplyRecieved(QNetworkReply *))); |  | ||||||
|  |  | ||||||
|     QNetworkRequest request = QNetworkRequest(QUrl(BUGTRACKER_API)); |     QNetworkRequest request = QNetworkRequest(QUrl(BUGTRACKER_API)); | ||||||
|     request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); |     request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); | ||||||
| @ -95,8 +93,7 @@ void AWBugReporter::sendBugReport(const QString &_title, const QString &_body) | |||||||
| void AWBugReporter::issueReplyRecieved(QNetworkReply *_reply) | void AWBugReporter::issueReplyRecieved(QNetworkReply *_reply) | ||||||
| { | { | ||||||
|     if (_reply->error() != QNetworkReply::NoError) { |     if (_reply->error() != QNetworkReply::NoError) { | ||||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" |         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||||
|                           << _reply->errorString(); |  | ||||||
|         return emit(replyReceived(0, "")); |         return emit(replyReceived(0, "")); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -38,7 +38,7 @@ public: | |||||||
|     Q_INVOKABLE void sendBugReport(const QString &_title, const QString &_body); |     Q_INVOKABLE void sendBugReport(const QString &_title, const QString &_body); | ||||||
|  |  | ||||||
| signals: | signals: | ||||||
|     void replyReceived(const int _number, const QString &_url); |     void replyReceived(int _number, const QString &_url); | ||||||
|  |  | ||||||
| private slots: | private slots: | ||||||
|     void issueReplyRecieved(QNetworkReply *_reply); |     void issueReplyRecieved(QNetworkReply *_reply); | ||||||
|  | |||||||
| @ -31,8 +31,7 @@ AWConfigHelper::AWConfigHelper(QObject *_parent) | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; |     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     m_baseDir = QString("%1/awesomewidgets") |     m_baseDir = QString("%1/awesomewidgets").arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); | ||||||
|                     .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -45,9 +44,8 @@ AWConfigHelper::~AWConfigHelper() | |||||||
| QString AWConfigHelper::configurationDirectory() | QString AWConfigHelper::configurationDirectory() | ||||||
| { | { | ||||||
|     // get readable directory |     // get readable directory | ||||||
|     QString localDir |     QString localDir = QString("%1/awesomewidgets/configs") | ||||||
|         = QString("%1/awesomewidgets/configs") |                            .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); | ||||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); |  | ||||||
|  |  | ||||||
|     // create directory and copy files from default settings |     // create directory and copy files from default settings | ||||||
|     QDir localDirectory; |     QDir localDirectory; | ||||||
| @ -63,8 +61,7 @@ QString AWConfigHelper::configurationDirectory() | |||||||
| bool AWConfigHelper::dropCache() | bool AWConfigHelper::dropCache() | ||||||
| { | { | ||||||
|     QString fileName |     QString fileName | ||||||
|         = QString("%1/awesomewidgets.ndx") |         = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); |  | ||||||
|  |  | ||||||
|     return QFile(fileName).remove(); |     return QFile(fileName).remove(); | ||||||
| } | } | ||||||
| @ -88,8 +85,8 @@ bool AWConfigHelper::exportConfiguration(QObject *_nativeConfig, const QString & | |||||||
|  |  | ||||||
|     // extensions |     // extensions | ||||||
|     for (auto &item : m_dirs) { |     for (auto &item : m_dirs) { | ||||||
|         QStringList items = QDir(QString("%1/%2").arg(m_baseDir).arg(item)) |         QStringList items | ||||||
|                                 .entryList(QStringList() << "*.desktop", QDir::Files); |             = QDir(QString("%1/%2").arg(m_baseDir).arg(item)).entryList(QStringList() << "*.desktop", QDir::Files); | ||||||
|         settings.beginGroup(item); |         settings.beginGroup(item); | ||||||
|         for (auto &it : items) |         for (auto &it : items) | ||||||
|             copyExtensions(it, item, settings, false); |             copyExtensions(it, item, settings, false); | ||||||
| @ -99,11 +96,9 @@ bool AWConfigHelper::exportConfiguration(QObject *_nativeConfig, const QString & | |||||||
|     // additional files |     // additional files | ||||||
|     settings.beginGroup("json"); |     settings.beginGroup("json"); | ||||||
|     // script filters |     // script filters | ||||||
|     readFile(settings, "filters", |     readFile(settings, "filters", QString("%1/scripts/awesomewidgets-extscripts-filters.json").arg(m_baseDir)); | ||||||
|              QString("%1/scripts/awesomewidgets-extscripts-filters.json").arg(m_baseDir)); |  | ||||||
|     // weather icon settings |     // weather icon settings | ||||||
|     readFile(settings, "weathers", |     readFile(settings, "weathers", QString("%1/weather/awesomewidgets-extweather-ids.json").arg(m_baseDir)); | ||||||
|              QString("%1/weather/awesomewidgets-extweather-ids.json").arg(m_baseDir)); |  | ||||||
|     settings.endGroup(); |     settings.endGroup(); | ||||||
|  |  | ||||||
|     settings.beginGroup("ini"); |     settings.beginGroup("ini"); | ||||||
| @ -120,10 +115,8 @@ bool AWConfigHelper::exportConfiguration(QObject *_nativeConfig, const QString & | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QVariantMap AWConfigHelper::importConfiguration(const QString &_fileName, | QVariantMap AWConfigHelper::importConfiguration(const QString &_fileName, const bool _importPlasmoid, | ||||||
|                                                 const bool _importPlasmoid, |                                                 const bool _importExtensions, const bool _importAdds) const | ||||||
|                                                 const bool _importExtensions, |  | ||||||
|                                                 const bool _importAdds) const |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Selected filename" << _fileName; |     qCDebug(LOG_AW) << "Selected filename" << _fileName; | ||||||
|  |  | ||||||
| @ -144,11 +137,9 @@ QVariantMap AWConfigHelper::importConfiguration(const QString &_fileName, | |||||||
|     if (_importAdds) { |     if (_importAdds) { | ||||||
|         settings.beginGroup("json"); |         settings.beginGroup("json"); | ||||||
|         // script filters |         // script filters | ||||||
|         writeFile(settings, "filters", |         writeFile(settings, "filters", QString("%1/scripts/awesomewidgets-extscripts-filters.json").arg(m_baseDir)); | ||||||
|                   QString("%1/scripts/awesomewidgets-extscripts-filters.json").arg(m_baseDir)); |  | ||||||
|         // weather icon settings |         // weather icon settings | ||||||
|         writeFile(settings, "weathers", |         writeFile(settings, "weathers", QString("%1/weather/awesomewidgets-extweather-ids.json").arg(m_baseDir)); | ||||||
|                   QString("%1/weather/awesomewidgets-extweather-ids.json").arg(m_baseDir)); |  | ||||||
|         settings.endGroup(); |         settings.endGroup(); | ||||||
|  |  | ||||||
|         settings.beginGroup("ini"); |         settings.beginGroup("ini"); | ||||||
| @ -173,8 +164,7 @@ QVariantMap AWConfigHelper::importConfiguration(const QString &_fileName, | |||||||
|  |  | ||||||
| QVariantMap AWConfigHelper::readDataEngineConfiguration() | QVariantMap AWConfigHelper::readDataEngineConfiguration() | ||||||
| { | { | ||||||
|     QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, |     QString fileName = QStandardPaths::locate(QStandardPaths::ConfigLocation, "plasma-dataengine-extsysmon.conf"); | ||||||
|                                               "plasma-dataengine-extsysmon.conf"); |  | ||||||
|     qCInfo(LOG_AW) << "Configuration file" << fileName; |     qCInfo(LOG_AW) << "Configuration file" << fileName; | ||||||
|     QSettings settings(fileName, QSettings::IniFormat); |     QSettings settings(fileName, QSettings::IniFormat); | ||||||
|     QVariantMap configuration; |     QVariantMap configuration; | ||||||
| @ -228,9 +218,8 @@ void AWConfigHelper::copyConfigs(const QString &_localDir) | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Local directory" << _localDir; |     qCDebug(LOG_AW) << "Local directory" << _localDir; | ||||||
|  |  | ||||||
|     QStringList dirs |     QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "awesomewidgets/configs", | ||||||
|         = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "awesomewidgets/configs", |                                                  QStandardPaths::LocateDirectory); | ||||||
|                                     QStandardPaths::LocateDirectory); |  | ||||||
|     for (auto &dir : dirs) { |     for (auto &dir : dirs) { | ||||||
|         if (dir == _localDir) |         if (dir == _localDir) | ||||||
|             continue; |             continue; | ||||||
| @ -238,21 +227,19 @@ void AWConfigHelper::copyConfigs(const QString &_localDir) | |||||||
|         for (auto &source : files) { |         for (auto &source : files) { | ||||||
|             QString destination = QString("%1/%2").arg(_localDir).arg(source); |             QString destination = QString("%1/%2").arg(_localDir).arg(source); | ||||||
|             bool status = QFile::copy(QString("%1/%2").arg(dir).arg(source), destination); |             bool status = QFile::copy(QString("%1/%2").arg(dir).arg(source), destination); | ||||||
|             qCInfo(LOG_AW) << "File" << source << "has been copied to" << destination |             qCInfo(LOG_AW) << "File" << source << "has been copied to" << destination << "with status" << status; | ||||||
|                            << "with status" << status; |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWConfigHelper::copyExtensions(const QString &_item, const QString &_type, | void AWConfigHelper::copyExtensions(const QString &_item, const QString &_type, QSettings &_settings, | ||||||
|                                     QSettings &_settings, const bool _inverse) const |                                     const bool _inverse) const | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Extension" << _item << "has type" << _type << "inverse copying" << _inverse; |     qCDebug(LOG_AW) << "Extension" << _item << "has type" << _type << "inverse copying" << _inverse; | ||||||
|  |  | ||||||
|     _settings.beginGroup(_item); |     _settings.beginGroup(_item); | ||||||
|     QSettings itemSettings(QString("%1/%2/%3").arg(m_baseDir).arg(_type).arg(_item), |     QSettings itemSettings(QString("%1/%2/%3").arg(m_baseDir).arg(_type).arg(_item), QSettings::IniFormat); | ||||||
|                            QSettings::IniFormat); |  | ||||||
|     itemSettings.beginGroup("Desktop Entry"); |     itemSettings.beginGroup("Desktop Entry"); | ||||||
|     if (_inverse) |     if (_inverse) | ||||||
|         copySettings(_settings, itemSettings); |         copySettings(_settings, itemSettings); | ||||||
|  | |||||||
| @ -35,10 +35,8 @@ public: | |||||||
|     Q_INVOKABLE [[nodiscard]] static QString configurationDirectory(); |     Q_INVOKABLE [[nodiscard]] static QString configurationDirectory(); | ||||||
|     Q_INVOKABLE static bool dropCache(); |     Q_INVOKABLE static bool dropCache(); | ||||||
|     Q_INVOKABLE bool exportConfiguration(QObject *_nativeConfig, const QString &_fileName) const; |     Q_INVOKABLE bool exportConfiguration(QObject *_nativeConfig, const QString &_fileName) const; | ||||||
|     Q_INVOKABLE [[nodiscard]] QVariantMap importConfiguration(const QString &_fileName, |     Q_INVOKABLE [[nodiscard]] QVariantMap importConfiguration(const QString &_fileName, bool _importPlasmoid, | ||||||
|                                                               bool _importPlasmoid, |                                                               bool _importExtensions, bool _importAdds) const; | ||||||
|                                                               bool _importExtensions, |  | ||||||
|                                                               bool _importAdds) const; |  | ||||||
|     // dataengine |     // dataengine | ||||||
|     Q_INVOKABLE static QVariantMap readDataEngineConfiguration(); |     Q_INVOKABLE static QVariantMap readDataEngineConfiguration(); | ||||||
|     Q_INVOKABLE static bool writeDataEngineConfiguration(const QVariantMap &_configuration); |     Q_INVOKABLE static bool writeDataEngineConfiguration(const QVariantMap &_configuration); | ||||||
| @ -46,8 +44,7 @@ public: | |||||||
| private: | private: | ||||||
|     // methods |     // methods | ||||||
|     static void copyConfigs(const QString &_localDir); |     static void copyConfigs(const QString &_localDir); | ||||||
|     void copyExtensions(const QString &_item, const QString &_type, QSettings &_settings, |     void copyExtensions(const QString &_item, const QString &_type, QSettings &_settings, bool _inverse) const; | ||||||
|                         bool _inverse) const; |  | ||||||
|     static void copySettings(QSettings &_from, QSettings &_to); |     static void copySettings(QSettings &_from, QSettings &_to); | ||||||
|     static void readFile(QSettings &_settings, const QString &_key, const QString &_fileName); |     static void readFile(QSettings &_settings, const QString &_key, const QString &_fileName); | ||||||
|     static void writeFile(QSettings &_settings, const QString &_key, const QString &_fileName); |     static void writeFile(QSettings &_settings, const QString &_key, const QString &_fileName); | ||||||
|  | |||||||
| @ -27,8 +27,7 @@ class AWCustomKeysConfig : public AWAbstractPairConfig | |||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWCustomKeysConfig(QWidget *_parent = nullptr, |     explicit AWCustomKeysConfig(QWidget *_parent = nullptr, const QStringList &_keys = QStringList()); | ||||||
|                                 const QStringList &_keys = QStringList()); |  | ||||||
|     ~AWCustomKeysConfig() override; |     ~AWCustomKeysConfig() override; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | |||||||
| @ -74,5 +74,5 @@ QStringList AWCustomKeysHelper::leftKeys() | |||||||
|  |  | ||||||
| QStringList AWCustomKeysHelper::rightKeys() | QStringList AWCustomKeysHelper::rightKeys() | ||||||
| { | { | ||||||
|     return QStringList(); |     return {}; | ||||||
| } | } | ||||||
|  | |||||||
| @ -61,8 +61,7 @@ QString AWDataAggregator::htmlImage(const QPixmap &_source) | |||||||
|     _source.save(&buffer, "PNG"); |     _source.save(&buffer, "PNG"); | ||||||
|  |  | ||||||
|     return byteArray.isEmpty() ? "" |     return byteArray.isEmpty() ? "" | ||||||
|                                : QString("<img src=\"data:image/png;base64,%1\"/>") |                                : QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); | ||||||
|                                      .arg(QString(byteArray.toBase64())); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -102,10 +101,9 @@ void AWDataAggregator::setParameters(const QVariantMap &_settings) | |||||||
|         requiredKeys.append("batTooltip"); |         requiredKeys.append("batTooltip"); | ||||||
|  |  | ||||||
|     // background |     // background | ||||||
|     m_toolTipScene->setBackgroundBrush( |     m_toolTipScene->setBackgroundBrush(m_configuration["useTooltipBackground"].toBool() | ||||||
|         m_configuration["useTooltipBackground"].toBool() |                                            ? QBrush(QColor(m_configuration["tooltipBackground"].toString())) | ||||||
|             ? QBrush(QColor(m_configuration["tooltipBackground"].toString())) |                                            : QBrush(Qt::NoBrush)); | ||||||
|             : QBrush(Qt::NoBrush)); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -156,11 +154,10 @@ void AWDataAggregator::dataUpdate(const QVariantHash &_values) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWDataAggregator::checkValue(const QString &_source, const float _value, | void AWDataAggregator::checkValue(const QString &_source, const float _value, const float _extremum) const | ||||||
|                                   const float _extremum) const |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Notification source" << _source << "with value" << _value |     qCDebug(LOG_AW) << "Notification source" << _source << "with value" << _value << "called with extremum" | ||||||
|                     << "called with extremum" << _extremum; |                     << _extremum; | ||||||
|  |  | ||||||
|     if (_value >= 0.0) { |     if (_value >= 0.0) { | ||||||
|         if ((m_enablePopup) && (_value > _extremum) && (m_values[_source].last() < _extremum)) |         if ((m_enablePopup) && (_value > _extremum) && (m_values[_source].last() < _extremum)) | ||||||
| @ -172,11 +169,10 @@ void AWDataAggregator::checkValue(const QString &_source, const float _value, | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWDataAggregator::checkValue(const QString &_source, const QString &_current, | void AWDataAggregator::checkValue(const QString &_source, const QString &_current, const QString &_received) const | ||||||
|                                   const QString &_received) const |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Notification source" << _source << "with current value" << _current |     qCDebug(LOG_AW) << "Notification source" << _source << "with current value" << _current << "and received one" | ||||||
|                     << "and received one" << _received; |                     << _received; | ||||||
|  |  | ||||||
|     if ((m_enablePopup) && (_current != _received) && (!_received.isEmpty())) |     if ((m_enablePopup) && (_current != _received) && (!_received.isEmpty())) | ||||||
|         return AWActions::sendNotification("event", notificationText(_source, _received)); |         return AWActions::sendNotification("event", notificationText(_source, _received)); | ||||||
| @ -231,8 +227,7 @@ void AWDataAggregator::setData(const QVariantHash &_values) | |||||||
| { | { | ||||||
|     // do not log these arguments |     // do not log these arguments | ||||||
|     // battery update requires info is AC online or not |     // battery update requires info is AC online or not | ||||||
|     setData(_values["ac"].toString() == m_configuration["acOnline"], "batTooltip", |     setData(_values["ac"].toString() == m_configuration["acOnline"], "batTooltip", _values["bat"].toFloat()); | ||||||
|             _values["bat"].toFloat()); |  | ||||||
|     // usual case |     // usual case | ||||||
|     setData("cpuTooltip", _values["cpu"].toFloat(), 90.0); |     setData("cpuTooltip", _values["cpu"].toFloat(), 90.0); | ||||||
|     setData("cpuclTooltip", _values["cpucl"].toFloat()); |     setData("cpuclTooltip", _values["cpucl"].toFloat()); | ||||||
| @ -269,8 +264,7 @@ void AWDataAggregator::setData(const QString &_source, float _value, const float | |||||||
|         QList<float> netValues = m_values["downkbTooltip"] + m_values["upkbTooltip"]; |         QList<float> netValues = m_values["downkbTooltip"] + m_values["upkbTooltip"]; | ||||||
|         // to avoid inf value of normY |         // to avoid inf value of normY | ||||||
|         netValues << 1.0; |         netValues << 1.0; | ||||||
|         m_boundaries["downkbTooltip"] |         m_boundaries["downkbTooltip"] = 1.2f * *std::max_element(netValues.cbegin(), netValues.cend()); | ||||||
|             = 1.2f * *std::max_element(netValues.cbegin(), netValues.cend()); |  | ||||||
|         m_boundaries["upkbTooltip"] = m_boundaries["downkbTooltip"]; |         m_boundaries["upkbTooltip"] = m_boundaries["downkbTooltip"]; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -278,8 +272,7 @@ void AWDataAggregator::setData(const QString &_source, float _value, const float | |||||||
|  |  | ||||||
| void AWDataAggregator::setData(const bool _dontInvert, const QString &_source, float _value) | void AWDataAggregator::setData(const bool _dontInvert, const QString &_source, float _value) | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Do not invert" << _dontInvert << "value" << _value << "for source" |     qCDebug(LOG_AW) << "Do not invert" << _dontInvert << "value" << _value << "for source" << _source; | ||||||
|                     << _source; |  | ||||||
|  |  | ||||||
|     // invert values for different battery colours |     // invert values for different battery colours | ||||||
|     _value = _dontInvert ? _value : -_value; |     _value = _dontInvert ? _value : -_value; | ||||||
|  | |||||||
| @ -50,8 +50,7 @@ private: | |||||||
|     QGraphicsScene *m_toolTipScene = nullptr; |     QGraphicsScene *m_toolTipScene = nullptr; | ||||||
|     QGraphicsView *m_toolTipView = nullptr; |     QGraphicsView *m_toolTipView = nullptr; | ||||||
|     void checkValue(const QString &_source, float _value, float _extremum) const; |     void checkValue(const QString &_source, float _value, float _extremum) const; | ||||||
|     void checkValue(const QString &_source, const QString &_current, |     void checkValue(const QString &_source, const QString &_current, const QString &_received) const; | ||||||
|                     const QString &_received) const; |  | ||||||
|     void initScene(); |     void initScene(); | ||||||
|     static QString notificationText(const QString &_source, float _value); |     static QString notificationText(const QString &_source, float _value); | ||||||
|     static QString notificationText(const QString &_source, const QString &_value); |     static QString notificationText(const QString &_source, const QString &_value); | ||||||
|  | |||||||
| @ -20,7 +20,6 @@ | |||||||
| #include <Plasma/DataContainer> | #include <Plasma/DataContainer> | ||||||
|  |  | ||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
| #include "awkeys.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) | AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) | ||||||
| @ -35,11 +34,10 @@ AWDataEngineAggregator::AWDataEngineAggregator(QObject *_parent) | |||||||
|  |  | ||||||
|     // additional method required by systemmonitor structure |     // additional method required by systemmonitor structure | ||||||
|     m_newSourceConnection |     m_newSourceConnection | ||||||
|         = connect(m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, |         = connect(m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, [this](const QString &source) { | ||||||
|                   [this](const QString &source) { |               emit(deviceAdded(source)); | ||||||
|                       emit(deviceAdded(source)); |               m_dataEngines["systemmonitor"]->connectSource(source, parent(), 1000); | ||||||
|                       m_dataEngines["systemmonitor"]->connectSource(source, parent(), 1000); |           }); | ||||||
|                   }); |  | ||||||
|  |  | ||||||
|     // required to define Qt::QueuedConnection for signal-slot connection |     // required to define Qt::QueuedConnection for signal-slot connection | ||||||
|     qRegisterMetaType<Plasma::DataEngine::Data>("Plasma::DataEngine::Data"); |     qRegisterMetaType<Plasma::DataEngine::Data>("Plasma::DataEngine::Data"); | ||||||
| @ -74,8 +72,7 @@ void AWDataEngineAggregator::reconnectSources(const int _interval) | |||||||
|     m_dataEngines["time"]->connectSource("Local", parent(), 1000); |     m_dataEngines["time"]->connectSource("Local", parent(), 1000); | ||||||
|  |  | ||||||
|     m_newSourceConnection = connect( |     m_newSourceConnection = connect( | ||||||
|         m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, |         m_dataEngines["systemmonitor"], &Plasma::DataEngine::sourceAdded, [this, _interval](const QString &source) { | ||||||
|         [this, _interval](const QString &source) { |  | ||||||
|             emit(deviceAdded(source)); |             emit(deviceAdded(source)); | ||||||
|             m_dataEngines["systemmonitor"]->connectSource(source, parent(), (uint)_interval); |             m_dataEngines["systemmonitor"]->connectSource(source, parent(), (uint)_interval); | ||||||
|         }); |         }); | ||||||
| @ -103,12 +100,10 @@ void AWDataEngineAggregator::createQueuedConnection() | |||||||
|     // for more details refer to plasma-framework source code |     // for more details refer to plasma-framework source code | ||||||
|     for (auto &dataEngine : m_dataEngines.keys()) { |     for (auto &dataEngine : m_dataEngines.keys()) { | ||||||
|         // different source set for different engines |         // different source set for different engines | ||||||
|         QStringList sources = dataEngine == "time" ? QStringList() << "Local" |         QStringList sources = dataEngine == "time" ? QStringList() << "Local" : m_dataEngines[dataEngine]->sources(); | ||||||
|                                                    : m_dataEngines[dataEngine]->sources(); |  | ||||||
|         // reconnect sources |         // reconnect sources | ||||||
|         for (auto &source : sources) { |         for (auto &source : sources) { | ||||||
|             Plasma::DataContainer *container |             Plasma::DataContainer *container = m_dataEngines[dataEngine]->containerForSource(source); | ||||||
|                 = m_dataEngines[dataEngine]->containerForSource(source); |  | ||||||
|             // disconnect old connections first |             // disconnect old connections first | ||||||
|             disconnect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), |             disconnect(container, SIGNAL(dataUpdated(QString, Plasma::DataEngine::Data)), parent(), | ||||||
|                        SLOT(dataUpdated(QString, Plasma::DataEngine::Data))); |                        SLOT(dataUpdated(QString, Plasma::DataEngine::Data))); | ||||||
|  | |||||||
| @ -76,8 +76,7 @@ QStringList AWDataEngineMapper::keysFromSource(const QString &_source) const | |||||||
|  |  | ||||||
| // HACK units required to define should the value be calculated as temperature | // HACK units required to define should the value be calculated as temperature | ||||||
| // or fan data | // or fan data | ||||||
| QStringList AWDataEngineMapper::registerSource(const QString &_source, const QString &_units, | QStringList AWDataEngineMapper::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) | ||||||
|                                                const QStringList &_keys) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; |     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; | ||||||
|  |  | ||||||
| @ -180,10 +179,8 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | |||||||
|             m_map.insert(_source, key); |             m_map.insert(_source, key); | ||||||
|             m_formatter[key] = AWKeysAggregator::FormatterType::Float; |             m_formatter[key] = AWKeysAggregator::FormatterType::Float; | ||||||
|             // additional keys |             // additional keys | ||||||
|             m_formatter[QString("hddtotmb%1").arg(index)] |             m_formatter[QString("hddtotmb%1").arg(index)] = AWKeysAggregator::FormatterType::MemMBFormat; | ||||||
|                 = AWKeysAggregator::FormatterType::MemMBFormat; |             m_formatter[QString("hddtotgb%1").arg(index)] = AWKeysAggregator::FormatterType::MemGBFormat; | ||||||
|             m_formatter[QString("hddtotgb%1").arg(index)] |  | ||||||
|                 = AWKeysAggregator::FormatterType::MemGBFormat; |  | ||||||
|         } |         } | ||||||
|     } else if (_source.contains(mountFreeRegExp)) { |     } else if (_source.contains(mountFreeRegExp)) { | ||||||
|         // free space |         // free space | ||||||
| @ -427,9 +424,9 @@ QStringList AWDataEngineMapper::registerSource(const QString &_source, const QSt | |||||||
|  |  | ||||||
|     // drop key from dictionary if no one user requested key required it |     // drop key from dictionary if no one user requested key required it | ||||||
|     qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; |     qCInfo(LOG_AW) << "Looking for keys" << foundKeys << "in" << _keys; | ||||||
|     bool required = _keys.isEmpty() |     bool required = _keys.isEmpty() || std::any_of(foundKeys.cbegin(), foundKeys.cend(), [&_keys](const QString &key) { | ||||||
|                     || std::any_of(foundKeys.cbegin(), foundKeys.cend(), |                         return _keys.contains(key); | ||||||
|                                    [&_keys](const QString &key) { return _keys.contains(key); }); |                     }); | ||||||
|     if (!required) { |     if (!required) { | ||||||
|         m_map.remove(_source); |         m_map.remove(_source); | ||||||
|         for (auto &key : foundKeys) |         for (auto &key : foundKeys) | ||||||
|  | |||||||
| @ -38,8 +38,7 @@ public: | |||||||
|     [[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const; |     [[nodiscard]] AWKeysAggregator::FormatterType formatter(const QString &_key) const; | ||||||
|     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; |     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; | ||||||
|     // set methods |     // set methods | ||||||
|     QStringList registerSource(const QString &_source, const QString &_units, |     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||||
|                                const QStringList &_keys); |  | ||||||
|     void setDevices(const QHash<QString, QStringList> &_devices); |     void setDevices(const QHash<QString, QStringList> &_devices); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|  | |||||||
| @ -38,10 +38,9 @@ AWDBusAdaptor::~AWDBusAdaptor() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QStringList AWDBusAdaptor::ActiveServices() const | QStringList AWDBusAdaptor::ActiveServices() | ||||||
| { | { | ||||||
|     QDBusMessage listServices |     QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call(QDBus::BlockWithGui, "ListNames"); | ||||||
|         = QDBusConnection::sessionBus().interface()->call(QDBus::BlockWithGui, "ListNames"); |  | ||||||
|     if (listServices.arguments().isEmpty()) { |     if (listServices.arguments().isEmpty()) { | ||||||
|         qCWarning(LOG_DBUS) << "Could not find any DBus service"; |         qCWarning(LOG_DBUS) << "Could not find any DBus service"; | ||||||
|         return {}; |         return {}; | ||||||
| @ -49,7 +48,7 @@ QStringList AWDBusAdaptor::ActiveServices() const | |||||||
|     QStringList arguments = listServices.arguments().first().toStringList(); |     QStringList arguments = listServices.arguments().first().toStringList(); | ||||||
|  |  | ||||||
|     return std::accumulate(arguments.cbegin(), arguments.cend(), QStringList(), |     return std::accumulate(arguments.cbegin(), arguments.cend(), QStringList(), | ||||||
|                            [](QStringList &source, const QString &service) { |                            [](QStringList source, const QString &service) { | ||||||
|                                if (service.startsWith(AWDBUS_SERVICE)) |                                if (service.startsWith(AWDBUS_SERVICE)) | ||||||
|                                    source.append(service); |                                    source.append(service); | ||||||
|                                return source; |                                return source; | ||||||
| @ -86,8 +85,7 @@ void AWDBusAdaptor::SetLogLevel(const QString &what, const int level) | |||||||
|     qCDebug(LOG_DBUS) << "Set log level" << level << "for" << what; |     qCDebug(LOG_DBUS) << "Set log level" << level << "for" << what; | ||||||
|  |  | ||||||
|     if (level >= m_logLevels.count()) { |     if (level >= m_logLevels.count()) { | ||||||
|         qCDebug(LOG_DBUS) << "Invalid logging level" << level << "should be less than" |         qCDebug(LOG_DBUS) << "Invalid logging level" << level << "should be less than" << m_logLevels.count(); | ||||||
|                           << m_logLevels.count(); |  | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -37,7 +37,7 @@ public: | |||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     // get methods |     // get methods | ||||||
|     [[nodiscard]] QStringList ActiveServices() const; |     [[nodiscard]] static QStringList ActiveServices(); | ||||||
|     [[nodiscard]] QString Info(const QString &key) const; |     [[nodiscard]] QString Info(const QString &key) const; | ||||||
|     [[nodiscard]] QStringList Keys(const QString ®exp) const; |     [[nodiscard]] QStringList Keys(const QString ®exp) const; | ||||||
|     [[nodiscard]] QString Value(const QString &key) const; |     [[nodiscard]] QString Value(const QString &key) const; | ||||||
|  | |||||||
| @ -27,8 +27,7 @@ class AWFormatterConfig : public AWAbstractPairConfig | |||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     explicit AWFormatterConfig(QWidget *_parent = nullptr, |     explicit AWFormatterConfig(QWidget *_parent = nullptr, const QStringList &_keys = QStringList()); | ||||||
|                                const QStringList &_keys = QStringList()); |  | ||||||
|     ~AWFormatterConfig() override; |     ~AWFormatterConfig() override; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | |||||||
| @ -102,7 +102,7 @@ void AWFormatterHelper::editPairs() | |||||||
|  |  | ||||||
| QStringList AWFormatterHelper::leftKeys() | QStringList AWFormatterHelper::leftKeys() | ||||||
| { | { | ||||||
|     return QStringList(); |     return {}; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -120,8 +120,7 @@ void AWFormatterHelper::editItems() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| AWAbstractFormatter::FormatterClass | AWAbstractFormatter::FormatterClass AWFormatterHelper::defineFormatterClass(const QString &_stringType) | ||||||
| AWFormatterHelper::defineFormatterClass(const QString &_stringType) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Define formatter class for" << _stringType; |     qCDebug(LOG_AW) << "Define formatter class for" << _stringType; | ||||||
|  |  | ||||||
| @ -163,9 +162,7 @@ void AWFormatterHelper::initFormatters() | |||||||
|             // check if already exists |             // check if already exists | ||||||
|             auto values = m_formattersClasses.values(); |             auto values = m_formattersClasses.values(); | ||||||
|             if (std::any_of(values.cbegin(), values.cend(), |             if (std::any_of(values.cbegin(), values.cend(), | ||||||
|                             [&filePath](const AWAbstractFormatter *item) { |                             [&filePath](const AWAbstractFormatter *item) { return (item->fileName() == filePath); })) | ||||||
|                                 return (item->fileName() == filePath); |  | ||||||
|                             })) |  | ||||||
|                 continue; |                 continue; | ||||||
|  |  | ||||||
|             auto metadata = readMetadata(filePath); |             auto metadata = readMetadata(filePath); | ||||||
| @ -197,8 +194,7 @@ void AWFormatterHelper::initFormatters() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QPair<QString, AWAbstractFormatter::FormatterClass> | QPair<QString, AWAbstractFormatter::FormatterClass> AWFormatterHelper::readMetadata(const QString &_filePath) | ||||||
| AWFormatterHelper::readMetadata(const QString &_filePath) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Read initial parameters from" << _filePath; |     qCDebug(LOG_AW) << "Read initial parameters from" << _filePath; | ||||||
|  |  | ||||||
| @ -217,8 +213,7 @@ void AWFormatterHelper::doCreateItem() | |||||||
| { | { | ||||||
|     QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"}; |     QStringList selection = {"NoFormat", "DateTime", "Float", "List", "Script", "String", "Json"}; | ||||||
|     bool ok; |     bool ok; | ||||||
|     QString select |     QString select = QInputDialog::getItem(this, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); | ||||||
|         = QInputDialog::getItem(this, i18n("Select type"), i18n("Type:"), selection, 0, false, &ok); |  | ||||||
|     if (!ok) { |     if (!ok) { | ||||||
|         qCWarning(LOG_AW) << "No type selected"; |         qCWarning(LOG_AW) << "No type selected"; | ||||||
|         return; |         return; | ||||||
|  | |||||||
| @ -49,8 +49,7 @@ private: | |||||||
|     // methods |     // methods | ||||||
|     static AWAbstractFormatter::FormatterClass defineFormatterClass(const QString &_stringType); |     static AWAbstractFormatter::FormatterClass defineFormatterClass(const QString &_stringType); | ||||||
|     void initFormatters(); |     void initFormatters(); | ||||||
|     [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> |     [[nodiscard]] static QPair<QString, AWAbstractFormatter::FormatterClass> readMetadata(const QString &_filePath); | ||||||
|     readMetadata(const QString &_filePath); |  | ||||||
|     // parent methods |     // parent methods | ||||||
|     void doCreateItem() override; |     void doCreateItem() override; | ||||||
|     // properties |     // properties | ||||||
|  | |||||||
| @ -31,8 +31,7 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key) | |||||||
|     qCDebug(LOG_AW) << "Key" << _key << "with type" << _type; |     qCDebug(LOG_AW) << "Key" << _key << "with type" << _type; | ||||||
|  |  | ||||||
|     QString fileName |     QString fileName | ||||||
|         = QString("%1/awesomewidgets.ndx") |         = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); |  | ||||||
|     qCInfo(LOG_AW) << "Cache file" << fileName; |     qCInfo(LOG_AW) << "Cache file" << fileName; | ||||||
|     QSettings cache(fileName, QSettings::IniFormat); |     QSettings cache(fileName, QSettings::IniFormat); | ||||||
|  |  | ||||||
| @ -75,12 +74,10 @@ bool AWKeyCache::addKeyToCache(const QString &_type, const QString &_key) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringList &_bars, | QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringList &_bars, const QVariantMap &_tooltip, | ||||||
|                                         const QVariantMap &_tooltip, const QStringList &_userKeys, |                                         const QStringList &_userKeys, const QStringList &_allKeys) | ||||||
|                                         const QStringList &_allKeys) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Looking for required keys in" << _keys << _bars << "using tooltip settings" |     qCDebug(LOG_AW) << "Looking for required keys in" << _keys << _bars << "using tooltip settings" << _tooltip; | ||||||
|                     << _tooltip; |  | ||||||
|  |  | ||||||
|     // initial copy |     // initial copy | ||||||
|     QSet<QString> used(_keys.cbegin(), _keys.cend()); |     QSet<QString> used(_keys.cbegin(), _keys.cend()); | ||||||
| @ -136,8 +133,8 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | |||||||
|         used << "swapgb" |         used << "swapgb" | ||||||
|              << "swapfreegb"; |              << "swapfreegb"; | ||||||
|     // network keys |     // network keys | ||||||
|     QStringList netKeys({"up", "upkb", "uptot", "uptotkb", "upunits", "down", "downkb", "downtot", |     QStringList netKeys( | ||||||
|                          "downtotkb", "downunits"}); |         {"up", "upkb", "uptot", "uptotkb", "upunits", "down", "downkb", "downtot", "downtotkb", "downunits"}); | ||||||
|     for (auto &key : netKeys) { |     for (auto &key : netKeys) { | ||||||
|         if (!used.contains(key)) |         if (!used.contains(key)) | ||||||
|             continue; |             continue; | ||||||
| @ -146,8 +143,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | |||||||
|             used << filtered; |             used << filtered; | ||||||
|     } |     } | ||||||
|     // netdev key |     // netdev key | ||||||
|     if (std::any_of(netKeys.cbegin(), netKeys.cend(), |     if (std::any_of(netKeys.cbegin(), netKeys.cend(), [&used](const QString &key) { return used.contains(key); })) | ||||||
|                     [&used](const QString &key) { return used.contains(key); })) |  | ||||||
|         used << "netdev"; |         used << "netdev"; | ||||||
|  |  | ||||||
|     // HACK append dummy if there are no other keys. This hack is required |     // HACK append dummy if there are no other keys. This hack is required | ||||||
| @ -162,8 +158,7 @@ QStringList AWKeyCache::getRequiredKeys(const QStringList &_keys, const QStringL | |||||||
| QHash<QString, QStringList> AWKeyCache::loadKeysFromCache() | QHash<QString, QStringList> AWKeyCache::loadKeysFromCache() | ||||||
| { | { | ||||||
|     QString fileName |     QString fileName | ||||||
|         = QString("%1/awesomewidgets.ndx") |         = QString("%1/awesomewidgets.ndx").arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); | ||||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation)); |  | ||||||
|     qCInfo(LOG_AW) << "Cache file" << fileName; |     qCInfo(LOG_AW) << "Cache file" << fileName; | ||||||
|     QSettings cache(fileName, QSettings::IniFormat); |     QSettings cache(fileName, QSettings::IniFormat); | ||||||
|  |  | ||||||
|  | |||||||
| @ -27,9 +27,8 @@ | |||||||
| namespace AWKeyCache | namespace AWKeyCache | ||||||
| { | { | ||||||
| bool addKeyToCache(const QString &_type, const QString &_key = ""); | bool addKeyToCache(const QString &_type, const QString &_key = ""); | ||||||
| QStringList getRequiredKeys(const QStringList &_keys, const QStringList &_bars, | QStringList getRequiredKeys(const QStringList &_keys, const QStringList &_bars, const QVariantMap &_tooltip, | ||||||
|                             const QVariantMap &_tooltip, const QStringList &_userKeys, |                             const QStringList &_userKeys, const QStringList &_allKeys); | ||||||
|                             const QStringList &_allKeys); |  | ||||||
| QHash<QString, QStringList> loadKeysFromCache(); | QHash<QString, QStringList> loadKeysFromCache(); | ||||||
| } // namespace AWKeyCache | } // namespace AWKeyCache | ||||||
|  |  | ||||||
|  | |||||||
| @ -18,7 +18,6 @@ | |||||||
| #include "awkeyoperations.h" | #include "awkeyoperations.h" | ||||||
|  |  | ||||||
| #include <QDir> | #include <QDir> | ||||||
| #include <QJSEngine> |  | ||||||
| #include <QRegExp> | #include <QRegExp> | ||||||
| #include <QThread> | #include <QThread> | ||||||
|  |  | ||||||
| @ -281,8 +280,7 @@ void AWKeyOperations::editItem(const QString &_type) | |||||||
|     qCDebug(LOG_AW) << "Item type" << _type; |     qCDebug(LOG_AW) << "Item type" << _type; | ||||||
|  |  | ||||||
|     if (_type == "graphicalitem") { |     if (_type == "graphicalitem") { | ||||||
|         QStringList keys |         QStringList keys = dictKeys().filter(QRegExp("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); | ||||||
|             = dictKeys().filter(QRegExp("^(cpu(?!cl).*|gpu$|mem$|swap$|hdd[0-9].*|bat.*)")); |  | ||||||
|         keys.sort(); |         keys.sort(); | ||||||
|         m_graphicalItems->setConfigArgs(keys); |         m_graphicalItems->setConfigArgs(keys); | ||||||
|         return m_graphicalItems->editItems(); |         return m_graphicalItems->editItems(); | ||||||
|  | |||||||
| @ -56,8 +56,7 @@ AWKeys::AWKeys(QObject *_parent) | |||||||
|     createDBusInterface(); |     createDBusInterface(); | ||||||
|  |  | ||||||
|     // update key data if required |     // update key data if required | ||||||
|     connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, |     connect(m_keyOperator, SIGNAL(updateKeys(const QStringList &)), this, SLOT(reinitKeys(const QStringList &))); | ||||||
|             SLOT(reinitKeys(const QStringList &))); |  | ||||||
|     connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); |     connect(m_timer, SIGNAL(timeout()), this, SLOT(updateTextData())); | ||||||
|     // transfer signal from AWDataAggregator object to QML ui |     // transfer signal from AWDataAggregator object to QML ui | ||||||
|     connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, |     connect(m_dataAggregator, SIGNAL(toolTipPainted(const QString &)), this, | ||||||
| @ -91,11 +90,10 @@ void AWKeys::initDataAggregator(const QVariantMap &_tooltipParams) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const int _limit, | void AWKeys::initKeys(const QString &_currentPattern, const int _interval, const int _limit, const bool _optimize) | ||||||
|                       const bool _optimize) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Pattern" << _currentPattern << "with interval" << _interval |     qCDebug(LOG_AW) << "Pattern" << _currentPattern << "with interval" << _interval << "and queue limit" << _limit | ||||||
|                     << "and queue limit" << _limit << "with optimization" << _optimize; |                     << "with optimization" << _optimize; | ||||||
|  |  | ||||||
|     // init |     // init | ||||||
|     m_optimize = _optimize; |     m_optimize = _optimize; | ||||||
| @ -227,10 +225,9 @@ void AWKeys::reinitKeys(const QStringList &_currentKeys) | |||||||
|         barKeys.append(item->usedKeys()); |         barKeys.append(item->usedKeys()); | ||||||
|     } |     } | ||||||
|     // get required keys |     // get required keys | ||||||
|     m_requiredKeys |     m_requiredKeys = m_optimize ? AWKeyCache::getRequiredKeys(m_foundKeys, barKeys, m_tooltipParams, | ||||||
|         = m_optimize ? AWKeyCache::getRequiredKeys(m_foundKeys, barKeys, m_tooltipParams, |                                                               m_keyOperator->requiredUserKeys(), _currentKeys) | ||||||
|                                                    m_keyOperator->requiredUserKeys(), _currentKeys) |                                 : QStringList(); | ||||||
|                      : QStringList(); |  | ||||||
|  |  | ||||||
|     // set key data to m_aggregator |     // set key data to m_aggregator | ||||||
|     m_aggregator->setDevices(m_keyOperator->devices()); |     m_aggregator->setDevices(m_keyOperator->devices()); | ||||||
| @ -260,11 +257,9 @@ void AWKeys::calculateValues() | |||||||
|     for (auto &device : mountDevices) { |     for (auto &device : mountDevices) { | ||||||
|         int index = mountDevices.indexOf(device); |         int index = mountDevices.indexOf(device); | ||||||
|         m_values[QString("hddtotmb%1").arg(index)] |         m_values[QString("hddtotmb%1").arg(index)] | ||||||
|             = m_values[QString("hddfreemb%1").arg(index)].toFloat() |             = m_values[QString("hddfreemb%1").arg(index)].toFloat() + m_values[QString("hddmb%1").arg(index)].toFloat(); | ||||||
|               + m_values[QString("hddmb%1").arg(index)].toFloat(); |  | ||||||
|         m_values[QString("hddtotgb%1").arg(index)] |         m_values[QString("hddtotgb%1").arg(index)] | ||||||
|             = m_values[QString("hddfreegb%1").arg(index)].toFloat() |             = m_values[QString("hddfreegb%1").arg(index)].toFloat() + m_values[QString("hddgb%1").arg(index)].toFloat(); | ||||||
|               + m_values[QString("hddgb%1").arg(index)].toFloat(); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // memtot* |     // memtot* | ||||||
| @ -312,20 +307,16 @@ void AWKeys::createDBusInterface() | |||||||
|     // HACK we are going to use different services because it binds to |     // HACK we are going to use different services because it binds to | ||||||
|     // application |     // application | ||||||
|     if (instanceBus.registerService(QString("%1.i%2").arg(AWDBUS_SERVICE).arg(id))) { |     if (instanceBus.registerService(QString("%1.i%2").arg(AWDBUS_SERVICE).arg(id))) { | ||||||
|         if (!instanceBus.registerObject(AWDBUS_PATH, new AWDBusAdaptor(this), |         if (!instanceBus.registerObject(AWDBUS_PATH, new AWDBusAdaptor(this), QDBusConnection::ExportAllContents)) | ||||||
|                                         QDBusConnection::ExportAllContents)) |             qCWarning(LOG_AW) << "Could not register DBus object, last error" << instanceBus.lastError().message(); | ||||||
|             qCWarning(LOG_AW) << "Could not register DBus object, last error" |  | ||||||
|                               << instanceBus.lastError().message(); |  | ||||||
|     } else { |     } else { | ||||||
|         qCWarning(LOG_AW) << "Could not register DBus service, last error" |         qCWarning(LOG_AW) << "Could not register DBus service, last error" << instanceBus.lastError().message(); | ||||||
|                           << instanceBus.lastError().message(); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // and same instance but for id independent service |     // and same instance but for id independent service | ||||||
|     QDBusConnection commonBus = QDBusConnection::sessionBus(); |     QDBusConnection commonBus = QDBusConnection::sessionBus(); | ||||||
|     if (commonBus.registerService(AWDBUS_SERVICE)) |     if (commonBus.registerService(AWDBUS_SERVICE)) | ||||||
|         commonBus.registerObject(AWDBUS_PATH, new AWDBusAdaptor(this), |         commonBus.registerObject(AWDBUS_PATH, new AWDBusAdaptor(this), QDBusConnection::ExportAllContents); | ||||||
|                                  QDBusConnection::ExportAllContents); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -340,14 +331,13 @@ QString AWKeys::parsePattern(QString _pattern) const | |||||||
|  |  | ||||||
|     // main keys |     // main keys | ||||||
|     for (auto &key : m_foundKeys) |     for (auto &key : m_foundKeys) | ||||||
|         _pattern.replace(QString("$%1").arg(key), |         _pattern.replace(QString("$%1").arg(key), m_aggregator->formatter(m_values[key], key, true)); | ||||||
|                          m_aggregator->formatter(m_values[key], key, true)); |  | ||||||
|  |  | ||||||
|     // bars |     // bars | ||||||
|     for (auto &bar : m_foundBars) { |     for (auto &bar : m_foundBars) { | ||||||
|         GraphicalItem *item = m_keyOperator->giByKey(bar); |         GraphicalItem *item = m_keyOperator->giByKey(bar); | ||||||
|         QString image = item->isCustom() ? item->image(AWPatternFunctions::expandLambdas( |         QString image = item->isCustom() ? item->image( | ||||||
|                             item->bar(), m_aggregator, m_values, item->usedKeys())) |                             AWPatternFunctions::expandLambdas(item->bar(), m_aggregator, m_values, item->usedKeys())) | ||||||
|                                          : item->image(m_values[item->bar()]); |                                          : item->image(m_values[item->bar()]); | ||||||
|         _pattern.replace(QString("$%1").arg(bar), image); |         _pattern.replace(QString("$%1").arg(bar), image); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -40,16 +40,14 @@ public: | |||||||
|     explicit AWKeys(QObject *_parent = nullptr); |     explicit AWKeys(QObject *_parent = nullptr); | ||||||
|     ~AWKeys() override; |     ~AWKeys() override; | ||||||
|     Q_INVOKABLE void initDataAggregator(const QVariantMap &_tooltipParams); |     Q_INVOKABLE void initDataAggregator(const QVariantMap &_tooltipParams); | ||||||
|     Q_INVOKABLE void initKeys(const QString &_currentPattern, int _interval, int _limit, |     Q_INVOKABLE void initKeys(const QString &_currentPattern, int _interval, int _limit, bool _optimize); | ||||||
|                               bool _optimize); |  | ||||||
|     Q_INVOKABLE void setAggregatorProperty(const QString &_key, const QVariant &_value); |     Q_INVOKABLE void setAggregatorProperty(const QString &_key, const QVariant &_value); | ||||||
|     Q_INVOKABLE void setWrapNewLines(bool _wrap); |     Q_INVOKABLE void setWrapNewLines(bool _wrap); | ||||||
|     // additional method to force load keys from Qml UI. Used in some |     // additional method to force load keys from Qml UI. Used in some | ||||||
|     // configuration pages |     // configuration pages | ||||||
|     Q_INVOKABLE void updateCache(); |     Q_INVOKABLE void updateCache(); | ||||||
|     // keys |     // keys | ||||||
|     Q_INVOKABLE [[nodiscard]] QStringList dictKeys(bool _sorted = false, |     Q_INVOKABLE [[nodiscard]] QStringList dictKeys(bool _sorted = false, const QString &_regexp = "") const; | ||||||
|                                                    const QString &_regexp = "") const; |  | ||||||
|     Q_INVOKABLE [[nodiscard]] QVariantList getHddDevices() const; |     Q_INVOKABLE [[nodiscard]] QVariantList getHddDevices() const; | ||||||
|     // values |     // values | ||||||
|     Q_INVOKABLE [[nodiscard]] QString infoByKey(const QString &_key) const; |     Q_INVOKABLE [[nodiscard]] QString infoByKey(const QString &_key) const; | ||||||
| @ -60,7 +58,7 @@ public: | |||||||
| public slots: | public slots: | ||||||
|     void dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data); |     void dataUpdated(const QString &_sourceName, const Plasma::DataEngine::Data &_data); | ||||||
|     // dummy method required by DataEngine connections |     // dummy method required by DataEngine connections | ||||||
|     static void modelChanged(QString, QAbstractItemModel *){}; |     static void modelChanged(const QString &, QAbstractItemModel *){}; | ||||||
|  |  | ||||||
| signals: | signals: | ||||||
|     void dropSourceFromDataengine(const QString &_source); |     void dropSourceFromDataengine(const QString &_source); | ||||||
|  | |||||||
| @ -55,8 +55,7 @@ void AWKeysAggregator::initFormatters() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, | QString AWKeysAggregator::formatter(const QVariant &_data, const QString &_key, bool replaceSpace) const | ||||||
|                                     bool replaceSpace) const |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Data" << _data << "for key" << _key; |     qCDebug(LOG_AW) << "Data" << _data << "for key" << _key; | ||||||
|  |  | ||||||
| @ -235,8 +234,7 @@ void AWKeysAggregator::setTranslate(const bool _translate) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QStringList AWKeysAggregator::registerSource(const QString &_source, const QString &_units, | QStringList AWKeysAggregator::registerSource(const QString &_source, const QString &_units, const QStringList &_keys) | ||||||
|                                              const QStringList &_keys) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; |     qCDebug(LOG_AW) << "Source" << _source << "with units" << _units; | ||||||
|  |  | ||||||
|  | |||||||
| @ -69,8 +69,7 @@ public: | |||||||
|     ~AWKeysAggregator() override; |     ~AWKeysAggregator() override; | ||||||
|     void initFormatters(); |     void initFormatters(); | ||||||
|     // get methods |     // get methods | ||||||
|     [[nodiscard]] QString formatter(const QVariant &_data, const QString &_key, |     [[nodiscard]] QString formatter(const QVariant &_data, const QString &_key, bool replaceSpace) const; | ||||||
|                                     bool replaceSpace) const; |  | ||||||
|     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; |     [[nodiscard]] QStringList keysFromSource(const QString &_source) const; | ||||||
|     // set methods |     // set methods | ||||||
|     void setAcOffline(const QString &_inactive); |     void setAcOffline(const QString &_inactive); | ||||||
| @ -82,8 +81,7 @@ public: | |||||||
|     void setTranslate(bool _translate); |     void setTranslate(bool _translate); | ||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     QStringList registerSource(const QString &_source, const QString &_units, |     QStringList registerSource(const QString &_source, const QString &_units, const QStringList &_keys); | ||||||
|                                const QStringList &_keys); |  | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     [[nodiscard]] float temperature(float temp) const; |     [[nodiscard]] float temperature(float temp) const; | ||||||
|  | |||||||
| @ -24,8 +24,7 @@ | |||||||
| #include "awkeysaggregator.h" | #include "awkeysaggregator.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| QString AWPatternFunctions::expandLambdas(QString _code, AWKeysAggregator *_aggregator, | QString AWPatternFunctions::expandLambdas(QString _code, AWKeysAggregator *_aggregator, const QVariantHash &_metadata, | ||||||
|                                           const QVariantHash &_metadata, |  | ||||||
|                                           const QStringList &_usedKeys) |                                           const QStringList &_usedKeys) | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Expand lambdas in" << _code; |     qCDebug(LOG_AW) << "Expand lambdas in" << _code; | ||||||
| @ -35,13 +34,12 @@ QString AWPatternFunctions::expandLambdas(QString _code, AWKeysAggregator *_aggr | |||||||
|     _code.replace("$this", _metadata[_code].toString()); |     _code.replace("$this", _metadata[_code].toString()); | ||||||
|     // parsed values |     // parsed values | ||||||
|     for (auto &lambdaKey : _usedKeys) |     for (auto &lambdaKey : _usedKeys) | ||||||
|         _code.replace(QString("$%1").arg(lambdaKey), |         _code.replace(QString("$%1").arg(lambdaKey), _aggregator->formatter(_metadata[lambdaKey], lambdaKey, false)); | ||||||
|                       _aggregator->formatter(_metadata[lambdaKey], lambdaKey, false)); |  | ||||||
|     qCInfo(LOG_AW) << "Expression" << _code; |     qCInfo(LOG_AW) << "Expression" << _code; | ||||||
|     QJSValue result = engine.evaluate(_code); |     QJSValue result = engine.evaluate(_code); | ||||||
|     if (result.isError()) { |     if (result.isError()) { | ||||||
|         qCWarning(LOG_AW) << "Uncaught exception at line" << result.property("lineNumber").toInt() |         qCWarning(LOG_AW) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" | ||||||
|                           << ":" << result.toString(); |                           << result.toString(); | ||||||
|         return ""; |         return ""; | ||||||
|     } else { |     } else { | ||||||
|         return result.toString(); |         return result.toString(); | ||||||
| @ -67,8 +65,8 @@ QString AWPatternFunctions::expandTemplates(QString _code) | |||||||
|         QJSValue result = engine.evaluate(body); |         QJSValue result = engine.evaluate(body); | ||||||
|         QString templateResult = ""; |         QString templateResult = ""; | ||||||
|         if (result.isError()) { |         if (result.isError()) { | ||||||
|             qCWarning(LOG_AW) << "Uncaught exception at line" |             qCWarning(LOG_AW) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" | ||||||
|                               << result.property("lineNumber").toInt() << ":" << result.toString(); |                               << result.toString(); | ||||||
|         } else { |         } else { | ||||||
|             templateResult = result.toString(); |             templateResult = result.toString(); | ||||||
|         } |         } | ||||||
| @ -81,8 +79,8 @@ QString AWPatternFunctions::expandTemplates(QString _code) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QList<AWPatternFunctions::AWFunction> | QList<AWPatternFunctions::AWFunction> AWPatternFunctions::findFunctionCalls(const QString &_function, | ||||||
| AWPatternFunctions::findFunctionCalls(const QString &_function, const QString &_code) |                                                                             const QString &_code) | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Looking for function" << _function << "in" << _code; |     qCDebug(LOG_AW) << "Looking for function" << _function << "in" << _code; | ||||||
|  |  | ||||||
| @ -109,8 +107,7 @@ AWPatternFunctions::findFunctionCalls(const QString &_function, const QString &_ | |||||||
|             // replace '$,' to 0x1d |             // replace '$,' to 0x1d | ||||||
|             argsString.replace("$,", QString(0x1d)); |             argsString.replace("$,", QString(0x1d)); | ||||||
|             QStringList args = argsString.split(','); |             QStringList args = argsString.split(','); | ||||||
|             std::for_each(args.begin(), args.end(), |             std::for_each(args.begin(), args.end(), [](QString &arg) { arg.replace(QString(0x1d), ","); }); | ||||||
|                           [](QString &arg) { arg.replace(QString(0x1d), ","); }); |  | ||||||
|             metadata.args = args; |             metadata.args = args; | ||||||
|         } |         } | ||||||
|         // other variables |         // other variables | ||||||
| @ -130,13 +127,11 @@ QString AWPatternFunctions::insertAllKeys(QString _code, const QStringList &_key | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Looking for keys in code" << _code << "using list" << _keys; |     qCDebug(LOG_AW) << "Looking for keys in code" << _code << "using list" << _keys; | ||||||
|  |  | ||||||
|     QList<AWPatternFunctions::AWFunction> found |     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_all", _code); | ||||||
|         = AWPatternFunctions::findFunctionCalls("aw_all", _code); |  | ||||||
|     for (auto &function : found) { |     for (auto &function : found) { | ||||||
|         QString separator = function.args.isEmpty() ? "," : function.args.at(0); |         QString separator = function.args.isEmpty() ? "," : function.args.at(0); | ||||||
|         QStringList required = _keys.filter(QRegExp(function.body)); |         QStringList required = _keys.filter(QRegExp(function.body)); | ||||||
|         std::for_each(required.begin(), required.end(), |         std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("%1: $%1").arg(value); }); | ||||||
|                       [](QString &value) { value = QString("%1: $%1").arg(value); }); |  | ||||||
|  |  | ||||||
|         _code.replace(function.what, required.join(separator)); |         _code.replace(function.what, required.join(separator)); | ||||||
|     } |     } | ||||||
| @ -149,8 +144,7 @@ QString AWPatternFunctions::insertKeyCount(QString _code, const QStringList &_ke | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Looking for count in code" << _code << "using list" << _keys; |     qCDebug(LOG_AW) << "Looking for count in code" << _code << "using list" << _keys; | ||||||
|  |  | ||||||
|     QList<AWPatternFunctions::AWFunction> found |     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_count", _code); | ||||||
|         = AWPatternFunctions::findFunctionCalls("aw_count", _code); |  | ||||||
|     for (auto &function : found) { |     for (auto &function : found) { | ||||||
|         int count = _keys.filter(QRegExp(function.body)).count(); |         int count = _keys.filter(QRegExp(function.body)).count(); | ||||||
|  |  | ||||||
| @ -165,8 +159,7 @@ QString AWPatternFunctions::insertKeyNames(QString _code, const QStringList &_ke | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Looking for key names in code" << _code << "using list" << _keys; |     qCDebug(LOG_AW) << "Looking for key names in code" << _code << "using list" << _keys; | ||||||
|  |  | ||||||
|     QList<AWPatternFunctions::AWFunction> found |     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_names", _code); | ||||||
|         = AWPatternFunctions::findFunctionCalls("aw_names", _code); |  | ||||||
|     for (auto &function : found) { |     for (auto &function : found) { | ||||||
|         QString separator = function.args.isEmpty() ? "," : function.args.at(0); |         QString separator = function.args.isEmpty() ? "," : function.args.at(0); | ||||||
|         QStringList required = _keys.filter(QRegExp(function.body)); |         QStringList required = _keys.filter(QRegExp(function.body)); | ||||||
| @ -182,13 +175,11 @@ QString AWPatternFunctions::insertKeys(QString _code, const QStringList &_keys) | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Looking for keys in code" << _code << "using list" << _keys; |     qCDebug(LOG_AW) << "Looking for keys in code" << _code << "using list" << _keys; | ||||||
|  |  | ||||||
|     QList<AWPatternFunctions::AWFunction> found |     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_keys", _code); | ||||||
|         = AWPatternFunctions::findFunctionCalls("aw_keys", _code); |  | ||||||
|     for (auto &function : found) { |     for (auto &function : found) { | ||||||
|         QString separator = function.args.isEmpty() ? "," : function.args.at(0); |         QString separator = function.args.isEmpty() ? "," : function.args.at(0); | ||||||
|         QStringList required = _keys.filter(QRegExp(function.body)); |         QStringList required = _keys.filter(QRegExp(function.body)); | ||||||
|         std::for_each(required.begin(), required.end(), |         std::for_each(required.begin(), required.end(), [](QString &value) { value = QString("$%1").arg(value); }); | ||||||
|                       [](QString &value) { value = QString("$%1").arg(value); }); |  | ||||||
|  |  | ||||||
|         _code.replace(function.what, required.join(separator)); |         _code.replace(function.what, required.join(separator)); | ||||||
|     } |     } | ||||||
| @ -201,8 +192,7 @@ QString AWPatternFunctions::insertMacros(QString _code) | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Looking for macros in code" << _code; |     qCDebug(LOG_AW) << "Looking for macros in code" << _code; | ||||||
|  |  | ||||||
|     QList<AWPatternFunctions::AWFunction> found |     QList<AWPatternFunctions::AWFunction> found = AWPatternFunctions::findFunctionCalls("aw_macro", _code); | ||||||
|         = AWPatternFunctions::findFunctionCalls("aw_macro", _code); |  | ||||||
|     for (auto ¯o : found) { |     for (auto ¯o : found) { | ||||||
|         // get macro params |         // get macro params | ||||||
|         if (macro.args.isEmpty()) { |         if (macro.args.isEmpty()) { | ||||||
| @ -215,17 +205,15 @@ QString AWPatternFunctions::insertMacros(QString _code) | |||||||
|             = AWPatternFunctions::findFunctionCalls(QString("aw_macro_%1").arg(name), _code); |             = AWPatternFunctions::findFunctionCalls(QString("aw_macro_%1").arg(name), _code); | ||||||
|         for (auto &function : macroUsage) { |         for (auto &function : macroUsage) { | ||||||
|             if (function.args.count() != macro.args.count()) { |             if (function.args.count() != macro.args.count()) { | ||||||
|                 qCWarning(LOG_AW) << "Invalid args count found for call" << function.what |                 qCWarning(LOG_AW) << "Invalid args count found for call" << function.what << "with macro" << macro.what; | ||||||
|                                   << "with macro" << macro.what; |  | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|             // generate body to replace |             // generate body to replace | ||||||
|             QString result = macro.body; |             QString result = macro.body; | ||||||
|             std::for_each(macro.args.cbegin(), macro.args.cend(), |             std::for_each(macro.args.cbegin(), macro.args.cend(), [&result, macro, function](const QString &arg) { | ||||||
|                           [&result, macro, function](const QString &arg) { |                 int index = macro.args.indexOf(arg); | ||||||
|                               int index = macro.args.indexOf(arg); |                 result.replace(QString("$%1").arg(arg), function.args.at(index)); | ||||||
|                               result.replace(QString("$%1").arg(arg), function.args.at(index)); |             }); | ||||||
|                           }); |  | ||||||
|             // do replace |             // do replace | ||||||
|             _code.replace(function.what, result); |             _code.replace(function.what, result); | ||||||
|         } |         } | ||||||
| @ -238,16 +226,14 @@ QString AWPatternFunctions::insertMacros(QString _code) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QStringList AWPatternFunctions::findKeys(const QString &_code, const QStringList &_keys, | QStringList AWPatternFunctions::findKeys(const QString &_code, const QStringList &_keys, const bool _isBars) | ||||||
|                                          const bool _isBars) |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Looking for keys in code" << _code << "using list" << _keys; |     qCDebug(LOG_AW) << "Looking for keys in code" << _code << "using list" << _keys; | ||||||
|  |  | ||||||
|     QStringList selectedKeys; |     QStringList selectedKeys; | ||||||
|     QString replacedCode = _code; |     QString replacedCode = _code; | ||||||
|     for (auto &key : _keys) |     for (auto &key : _keys) | ||||||
|         if ((key.startsWith("bar") == _isBars) |         if ((key.startsWith("bar") == _isBars) && (replacedCode.contains(QString("$%1").arg(key)))) { | ||||||
|             && (replacedCode.contains(QString("$%1").arg(key)))) { |  | ||||||
|             qCInfo(LOG_AW) << "Found key" << key << "with bar enabled" << _isBars; |             qCInfo(LOG_AW) << "Found key" << key << "with bar enabled" << _isBars; | ||||||
|             selectedKeys.append(key); |             selectedKeys.append(key); | ||||||
|             replacedCode.replace(QString("$%1").arg(key), ""); |             replacedCode.replace(QString("$%1").arg(key), ""); | ||||||
|  | |||||||
| @ -73,8 +73,8 @@ QString AWTelemetryHandler::getLast(const QString &_group) const | |||||||
|  |  | ||||||
| void AWTelemetryHandler::init(const int _count, const bool _enableRemote, const QString &_clientId) | void AWTelemetryHandler::init(const int _count, const bool _enableRemote, const QString &_clientId) | ||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Init telemetry with count" << _count << "enable remote" << _enableRemote |     qCDebug(LOG_AW) << "Init telemetry with count" << _count << "enable remote" << _enableRemote << "client ID" | ||||||
|                     << "client ID" << _clientId; |                     << _clientId; | ||||||
|  |  | ||||||
|     m_storeCount = _count; |     m_storeCount = _count; | ||||||
|     m_uploadEnabled = _enableRemote; |     m_uploadEnabled = _enableRemote; | ||||||
| @ -127,8 +127,7 @@ void AWTelemetryHandler::uploadTelemetry(const QString &_group, const QString &_ | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     auto *manager = new QNetworkAccessManager(nullptr); |     auto *manager = new QNetworkAccessManager(nullptr); | ||||||
|     connect(manager, SIGNAL(finished(QNetworkReply *)), this, |     connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(telemetryReplyRecieved(QNetworkReply *))); | ||||||
|             SLOT(telemetryReplyRecieved(QNetworkReply *))); |  | ||||||
|  |  | ||||||
|     QUrl url(REMOTE_TELEMETRY_URL); |     QUrl url(REMOTE_TELEMETRY_URL); | ||||||
|     QNetworkRequest request(url); |     QNetworkRequest request(url); | ||||||
| @ -151,8 +150,7 @@ void AWTelemetryHandler::uploadTelemetry(const QString &_group, const QString &_ | |||||||
| void AWTelemetryHandler::telemetryReplyRecieved(QNetworkReply *_reply) | void AWTelemetryHandler::telemetryReplyRecieved(QNetworkReply *_reply) | ||||||
| { | { | ||||||
|     if (_reply->error() != QNetworkReply::NoError) { |     if (_reply->error() != QNetworkReply::NoError) { | ||||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" |         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||||
|                           << _reply->errorString(); |  | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -34,9 +34,8 @@ AWUpdateHelper::AWUpdateHelper(QObject *_parent) | |||||||
|     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; |     qCDebug(LOG_AW) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     m_foundVersion = QVersionNumber::fromString(VERSION); |     m_foundVersion = QVersionNumber::fromString(VERSION); | ||||||
|     m_genericConfig |     m_genericConfig = QString("%1/awesomewidgets/general.ini") | ||||||
|         = QString("%1/awesomewidgets/general.ini") |                           .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); | ||||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -53,9 +52,8 @@ void AWUpdateHelper::checkUpdates(const bool _showAnyway) | |||||||
|     // showAnyway options requires to show message if no updates found on direct |     // showAnyway options requires to show message if no updates found on direct | ||||||
|     // request. In case of automatic check no message will be shown |     // request. In case of automatic check no message will be shown | ||||||
|     auto *manager = new QNetworkAccessManager(nullptr); |     auto *manager = new QNetworkAccessManager(nullptr); | ||||||
|     connect(manager, &QNetworkAccessManager::finished, [_showAnyway, this](QNetworkReply *reply) { |     connect(manager, &QNetworkAccessManager::finished, | ||||||
|         return versionReplyRecieved(reply, _showAnyway); |             [_showAnyway, this](QNetworkReply *reply) { return versionReplyRecieved(reply, _showAnyway); }); | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     manager->get(QNetworkRequest(QUrl(VERSION_API))); |     manager->get(QNetworkRequest(QUrl(VERSION_API))); | ||||||
| } | } | ||||||
| @ -64,16 +62,14 @@ void AWUpdateHelper::checkUpdates(const bool _showAnyway) | |||||||
| bool AWUpdateHelper::checkVersion() | bool AWUpdateHelper::checkVersion() | ||||||
| { | { | ||||||
|     QSettings settings(m_genericConfig, QSettings::IniFormat); |     QSettings settings(m_genericConfig, QSettings::IniFormat); | ||||||
|     QVersionNumber version |     QVersionNumber version = QVersionNumber::fromString(settings.value("Version", QString(VERSION)).toString()); | ||||||
|         = QVersionNumber::fromString(settings.value("Version", QString(VERSION)).toString()); |  | ||||||
|     // update version |     // update version | ||||||
|     settings.setValue("Version", QString(VERSION)); |     settings.setValue("Version", QString(VERSION)); | ||||||
|     settings.sync(); |     settings.sync(); | ||||||
|     qCInfo(LOG_AW) << "Found version" << version << "actual one is" << m_foundVersion; |     qCInfo(LOG_AW) << "Found version" << version << "actual one is" << m_foundVersion; | ||||||
|  |  | ||||||
|     if ((version != m_foundVersion) && (!QString(CHANGELOG).isEmpty())) { |     if ((version != m_foundVersion) && (!QString(CHANGELOG).isEmpty())) { | ||||||
|         genMessageBox(i18nc("Changelog of %1", VERSION), QString(CHANGELOG).replace('@', '\n'), |         genMessageBox(i18nc("Changelog of %1", VERSION), QString(CHANGELOG).replace('@', '\n'), QMessageBox::Ok) | ||||||
|                       QMessageBox::Ok) |  | ||||||
|             ->open(); |             ->open(); | ||||||
|         return true; |         return true; | ||||||
|     } else if (version != m_foundVersion) { |     } else if (version != m_foundVersion) { | ||||||
| @ -133,8 +129,7 @@ void AWUpdateHelper::versionReplyRecieved(QNetworkReply *_reply, const bool _sho | |||||||
| { | { | ||||||
|     qCDebug(LOG_AW) << "Show message anyway" << _showAnyway; |     qCDebug(LOG_AW) << "Show message anyway" << _showAnyway; | ||||||
|     if (_reply->error() != QNetworkReply::NoError) { |     if (_reply->error() != QNetworkReply::NoError) { | ||||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" |         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||||
|                           << _reply->errorString(); |  | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ include_directories( | |||||||
|         ${CMAKE_BINARY_DIR} |         ${CMAKE_BINARY_DIR} | ||||||
|         ${PROJECT_TRDPARTY_DIR} |         ${PROJECT_TRDPARTY_DIR} | ||||||
|         ${Qt_INCLUDE} |         ${Qt_INCLUDE} | ||||||
|         ${Kf5_INCLUDE} |         ${Kf6_INCLUDE} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/qreplytimeout/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) | file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/qreplytimeout/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) | ||||||
| @ -28,9 +28,9 @@ file(RELATIVE_PATH SUBPROJECT_WEATHER_JSON ${CMAKE_SOURCE_DIR} ${SUBPROJECT_WEAT | |||||||
| # prepare | # prepare | ||||||
| configure_file(${SUBPROJECT_WEATHER_JSON_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON}) | configure_file(${SUBPROJECT_WEATHER_JSON_IN} ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON}) | ||||||
|  |  | ||||||
| qt5_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) | qt6_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) | ||||||
| add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUBPROJECT_UI_HEADER}) | add_library(${SUBPROJECT} STATIC ${SUBPROJECT_SOURCE} ${SUBPROJECT_HEADER} ${SUBPROJECT_UI_HEADER}) | ||||||
| target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) | target_link_libraries(${SUBPROJECT} ${Qt_LIBRARIES} ${Kf6_LIBRARIES}) | ||||||
|  |  | ||||||
| # install | # install | ||||||
| install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_CONFIGS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| @ -41,5 +41,5 @@ install(DIRECTORY ${SUBPROJECT_SCRIPTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJEC | |||||||
| install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_REQUESTS} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_UPGRADE} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | install(DIRECTORY ${SUBPROJECT_WEATHER} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}) | ||||||
| install(FILES ${SUBPROJECT_INI} DESTINATION ${CONFIG_INSTALL_DIR}) | install(FILES ${SUBPROJECT_INI} DESTINATION ${KDE_INSTALL_CONFDIR}) | ||||||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/weather) | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_WEATHER_JSON} DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME}/weather) | ||||||
|  | |||||||
| @ -99,7 +99,7 @@ QString AbstractExtItem::writtableConfig() const | |||||||
| { | { | ||||||
|     QString path = m_fileName; |     QString path = m_fileName; | ||||||
|     QString name = QFileInfo(path).fileName(); |     QString name = QFileInfo(path).fileName(); | ||||||
|     path.remove(path.count() - name.count() - 1, name.count() + 1); |     path.remove(path.length() - name.length() - 1, name.length() + 1); | ||||||
|     QString dir = QFileInfo(path).fileName(); |     QString dir = QFileInfo(path).fileName(); | ||||||
|  |  | ||||||
|     return QString("%1/awesomewidgets/%2/%3") |     return QString("%1/awesomewidgets/%2/%3") | ||||||
|  | |||||||
| @ -34,10 +34,9 @@ AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _ | |||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     // create directory at $HOME |     // create directory at $HOME | ||||||
|     QString localDir |     QString localDir = QString("%1/awesomewidgets/%2") | ||||||
|         = QString("%1/awesomewidgets/%2") |                            .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||||
|               .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) |                            .arg(type()); | ||||||
|               .arg(type()); |  | ||||||
|     QDir localDirectory; |     QDir localDirectory; | ||||||
|     if (localDirectory.mkpath(localDir)) |     if (localDirectory.mkpath(localDir)) | ||||||
|         qCInfo(LOG_LIB) << "Created directory" << localDir; |         qCInfo(LOG_LIB) << "Created directory" << localDir; | ||||||
| @ -47,11 +46,9 @@ AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _ | |||||||
|     createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole); |     createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole); | ||||||
|     deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole); |     deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole); | ||||||
|  |  | ||||||
|     connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton *)), this, |     connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(editItemButtonPressed(QAbstractButton *))); | ||||||
|             SLOT(editItemButtonPressed(QAbstractButton *))); |  | ||||||
|     connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); |     connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); | ||||||
|     connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this, |     connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(editItemActivated(QListWidgetItem *))); | ||||||
|             SLOT(editItemActivated(QListWidgetItem *))); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -118,8 +115,7 @@ void AbstractExtItemAggregator::editItem() | |||||||
| QString AbstractExtItemAggregator::getName() | QString AbstractExtItemAggregator::getName() | ||||||
| { | { | ||||||
|     bool ok; |     bool ok; | ||||||
|     QString name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), |     QString name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); | ||||||
|                                          QLineEdit::Normal, "", &ok); |  | ||||||
|     if ((!ok) || (name.isEmpty())) |     if ((!ok) || (name.isEmpty())) | ||||||
|         return ""; |         return ""; | ||||||
|     if (!name.endsWith(".desktop")) |     if (!name.endsWith(".desktop")) | ||||||
| @ -187,8 +183,7 @@ QVariant AbstractExtItemAggregator::configArgs() const | |||||||
|  |  | ||||||
| QStringList AbstractExtItemAggregator::directories() const | QStringList AbstractExtItemAggregator::directories() const | ||||||
| { | { | ||||||
|     auto dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, |     auto dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QString("awesomewidgets/%1").arg(type()), | ||||||
|                                           QString("awesomewidgets/%1").arg(type()), |  | ||||||
|                                           QStandardPaths::LocateDirectory); |                                           QStandardPaths::LocateDirectory); | ||||||
|  |  | ||||||
|     return dirs; |     return dirs; | ||||||
|  | |||||||
| @ -47,10 +47,9 @@ public: | |||||||
|     { |     { | ||||||
|         QString fileName = getName(); |         QString fileName = getName(); | ||||||
|         int number = uniqNumber(); |         int number = uniqNumber(); | ||||||
|         QString dir |         QString dir = QString("%1/awesomewidgets/%2") | ||||||
|             = QString("%1/awesomewidgets/%2") |                           .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) | ||||||
|                   .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)) |                           .arg(m_type); | ||||||
|                   .arg(m_type); |  | ||||||
|         if (fileName.isEmpty()) { |         if (fileName.isEmpty()) { | ||||||
|             qCWarning(LOG_LIB) << "Nothing to create"; |             qCWarning(LOG_LIB) << "Nothing to create"; | ||||||
|             return; |             return; | ||||||
| @ -68,7 +67,7 @@ public: | |||||||
|     void editItem(); |     void editItem(); | ||||||
|     QString getName(); |     QString getName(); | ||||||
|     virtual void initItems() = 0; |     virtual void initItems() = 0; | ||||||
|     AbstractExtItem *itemFromWidget() const; |     [[nodiscard]] AbstractExtItem *itemFromWidget() const; | ||||||
|     void repaintList() const; |     void repaintList() const; | ||||||
|     [[nodiscard]] int uniqNumber() const; |     [[nodiscard]] int uniqNumber() const; | ||||||
|     // get methods |     // get methods | ||||||
|  | |||||||
| @ -33,8 +33,7 @@ public: | |||||||
|         : QObject(_parent){}; |         : QObject(_parent){}; | ||||||
|     ~AbstractQuotesProvider() override = default; |     ~AbstractQuotesProvider() override = default; | ||||||
|     virtual void initUrl(const QString &_asset) = 0; |     virtual void initUrl(const QString &_asset) = 0; | ||||||
|     [[nodiscard]] virtual QVariantHash parse(const QByteArray &_source, |     [[nodiscard]] virtual QVariantHash parse(const QByteArray &_source, const QVariantHash &_oldValues) const = 0; | ||||||
|                                              const QVariantHash &_oldValues) const = 0; |  | ||||||
|     [[nodiscard]] QString tag(const QString &_type) const |     [[nodiscard]] QString tag(const QString &_type) const | ||||||
|     { |     { | ||||||
|         return dynamic_cast<AbstractExtItem *>(parent())->tag(_type); |         return dynamic_cast<AbstractExtItem *>(parent())->tag(_type); | ||||||
|  | |||||||
| @ -38,7 +38,7 @@ public: | |||||||
|     { |     { | ||||||
|         return dynamic_cast<AbstractExtItem *>(parent())->tag(_type); |         return dynamic_cast<AbstractExtItem *>(parent())->tag(_type); | ||||||
|     }; |     }; | ||||||
|     virtual QUrl url() const = 0; |     [[nodiscard]] virtual QUrl url() const = 0; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -18,6 +18,8 @@ | |||||||
| #ifndef AWABSTRACTFORMATTER_H | #ifndef AWABSTRACTFORMATTER_H | ||||||
| #define AWABSTRACTFORMATTER_H | #define AWABSTRACTFORMATTER_H | ||||||
|  |  | ||||||
|  | #include <QRegularExpression> | ||||||
|  |  | ||||||
| #include "abstractextitem.h" | #include "abstractextitem.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -43,7 +45,7 @@ public: | |||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     QVariantHash run() override { return QVariantHash(); }; |     QVariantHash run() override { return {}; }; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|  | |||||||
| @ -51,8 +51,8 @@ QString AWFloatFormatter::convert(const QVariant &_value) const | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; |     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||||
|  |  | ||||||
|     QString output = QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), |     QString output | ||||||
|                                        format(), precision(), fillChar()); |         = QString("%1").arg(_value.toDouble() * multiplier() + summand(), count(), format(), precision(), fillChar()); | ||||||
|     if (forceWidth()) |     if (forceWidth()) | ||||||
|         output = output.left(count()); |         output = output.left(count()); | ||||||
|  |  | ||||||
| @ -149,8 +149,7 @@ void AWFloatFormatter::setFormat(char _format) | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Set format" << _format; |     qCDebug(LOG_LIB) << "Set format" << _format; | ||||||
|     // http://doc.qt.io/qt-5/qstring.html#argument-formats |     // http://doc.qt.io/qt-5/qstring.html#argument-formats | ||||||
|     if ((_format != 'e') && (_format != 'E') && (_format != 'f') && (_format != 'g') |     if ((_format != 'e') && (_format != 'E') && (_format != 'f') && (_format != 'g') && (_format != 'G')) { | ||||||
|         && (_format != 'G')) { |  | ||||||
|         qCWarning(LOG_LIB) << "Invalid format" << _format; |         qCWarning(LOG_LIB) << "Invalid format" << _format; | ||||||
|         _format = 'f'; |         _format = 'f'; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -53,9 +53,8 @@ QString AWJsonFormatter::convert(const QVariant &_value) const | |||||||
|     qCDebug(LOG_LIB) << "Convert value" << _value; |     qCDebug(LOG_LIB) << "Convert value" << _value; | ||||||
|  |  | ||||||
|     // check if _value is string and parse first if required |     // check if _value is string and parse first if required | ||||||
|     QJsonDocument json = _value.type() == QVariant::String |     QJsonDocument json = _value.userType() == QMetaType::QString ? QJsonDocument::fromJson(_value.toString().toUtf8()) | ||||||
|                              ? QJsonDocument::fromJson(_value.toString().toUtf8()) |                                                            : QJsonDocument::fromVariant(_value); | ||||||
|                              : QJsonDocument::fromVariant(_value); |  | ||||||
|     QVariant converted = json.toVariant(); |     QVariant converted = json.toVariant(); | ||||||
|     for (auto &element : m_splittedPath) |     for (auto &element : m_splittedPath) | ||||||
|         converted = getFromJson(converted, element); |         converted = getFromJson(converted, element); | ||||||
| @ -148,9 +147,9 @@ QVariant AWJsonFormatter::getFromJson(const QVariant &_value, const QVariant &_e | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Looking for element" << _element << "in" << _value; |     qCDebug(LOG_LIB) << "Looking for element" << _element << "in" << _value; | ||||||
|  |  | ||||||
|     if (_element.type() == QVariant::String) { |     if (_element.userType() == QMetaType::QString) { | ||||||
|         return getFromMap(_value, _element.toString()); |         return getFromMap(_value, _element.toString()); | ||||||
|     } else if (_element.type() == QVariant::Int) { |     } else if (_element.userType() == QMetaType::Int) { | ||||||
|         return getFromList(_value, _element.toInt()); |         return getFromList(_value, _element.toInt()); | ||||||
|     } else { |     } else { | ||||||
|         qCWarning(LOG_LIB) << "Unknown type" << _element.typeName(); |         qCWarning(LOG_LIB) << "Unknown type" << _element.typeName(); | ||||||
|  | |||||||
| @ -97,7 +97,7 @@ void AWListFormatter::setFilter(const QString &_filter) | |||||||
|     qCDebug(LOG_LIB) << "Filter" << _filter; |     qCDebug(LOG_LIB) << "Filter" << _filter; | ||||||
|  |  | ||||||
|     m_filter = _filter; |     m_filter = _filter; | ||||||
|     m_regex = QRegExp(m_filter); |     m_regex = QRegularExpression(m_filter); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -58,7 +58,7 @@ private: | |||||||
|     QString m_filter = ""; |     QString m_filter = ""; | ||||||
|     QString m_separator = ""; |     QString m_separator = ""; | ||||||
|     bool m_sorted = false; |     bool m_sorted = false; | ||||||
|     QRegExp m_regex; |     QRegularExpression m_regex; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -59,8 +59,8 @@ QString AWScriptFormatter::convert(const QVariant &_value) const | |||||||
|     QJSValue result = fn.call(args); |     QJSValue result = fn.call(args); | ||||||
|  |  | ||||||
|     if (result.isError()) { |     if (result.isError()) { | ||||||
|         qCWarning(LOG_LIB) << "Uncaught exception at line" << result.property("lineNumber").toInt() |         qCWarning(LOG_LIB) << "Uncaught exception at line" << result.property("lineNumber").toInt() << ":" | ||||||
|                            << ":" << result.toString(); |                            << result.toString(); | ||||||
|         return ""; |         return ""; | ||||||
|     } else { |     } else { | ||||||
|         return result.toString(); |         return result.toString(); | ||||||
| @ -199,9 +199,7 @@ void AWScriptFormatter::initProgram() | |||||||
| { | { | ||||||
|     // init JS code |     // init JS code | ||||||
|     if (appendCode()) |     if (appendCode()) | ||||||
|         m_program = QString("(function(value) { %1%2 })") |         m_program = QString("(function(value) { %1%2 })").arg(code()).arg(hasReturn() ? "" : "; return output;"); | ||||||
|                         .arg(code()) |  | ||||||
|                         .arg(hasReturn() ? "" : "; return output;"); |  | ||||||
|     else |     else | ||||||
|         m_program = code(); |         m_program = code(); | ||||||
|  |  | ||||||
|  | |||||||
| @ -139,9 +139,8 @@ private: | |||||||
|                 qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; |                 qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; | ||||||
|                 QString filePath = QString("%1/%2").arg(dir).arg(file); |                 QString filePath = QString("%1/%2").arg(dir).arg(file); | ||||||
|                 // check if already exists |                 // check if already exists | ||||||
|                 if (std::any_of(items.cbegin(), items.cend(), [&filePath](AbstractExtItem *item) { |                 if (std::any_of(items.cbegin(), items.cend(), | ||||||
|                         return (item->fileName() == filePath); |                                 [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) | ||||||
|                     })) |  | ||||||
|                     continue; |                     continue; | ||||||
|                 items.append(new T(this, filePath)); |                 items.append(new T(this, filePath)); | ||||||
|             } |             } | ||||||
| @ -149,9 +148,7 @@ private: | |||||||
|  |  | ||||||
|         // sort items |         // sort items | ||||||
|         std::sort(items.begin(), items.end(), |         std::sort(items.begin(), items.end(), | ||||||
|                   [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { |                   [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); }); | ||||||
|                       return lhs->number() < rhs->number(); |  | ||||||
|                   }); |  | ||||||
|         return items; |         return items; | ||||||
|     }; |     }; | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -20,9 +20,7 @@ | |||||||
|  |  | ||||||
| #include <KI18n/KLocalizedString> | #include <KI18n/KLocalizedString> | ||||||
|  |  | ||||||
| #include <QDir> |  | ||||||
| #include <QSettings> | #include <QSettings> | ||||||
| #include <QTextCodec> |  | ||||||
|  |  | ||||||
| #include <qreplytimeout/qreplytimeout.h> | #include <qreplytimeout/qreplytimeout.h> | ||||||
|  |  | ||||||
| @ -45,8 +43,7 @@ ExtNetworkRequest::ExtNetworkRequest(QWidget *_parent, const QString &_filePath) | |||||||
|     // HACK declare as child of nullptr to avoid crash with plasmawindowed |     // HACK declare as child of nullptr to avoid crash with plasmawindowed | ||||||
|     // in the destructor |     // in the destructor | ||||||
|     m_manager = new QNetworkAccessManager(nullptr); |     m_manager = new QNetworkAccessManager(nullptr); | ||||||
|     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, |     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(networkReplyReceived(QNetworkReply *))); | ||||||
|             SLOT(networkReplyReceived(QNetworkReply *))); |  | ||||||
|  |  | ||||||
|     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); |     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||||
| } | } | ||||||
| @ -56,8 +53,7 @@ ExtNetworkRequest::~ExtNetworkRequest() | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, |     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(networkReplyReceived(QNetworkReply *))); | ||||||
|                SLOT(networkReplyReceived(QNetworkReply *))); |  | ||||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); |     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||||
|  |  | ||||||
|     m_manager->deleteLater(); |     m_manager->deleteLater(); | ||||||
| @ -171,14 +167,12 @@ void ExtNetworkRequest::writeConfiguration() const | |||||||
| void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply) | void ExtNetworkRequest::networkReplyReceived(QNetworkReply *_reply) | ||||||
| { | { | ||||||
|     if (_reply->error() != QNetworkReply::NoError) { |     if (_reply->error() != QNetworkReply::NoError) { | ||||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" |         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||||
|                           << _reply->errorString(); |  | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     m_isRunning = false; |     m_isRunning = false; | ||||||
|     m_values[tag("response")] |     m_values[tag("response")] = QString::fromUtf8(_reply->readAll()).trimmed(); | ||||||
|         = QTextCodec::codecForMib(106)->toUnicode(_reply->readAll()).trimmed(); |  | ||||||
|  |  | ||||||
|     emit(dataReceived(m_values)); |     emit(dataReceived(m_values)); | ||||||
| } | } | ||||||
|  | |||||||
| @ -50,8 +50,7 @@ ExtQuotes::ExtQuotes(QWidget *_parent, const QString &_filePath) | |||||||
|     // HACK declare as child of nullptr to avoid crash with plasmawindowed |     // HACK declare as child of nullptr to avoid crash with plasmawindowed | ||||||
|     // in the destructor |     // in the destructor | ||||||
|     m_manager = new QNetworkAccessManager(nullptr); |     m_manager = new QNetworkAccessManager(nullptr); | ||||||
|     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, |     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); | ||||||
|             SLOT(quotesReplyReceived(QNetworkReply *))); |  | ||||||
|  |  | ||||||
|     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); |     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||||
| } | } | ||||||
| @ -61,8 +60,7 @@ ExtQuotes::~ExtQuotes() | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, |     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(quotesReplyReceived(QNetworkReply *))); | ||||||
|                SLOT(quotesReplyReceived(QNetworkReply *))); |  | ||||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); |     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||||
|  |  | ||||||
|     m_manager->deleteLater(); |     m_manager->deleteLater(); | ||||||
| @ -176,8 +174,7 @@ void ExtQuotes::writeConfiguration() const | |||||||
| void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply) | void ExtQuotes::quotesReplyReceived(QNetworkReply *_reply) | ||||||
| { | { | ||||||
|     if (_reply->error() != QNetworkReply::NoError) { |     if (_reply->error() != QNetworkReply::NoError) { | ||||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" |         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||||
|                           << _reply->errorString(); |  | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -218,10 +215,9 @@ void ExtQuotes::translate() | |||||||
|     ui->label_name->setText(i18n("Name")); |     ui->label_name->setText(i18n("Name")); | ||||||
|     ui->label_comment->setText(i18n("Comment")); |     ui->label_comment->setText(i18n("Comment")); | ||||||
|     ui->label_number->setText(i18n("Tag")); |     ui->label_number->setText(i18n("Tag")); | ||||||
|     ui->label->setText( |     ui->label->setText(i18n("<html><head/><body><p>Use Stooq ticker to get quotes for the instrument. Refer to <a " | ||||||
|         i18n("<html><head/><body><p>Use Stooq ticker to get quotes for the instrument. Refer to <a " |                             "href=\"https://stooq.com/\"><span style=\" text-decoration: underline; " | ||||||
|              "href=\"https://stooq.com/\"><span style=\" text-decoration: underline; " |                             "color:#0057ae;\">https://stooq.com/</span></a></p></body></html>")); | ||||||
|              "color:#0057ae;\">https://stooq.com/</span></a></p></body></html>")); |  | ||||||
|     ui->label_ticker->setText(i18n("Ticker")); |     ui->label_ticker->setText(i18n("Ticker")); | ||||||
|     ui->checkBox_active->setText(i18n("Active")); |     ui->checkBox_active->setText(i18n("Active")); | ||||||
|     ui->label_schedule->setText(i18n("Schedule")); |     ui->label_schedule->setText(i18n("Schedule")); | ||||||
|  | |||||||
| @ -24,7 +24,6 @@ | |||||||
| #include <QJsonDocument> | #include <QJsonDocument> | ||||||
| #include <QSettings> | #include <QSettings> | ||||||
| #include <QStandardPaths> | #include <QStandardPaths> | ||||||
| #include <QTextCodec> |  | ||||||
|  |  | ||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
| @ -80,9 +79,8 @@ ExtScript *ExtScript::copy(const QString &_fileName, const int _number) | |||||||
|  |  | ||||||
| QString ExtScript::jsonFiltersFile() | QString ExtScript::jsonFiltersFile() | ||||||
| { | { | ||||||
|     QString fileName |     QString fileName = QStandardPaths::locate(QStandardPaths::GenericDataLocation, | ||||||
|         = QStandardPaths::locate(QStandardPaths::GenericDataLocation, |                                               "awesomewidgets/scripts/awesomewidgets-extscripts-filters.json"); | ||||||
|                                  "awesomewidgets/scripts/awesomewidgets-extscripts-filters.json"); |  | ||||||
|     qCInfo(LOG_LIB) << "Filters file" << fileName; |     qCInfo(LOG_LIB) << "Filters file" << fileName; | ||||||
|  |  | ||||||
|     return fileName; |     return fileName; | ||||||
| @ -272,12 +270,9 @@ int ExtScript::showConfiguration(const QVariant &_args) | |||||||
|     ui->lineEdit_socket->setText(socket()); |     ui->lineEdit_socket->setText(socket()); | ||||||
|     ui->spinBox_interval->setValue(interval()); |     ui->spinBox_interval->setValue(interval()); | ||||||
|     // filters |     // filters | ||||||
|     ui->checkBox_colorFilter->setCheckState(filters().contains("color") ? Qt::Checked |     ui->checkBox_colorFilter->setCheckState(filters().contains("color") ? Qt::Checked : Qt::Unchecked); | ||||||
|                                                                         : Qt::Unchecked); |     ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked : Qt::Unchecked); | ||||||
|     ui->checkBox_linesFilter->setCheckState(filters().contains("newline") ? Qt::Checked |     ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked : Qt::Unchecked); | ||||||
|                                                                           : Qt::Unchecked); |  | ||||||
|     ui->checkBox_spaceFilter->setCheckState(filters().contains("space") ? Qt::Checked |  | ||||||
|                                                                         : Qt::Unchecked); |  | ||||||
|  |  | ||||||
|     int ret = exec(); |     int ret = exec(); | ||||||
|     if (ret != 1) |     if (ret != 1) | ||||||
| @ -329,11 +324,9 @@ void ExtScript::startProcess() | |||||||
| void ExtScript::updateValue() | void ExtScript::updateValue() | ||||||
| { | { | ||||||
|     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); |     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); | ||||||
|     QString qdebug |     QString qdebug = QString::fromUtf8(m_process->readAllStandardError()).trimmed(); | ||||||
|         = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardError()).trimmed(); |  | ||||||
|     qCInfo(LOG_LIB) << "Error" << qdebug; |     qCInfo(LOG_LIB) << "Error" << qdebug; | ||||||
|     QString qoutput |     QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||||
|         = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); |  | ||||||
|     qCInfo(LOG_LIB) << "Output" << qoutput; |     qCInfo(LOG_LIB) << "Output" << qoutput; | ||||||
|     QString strValue; |     QString strValue; | ||||||
|  |  | ||||||
|  | |||||||
| @ -20,9 +20,7 @@ | |||||||
|  |  | ||||||
| #include <KI18n/KLocalizedString> | #include <KI18n/KLocalizedString> | ||||||
|  |  | ||||||
| #include <QDir> |  | ||||||
| #include <QSettings> | #include <QSettings> | ||||||
| #include <QTextCodec> |  | ||||||
|  |  | ||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
|  |  | ||||||
| @ -215,12 +213,10 @@ void ExtUpgrade::updateValue() | |||||||
|     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); |     qCInfo(LOG_LIB) << "Cmd returns" << m_process->exitCode(); | ||||||
|     qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError(); |     qCInfo(LOG_LIB) << "Error" << m_process->readAllStandardError(); | ||||||
|  |  | ||||||
|     QString qoutput |     QString qoutput = QString::fromUtf8(m_process->readAllStandardOutput()).trimmed(); | ||||||
|         = QTextCodec::codecForMib(106)->toUnicode(m_process->readAllStandardOutput()).trimmed(); |  | ||||||
|     m_values[tag("pkgcount")] = [this](const QString &output) { |     m_values[tag("pkgcount")] = [this](const QString &output) { | ||||||
|         return filter().isEmpty() |         return filter().isEmpty() ? output.split('\n', Qt::SkipEmptyParts).count() - null() | ||||||
|                    ? output.split('\n', Qt::SkipEmptyParts).count() - null() |                                   : output.split('\n', Qt::SkipEmptyParts).filter(QRegularExpression(filter())).count(); | ||||||
|                    : output.split('\n', Qt::SkipEmptyParts).filter(QRegExp(filter())).count(); |  | ||||||
|     }(qoutput); |     }(qoutput); | ||||||
|  |  | ||||||
|     emit(dataReceived(m_values)); |     emit(dataReceived(m_values)); | ||||||
|  | |||||||
| @ -53,8 +53,7 @@ ExtWeather::ExtWeather(QWidget *_parent, const QString &_filePath) | |||||||
|     // HACK declare as child of nullptr to avoid crash with plasmawindowed |     // HACK declare as child of nullptr to avoid crash with plasmawindowed | ||||||
|     // in the destructor |     // in the destructor | ||||||
|     m_manager = new QNetworkAccessManager(nullptr); |     m_manager = new QNetworkAccessManager(nullptr); | ||||||
|     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, |     connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(weatherReplyReceived(QNetworkReply *))); | ||||||
|             SLOT(weatherReplyReceived(QNetworkReply *))); |  | ||||||
|  |  | ||||||
|     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); |     connect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||||
| } | } | ||||||
| @ -64,8 +63,7 @@ ExtWeather::~ExtWeather() | |||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; |     qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; | ||||||
|  |  | ||||||
|     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, |     disconnect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(weatherReplyReceived(QNetworkReply *))); | ||||||
|                SLOT(weatherReplyReceived(QNetworkReply *))); |  | ||||||
|     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); |     disconnect(this, SIGNAL(requestDataUpdate()), this, SLOT(sendRequest())); | ||||||
|  |  | ||||||
|     m_manager->deleteLater(); |     m_manager->deleteLater(); | ||||||
| @ -92,9 +90,8 @@ ExtWeather *ExtWeather::copy(const QString &_fileName, const int _number) | |||||||
|  |  | ||||||
| QString ExtWeather::jsonMapFile() | QString ExtWeather::jsonMapFile() | ||||||
| { | { | ||||||
|     QString fileName |     QString fileName = QStandardPaths::locate(QStandardPaths::GenericDataLocation, | ||||||
|         = QStandardPaths::locate(QStandardPaths::GenericDataLocation, |                                               "awesomewidgets/weather/awesomewidgets-extweather-ids.json"); | ||||||
|                                  "awesomewidgets/weather/awesomewidgets-extweather-ids.json"); |  | ||||||
|     qCInfo(LOG_LIB) << "Map file" << fileName; |     qCInfo(LOG_LIB) << "Map file" << fileName; | ||||||
|  |  | ||||||
|     return fileName; |     return fileName; | ||||||
| @ -339,8 +336,7 @@ void ExtWeather::sendRequest() | |||||||
| void ExtWeather::weatherReplyReceived(QNetworkReply *_reply) | void ExtWeather::weatherReplyReceived(QNetworkReply *_reply) | ||||||
| { | { | ||||||
|     if (_reply->error() != QNetworkReply::NoError) { |     if (_reply->error() != QNetworkReply::NoError) { | ||||||
|         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" |         qCWarning(LOG_AW) << "An error occurs" << _reply->error() << "with message" << _reply->errorString(); | ||||||
|                           << _reply->errorString(); |  | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -100,7 +100,7 @@ QString GraphicalItem::image(const QVariant &value) | |||||||
|  |  | ||||||
|     m_scene->clear(); |     m_scene->clear(); | ||||||
|     int scale[2] = {1, 1}; |     int scale[2] = {1, 1}; | ||||||
|     float converted = m_helper->getPercents(value.toFloat(), minValue(), maxValue()); |     float converted = GraphicalItemHelper::getPercents(value.toFloat(), minValue(), maxValue()); | ||||||
|  |  | ||||||
|     // paint |     // paint | ||||||
|     switch (m_type) { |     switch (m_type) { | ||||||
| @ -136,8 +136,7 @@ QString GraphicalItem::image(const QVariant &value) | |||||||
|     QByteArray byteArray; |     QByteArray byteArray; | ||||||
|     QBuffer buffer(&byteArray); |     QBuffer buffer(&byteArray); | ||||||
|     pixmap.save(&buffer, "PNG"); |     pixmap.save(&buffer, "PNG"); | ||||||
|     QString url |     QString url = QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); | ||||||
|         = QString("<img src=\"data:image/png;base64,%1\"/>").arg(QString(byteArray.toBase64())); |  | ||||||
|  |  | ||||||
|     return url; |     return url; | ||||||
| } | } | ||||||
| @ -458,12 +457,12 @@ int GraphicalItem::showConfiguration(const QVariant &_args) | |||||||
|     ui->doubleSpinBox_max->setValue(maxValue()); |     ui->doubleSpinBox_max->setValue(maxValue()); | ||||||
|     ui->doubleSpinBox_min->setValue(minValue()); |     ui->doubleSpinBox_min->setValue(minValue()); | ||||||
|     ui->spinBox_count->setValue(count()); |     ui->spinBox_count->setValue(count()); | ||||||
|     if (m_helper->isColor(activeColor())) |     if (GraphicalItemHelper::isColor(activeColor())) | ||||||
|         ui->comboBox_activeImageType->setCurrentIndex(0); |         ui->comboBox_activeImageType->setCurrentIndex(0); | ||||||
|     else |     else | ||||||
|         ui->comboBox_activeImageType->setCurrentIndex(1); |         ui->comboBox_activeImageType->setCurrentIndex(1); | ||||||
|     ui->lineEdit_activeColor->setText(activeColor()); |     ui->lineEdit_activeColor->setText(activeColor()); | ||||||
|     if (m_helper->isColor(inactiveColor())) |     if (GraphicalItemHelper::isColor(inactiveColor())) | ||||||
|         ui->comboBox_inactiveImageType->setCurrentIndex(0); |         ui->comboBox_inactiveImageType->setCurrentIndex(0); | ||||||
|     else |     else | ||||||
|         ui->comboBox_inactiveImageType->setCurrentIndex(1); |         ui->comboBox_inactiveImageType->setCurrentIndex(1); | ||||||
| @ -540,9 +539,8 @@ void GraphicalItem::changeColor() | |||||||
|  |  | ||||||
|     QString outputColor; |     QString outputColor; | ||||||
|     if (state == 0) { |     if (state == 0) { | ||||||
|         QColor color = m_helper->stringToColor(lineEdit->text()); |         QColor color = GraphicalItemHelper::stringToColor(lineEdit->text()); | ||||||
|         QColor newColor = QColorDialog::getColor(color, this, i18n("Select color"), |         QColor newColor = QColorDialog::getColor(color, this, i18n("Select color"), QColorDialog::ShowAlphaChannel); | ||||||
|                                                  QColorDialog::ShowAlphaChannel); |  | ||||||
|         if (!newColor.isValid()) |         if (!newColor.isValid()) | ||||||
|             return; |             return; | ||||||
|         qCInfo(LOG_LIB) << "Selected color" << newColor; |         qCInfo(LOG_LIB) << "Selected color" << newColor; | ||||||
| @ -557,10 +555,9 @@ void GraphicalItem::changeColor() | |||||||
|     } else if (state == 1) { |     } else if (state == 1) { | ||||||
|         QString path = lineEdit->text(); |         QString path = lineEdit->text(); | ||||||
|         QString directory = QFileInfo(path).absolutePath(); |         QString directory = QFileInfo(path).absolutePath(); | ||||||
|         outputColor |         outputColor = QFileDialog::getOpenFileUrl(this, i18n("Select path"), directory, | ||||||
|             = QFileDialog::getOpenFileUrl(this, i18n("Select path"), directory, |                                                   i18n("Images (*.png *.bpm *.jpg);;All files (*.*)")) | ||||||
|                                           i18n("Images (*.png *.bpm *.jpg);;All files (*.*)")) |                           .toString(); | ||||||
|                   .toString(); |  | ||||||
|  |  | ||||||
|         qCInfo(LOG_LIB) << "Selected path" << outputColor; |         qCInfo(LOG_LIB) << "Selected path" << outputColor; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -91,7 +91,7 @@ public: | |||||||
|  |  | ||||||
| public slots: | public slots: | ||||||
|     void readConfiguration() override; |     void readConfiguration() override; | ||||||
|     QVariantHash run() override { return QVariantHash(); }; |     QVariantHash run() override { return {}; }; | ||||||
|     int showConfiguration(const QVariant &_args) override; |     int showConfiguration(const QVariant &_args) override; | ||||||
|     void writeConfiguration() const override; |     void writeConfiguration() const override; | ||||||
|  |  | ||||||
|  | |||||||
| @ -40,11 +40,11 @@ GraphicalItemHelper::~GraphicalItemHelper() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void GraphicalItemHelper::setParameters(const QString &_active, const QString &_inactive, | void GraphicalItemHelper::setParameters(const QString &_active, const QString &_inactive, const int _width, | ||||||
|                                         const int _width, const int _height, const int _count) |                                         const int _height, const int _count) | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Use active color" << _active << ", inactive" << _inactive << ", width" |     qCDebug(LOG_LIB) << "Use active color" << _active << ", inactive" << _inactive << ", width" << _width << ", height" | ||||||
|                      << _width << ", height" << _height << ", count" << _count; |                      << _height << ", count" << _count; | ||||||
|  |  | ||||||
|     // put images to pens if any otherwise set pen colors |     // put images to pens if any otherwise set pen colors | ||||||
|     // Images resize to content here as well |     // Images resize to content here as well | ||||||
| @ -155,11 +155,10 @@ void GraphicalItemHelper::paintHorizontal(const float _percent) | |||||||
|     m_inactivePen.setWidth(m_height); |     m_inactivePen.setWidth(m_height); | ||||||
|     // inactive |     // inactive | ||||||
|     auto width = static_cast<float>(m_width); |     auto width = static_cast<float>(m_width); | ||||||
|     m_scene->addLine(_percent * width + 0.5 * m_height, 0.5 * m_height, m_width + 0.5 * m_height, |     m_scene->addLine(_percent * width + 0.5 * m_height, 0.5 * m_height, m_width + 0.5 * m_height, 0.5 * m_height, | ||||||
|                      0.5 * m_height, m_inactivePen); |                      m_inactivePen); | ||||||
|     // active |     // active | ||||||
|     m_scene->addLine(-0.5 * m_height, 0.5 * m_height, _percent * width - 0.5 * m_height, |     m_scene->addLine(-0.5 * m_height, 0.5 * m_height, _percent * width - 0.5 * m_height, 0.5 * m_height, m_activePen); | ||||||
|                      0.5 * m_height, m_activePen); |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -170,8 +169,8 @@ void GraphicalItemHelper::paintVertical(const float _percent) | |||||||
|     m_activePen.setWidth(m_height); |     m_activePen.setWidth(m_height); | ||||||
|     m_inactivePen.setWidth(m_height); |     m_inactivePen.setWidth(m_height); | ||||||
|     // inactive |     // inactive | ||||||
|     m_scene->addLine(0.5 * m_width, -0.5 * m_width, 0.5 * m_width, |     m_scene->addLine(0.5 * m_width, -0.5 * m_width, 0.5 * m_width, (1.0 - _percent) * m_height - 0.5 * m_width, | ||||||
|                      (1.0 - _percent) * m_height - 0.5 * m_width, m_inactivePen); |                      m_inactivePen); | ||||||
|     // active |     // active | ||||||
|     m_scene->addLine(0.5 * m_width, (1.0 - _percent) * m_height + 0.5 * m_width, 0.5 * m_width, |     m_scene->addLine(0.5 * m_width, (1.0 - _percent) * m_height + 0.5 * m_width, 0.5 * m_width, | ||||||
|                      m_height + 0.5 * m_width, m_activePen); |                      m_height + 0.5 * m_width, m_activePen); | ||||||
|  | |||||||
| @ -33,8 +33,7 @@ public: | |||||||
|     explicit GraphicalItemHelper(QObject *_parent = nullptr, QGraphicsScene *_scene = nullptr); |     explicit GraphicalItemHelper(QObject *_parent = nullptr, QGraphicsScene *_scene = nullptr); | ||||||
|     ~GraphicalItemHelper() override; |     ~GraphicalItemHelper() override; | ||||||
|     // parameters |     // parameters | ||||||
|     void setParameters(const QString &_active, const QString &_inactive, int _width, int _height, |     void setParameters(const QString &_active, const QString &_inactive, int _width, int _height, int _count); | ||||||
|                        int _count); |  | ||||||
|     // paint methods |     // paint methods | ||||||
|     void paintBars(float _value); |     void paintBars(float _value); | ||||||
|     void paintCircle(float _percent); |     void paintCircle(float _percent); | ||||||
|  | |||||||
| @ -66,8 +66,7 @@ QVariantHash OWMWeatherProvider::parse(const QVariantMap &_json) const | |||||||
|         return parseSingleJson(_json); |         return parseSingleJson(_json); | ||||||
|     } else { |     } else { | ||||||
|         QVariantList list = _json["list"].toList(); |         QVariantList list = _json["list"].toList(); | ||||||
|         return parseSingleJson(list.count() <= m_ts ? list.at(m_ts - 1).toMap() |         return parseSingleJson(list.count() <= m_ts ? list.at(m_ts - 1).toMap() : list.last().toMap()); | ||||||
|                                                     : list.last().toMap()); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -100,7 +99,7 @@ QVariantHash OWMWeatherProvider::parseSingleJson(const QVariantMap &_json) const | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     // timestamp |     // timestamp | ||||||
|     output[tag("timestamp")] = QDateTime::fromTime_t(_json["dt"].toUInt()).toUTC(); |     output[tag("timestamp")] = QDateTime::fromSecsSinceEpoch(_json["dt"].toUInt()).toUTC(); | ||||||
|  |  | ||||||
|     return output; |     return output; | ||||||
| } | } | ||||||
|  | |||||||
| @ -67,10 +67,8 @@ void QCronScheduler::expired() | |||||||
| { | { | ||||||
|     QDateTime now = QDateTime::currentDateTime(); |     QDateTime now = QDateTime::currentDateTime(); | ||||||
|  |  | ||||||
|     if (m_schedule.minutes.contains(now.time().minute()) |     if (m_schedule.minutes.contains(now.time().minute()) && m_schedule.hours.contains(now.time().hour()) | ||||||
|         && m_schedule.hours.contains(now.time().hour()) |         && m_schedule.days.contains(now.date().day()) && m_schedule.months.contains(now.date().month()) | ||||||
|         && m_schedule.days.contains(now.date().day()) |  | ||||||
|         && m_schedule.months.contains(now.date().month()) |  | ||||||
|         && m_schedule.weekdays.contains(now.date().dayOfWeek())) |         && m_schedule.weekdays.contains(now.date().dayOfWeek())) | ||||||
|         emit(activated()); |         emit(activated()); | ||||||
| } | } | ||||||
| @ -137,7 +135,7 @@ QList<int> QCronScheduler::QCronField::toList() | |||||||
| { | { | ||||||
|     // error checking |     // error checking | ||||||
|     if ((minValue == -1) || (maxValue == -1)) |     if ((minValue == -1) || (maxValue == -1)) | ||||||
|         return QList<int>(); |         return {}; | ||||||
|  |  | ||||||
|     QList<int> output; |     QList<int> output; | ||||||
|     for (auto &i = minValue; i <= maxValue; ++i) { |     for (auto &i = minValue; i <= maxValue; ++i) { | ||||||
|  | |||||||
| @ -28,20 +28,20 @@ class QCronScheduler : public QObject | |||||||
|     Q_OBJECT |     Q_OBJECT | ||||||
|  |  | ||||||
| public: | public: | ||||||
|     typedef struct { |     struct QCronRunSchedule { | ||||||
|         QList<int> minutes; |         QList<int> minutes; | ||||||
|         QList<int> hours; |         QList<int> hours; | ||||||
|         QList<int> days; |         QList<int> days; | ||||||
|         QList<int> months; |         QList<int> months; | ||||||
|         QList<int> weekdays; |         QList<int> weekdays; | ||||||
|     } QCronRunSchedule; |     }; | ||||||
|     typedef struct { |     struct QCronField { | ||||||
|         int minValue = -1; |         int minValue = -1; | ||||||
|         int maxValue = -1; |         int maxValue = -1; | ||||||
|         int div = 1; |         int div = 1; | ||||||
|         void fromRange(const QString &_range, int _min, int _max); |         void fromRange(const QString &_range, int _min, int _max); | ||||||
|         QList<int> toList(); |         QList<int> toList(); | ||||||
|     } QCronField; |     }; | ||||||
|  |  | ||||||
|     explicit QCronScheduler(QObject *_parent = nullptr); |     explicit QCronScheduler(QObject *_parent = nullptr); | ||||||
|     ~QCronScheduler() override; |     ~QCronScheduler() override; | ||||||
|  | |||||||
| @ -17,7 +17,6 @@ | |||||||
|  |  | ||||||
| #include "stooqquotesprovider.h" | #include "stooqquotesprovider.h" | ||||||
|  |  | ||||||
| #include <QTextCodec> |  | ||||||
| #include <QUrlQuery> | #include <QUrlQuery> | ||||||
|  |  | ||||||
| #include "awdebug.h" | #include "awdebug.h" | ||||||
| @ -49,15 +48,13 @@ void StooqQuotesProvider::initUrl(const QString &_asset) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, | QVariantHash StooqQuotesProvider::parse(const QByteArray &_source, const QVariantHash &_oldValues) const | ||||||
|                                         const QVariantHash &_oldValues) const |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Parse csv" << _source; |     qCDebug(LOG_LIB) << "Parse csv" << _source; | ||||||
|  |  | ||||||
|     QVariantHash values; |     QVariantHash values; | ||||||
|  |  | ||||||
|     QStringList sourceValues |     QStringList sourceValues = QString::fromUtf8(_source).trimmed().split(','); | ||||||
|         = QTextCodec::codecForMib(106)->toUnicode(_source).trimmed().split(','); |  | ||||||
|     if (sourceValues.count() != 2) { |     if (sourceValues.count() != 2) { | ||||||
|         qCWarning(LOG_LIB) << "Parse error" << sourceValues; |         qCWarning(LOG_LIB) << "Parse error" << sourceValues; | ||||||
|         return values; |         return values; | ||||||
|  | |||||||
| @ -31,8 +31,7 @@ public: | |||||||
|     explicit StooqQuotesProvider(QObject *_parent); |     explicit StooqQuotesProvider(QObject *_parent); | ||||||
|     ~StooqQuotesProvider() override; |     ~StooqQuotesProvider() override; | ||||||
|     void initUrl(const QString &_asset) override; |     void initUrl(const QString &_asset) override; | ||||||
|     [[nodiscard]] QVariantHash parse(const QByteArray &_source, |     [[nodiscard]] QVariantHash parse(const QByteArray &_source, const QVariantHash &_oldValues) const override; | ||||||
|                                      const QVariantHash &_oldValues) const override; |  | ||||||
|     [[nodiscard]] QUrl url() const override; |     [[nodiscard]] QUrl url() const override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|  | |||||||
| @ -49,8 +49,7 @@ void YahooQuotesProvider::initUrl(const QString &_asset) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QVariantHash YahooQuotesProvider::parse(const QByteArray &_source, | QVariantHash YahooQuotesProvider::parse(const QByteArray &_source, const QVariantHash &_oldValues) const | ||||||
|                                         const QVariantHash &_oldValues) const |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Parse json" << _source; |     qCDebug(LOG_LIB) << "Parse json" << _source; | ||||||
|  |  | ||||||
|  | |||||||
| @ -32,8 +32,7 @@ public: | |||||||
|     explicit YahooQuotesProvider(QObject *_parent); |     explicit YahooQuotesProvider(QObject *_parent); | ||||||
|     ~YahooQuotesProvider() override; |     ~YahooQuotesProvider() override; | ||||||
|     void initUrl(const QString &_asset) override; |     void initUrl(const QString &_asset) override; | ||||||
|     [[nodiscard]] QVariantHash parse(const QByteArray &_source, |     [[nodiscard]] QVariantHash parse(const QByteArray &_source, const QVariantHash &_oldValues) const override; | ||||||
|                                      const QVariantHash &_oldValues) const override; |  | ||||||
|     [[nodiscard]] QUrl url() const override; |     [[nodiscard]] QUrl url() const override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|  | |||||||
| @ -57,7 +57,7 @@ QVariantHash YahooWeatherProvider::parse(const QVariantMap &_json) const | |||||||
|     QVariantMap jsonMap = _json["query"].toMap(); |     QVariantMap jsonMap = _json["query"].toMap(); | ||||||
|     if (jsonMap["count"].toInt() != 1) { |     if (jsonMap["count"].toInt() != 1) { | ||||||
|         qCWarning(LOG_LIB) << "Found data count" << _json["count"].toInt() << "is not 1"; |         qCWarning(LOG_LIB) << "Found data count" << _json["count"].toInt() << "is not 1"; | ||||||
|         return QVariantHash(); |         return {}; | ||||||
|     } |     } | ||||||
|     QVariantMap results = jsonMap["results"].toMap()["channel"].toMap(); |     QVariantMap results = jsonMap["results"].toMap()["channel"].toMap(); | ||||||
|     QVariantMap item = results["item"].toMap(); |     QVariantMap item = results["item"].toMap(); | ||||||
| @ -73,8 +73,7 @@ QUrl YahooWeatherProvider::url() const | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| QVariantHash YahooWeatherProvider::parseCurrent(const QVariantMap &_json, | QVariantHash YahooWeatherProvider::parseCurrent(const QVariantMap &_json, const QVariantMap &_atmosphere) const | ||||||
|                                                 const QVariantMap &_atmosphere) const |  | ||||||
| { | { | ||||||
|     qCDebug(LOG_LIB) << "Parse current weather from" << _json; |     qCDebug(LOG_LIB) << "Parse current weather from" << _json; | ||||||
|  |  | ||||||
| @ -99,8 +98,7 @@ QVariantHash YahooWeatherProvider::parseForecast(const QVariantMap &_json) const | |||||||
|  |  | ||||||
|     QVariantHash values; |     QVariantHash values; | ||||||
|     QVariantList weatherList = _json["forecast"].toList(); |     QVariantList weatherList = _json["forecast"].toList(); | ||||||
|     QVariantMap weatherMap |     QVariantMap weatherMap = weatherList.count() < m_ts ? weatherList.last().toMap() : weatherList.at(m_ts).toMap(); | ||||||
|         = weatherList.count() < m_ts ? weatherList.last().toMap() : weatherList.at(m_ts).toMap(); |  | ||||||
|     int id = weatherMap["code"].toInt(); |     int id = weatherMap["code"].toInt(); | ||||||
|     values[tag("weatherId")] = id; |     values[tag("weatherId")] = id; | ||||||
|     values[tag("timestamp")] = weatherMap["date"].toString(); |     values[tag("timestamp")] = weatherMap["date"].toString(); | ||||||
|  | |||||||
| @ -38,8 +38,7 @@ public: | |||||||
|     [[nodiscard]] QUrl url() const override; |     [[nodiscard]] QUrl url() const override; | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     [[nodiscard]] QVariantHash parseCurrent(const QVariantMap &_json, |     [[nodiscard]] QVariantHash parseCurrent(const QVariantMap &_json, const QVariantMap &_atmosphere) const; | ||||||
|                                             const QVariantMap &_atmosphere) const; |  | ||||||
|     [[nodiscard]] QVariantHash parseForecast(const QVariantMap &_json) const; |     [[nodiscard]] QVariantHash parseForecast(const QVariantMap &_json) const; | ||||||
|     int m_ts = 0; |     int m_ts = 0; | ||||||
|     QUrl m_url; |     QUrl m_url; | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| exec_program( | execute_process( | ||||||
|         "sed -n '1,/^Ver/ p' CHANGELOG 2> /dev/null | grep -v '^Ver' | tr '\n' '@'" |         COMMAND "sed -n '1,/^Ver/ p' CHANGELOG 2> /dev/null | grep -v '^Ver' | tr '\n' '@'" | ||||||
|         ${CMAKE_CURRENT_SOURCE_DIR} |         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|         OUTPUT_VARIABLE PROJECT_CHANGELOG |         OUTPUT_VARIABLE PROJECT_CHANGELOG | ||||||
|  |         OUTPUT_STRIP_TRAILING_WHITESPACE | ||||||
| ) | ) | ||||||
|  | |||||||
| @ -1,9 +1,9 @@ | |||||||
| exec_program( | execute_process( | ||||||
|         "git" |         COMMAND git log -1 --format=%h | ||||||
|         ${CMAKE_CURRENT_SOURCE_DIR} |         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | ||||||
|         ARGS "log" "-1" "--format=\"%h\"" |  | ||||||
|         OUTPUT_VARIABLE COMMIT_SHA |         OUTPUT_VARIABLE COMMIT_SHA | ||||||
|         RETURN_VALUE GIT_RETURN |         RESULT_VARIABLE GIT_RETURN | ||||||
|  |         OUTPUT_STRIP_TRAILING_WHITESPACE | ||||||
| ) | ) | ||||||
|  |  | ||||||
| if (${GIT_RETURN} EQUAL "0") | if (${GIT_RETURN} EQUAL "0") | ||||||
|  | |||||||
| @ -17,7 +17,7 @@ else () | |||||||
| endif () | endif () | ||||||
|  |  | ||||||
| # some flags | # some flags | ||||||
| set(CMAKE_CXX_STANDARD 17) | set(CMAKE_CXX_STANDARD 20) | ||||||
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||||||
|  |  | ||||||
| # verbose output for debug builds | # verbose output for debug builds | ||||||
|  | |||||||
| @ -22,6 +22,5 @@ X-KDE-PluginInfo-Name=org.kde.plasma.desktoppanel | |||||||
| X-KDE-PluginInfo-Version=@PROJECT_VERSION@ | X-KDE-PluginInfo-Version=@PROJECT_VERSION@ | ||||||
| X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | X-KDE-PluginInfo-Website=https://arcanis.me/projects/awesome-widgets/ | ||||||
| X-KDE-PluginInfo-Category=System Information | X-KDE-PluginInfo-Category=System Information | ||||||
| X-KDE-PluginInfo-Depends= |  | ||||||
| X-KDE-PluginInfo-License=GPLv3 | X-KDE-PluginInfo-License=GPLv3 | ||||||
| X-KDE-PluginInfo-EnabledByDefault=true | X-KDE-PluginInfo-EnabledByDefault=true | ||||||
|  | |||||||
							
								
								
									
										29
									
								
								sources/desktop-panel/metadata.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								sources/desktop-panel/metadata.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | { | ||||||
|  |     "KPlugin": { | ||||||
|  |         "Authors": [ | ||||||
|  |             { | ||||||
|  |                 "Email": "esalexeev@gmail.com", | ||||||
|  |                 "Name": "Evgeniy Alekseev aka arcanis" | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "Category": "System Information", | ||||||
|  |         "Description": "A minimalistic Plasmoid", | ||||||
|  |         "Description[en]": "A minimalistic Plasmoid", | ||||||
|  |         "Description[es]": "Un script Plasmoïde minimaliste", | ||||||
|  |         "Description[pt_BR]": "Um script Plasmoid", | ||||||
|  |         "Description[ru]": "Минималистичный плазмоид", | ||||||
|  |         "Description[uk]": "Мінімалістичний плазмоїд", | ||||||
|  |         "EnabledByDefault": true, | ||||||
|  |         "Icon": "utilities-system-monitor", | ||||||
|  |         "Id": "org.kde.plasma.desktoppanel", | ||||||
|  |         "License": "GPLv3", | ||||||
|  |         "Name": "Desktop Panel", | ||||||
|  |         "ServiceTypes": [ | ||||||
|  |             "Plasma/Applet" | ||||||
|  |         ], | ||||||
|  |         "Version": "@PROJECT_VERSION@", | ||||||
|  |         "Website": "https://arcanis.me/projects/awesome-widgets/" | ||||||
|  |     }, | ||||||
|  |     "X-Plasma-API": "declarativeappletscript", | ||||||
|  |     "X-Plasma-MainScript": "ui/main.qml" | ||||||
|  | } | ||||||
| @ -30,7 +30,7 @@ | |||||||
|             <default>¤</default> |             <default>¤</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="tooltipType" type="string"> |         <entry name="tooltipType" type="string"> | ||||||
|             <default>windows</default> |             <default>contours</default> | ||||||
|         </entry> |         </entry> | ||||||
|         <entry name="tooltipWidth" type="int"> |         <entry name="tooltipWidth" type="int"> | ||||||
|             <default>200</default> |             <default>200</default> | ||||||
|  | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user