Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qFlipper for openSUSE:Factory checked in at 2023-12-20 21:03:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qFlipper (Old) and /work/SRC/openSUSE:Factory/.qFlipper.new.9037 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qFlipper" Wed Dec 20 21:03:15 2023 rev:3 rq:1134216 version:1.3.3+git0.1699609231.bfce851 Changes: -------- --- /work/SRC/openSUSE:Factory/qFlipper/qFlipper.changes 2023-05-23 14:54:41.958538477 +0200 +++ /work/SRC/openSUSE:Factory/.qFlipper.new.9037/qFlipper.changes 2023-12-20 21:03:41.577602757 +0100 @@ -1,0 +2,10 @@ +Wed Dec 20 12:51:35 UTC 2023 - msucha...@suse.com + +- Update to version 1.3.3: + * Implement screen orientation (#202) + * Update Flipper graphic + * Added udev rule for U2F (#106) + * Support different targets for resources_tgz + * Better error messages + +------------------------------------------------------------------- Old: ---- qFlipper-1.3.1~rc1+git1.1684488882.0199220.tar.xz New: ---- qFlipper-1.3.3+git0.1699609231.bfce851.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qFlipper.spec ++++++ --- /var/tmp/diff_new_pack.ARhQ2B/_old 2023-12-20 21:03:43.981690218 +0100 +++ /var/tmp/diff_new_pack.ARhQ2B/_new 2023-12-20 21:03:43.985690363 +0100 @@ -17,7 +17,7 @@ Name: qFlipper -Version: 1.3.1~rc1+git1.1684488882.0199220 +Version: 1.3.3+git0.1699609231.bfce851 Release: 0 Summary: Graphical desktop application for updating Flipper Zero firmware License: GPL-3.0-or-later ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.ARhQ2B/_old 2023-12-20 21:03:44.021691674 +0100 +++ /var/tmp/diff_new_pack.ARhQ2B/_new 2023-12-20 21:03:44.025691819 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/flipperdevices/qFlipper</param> - <param name="changesrevision">0199220d20954c92e89589105dac866c225eda27</param></service></servicedata> + <param name="changesrevision">bfce851d4da5a01f24189ba79eac9385b7ce8533</param></service></servicedata> (No newline at EOF) ++++++ qFlipper-1.3.1~rc1+git1.1684488882.0199220.tar.xz -> qFlipper-1.3.3+git0.1699609231.bfce851.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/.github/actions/docker/action.yml new/qFlipper-1.3.3+git0.1699609231.bfce851/.github/actions/docker/action.yml --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/.github/actions/docker/action.yml 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/.github/actions/docker/action.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,11 +0,0 @@ -name: 'Run in docker' -inputs: - run: # id of input - description: 'A command to run' - required: true - default: '' -runs: - using: 'docker' - image: '../../../docker/Dockerfile' - args: - - ${{ inputs.run }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/.github/workflows/ci.yml new/qFlipper-1.3.3+git0.1699609231.bfce851/.github/workflows/ci.yml --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/.github/workflows/ci.yml 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/.github/workflows/ci.yml 2023-11-10 10:40:31.000000000 +0100 @@ -6,29 +6,33 @@ build_linux: runs-on: ubuntu-latest steps: - - name: Cleanup workspace - uses: AutoModality/action-clean@v1 + - name: 'Wipe workspace' + run: find ./ -mount -maxdepth 1 -exec rm -rf {} \; - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 submodules: true - - uses: satackey/action-docker-layer-caching@v0.0.11 - continue-on-error: true - with: - key: docker-cache-${{ hashFiles('docker/**') }}-{hash} - restore-keys: docker-cache-${{ hashFiles('docker/**') }}- + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - - name: Build docker image - uses: ./.github/actions/docker + - name: Build and push + uses: docker/build-push-action@v5 + with: + push: false + context: docker + tags: qflipper-build:latest + load: true + cache-from: type=gha + cache-to: type=gha,mode=max - name: Build application in docker - run: docker build -t flipp ./docker/ && docker run --rm --privileged -v $(pwd):/project flipp /project/build_linux.sh + run: docker run --rm --privileged -v $(pwd):/project qflipper-build:latest /project/build_linux.sh - name: Publish application - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: qFlipper-x86_64.AppImage path: | @@ -48,7 +52,7 @@ MAC_OS_SIGNING_PASSWORD: ${{ secrets.MAC_OS_SIGNING_PASSWORD }} steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 submodules: true @@ -71,7 +75,7 @@ SIGNING_TOOL: ${{ secrets.WIN_SIGNING_TOOL }} steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 submodules: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/applicationupdater.cpp new/qFlipper-1.3.3+git0.1699609231.bfce851/application/applicationupdater.cpp --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/applicationupdater.cpp 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/application/applicationupdater.cpp 2023-11-10 10:40:31.000000000 +0100 @@ -78,7 +78,7 @@ #if defined(Q_OS_WINDOWS) || defined(Q_OS_MAC) const auto filePath = QDir::temp().absoluteFilePath(fileName); #elif defined(Q_OS_LINUX) - const auto filePath = fileName; + const auto filePath = QDir::current().absoluteFilePath(fileName); #else #error "Unsupported OS" #endif @@ -206,9 +206,7 @@ return mountDmg->error() == QProcess::UnknownError; //Really? no NoError code? #elif defined(Q_OS_LINUX) - const auto info = QFileInfo(path); - const auto success = QProcess::startDetached(info.fileName(), {}, info.absoluteDir().absolutePath()); - + const auto success = QProcess::startDetached(path); if(success) exitApplication(); return success; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/assets/gfx/images/flipper.svg new/qFlipper-1.3.3+git0.1699609231.bfce851/application/assets/gfx/images/flipper.svg --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/assets/gfx/images/flipper.svg 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/application/assets/gfx/images/flipper.svg 2023-11-10 10:40:31.000000000 +0100 @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Generator: Adobe Illustrator 25.4.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg version="1.1" @@ -7,196 +7,110 @@ x="0px" y="0px" viewBox="0 0 360 156" - style="enable-background:new 0 0 360 156;" xml:space="preserve" + width="360" + height="156" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><defs - id="defs104" /> -<style + id="defs24" /> <style type="text/css" - id="style2"> - .st0{fill:url(#SVGID_1_);} - .st1{fill:#FE8A2C;} -</style> -<g - id="g99"> - <linearGradient + id="style1"> .st0{fill:url(#SVGID_1_);} .st1{fill:#FE8A2C;} </style> <g + id="g24" + transform="translate(-2)"> <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" - x1="179.8875" + x1="181.8875" y1="156.4734" - x2="179.8875" - y2="-1.2854"> - <stop + x2="181.8875" + y2="-1.2854"> <stop offset="7.885129e-07" style="stop-color:#3C1A00" - id="stop4" /> - <stop + id="stop1" /> <stop offset="0.5511" style="stop-color:#220F00" - id="stop6" /> - <stop + id="stop2" /> <stop offset="1" style="stop-color:#090400" - id="stop8" /> - </linearGradient> - <path + id="stop3" /> </linearGradient> <path class="st0" - d="M301.3,1.2c0,0-219.9,0-229.7,0s-17,10.3-17,10.3S5.3,75.4,3.2,78.3c-3,4-2.1,14.1,0,17 c5.9,8,34.5,47.1,35.8,48.8c1.4,1.7,7.7,11.1,16.5,11.1s278.7,0,283.5,0c8.7,0,19.6-20.2,19.6-25.2s-0.3-58.9-0.3-64.5 c0-3.7-2.6-8.4-5.1-11.5c-2.3-2.8-35.3-44-38.2-47.5C312.5,3.6,306.8,1.2,301.3,1.2z" - id="path11" /> - <g - id="g15"> - <path - class="st1" - d="M302,3c4.5,0,10,3.3,12,5.7c2.9,3.4,35.3,44,38,47.4c3.1,3.9,4.9,7.5,4.9,9.7v64.5c0,4-10.8,22.7-17.2,22.7 H55.1c-4.5,0-9.3-3.4-14.5-10c-0.2-0.2-0.3-0.4-0.4-0.5c-0.7-0.9-10.1-13.7-18.4-25C14.5,107.6,7,97.4,4.3,93.7 C3,92,2.1,83.3,4.3,80.4c2.1-2.8,51.1-66.1,51.6-66.7l0.1-0.1l0.1-0.1C56.1,13.4,63.2,3,71.3,3H302 M302,0c0,0-220.7,0-230.7,0 c-9.9,0-17.8,11.8-17.8,11.8S4.1,75.7,1.9,78.6c-2.9,4-2.1,14.1,0,17c6,8,34.6,47.1,36,48.8c1.4,1.7,8.5,11.7,17.3,11.7 s279.9,0,284.7,0c8.8,0,20.2-20.8,20.2-25.7s0-58.9,0-64.5c0-3.7-3.1-8.4-5.6-11.5c-2.3-2.8-35.2-44-38.1-47.5 C313.9,3.9,307.6,0,302,0L302,0z" - id="path13" /> - </g> - <g - id="g45"> - <g - id="g19"> - <path - class="st1" - d="M116.3,137l-0.8,5H112l2.1-13H138l-0.5,3h-20.4l-0.3,2.1h17.3l-0.5,3H116.3z" - id="path17" /> - </g> - <g - id="g23"> - <path - class="st1" - d="M143.5,129l-1.6,10H162l-0.5,3H138l2.1-13H143.5z" - id="path21" /> - </g> - <g - id="g27"> - <path - class="st1" - d="M170,129l-2.3,13H164l2.3-13H170z" - id="path25" /> - </g> - <g - id="g31"> - <path - class="st1" - d="M174.7,137l-0.8,5h-3.4l2.1-13h19.9c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.3,0.7,2.1l-0.3,2 c-0.1,0.8-0.6,1.5-1.3,2.1c-0.8,0.6-1.6,0.9-2.6,0.9H174.7z M175.5,132l-0.3,2.1h16.5l0.3-2.1H175.5z" - id="path29" /> - </g> - <g - id="g35"> - <path - class="st1" - d="M200.7,137l-0.8,5h-3.4l2.1-13h19.9c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.3,0.7,2.1l-0.3,2 c-0.1,0.8-0.6,1.5-1.3,2.1c-0.8,0.6-1.6,0.9-2.6,0.9H200.7z M201.5,132l-0.3,2.1h16.5l0.3-2.1H201.5z" - id="path33" /> - </g> - <g - id="g39"> - <path - class="st1" - d="M247.4,139l-0.5,3H223l2.1-13H249l-0.5,3h-20.4l-0.3,2.1h17.9l-0.5,3h-17.9l-0.3,2H247.4z" - id="path37" /> - </g> - <g - id="g43"> - <path - class="st1" - d="M253.7,137l-0.8,5h-3.4l2.1-13h19.9c0.9,0,1.7,0.3,2.3,0.9c0.6,0.6,0.8,1.3,0.7,2.1l-0.3,2 c-0.1,0.4-0.3,0.8-0.7,1.1c-0.3,0.3-0.7,0.4-1.1,0.4c0.4,0,0.7,0.2,1,0.4c0.3,0.3,0.4,0.6,0.3,1l-0.8,5h-3.4l0.8-5H253.7z M270.7,134l0.3-2.1h-16.5l-0.3,2.1H270.7z" - id="path41" /> - </g> - </g> - <g - id="g49"> - <path - class="st1" - d="M221.3,98H92.7C89,98,86,95,86,91.3V25.7c0-3.7,3-6.7,6.7-6.7h128.6c3.7,0,6.7,3,6.7,6.7v65.6 C228,95,225,98,221.3,98z M92.7,20c-3.1,0-5.7,2.6-5.7,5.7v65.6c0,3.1,2.6,5.7,5.7,5.7h128.6c3.1,0,5.7-2.6,5.7-5.7V25.7 c0-3.1-2.6-5.7-5.7-5.7H92.7z" - id="path47" /> - </g> - <g - id="g53"> - <path - class="st1" - d="M274.5,94C254.9,94,239,78.1,239,58.5S254.9,23,274.5,23S310,38.9,310,58.5S294.1,94,274.5,94z M274.5,24 c-19,0-34.5,15.5-34.5,34.5S255.5,93,274.5,93S309,77.5,309,58.5S293.5,24,274.5,24z" - id="path51" /> - </g> - <g - id="g57"> - <path - class="st1" - d="M326.6,94c-6.3,0-11.5-5.2-11.5-11.5S320.2,71,326.6,71s11.5,5.2,11.5,11.5S332.9,94,326.6,94z M326.5,72 c-5.8,0-10.5,4.7-10.5,10.5S320.7,93,326.5,93S337,88.3,337,82.5S332.3,72,326.5,72z" - id="path55" /> - </g> - <g - id="g61"> - <path - class="st1" - d="M328.8,88h-6.4c-0.3,0-0.5-0.2-0.5-0.5v-2c0-0.3,0.2-0.5,0.5-0.5h5.9c0.6,0,1-0.2,1.3-0.6 c0.3-0.4,0.5-0.9,0.5-1.4c0-1-0.5-1.9-1.7-1.9h-4.4v1.5c0,0.2-0.1,0.4-0.3,0.5c-0.2,0.1-0.4,0-0.5-0.1l-2.9-3 c-0.2-0.2-0.2-0.5,0-0.7l2.8-3c0.1-0.1,0.4-0.2,0.5-0.1c0.2,0.1,0.3,0.3,0.3,0.5V78h4.9c2.8,0,4.2,2.5,4.2,5c0,1.3-0.4,2.5-1,3.4 C331.2,87.4,330.1,88,328.8,88z M322.9,87h5.9c1,0,1.8-0.4,2.4-1.2c0.5-0.7,0.8-1.7,0.8-2.8c0-1.9-1-4-3.2-4h-5.4 c-0.3,0-0.5-0.2-0.5-0.5v-0.8l-1.7,1.8l1.7,1.8v-0.8c0-0.3,0.2-0.5,0.5-0.5h4.9c1.8,0,2.7,1.5,2.7,2.9c0,0.8-0.2,1.5-0.7,2 c-0.5,0.6-1.3,1-2.1,1h-5.4V87z" - id="path59" /> - </g> - <g - id="g65"> - <path - class="st1" - d="M274.5,70c-6.3,0-11.5-5.2-11.5-11.5S268.2,47,274.5,47S286,52.2,286,58.5S280.8,70,274.5,70z M274.5,48 c-5.8,0-10.5,4.7-10.5,10.5S268.7,69,274.5,69S285,64.3,285,58.5S280.3,48,274.5,48z" - id="path63" /> - </g> - <g - id="g69"> - <path - class="st1" - d="M279.2,40h-9.3c-0.4,0-0.8-0.2-0.9-0.5c-0.2-0.3-0.2-0.7,0-1.1l4.7-7.9c0.4-0.7,1.5-0.7,1.9,0l4.7,7.9 c0.2,0.3,0.2,0.7,0,1.1C279.9,39.8,279.5,40,279.2,40z M274.5,30.9C274.5,30.9,274.4,31,274.5,30.9l-4.7,7.9c0,0,0,0.1,0,0.1 c0,0,0,0,0.1,0h9.3c0,0,0.1,0,0.1,0c0,0,0-0.1,0-0.1L274.5,30.9C274.6,31,274.5,30.9,274.5,30.9z" - id="path67" /> - </g> - <g - id="g73"> - <path - class="st1" - d="M274.5,87c-0.4,0-0.8-0.2-1-0.5l-4.7-7.9c-0.2-0.3-0.2-0.7,0-1.1c0.2-0.3,0.6-0.5,0.9-0.5h9.3 c0.4,0,0.8,0.2,0.9,0.5c0.2,0.3,0.2,0.7,0,1.1l-4.7,7.9C275.3,86.8,274.9,87,274.5,87z M269.9,78C269.8,78,269.8,78,269.9,78 c-0.1,0.1-0.1,0.1-0.1,0.2l4.7,8.1c0,0.1,0.1,0.1,0.2,0l4.7-8.1c0,0,0-0.1,0-0.1c0,0,0-0.1-0.1-0.1H269.9z" - id="path71" /> - </g> - <g - id="g77"> - <path - class="st1" - d="M294.1,64.2c-0.2,0-0.4,0-0.5-0.1c-0.3-0.2-0.5-0.6-0.5-0.9v-9.3c0-0.4,0.2-0.8,0.5-0.9 c0.3-0.2,0.7-0.2,1.1,0l7.9,4.7c0.3,0.2,0.5,0.6,0.5,1c0,0.4-0.2,0.8-0.5,1l-7.9,4.7C294.4,64.2,294.3,64.2,294.1,64.2z M294.1,53.7C294,53.7,294,53.8,294.1,53.7c-0.1,0-0.1,0.1-0.1,0.1v9.3c0,0,0,0.1,0,0.1c0,0,0.1,0,0.1,0l7.9-4.7c0,0,0,0,0-0.1 c0,0,0-0.1,0-0.1L294.1,53.7C294.1,53.8,294.1,53.7,294.1,53.7z" - id="path75" /> - </g> - <g - id="g81"> - <path - class="st1" - d="M254.9,64.2c-0.2,0-0.4,0-0.5-0.1l-7.9-4.7c-0.3-0.2-0.5-0.6-0.5-1c0-0.4,0.2-0.8,0.5-1l7.9-4.7 c0.3-0.2,0.7-0.2,1.1,0c0.3,0.2,0.5,0.6,0.5,0.9v9.3c0,0.4-0.2,0.8-0.5,0.9C255.3,64.2,255.1,64.2,254.9,64.2z M254.9,53.7 C254.9,53.7,254.9,53.8,254.9,53.7l-7.9,4.7c0,0,0,0,0,0.1c0,0,0,0.1,0,0.1l7.9,4.7c0,0,0.1,0,0.1,0c0,0,0,0,0-0.1v-9.3 C255,53.8,255,53.8,254.9,53.7C255,53.8,255,53.7,254.9,53.7z" - id="path79" /> - </g> - <g - id="g85"> - <path - class="st1" - d="M327.5,98H275c-22.4,0-40-17.1-40-39c0-22,17.9-40,40-40c11.1,0,21.7,4.6,29.3,12.8l33.9,40.8 c4,4.3,3.9,8.7,3.9,11.3l0,0.6C342,90.7,334.1,98,327.5,98z M275,20c-21.5,0-39,17.5-39,39c0,21.3,17.1,38,39,38h52.5 c6,0,13.5-6.9,13.5-12.6l0-0.6c0-2.5,0.1-6.6-3.6-10.6l-33.9-40.8C296.1,24.5,285.7,20,275,20z" - id="path83" /> - </g> - <g - id="g89"> - <path - class="st1" - d="M238.5,98c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5c1.9,0,3.5,1.6,3.5,3.5S240.4,98,238.5,98z M238.5,92 c-1.4,0-2.5,1.1-2.5,2.5c0,1.4,1.1,2.5,2.5,2.5s2.5-1.1,2.5-2.5C241,93.1,239.9,92,238.5,92z" - id="path87" /> - </g> - <g - id="g93"> - <path - class="st1" - d="M339.5,120H70.3c-9.1,0-12.5-3.8-17.7-9.5l-0.6-0.7c-4.9-5.5-11.7-13.5-15.8-18.8c-3.8-4.9-2.3-7.3,0.6-12 l0.2-0.3c1.6-2.5,11.1-16,20.3-29.1c9.2-13,18.7-26.5,20.5-29.3C82.5,13.1,88.5,10,98,10h199.6c3.6,0,8.8,1.7,12,5.5l0.8,0.9 c20.6,24.6,32.3,38.7,34.9,41.9c4.2,5.3,4.8,7.7,4.8,11.4v39.7C350,114.4,345.7,120,339.5,120z M98,11c-9.1,0-14.9,2.9-19.2,9.8 C77,23.6,67.4,37.1,58.2,50.2C49,63.3,39.5,76.8,37.9,79.3l-0.2,0.3c-3,4.7-4.1,6.5-0.7,10.8c4,5.2,10.8,13.2,15.7,18.7l0.6,0.7 c5.1,5.7,8.3,9.2,16.9,9.2h269.2c5.6,0,9.5-5.1,9.5-9.6V69.7c0-3.6-0.7-5.7-4.6-10.8c-2.5-3.2-14.2-17.3-34.8-41.9l-0.8-0.9 c-2.9-3.5-7.9-5.1-11.2-5.1H98z" - id="path91" /> - </g> - <g - id="g97"> - <rect - x="89" - y="22" - class="st1" - width="136" - height="73" - id="rect95" - ry="4" /> - </g> -</g> -</svg> + d="m 303.3,1.2 c 0,0 -219.9,0 -229.7,0 -9.8,0 -17,10.3 -17,10.3 0,0 -49.3,63.9 -51.4,66.8 -3,4 -2.1,14.1 0,17 5.9,8 34.5,47.1 35.8,48.8 1.4,1.7 7.7,11.1 16.5,11.1 8.8,0 278.7,0 283.5,0 8.7,0 19.6,-20.2 19.6,-25.2 0,-5 -0.3,-58.9 -0.3,-64.5 0,-3.7 -2.6,-8.4 -5.1,-11.5 C 352.9,51.2 319.9,10 317,6.5 314.5,3.6 308.8,1.2 303.3,1.2 Z" + id="path3" + style="fill:url(#SVGID_1_)" /> <g + id="g4"> <path + class="st1" + d="m 304,3 c 4.5,0 10,3.3 12,5.7 2.9,3.4 35.3,44 38,47.4 3.1,3.9 4.9,7.5 4.9,9.7 v 64.5 c 0,4 -10.8,22.7 -17.2,22.7 H 57.1 c -4.5,0 -9.3,-3.4 -14.5,-10 -0.2,-0.2 -0.3,-0.4 -0.4,-0.5 -0.7,-0.9 -10.1,-13.7 -18.4,-25 C 16.5,107.6 9,97.4 6.3,93.7 5,92 4.1,83.3 6.3,80.4 8.4,77.6 57.4,14.3 57.9,13.7 L 58,13.6 58.1,13.5 C 58.1,13.4 65.2,3 73.3,3 H 304 m 0,-3 C 304,0 83.3,0 73.3,0 63.4,0 55.5,11.8 55.5,11.8 c 0,0 -49.4,63.9 -51.6,66.8 -2.9,4 -2.1,14.1 0,17 6,8 34.6,47.1 36,48.8 1.4,1.7 8.5,11.7 17.3,11.7 8.8,0 279.9,0 284.7,0 8.8,0 20.2,-20.8 20.2,-25.7 0,-4.9 0,-58.9 0,-64.5 0,-3.7 -3.1,-8.4 -5.6,-11.5 C 354.2,51.6 321.3,10.4 318.4,6.9 315.9,3.9 309.6,0 304,0 Z" + id="path4" /> </g> <g + id="g10"> <polygon + class="st1" + points="118,137 117,137 117,139 116,139 116,142 115,142 115,144 114,144 114,146 117,146 117,144 118,144 118,142 119,142 119,139 120,139 120,137 134,137 134,136 135,136 135,135 136,135 136,134 122.9,134 123,133 124,133 124,131 142,131 142,130 143,130 143,129 144,129 144,128 121,128 121,131 120,131 120,133 119,133 119,135 118,135 " + id="polygon4" /> <path + class="st1" + d="m 148.1,128.1 h 2.9 v 3.9 h -1 v 2 h -1 v 2 h -1 v 2 h -1 v 2 h 14 v 0.9 h -1 v 1 h -1 v 1 h -17 v -2 h 1 v -2 h 1.1 v -2 h 0.9 v -2 h 1 v -2 h 1 v -2 h 1 c 0,0.1 0,-2.8 0.1,-2.8 z" + id="path5" /> <path + class="st1" + d="m 171,128 v 3 h -1 v 2 h -0.9 v 2 h -1 v 2 h -1 v 2 h -1 v 2 h -1 v 1.9 h 2.9 v -2 h 1.1 v -2 h 1 v -2 h 1 v -2 h 1 v -2 h 1 v -1 h 1 V 128 c -0.1,0 -3.1,0 -3.1,0 z" + id="path6" /> <path + class="st1" + d="m 181,128 v 3 h -1 v 2 h -0.9 v 2 h -1 v 2 h -1 v 2 h -1 v 2 h -1 v 1.9 h 2.9 v -2 h 1.1 v -2 h 1 v -2 h 15 V 136 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -2 c -0.1,0 -21.1,0 -21.1,0 z m 15,4 v 1 h -0.9 v 1 H 182 v -1 h 1 v -1 h 1 v -1 h 13 v 1.1 h -1 z" + id="path7" /> <path + class="st1" + d="m 205,128 v 3 h -1 v 2 h -0.9 v 2 h -1 v 2 h -1 v 2 h -1 v 2 h -1 v 1.9 h 2.9 v -2 h 1.1 v -2 h 1 v -2 h 15 V 136 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -2 c -0.1,0 -21.1,0 -21.1,0 z m 15,4 v 1 h -0.9 v 1 H 206 v -1 h 1 v -1 h 1 v -1 h 13 v 1.1 h -1 z" + id="path8" /> <path + class="st1" + d="M 250.9,128.1 H 231 v 3 h -1 v 2 h -1 v 2 h -1 v 2 h -1 v 2 h -1 v 2 h -1 v 1.9 h 18.9 v -1 h 1 v -1 h 1.1 v -1 h -17 v -1.1 h 1 v -2 h 14 v -1 h 1 V 135 h 1 v -1 h -14 v -1 h 1 v -2 h 17 v -1 h 1 c -0.1,0 -0.1,-2 -0.1,-1.9 z" + id="path9" /> <path + class="st1" + d="m 257,128 v 3 h -1 v 2 h -0.9 v 2 h -1 v 2 h -1 v 2 h -1 v 2 h -1 v 1.9 h 2.9 v -2 h 1.1 v -2 h 1 v -2 h 11.1 v 1 h 0.9 v 1 h 1 v 1 h 1 v 1 h 1 v 1 h 1 v 1 h 1 l 0.1,1 h 1 v 1.1 h 1 v 1 h 3 v -0.9 h -1 v -1 h -1 v -1 h -1 v -1 h -1 v -1 h -1 v -1 h -1 v -0.9 h -1 v -1 h -1 v -1 h 1.1 v -1 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -1 h 1 v -1 h 1 V 128 c -0.3,0 -21.3,0 -21.3,0 z m 15,4 v 1 h -0.9 v 1 H 258 v -1 h 1 v -1 h 1 v -1 h 13 v 1.1 h -1 z" + id="path10" /> </g> <g + id="g11"> <path + class="st1" + d="M 223.3,98 H 94.7 C 91,98 88,95 88,91.3 V 25.7 C 88,22 91,19 94.7,19 h 128.6 c 3.7,0 6.7,3 6.7,6.7 v 65.6 c 0,3.7 -3,6.7 -6.7,6.7 z M 94.7,20 C 91.6,20 89,22.6 89,25.7 v 65.6 c 0,3.1 2.6,5.7 5.7,5.7 h 128.6 c 3.1,0 5.7,-2.6 5.7,-5.7 V 25.7 c 0,-3.1 -2.6,-5.7 -5.7,-5.7 z" + id="path11" /> </g> <g + id="g12"> <path + class="st1" + d="M 276.5,94 C 256.9,94 241,78.1 241,58.5 241,38.9 256.9,23 276.5,23 296.1,23 312,38.9 312,58.5 312,78.1 296.1,94 276.5,94 Z m 0,-70.1 c -19,0 -34.6,15.6 -34.6,34.6 0,19 15.6,34.6 34.6,34.6 19,0 34.6,-15.6 34.6,-34.6 0,-19 -15.6,-34.6 -34.6,-34.6 z" + id="path12" /> </g> <g + id="g13"> <path + class="st1" + d="m 328.6,94 c -6.3,0 -11.5,-5.2 -11.5,-11.5 0,-6.3 5.1,-11.5 11.5,-11.5 6.4,0 11.4,5.2 11.4,11.5 0,6.3 -5.1,11.5 -11.4,11.5 z m -0.1,-22.1 c -5.8,0 -10.6,4.8 -10.6,10.6 0,5.8 4.8,10.6 10.6,10.6 5.8,0 10.6,-4.8 10.6,-10.6 0,-5.8 -4.8,-10.6 -10.6,-10.6 z" + id="path13" /> </g> <g + id="g14"> <path + class="st1" + d="m 330.8,88 h -6.4 c -0.3,0 -0.3,-0.2 -0.3,-0.5 v -2 c 0,-0.3 0,-0.4 0.3,-0.4 h 5.9 c 0.6,0 1.1,-0.3 1.4,-0.7 0.3,-0.4 0.5,-0.9 0.5,-1.4 0,-1 -0.5,-2 -1.6,-2 H 326 l -0.1,1.6 c 0,0.2 -0.1,0.4 -0.3,0.5 -0.2,0.1 -0.4,0 -0.5,-0.1 l -2.9,-3 c -0.2,-0.2 -0.2,-0.5 0,-0.7 l 2.8,-3 c 0.1,-0.1 0.4,-0.2 0.5,-0.1 0.2,0.1 0.3,0.3 0.3,0.5 V 78 h 4.9 c 2.8,0 4.2,2.5 4.2,5 0,1.3 -0.4,2.5 -1,3.4 -0.7,1 -1.8,1.6 -3.1,1.6 z m -5.9,-1 h 5.9 c 1,0 1.8,-0.4 2.4,-1.2 0.5,-0.7 0.9,-1.7 0.9,-2.8 0,-1.9 -0.8,-4 -3.2,-4 h -5.4 c -0.3,0 -0.6,-0.2 -0.6,-0.5 v -0.8 l -1.7,1.8 1.7,1.8 v -0.8 c 0,-0.3 0.2,-0.5 0.5,-0.5 h 4.9 c 1.5,0 2.6,1.5 2.6,3 0,0.8 -0.1,1.4 -0.5,1.9 -0.5,0.6 -1.3,1 -2.1,1 h -5.4 z" + id="path14" /> </g> <g + id="g15"> <path + class="st1" + d="M 276.5,70 C 270.2,70 265,64.8 265,58.5 265,52.2 270.2,47 276.5,47 c 6.3,0 11.5,5.2 11.5,11.5 0,6.3 -5.2,11.5 -11.5,11.5 z m 0,-22 c -5.8,0 -10.5,4.8 -10.5,10.6 0,5.8 4.8,10.5 10.5,10.5 5.7,0 10.5,-4.8 10.5,-10.6 C 287,52.7 282.3,48 276.5,48 Z" + id="path15" /> </g> <g + id="g16"> <path + class="st1" + d="m 281.2,40 h -9.3 c -0.4,0 -0.8,-0.2 -0.9,-0.5 -0.2,-0.3 -0.2,-0.7 0,-1.1 l 4.7,-7.9 c 0.4,-0.7 1.5,-0.7 1.9,0 l 4.7,7.9 c 0.2,0.3 0.2,0.7 0,1.1 -0.4,0.3 -0.8,0.5 -1.1,0.5 z m -4.7,-9.1 c 0,0 -0.1,0.1 0,0 l -4.7,7.9 c 0,0 0,0.1 0,0.1 0,0 0,0 0.1,0 h 9.3 c 0,0 0.1,0 0.1,0 0,0 0,-0.1 0,-0.1 l -4.8,-7.9 c 0.1,0.1 0,0 0,0 z" + id="path16" /> </g> <g + id="g17"> <path + class="st1" + d="m 276.5,87 c -0.4,0 -0.8,-0.2 -1,-0.5 l -4.7,-7.9 c -0.2,-0.3 -0.2,-0.7 0,-1.1 0.2,-0.3 0.6,-0.5 0.9,-0.5 h 9.3 c 0.4,0 0.8,0.2 0.9,0.5 0.2,0.3 0.2,0.7 0,1.1 l -4.7,7.9 c 0.1,0.3 -0.3,0.5 -0.7,0.5 z m -4.6,-9 c -0.1,0 -0.1,0 0,0 -0.1,0.1 -0.1,0.1 -0.1,0.2 l 4.7,8.1 c 0,0.1 0.1,0.1 0.2,0 l 4.7,-8.1 c 0,0 0,-0.1 0,-0.1 0,0 0,-0.1 -0.1,-0.1 z" + id="path17" /> </g> <g + id="g18"> <path + class="st1" + d="m 296.1,64.2 c -0.2,0 -0.4,0 -0.5,-0.1 -0.3,-0.2 -0.5,-0.6 -0.5,-0.9 v -9.3 c 0,-0.4 0.2,-0.8 0.5,-0.9 0.3,-0.2 0.7,-0.2 1.1,0 l 7.9,4.7 c 0.3,0.2 0.5,0.6 0.5,1 0,0.4 -0.2,0.8 -0.5,1 l -7.9,4.7 c -0.3,-0.2 -0.4,-0.2 -0.6,-0.2 z m 0,-10.5 c -0.1,0 -0.1,0.1 0,0 -0.1,0 -0.1,0.1 -0.1,0.1 v 9.3 c 0,0 0,0.1 0,0.1 0,0 0.1,0 0.1,0 l 7.9,-4.7 c 0,0 0,0 0,-0.1 0,0 0,-0.1 0,-0.1 l -7.9,-4.6 c 0,0.1 0,0 0,0 z" + id="path18" /> </g> <g + id="g19"> <path + class="st1" + d="m 256.9,64.2 c -0.2,0 -0.4,0 -0.5,-0.1 l -7.9,-4.7 c -0.3,-0.2 -0.5,-0.6 -0.5,-1 0,-0.4 0.2,-0.8 0.5,-1 l 7.9,-4.7 c 0.3,-0.2 0.7,-0.2 1.1,0 0.3,0.2 0.5,0.6 0.5,0.9 v 9.3 c 0,0.4 -0.2,0.8 -0.5,0.9 -0.2,0.4 -0.4,0.4 -0.6,0.4 z m 0,-10.5 c 0,0 0,0.1 0,0 l -7.9,4.7 c 0,0 0,0 0,0.1 0,0 0,0.1 0,0.1 l 7.9,4.7 c 0,0 0.1,0 0.1,0 0,0 0,0 0,-0.1 v -9.3 c 0,-0.1 0,-0.1 -0.1,-0.2 0.1,0.1 0.1,0 0,0 z" + id="path19" /> </g> <g + id="g20"> <path + class="st1" + d="M 329.5,98 H 277 c -22.4,0 -40,-17.1 -40,-39 0,-22 17.9,-40 40,-40 11.1,0 21.7,4.6 29.3,12.8 l 33.9,40.8 c 4,4.3 3.9,8.7 3.9,11.3 v 0.6 C 344,90.7 336.1,98 329.5,98 Z M 277,19.9 c -21.5,0 -39.1,17.6 -39.1,39.1 0,21.3 17.2,38 39,38 h 52.5 c 6,0 13.6,-7 13.6,-12.6 v -0.6 c 0,-2.5 0,-6.5 -3.7,-10.6 L 305.4,32.4 C 298.1,24.5 287.8,19.9 277,19.9 Z" + id="path20" /> </g> <g + id="g21"> <path + class="st1" + d="m 240.5,98 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z m 0,-6 c -1.4,0 -2.5,1.1 -2.5,2.5 0,1.4 1.1,2.5 2.5,2.5 1.4,0 2.5,-1.1 2.5,-2.5 0,-1.4 -1.1,-2.5 -2.5,-2.5 z" + id="path21" /> </g> <g + id="g22"> <path + class="st1" + d="M 341.5,120 H 72.3 c -9.1,0 -12.5,-3.8 -17.7,-9.5 L 54,109.8 C 49.1,104.3 42.3,96.3 38.2,91 34.4,86.1 35.9,83.7 38.8,79 L 39,78.7 C 40.6,76.2 50.1,62.7 59.3,49.6 68.5,36.6 78,23.1 79.8,20.3 84.5,13.1 90.5,10 100,10 h 199.6 c 3.6,0 8.8,1.7 12,5.5 l 0.8,0.9 c 20.6,24.6 32.3,38.7 34.9,41.9 4.2,5.3 4.8,7.7 4.8,11.4 v 39.7 c -0.1,5 -4.4,10.6 -10.6,10.6 z M 100,11 C 90.9,11 85.1,13.9 80.8,20.8 79,23.6 69.4,37.1 60.2,50.2 51,63.3 41.5,76.8 39.9,79.3 l -0.2,0.3 c -3,4.7 -4.1,6.5 -0.7,10.8 4,5.2 10.8,13.2 15.7,18.7 l 0.6,0.7 c 5.1,5.7 8.3,9.3 16.9,9.3 h 269.2 c 5.6,0 9.5,-5.1 9.5,-9.7 V 69.7 c 0,-3.6 -0.7,-5.7 -4.6,-10.8 C 343.8,55.7 332.1,41.6 311.5,17 l -0.8,-0.9 C 307.8,12.6 302.8,11 299.5,11 Z" + id="path22" /> </g> <g + id="g23"> <path + class="st1" + d="M 222.7,95 H 95.3 C 92.9,95 91,93.1 91,90.7 V 26.3 C 91,23.9 92.9,22 95.3,22 h 127.4 c 2.4,0 4.3,1.9 4.3,4.3 v 64.4 c 0,2.4 -1.9,4.3 -4.3,4.3 z" + id="path23" /> </g> </g> </svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/components/FileManagerDelegate.qml new/qFlipper-1.3.3+git0.1699609231.bfce851/application/components/FileManagerDelegate.qml --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/components/FileManagerDelegate.qml 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/application/components/FileManagerDelegate.qml 2023-11-10 10:40:31.000000000 +0100 @@ -305,6 +305,8 @@ } function commitEdit() { + if(!editBox.visible) return; + const oldName = delegate.fileName; const newName = nameEdit.text; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/components/FinishOverlay.qml new/qFlipper-1.3.3+git0.1699609231.bfce851/application/components/FinishOverlay.qml --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/components/FinishOverlay.qml 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/application/components/FinishOverlay.qml 2023-11-10 10:40:31.000000000 +0100 @@ -125,11 +125,13 @@ case BackendError.InternetError: return ErrorStrings.errorInternet case BackendError.InvalidDevice: - return ErrorStrings.errorInvalidDevice + return Qt.platform.os === "linux" ? ErrorStrings.errorInvalidDeviceLinux : + ErrorStrings.errorInvalidDevice case BackendError.DiskError: return ErrorStrings.errorDisk case BackendError.SerialAccessError: - return Qt.platform.os === "linux" ? ErrorStrings.errorSerialLinux : ErrorStrings.errorSerial + return Qt.platform.os === "linux" ? ErrorStrings.errorSerialLinux : + ErrorStrings.errorSerial case BackendError.RecoveryAccessError: return Qt.platform.os === "linux" ? ErrorStrings.errorRecoveryLinux : Qt.platform.os === "windows" ? ErrorStrings.errorRecoveryWindows : diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/components/TextBox.qml new/qFlipper-1.3.3+git0.1699609231.bfce851/application/components/TextBox.qml --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/components/TextBox.qml 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/application/components/TextBox.qml 2023-11-10 10:40:31.000000000 +0100 @@ -17,6 +17,12 @@ color: "black" border.color: Theme.color.lightorange2 + MouseArea { + id: mouseArea + anchors.fill: content + cursorShape: content.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor + } + Text { id: content @@ -36,6 +42,8 @@ wrapMode: Text.Wrap textFormat: Text.RichText - onLinkActivated: Qt.openUrlExternally(link) + onLinkActivated: function(link) { + Qt.openUrlExternally(link) + } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/imports/Misc/ErrorStrings.qml new/qFlipper-1.3.3+git0.1699609231.bfce851/application/imports/Misc/ErrorStrings.qml --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/imports/Misc/ErrorStrings.qml 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/application/imports/Misc/ErrorStrings.qml 2023-11-10 10:40:31.000000000 +0100 @@ -14,7 +14,17 @@ <p>2. Reconnect your Flipper.</p> <p>3. If the problem persists, reboot Flipper into RECOVERY MODE and click REPAIR to perform a clean installation.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" + + readonly property string errorInvalidDeviceLinux: +"<p>Device cannot be recognized.</p> +<p>=========== HOW TO FIX ============</p> +<p>1. Disconnect all other similar devices from this computer.</p> +<p>2. Grant user permissions to access Serial devices.</p> +<p>Run \"./qFlipper-x86_64-%1.AppImage rules install\" to do so automatically.</p> +<p>3. If the problem persists, reboot Flipper into RECOVERY MODE and click REPAIR to perform a clean installation.</p> +<p>-----------------------------------</p> +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>".arg(App.version) readonly property string errorSerial: "<p>Cannot connect to Flipper. Device is busy.</p> @@ -22,7 +32,7 @@ <p>1. Ensure that Flipper is not connected via Bluetooth or Terminal session.</p> <p>2. Reconnect your Flipper.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" readonly property string errorSerialLinux: "<p>Cannot connect to Flipper. Device is busy.</p> @@ -32,7 +42,7 @@ <p>Run \"./qFlipper-x86_64-%1.AppImage rules install\" to do so automatically.</p> <p>3. Reconnect your Flipper.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>".arg(App.version) +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>".arg(App.version) readonly property string errorRecovery: "<p>Cannot connect to Flipper in Update & Recovery mode. Device not found.</p> @@ -41,7 +51,7 @@ <p>2. Reconnect your Flipper.</p> <p>3. Reboot Flipper to Flipper OS and try again.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" readonly property string errorRecoveryWindows: "<p>Cannot connect to Flipper in Update & Recovery mode. Device not found.</p> @@ -51,7 +61,7 @@ <p>3. Reinstall qFlipper to update DFU device driver.</p> <p>4. Reboot Flipper to Flipper OS and try again.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" readonly property string errorRecoveryLinux: "<p>Cannot connect to Flipper in Update & Recovery mode. Device not found.</p> @@ -62,7 +72,7 @@ <p>Run \"./qFlipper-x86_64-%1.AppImage rules install\" to do so automatically.</p> <p>4. Reboot Flipper to Flipper OS and try again.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>".arg(App.version) +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>".arg(App.version) readonly property string errorInternet: "<p>Cannot connect to update server.</p> @@ -71,7 +81,7 @@ <p>2. Ensure that the update server is not down.</p> <p>3. Try updating again.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" readonly property string errorDisk: "<p>Canât save or read files to/from the local filesystem.</p> @@ -80,7 +90,7 @@ <p>2. Check that qFlipper has permissions to write on disk.</p> <p>3. When applicable, make sure to point qFlipper to the right files/directores.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" readonly property string errorBackup: "<p>Canât get data from Flipper. This may be caused by an internal error.</p> @@ -89,7 +99,7 @@ <p>2. Reboot your Flipper and reconnect via USB.</p> <p>3. Run the operation again.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" readonly property string errorData: "<p>Necessary data seems to be damaged.</p> @@ -98,7 +108,7 @@ <p>2. Reboot your Flipper and reconnect via USB.</p> <p>3. Run the operation again.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" readonly property string errorOperation: "<p>Current operation was interrupted. Connection to device is lost.</p> @@ -107,7 +117,7 @@ <p>2. Ensure that Flipper is not locked with PIN code.</p> <p>3. Connect your Flipper in Update & Recovery mode and start repair.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" readonly property string errorUpdater: "<p>Firmware update could not be started.</p> @@ -117,7 +127,7 @@ <p>3. Try again.</p> <p>4. If the error persists, file a bug report.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" readonly property string errorUnknown: "<p>An unknown error has occurred.</p> @@ -127,5 +137,5 @@ <p>3. Try again.</p> <p>4. If the error persists, file a bug report.</p> <p>-----------------------------------</p> -<center><a href='https://docs.flipperzero.one/'>READ MORE</a></center>" +<center><a href='https://docs.flipper.net/'>READ MORE</a></center>" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/screencanvas.cpp new/qFlipper-1.3.3+git0.1699609231.bfce851/application/screencanvas.cpp --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/screencanvas.cpp 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/application/screencanvas.cpp 2023-11-10 10:40:31.000000000 +0100 @@ -11,7 +11,8 @@ m_foreground(QColor(0x00, 0x00, 0x00)), m_background(QColor(0xFF, 0xFF, 0xFF)), m_canvas(QImage(1, 1, QImage::Format_RGB32)), - m_zoomFactor(1.0) + m_zoomFactor(1.0), + m_orientation(Qt::LandscapeOrientation) { connect(this, &ScreenCanvas::zoomFactorChanged, this, &ScreenCanvas::updateImplicitSize); connect(this, &ScreenCanvas::canvasSizeChanged, this, &ScreenCanvas::updateImplicitSize); @@ -30,6 +31,7 @@ } setCanvasSize(frame.size); + setCanvasOrientation(frame.orientation); for (auto x = 0; x < m_canvas.width(); x++) { for (auto y = 0; y < m_canvas.height(); y++) { @@ -37,9 +39,7 @@ const auto z = y % 8; const auto color = ((frame.pixelData.at(i) & (1 << z))) ? m_foreground : m_background; - m_canvas.setPixelColor(frame.isFlipped ? m_canvas.width() - x - 1 : x, - frame.isFlipped ? m_canvas.height() - y - 1 : y, - color); + m_canvas.setPixelColor(x, y, color); } } @@ -48,27 +48,8 @@ void ScreenCanvas::paint(QPainter *painter) { - const auto bw = boundingRect().width(); - const auto bh = boundingRect().height(); - const auto aspectRatio = (double)m_canvas.width() / m_canvas.height(); - - auto w = bw; - auto h = floor(w / aspectRatio); - - if(h > bh) { - h = bh; - w = bh * aspectRatio; - } - - w -= ((int)w % m_canvas.width()); - h -= ((int)h % m_canvas.height()); - - const auto dw = (bw - w) / 2; - const auto dh = (bh - h) / 2; - - const QRectF canvasRect(dw, dh, w, h); - painter->drawImage(canvasRect, m_canvas); + painter->drawImage(canvasRect(), m_canvas.transformed(canvasTransform())); } qreal ScreenCanvas::zoomFactor() const @@ -144,11 +125,83 @@ emit canvasSizeChanged(); } +void ScreenCanvas::setCanvasOrientation(Qt::ScreenOrientation orientation) +{ + m_orientation = orientation; +} + +QTransform ScreenCanvas::canvasTransform() const +{ + switch (m_orientation) { + case Qt::InvertedLandscapeOrientation: + return QTransform().rotate(180); + case Qt::PortraitOrientation: + return QTransform().rotate(isLandscapeOnly() ? 0 : 90); + case Qt::InvertedPortraitOrientation: + return QTransform().rotate(isLandscapeOnly() ? 180 : -90); + case Qt::LandscapeOrientation: + default: + return QTransform(); + } +} + +QRectF ScreenCanvas::canvasRect() const +{ + const auto totalWidth = boundingRect().width(); + const auto totalHeight = boundingRect().height(); + + const auto isRegular = isLandscapeOrientation() || isLandscapeOnly(); + + const auto canvasWidth = isRegular ? m_canvas.width() : m_canvas.height(); + const auto canvasHeight = isRegular ? m_canvas.height() : m_canvas.width(); + + const auto aspectRatio = static_cast<qreal>(canvasWidth) / canvasHeight; + + auto drawWidth = totalWidth; + auto drawHeight = floor(drawWidth / aspectRatio); + + if(drawHeight > totalHeight) { + drawHeight = totalHeight; + drawWidth = totalHeight * aspectRatio; + } + + if(drawWidth > canvasWidth) { + drawWidth -= (static_cast<int>(drawWidth) % canvasWidth); + } + + if(drawHeight > canvasHeight) { + drawHeight -= (static_cast<int>(drawHeight) % canvasHeight); + } + + const auto offsetX = (totalWidth - drawWidth) / 2; + const auto offsetY = (totalHeight - drawHeight) / 2; + + return QRectF(offsetX, offsetY, drawWidth, drawHeight); +} + +QSize ScreenCanvas::canvasSize() const +{ + return QSize(isLandscapeOrientation() ? m_canvas.width() : m_canvas.height(), + isLandscapeOrientation() ? m_canvas.height() : m_canvas.width()); +} + +bool ScreenCanvas::isLandscapeOrientation() const +{ + return m_orientation == Qt::LandscapeOrientation || + m_orientation == Qt::InvertedLandscapeOrientation; +} + +bool ScreenCanvas::isLandscapeOnly() const +{ + return (boundingRect().width() < canvasSize().width()) || + (boundingRect().height() < canvasSize().height()); +} + const QImage ScreenCanvas::canvas(int scale) const { if(scale == 0) { - return m_canvas.scaled(m_canvas.width() * m_zoomFactor, m_canvas.height() * m_zoomFactor); + return m_canvas.scaled(m_canvas.width() * m_zoomFactor, m_canvas.height() * m_zoomFactor).transformed(canvasTransform()); } else { - return m_canvas.scaled(m_canvas.width() * scale, m_canvas.height() * scale); + return m_canvas.scaled(m_canvas.width() * scale, m_canvas.height() * scale).transformed(canvasTransform()); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/screencanvas.h new/qFlipper-1.3.3+git0.1699609231.bfce851/application/screencanvas.h --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/application/screencanvas.h 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/application/screencanvas.h 2023-11-10 10:40:31.000000000 +0100 @@ -49,12 +49,21 @@ private: void setCanvasSize(const QSize &size); + void setCanvasOrientation(Qt::ScreenOrientation orientation); -const QImage canvas(int scale = 0) const; + QTransform canvasTransform() const; + QRectF canvasRect() const; + QSize canvasSize() const; + + bool isLandscapeOrientation() const; + bool isLandscapeOnly() const; + + const QImage canvas(int scale = 0) const; QColor m_foreground; QColor m_background; QImage m_canvas; qreal m_zoomFactor; + Qt::ScreenOrientation m_orientation; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/flipperupdates.cpp new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/flipperupdates.cpp --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/flipperupdates.cpp 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/flipperupdates.cpp 2023-11-10 10:40:31.000000000 +0100 @@ -6,21 +6,24 @@ #include <QJsonArray> #include <QJsonObject> -#include "debug.h" - using namespace Flipper::Updates; -FileInfo::FileInfo(const QJsonValue &val) +FileInfo::FileInfo(): + m_isValid(false) +{} + +FileInfo::FileInfo(const QJsonValue &val): + FileInfo() { if(!val.isObject()) { throw std::runtime_error("Expected FileInfo to be an object"); } const auto &json = val.toObject(); - const auto canConstruct = json.contains("target") && json.contains("type") && + m_isValid = json.contains("target") && json.contains("type") && json.contains("url") && json.contains("sha256"); - if(!canConstruct) { + if(!m_isValid) { throw std::runtime_error("Malformed FileInfo"); } @@ -50,6 +53,11 @@ return m_sha256; } +bool FileInfo::isValid() const +{ + return m_isValid; +} + VersionInfo::VersionInfo(const QJsonValue &val) { if(!val.isObject()) { @@ -103,8 +111,7 @@ return (arg.type() == type) && (target == arg.target()); }); - check_return_val(it != m_files.cend(), "FileInfo not found", FileInfo()); - return *it; + return (it != m_files.cend()) ? *it : FileInfo(); } qint64 VersionInfo::compare(const VersionInfo &other) const diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/flipperupdates.h new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/flipperupdates.h --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/flipperupdates.h 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/flipperupdates.h 2023-11-10 10:40:31.000000000 +0100 @@ -15,7 +15,7 @@ Q_GADGET public: - FileInfo() = default; + FileInfo(); FileInfo(const QJsonValue &val); const QString &target() const; @@ -23,11 +23,14 @@ const QString &url() const; const QByteArray &sha256() const; + bool isValid() const; + private: QString m_target; QString m_type; QString m_url; QByteArray m_sha256; + bool m_isValid; }; class VersionInfo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/flipperzero/helper/firmwarehelper.cpp new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/flipperzero/helper/firmwarehelper.cpp --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/flipperzero/helper/firmwarehelper.cpp 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/flipperzero/helper/firmwarehelper.cpp 2023-11-10 10:40:31.000000000 +0100 @@ -160,12 +160,24 @@ void FirmwareHelper::fetchAssets() { m_deviceState->setStatusString(QStringLiteral("Fetching databases...")); - const auto &fileInfo = m_versionInfo.fileInfo(QStringLiteral("resources_tgz"), QStringLiteral("any")); + + const auto type = QStringLiteral("resources_tgz"); + auto fileInfo = m_versionInfo.fileInfo(type, m_deviceState->deviceInfo().hardware.target); + + if(!fileInfo.isValid()) { + fileInfo = m_versionInfo.fileInfo(type, QStringLiteral("any")); + } + fetchFile(FileIndex::AssetsTgz, fileInfo); } void FirmwareHelper::fetchFile(FileIndex index, const Updates::FileInfo &fileInfo) { + if(!fileInfo.isValid()) { + finishWithError(BackendError::DataError, QStringLiteral("File info invalid (missing target?)")); + return; + } + const auto fileName = QUrl(fileInfo.url()).fileName(); auto *file = globalTempDirs->createFile(fileName, this); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/flipperzero/recovery.cpp new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/flipperzero/recovery.cpp --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/flipperzero/recovery.cpp 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/flipperzero/recovery.cpp 2023-11-10 10:40:31.000000000 +0100 @@ -163,7 +163,7 @@ end_ignore_block(); } else { - error_msg("Unexpected FUS state."); + setErrorString("Can't start FUS: Unexpected FUS state."); success = false; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/flipperzero/screenstreamer.cpp new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/flipperzero/screenstreamer.cpp --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/flipperzero/screenstreamer.cpp 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/flipperzero/screenstreamer.cpp 2023-11-10 10:40:31.000000000 +0100 @@ -61,7 +61,7 @@ setScreenFrame({ transposeImage(QByteArray((char*)default_bits, sizeof(default_bits)), default_width, default_height), QSize(SCREEN_FRAME_WIDTH, SCREEN_FRAME_HEIGHT), - false + Qt::LandscapeOrientation, }); if(device) { @@ -179,7 +179,7 @@ setScreenFrame({ screenFrameResponse->screenFrame(), QSize(SCREEN_FRAME_WIDTH, SCREEN_FRAME_HEIGHT), - screenFrameResponse->screenOrientation() == GuiScreenFrameResponseInterface::HorizontalFlip + screenFrameResponse->screenOrientation(), }); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/screenframe.h new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/screenframe.h --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/backend/screenframe.h 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/backend/screenframe.h 2023-11-10 10:40:31.000000000 +0100 @@ -7,7 +7,7 @@ struct ScreenFrame { QByteArray pixelData; QSize size; - bool isFlipped; + Qt::ScreenOrientation orientation; }; Q_DECLARE_METATYPE(ScreenFrame) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/installer-assets/appimage/AppRun new/qFlipper-1.3.3+git0.1699609231.bfce851/installer-assets/appimage/AppRun --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/installer-assets/appimage/AppRun 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/installer-assets/appimage/AppRun 2023-11-10 10:40:31.000000000 +0100 @@ -6,7 +6,7 @@ export QT_QPA_PLATFORMTHEME=xdgdesktopportal THIS_DIR="$(readlink -f "$(dirname "$0")")" -APPIMAGE_NAME="$(basename $APPIMAGE)" +APPIMAGE_NAME="$(basename "$APPIMAGE")" RULES_FILE_NAME='42-flipperzero.rules' RULES_DIR=${3:-'/etc/udev/rules.d'} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/installer-assets/udev/42-flipperzero.rules new/qFlipper-1.3.3+git0.1699609231.bfce851/installer-assets/udev/42-flipperzero.rules --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/installer-assets/udev/42-flipperzero.rules 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/installer-assets/udev/42-flipperzero.rules 2023-11-10 10:40:31.000000000 +0100 @@ -4,3 +4,5 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", ATTRS{manufacturer}=="STMicroelectronics", TAG+="uaccess", GROUP="dialout" #Flipper ESP32s2 BlackMagic SUBSYSTEMS=="usb", ATTRS{idVendor}=="303a", ATTRS{idProduct}=="40??", ATTRS{manufacturer}=="Flipper Devices Inc.", TAG+="uaccess", GROUP="dialout" +#Flipper U2F +SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5741", ATTRS{manufacturer}=="Flipper Devices Inc.", ENV{ID_SECURITY_TOKEN}="1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/plugins/flipperproto0/guiresponse.cpp new/qFlipper-1.3.3+git0.1699609231.bfce851/plugins/flipperproto0/guiresponse.cpp --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/plugins/flipperproto0/guiresponse.cpp 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/plugins/flipperproto0/guiresponse.cpp 2023-11-10 10:40:31.000000000 +0100 @@ -10,17 +10,17 @@ return QByteArray((const char*)f->bytes, f->size); } -GuiScreenFrameResponseInterface::ScreenOrientation GuiScreenFrameResponse::screenOrientation() const +Qt::ScreenOrientation GuiScreenFrameResponse::screenOrientation() const { switch(message().content.gui_screen_frame.orientation) { case PB_Gui_ScreenOrientation_HORIZONTAL_FLIP: - return ScreenOrientation::HorizontalFlip; + return Qt::InvertedLandscapeOrientation; case PB_Gui_ScreenOrientation_VERTICAL: - return ScreenOrientation::Vertical; + return Qt::PortraitOrientation; case PB_Gui_ScreenOrientation_VERTICAL_FLIP: - return ScreenOrientation::VerticalFlip; + return Qt::InvertedPortraitOrientation; case PB_Gui_ScreenOrientation_HORIZONTAL: default: - return ScreenOrientation::Horizontal; + return Qt::LandscapeOrientation; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/plugins/flipperproto0/guiresponse.h new/qFlipper-1.3.3+git0.1699609231.bfce851/plugins/flipperproto0/guiresponse.h --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/plugins/flipperproto0/guiresponse.h 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/plugins/flipperproto0/guiresponse.h 2023-11-10 10:40:31.000000000 +0100 @@ -11,5 +11,5 @@ public: GuiScreenFrameResponse(MessageWrapper &wrapper, QObject *parent = nullptr); const QByteArray screenFrame() const override; - ScreenOrientation screenOrientation() const override; + Qt::ScreenOrientation screenOrientation() const override; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/plugins/protobufinterface/guiresponseinterface.h new/qFlipper-1.3.3+git0.1699609231.bfce851/plugins/protobufinterface/guiresponseinterface.h --- old/qFlipper-1.3.1~rc1+git1.1684488882.0199220/plugins/protobufinterface/guiresponseinterface.h 2023-05-19 11:34:42.000000000 +0200 +++ new/qFlipper-1.3.3+git0.1699609231.bfce851/plugins/protobufinterface/guiresponseinterface.h 2023-11-10 10:40:31.000000000 +0100 @@ -6,15 +6,8 @@ class GuiScreenFrameResponseInterface { public: - enum ScreenOrientation { - Horizontal, - HorizontalFlip, - Vertical, - VerticalFlip, - }; - virtual const QByteArray screenFrame() const = 0; - virtual ScreenOrientation screenOrientation() const = 0; + virtual Qt::ScreenOrientation screenOrientation() const = 0; }; QT_BEGIN_NAMESPACE