Git Product home page Git Product logo

patchmanager's Introduction

Patchmanager for SailfishOS

Patchmanager is a tool for transparently modifying installed files by the patch utility and for managing the special patch files ("Patches") for doing so. Since version 3.0, Patchmanager does not modify original files on mass storage, it merely alters their content when they are loaded into RAM to be executed.

Information for users

Note that Patchmanager does not install an application icon on the launcher, but creates a new entry in SailfishOS' Settings app.

To install a recent Patchmanager the SailfishOS:Chum community repository can be used, which is easily accessed with the SailfishOS:Chum GUI application, which in turn can be installed via the SailfishOS:Chum GUI Installer. Alternatively Patchmanager can be installed from its OpenRepos repository using Storeman, which can be installed via the Storeman Installer. While these two sources can also be used to manually download and install Patchmanager, you may alternatively obtain Patchmanager RPMs from its releases page at GitHub. Note that the Patchmanager's OpenRepos repository and GitHub releases page also offer the final releases of Patchmanager 3.0 for SailfishOS < 3.4.0 and Patchmanager 2.3.3 for SailfishOS < 2.2.x.

Modern Patches for Patchmanager 3 are provided via the Web Catalog, while older Patches were provided as RPMs at OpenRepos and some of them are still maintained. Mind that many Patches were first released at OpenRepos but later migrated to the Web Catalog: For these you will find outdated RPMs, hence always search in the Web Catalog first.

If you want to translate ("localise") Patchmanager to a language you know well or enhance an existing translation, please read Patchmanager's corresponding Wiki page Translations ("i18n", "l10n").

Information for Patch developers

To create a Patch for Patchmanager, you must at least provide a patch file. If you package your Patch as an RPM or archive file, you must also provide the JSON metadata: see below. If you use the Web Catalog to distribute your Patch, you must not provide a JSON file, but input the corresponding data when submitting the patch file to the Web Catalog.

patch files

A patch file must be a diff of all the files to be patched in the filesystem. It will be applied on the root of the filesystem, with the -p1 flag. It must be named unified_diff.patch.

Usually, you can generate such patch file using the following command, with the directories original and patched containing the original and modified files: diff -ur original/ patched/ > unified_diff.patch

The JSON metadata file

The metadata file contains information about a Patch. It is a simple JSON file, that must be named patch.json. This file contains the title of the Patch, a short description of the Patch, a category, and additional information. For the documentation of this JSON file format see:

Either format is supported, but the modern one provides more useful features and is recommended.

Additional files

Patchmanager starting from version 2.0 can utilise additional files to provide an enhanced user experience. All these files must be placed in the same folder.

  • main.qml - A QML page with some additional information about a patch and / or its configuration. It will be shown when user taps on the patch entry inside Patchmanager.
  • main.png or main.svg - An icon for the patch, which will be displayed on the list of patches, on the right side after the patch name.
  • translation_<LANG_CODE>.qm - Translation files for the QML page, to enable patch developers to translate texts to various languages.
  • Any .qml, .js, .png files used by the QML page may be added.

Patch distribution using Patchmanager's Web Catalog

Patchmanager supports installing Patches from its Web Catalog. Patch developers can upload Patches as archive files (.zip, .tar.gz, .tar.bz2 or .tar.xz) at https://coderus.openrepos.net/pm2 to enlist them for the Web Catalog. When uploading a Patch there, the Patch developer should not provide a patch.json file with metadata and must fill the necessary fields on the web-page before uploading: The Web Catalog will encode this metadata automatically and add it to the downloadable file. Side note: If a JSON file is provided in the upload at the Web Catalog, it does not replace or mangle it; pay attention not to provide inconsistent data this way!

For more information about the requirements for uploading Patches to the Web Catalog, see https://coderus.openrepos.net/pm2/usage/

Patch distribution at OpenRepos.net and other RPM repositories

Patches can be too complex for Patchmanager's Web Catalog. In this case the developer may package the Patch as an RPM and upload it at https://openrepos.net or another user-accessible package repository. OpenRepos provides a category "Patches" and a tag "Patch" for this, which both should be used.

For RPM Patches, the patch file (unified_diff.patch) shall be installed in a directory /usr/share/patchmanager/patches/<patch-name>/; its additional files for this patch shall also be placed there.

Additionaly, if a Patch developer decides to package a Patch as an RPM, the compatibility of a Patch (to SailfishOS release versions, the software infrastructure it uses etc.) shall be properly defined by RPM spec file dependencies ("Requires:", "Conflicts:" etc.).

For an RPM Patch example, see https://github.com/CODeRUS/sailfishos-disable-glass-avatar

Developing, testing, debugging and translating Patches

Additional, in depth information for developing, testing, debugging and translating Patches is available in the Wiki. Exemplary Patches to depict the aforementioned formats are provided in the doc directory, plus aforementioned RPM-Patch "Disable glass avatar".

Specifically the tool sailfish-patch by ichthyosaurus might be helpful to support implementing, debugging and testing Patches.

Information for Patchmanager developers

Some in depth information for developing, testing, debugging and translating Patchmanager is available in the Wiki.

The Patchmanager Testcases might be helpful to support implementing, debugging and testing Patchmanager. For details see the README, RPMs are available at OpenRepos and SailfishOS:Chum.

patchmanager's People

Contributors

b100dian avatar coderus avatar elros34 avatar jakibaki avatar mentaljam avatar nephros avatar nickcis avatar olf0 avatar sfietkonstantin avatar transifex-integration[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

patchmanager's Issues

Patches with targets in /usr/lib[,64] do not apply on 32/64bit systems

Systems with 64bit userland use /usr/lib64 instead of /usr/libas a library path.
Patches which target files in either of those locations will therefore not apply on the other platforms even though the patched files themselves might be the same.

This affects e.g. all "silica" patches, as the Sailfish QML files live under $LIBDIR/qt5/qml/Sailfish/*, and basically anything QML that isn't applications in /usr/share.

This means patch developers must currently ship and deploy two versions of each patch, and create two projects on web catalog, or use RPM packaging which installs the appropriate patch version.

Question:

Shall patchmanager implement something that helps with this problem?

Solutions that come to mind:

  • use something like patch -p3 --dry-run -d /usr/lib{,64}/ when a /usr/lib string is detected in the patch file
    • probably the simplest and fastest way, but is it reliable?
    • breaks when files outside of /usr/lib are patched from the same diff file
  • accept a second diff file in the patch hierarchy (e.g. unified_diff_64.patch) so devs can ship either or both
    • this would require modifcation of both patchmanager and the Web Catalog validator for submitting tarfiles
  • modifying Web Catalog to mangle any uploaded diffs to create the missing variant, and supply the correct tarball when PM downloads, so PM always receives a valid patch depending on bittiness
    • wonky, as the catalog can't verify that a file will exist on the system
  • modify /usr/lib* paths in existing unified_diff files when installing a patch from Web Catalog
  • modify /usr/lib* paths in existing unified_diff files when applying a patch at runtime
  • faking the libpath (force /usr/lib also on 64bit) somehow when applying a patch
    • the last three would allow old 32bit patches to be used without the authors needing to update them
  • Other ideas?

Donation link

Discussed in #96

Originally posted by b100dian October 9, 2021
Should we revamp the Donate link just as we did with the About page?
It is still linking to Sfiet's paypal, not even Coderus is mentioned.

I personally don't need the money but I would like to see if people appreciate.
Let me know your thoughts.

There are several other options: for example, I've seen Sebastian from Fernschreiber once saying "If you want to donate, please do so to FSFE". Do you feel there is a similar solution for our case?
(example: pay Web catalog hosting to Basil)

unapplyAllPatches broke Sailfish OS updates page

I installed the latest update of "patchmanager for Jolla settings" and applied the patch "Unapply all patches on Upgrade". After a reboot I am not able to open the Sailfish OS updates page โ€“ it just does not respond to taps. I tried removing the unapply all patches patch but that failed.

Commit #1295d93 does not seem to work for the case it was made for

Thank you @CODeRUS for commit #1295d93 and releasing Patchmanager 3.0.61, including it.

To my surprise this does not make any difference (compared to Patchmanager 3.0.59) WRT the behaviour of the RPM Patch Shutdown screen (with its v0.2-1 installed from OpenRepos):

[It] causes Settings -> Display to emit "Could not load page" when entering this settings page (i.e., the one which is patched).
Unapplying Shutdown screen lets the Display settings page work again, re-applying breaks it again, reproducibly (that doesn't even need a Restart services in Patchmanager 3).

Looking more closely, the Patch Shutdown screen v0.2-1 is actually applying fine (log) and working (it emits the startup and shutdown messages configured before), despite breaking the Settings -> Display page.

Is there a chance to let commit #1295d93 handle this?
Would it be helpful for you to be provided with other logs or information (if so, please name them)?

Tested on an Xperia X with SailfishOS 3.0.3 (before and after restarting Lipstick and again after a reboot) and reported for SailfishOS 3.0.x, 3.1.0 and 3.2.0 with Patchmanager 3.0.57 - .61.

Patchmanager's web page on Openrepos.net does not mention this issue tracker & Github repository

Updated 2018-11-16 for Patchmanager 3, below.

Outdated, original issue report for Patchmanager 2:
Patchmanager's web page on Openrepos.net does not mention this issue tracker for filing bugs, feature requests etc.
And it does also not mention this Github repository as Patchmanager 2.0's development location.

Please add these two web links to Patchmanager's web page on Openrepos.net in order to guide users to the correct locations.

Originally reported on TMO.

[Usability issue] The detailed Patch information page does not display the version and source of an installed Patch

The detailed Patch information page (reachable by a tap on a Patch name in the top level list of installed Patches) does not display the version and source (from Patchmanager's web catalog or from a RPM) of an installed Patch.

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 4. (due to issue #9; filing this here as promised).

[PM3 usability issue] `patchmanger --unapply-all` outputs an error and a warning

Unapplying all Patchmanager-Patches at the command line generates a lot of output, which ultimately ends in an error message.
Nevertheless all Patches are unapplied thereafter.

Except for these lines, all other output seem to be debug messages (which is fine, as PM3 is still in beta, currently):

error: bad option 'archcolor' at (null):108
[D] unknown:0 - void PatchManagerObject::process()
[D] unknown:0 - void PatchManagerObject::process() Have arguments, sending dbus message and quit
[W] unknown:0 - QThread: Destroyed while thread is still running

Tested with Patchmanager 3.0.55 under SailfishOS 2.2.0, 2.2.1 and 3.0.0 on a Jolla 1 phone and an Xperia X.

$ patchmanger --unapply-all

[D] unknown:0 - int main(int, char**) Patchmanager: "3.0.55"
[D] unknown:0 - QString getLang() "en_GB.utf8"
[D] unknown:0 - int main(int, char**) Translator loaded: false
[D] unknown:0 - int main(int, char**) Translator installed: false
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) Environment:
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "AG_SERVICES" = "/usr/share/accounts/services"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_OPENGL_NO_BGRA" = "1"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QPA_HWC_IDLE_TIME" = "5"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "TERM" = "xterm"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "G_BROKEN_FILENAMES" = "1"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "HISTSIZE" = "1000"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "HISTCONTROL" = "ignoredups"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "_" = "/usr/sbin/patchmanager"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "DBUS_SESSION_BUS_ADDRESS" = "unix:path=/run/user/100000/dbus/user_bus_socket"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QPA_HWC_BUFFER_COUNT" = "3"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_WAYLAND_DISABLE_WINDOWDECORATION" = "1"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "PATH" = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/nemo/bin"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "LANG" = "en_GB.utf8"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "HOSTNAME" = ""
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_WAYLAND_COMPOSITOR_NO_THROTTLE" = "1"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "BOOTSTATE" = "USER"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "LOGNAME" = "nemo"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QML_FIXED_ANIMATION_STEP" = "no"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "AG_SERVICE_TYPES" = "/usr/share/accounts/service-types"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "PWD" = "/root/bin"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QTCONTACTS_MANAGER_OVERRIDE" = "org.nemomobile.contacts.sqlite"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "WAYLAND_DISPLAY" = "../../display/wayland-0"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "NOTIFY_SOCKET" = "/run/user/100000/systemd/notify"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_MESSAGE_PATTERN" = "[%{if-debug}D%{endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{function}:%{line} - %{message}"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_WAYLAND_RESIZE_AFTER_SWAP" = "1"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_GSTREAMER_CAMERABIN_SRC" = "droidcamsrc"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_DF_BASEDEVIATION" = "0.025"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "HOME" = "/root"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_DF_SCALEFORMAXDEV" = "0.37"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "LIPSTICK_OPTIONS" = "-plugin evdevtouch:/dev/touchscreen   -plugin evdevkeyboard:keymap=/usr/share/qt5/keymaps/droid.qmap"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "USER" = "root"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "NO_PM_PRELOAD" = "1"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_IM_MODULE" = "Maliit"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_GSTREAMER_PLAYBIN_FLAGS" = "0"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QSG_FIXED_ANIMATION_STEP" = "no"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_DF_BASE" = "0.5"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "SHLVL" = "3"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "EGL_DRIVER" = "egl_gallium"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "SESSION_TARGET" = "default.target"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_QPA_PLATFORM" = "wayland"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "LESSOPEN" = "|/usr/bin/lesspipe.sh %s"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QMLSCENE_DEVICE" = "customcontext"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_DF_SCALEFORNODEV" = "0.6"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_DF_RANGE" = "0.08"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_GSTREAMER_CAMERABIN_FLAGS" = "15"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "EGL_PLATFORM" = "wayland"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "QT_WAYLAND_FORCE_DPI" = "96"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "LS_COLORS" = "no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "AG_PROVIDERS" = "/usr/share/accounts/providers"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "MANAGERPID" = "1063"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "HYBRIS_LD_LIBRARY_PATH" = "/usr/libexec/droid-hybris/system/lib:/vendor/lib:/system/lib"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "BROWSER" = "invoker -s --type=browser -G /usr/bin/sailfish-browser"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "SHELL" = "/bin/bash"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) ld.so.preload:
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) /usr/lib/libpreloadpatchmanager.so

[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "/usr/libexec/pm_apply"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) QFlags(0x1|0x4|0x10|0x40|0x100|0x200|0x400|0x1000|0x2000|0x4000)
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) "/usr/libexec/pm_unapply"
[D] unknown:0 - PatchManagerObject::PatchManagerObject(QObject*) QFlags(0x1|0x4|0x10|0x40|0x100|0x200|0x400|0x1000|0x2000|0x4000)
[D] unknown:0 - void Journal::init()
[D] unknown:0 - void Journal::wait()
error: bad option 'archcolor' at (null):108
[D] unknown:0 - void PatchManagerObject::process()
[D] unknown:0 - void PatchManagerObject::process() Have arguments, sending dbus message and quit
[W] unknown:0 - QThread: Destroyed while thread is still running

[Severe usability bug] Updating a Patch by tapping on a newer version of it in Patchmanager2's web catalog causes significant issues

For example, see "P.P.S." in the report https://openrepos.net/comment/18958#comment-18958 and the subsequent discussion there.
The correct behaviour (from a simple user's perspective) would presumably be:
a. When an applied Patch is updated, always try to unapply the active (old) version first.
b. When an installed Patch is updated (this includes case a., after triggering an unapply action), try to uninstall the old version of this Patch before installing the new one.
c. For RPM-Patches, Warehouse / the RPM utility handles b., and it looks like such an action can notify Patchmanager2 to perform a., before actually updating the RPM. But I am not sure, if receiving such a notification is currently used by Patchmanager2 to perform a. for RPM-Patches. The wording issue (#8 of this list) supposedly contributes to my confusion here. Up to now I have only observed installing conflicting (i.e. other) RPM-Patches to trigger uninstalling (i.e. contrary to "unapplying") of Patches, but not updating one unapplying its old version (at least not stated so by a SFOS-event notification). Side note: I have not (yet) taken a look, what is actually done in the pre-install scripts of RPM-Patches, or if some other mechanism to trigger Patchmanager2 exists.

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 9. (due to issue #9; filing this here as promised).

How should uninstall of rpm's patch should be handled?

It's a question, not a bug.
I really do not know how the rpm should handle the patch uninstall, i've seen @CODeRUS adding in the .spec file the %preun section in order to uninstall the patch. But, what does happen if the developer do not add that?, Will the user have to reinstall the patch in order to unapply it?. In addition, supusely that for the unappliance of the patch a service has to be restarted, is the rpm responsible for doing that too?

Will there be similar problems for patched updates?.

Update Documentation on creating patches, and patch.json formats

  1. Documentation on how to create a new patch is sparse and could be improved. [1], [3] Especially the correlations of packaging patch.json and using a Web Catalog upload:
  • patch.json ins only required for RPMs (or more generally patches not distributed via Web Catalog)
  • patch.json should use the newer format (but old is supported)
  • Web catalog creates a patch.json from the info entered in the web interface and packages it automatically

The information is there but is not immediately obvious.

  1. patch.json contents are not documented at all (AFAIK)

  2. Some of the documentation points to [2] as an example for a patch.
    While this still works as an example, it uses the legacy patch.json format, which has much fewer information bits than the newer one.

References:
[1] Web catalog "Documentation (kinda)" page: https://coderus.openrepos.net/pm2/usage/
[2] Example project pointed to by README currently: https://github.com/CODeRUS/sailfishos-disable-glass-avatar
[3] Project README - for developers: https://github.com/sailfishos-patches/patchmanager/blob/master/README.md#for-developers
[4] probably various guides floating around at the usual places (TJC, TMO, etc.)

[Usability issue] The term "developer mode" is confusing users

The term "developer mode" in Patchmanager 2.0's pulley menu has already confused users multiple times, resulting in support requests or users silently giving up to install a Patch from Patchmanager 2.0's web-catalog.

Background:

  1. The concept of having authors of Patches in the web-catalog updating the SailfishOS compatibility information of their Patches for each SailfishOS release obviously failed (many just don't do this).
  2. The current entries "Enable developer mode" and "Disable developer mode" are expressing to which state this setting will be switched, when selecting these pulley entries. The current state is not immediately obvious (i.e. "Developer mode: off" and "Developer mode: on" would have been better in this regard).
  3. Using the term "developer mode" causes a really confusing overlap to the completely unrelated "Developer mode" in the SailfishOS settings.

Hence please change the entries for the "developer mode" in Patchmanager 2.0's pulley menu to e.g.:

  • Check SailfishOS version (instead of "Enable developer mode")
  • Don't check SailfishOS version (instead of "Disable developer mode")

[Usability bug] "Restart preloaded services" enhanced behaviour in PM3 is confusing due to the lack of user feedback

"Restart preloaded services" does not work anymore with Patchmanager 2.3.3-10.41.1 under SailfishOS 2.1.1.26: When triggered, it simply does nothing!
This function (in the pulley menu, after a Patch has been applied or unapplied) was working well with Patchmanager 2.3.1-10.39.1 under SFOS 2.1.0.11
Restarting the "Homescreen" by other means (e.g. Patch: Enhanced Power Menu or Patch: Quick settings on power menu) works under SailfishOS 2.1.1.26

An other way

Hi there. As far as I see, the Patchmanager focuses mostly on the .qml files โ€” that's the main purpose the tool was created, isn't it? (Though, the main cause is the Jolla licensing policy โ€” see my comment to the following question on together.jolla.com). However, patching the root file system is, obviously, not the most secure way to make modifications. Hopefully, with .qml files (and other resources) another way is possible โ€” the QT libraries can be configured to override the system UI resources with user specified ones! For example, making the /home/nemo/ui/jolla-settings/pages/X.qml, if it exists, to take precedence over /usr/share/jolla-settings/pages/X.qml. It's nearly as to modify an include path. What do you think about it?

[PM3 suggestion] Retrieve the installed SFOS version by using 'version', not 'ssu re'

Prelude:
As some Patch authors fail to update the information, which SailfishOS releases a specific version of a web-catalog Patch is compatible to (even though that version is compatible to newer SFOS releases), users have practically no choice but to enable Patchmanager's Developer mode.

Observed behavior:
While the update notifications for web-catalog Patches (per system notification, in Patchmanager's top pulley, in PM's list view of the web-catalog and the Patch specific sub-page there) are working as expected, when a device is on the current SailfishOS release.
But when a device has an older SFOS release installed, some web-catalog Patches will have newer versions, which are only compatible to more recent SFOS release(s). One surely does not want to update these Patches.
Still Patchmanager 3.0.55 notifies one via all aforementioned ways, that updates are available.

Suggestion to mitigate this:
When checking for updated Patches from the web-catalog, compare the currently installed SailfishOS release (e.g. per version | rev | cut -f 2 -d ' ' | rev, but not per ssu re) with the compatibility information of a Patch, for which an update candidate (i.e. newer version) exists, before generating notifications (i.e. do not notify, if the currently installed SFOS release is not supported by the update candidate).
IMO, this extra check always shall be active, regardless of Patchmanager's Developer mode being switched on or off.

Side note: This suggestion is only about when the update notifications are triggered. The ability to install any version of a Patch, when Patchmanager's Developer mode is active is not at all addressed (and shall be retained).

Tested on a Jolla 1 phone under SailfishOS 2.2.1.18 (while SFOS 3.0.0.8 has been released a few weeks ago) with Patchmanager 3.0.55.

P.S.: As issue reports and feature suggestions implicitly always have a slightly negative touch (as proposing to better something), an explicitly positive statement:
Kudos for implementing the multiple, aforementioned ways of notifying that there are update candidates for web-catalog Patches. This is extremely helpful, already.

[PM3 question] Why is the SFOS GUI always started twice after booting?

Patchmanager 3 always restarts the SFOS GUI right after it has been initialised and displayed after booting.
Patchmanager is expected to restart the SFOS GUI, if Settings -> Patchmanager -> Settings -> Apply on boot is switched off (the default), after interactively acknowledging the application of the installed Patches.
But on first sight (which is at least partially wrong, see below) the same procedure seems to be carried out, when this setting is switched on, just without the interactive dialogue. This is somewhat surprising, as PM2 does not show this behavior (i.e. does not restart the SFOS GUI twice).

When looking more closely, all Patches already seem that be applied in the initial bring-up of the SFOS GUI (i.e. before it is restarted), if Settings -> Patchmanager -> Settings -> Apply on boot is switched on in PM3, by judging from the look of the lock-screen (i.e., patched!).
On a Jolla 1 phone the initial SFOS GUI starts so far, that one can switch to the unlocking panel of the lock-screen (plus the charging sound and notification appear, if a charger is plugged in), before the SFOS GUI is restarted by PM3.
On an Xperia X the restart occurs earlier, so one only gets to shortly peek a the patched lock-screen, before the SFOS GUI is restarted.

Hence I am asking, if the restarting the SFOS GUI is really necessary, when Settings -> Patchmanager -> Settings -> Apply on boot is switched on in PM3?
It would be nice, if future PM3 versions mimic PM2's behavior in this aspect.

Advantages, if this behavior could be eliminated:

  • Shortened boot time.
  • Visually nicer boot experience.
  • Makes a more trustworthy impression for users.

Tested with Patchmanager 3.0.55 under SailfishOS 2.2.0, 2.2.1 and 3.0.0 on a Jolla 1 phone and an Xperia X.
Edit: I forgot to mention that I think it needs a device without a SIM-card inserted (or disabled "SIM security") and a disabled the device-lock (those two "testing phones" stay at home) to observe this behavior.

Make libpreloadpatchmanager.so and other /tmp/patchmanager* paths accessible from sailjailed apps

As in https://forum.sailfishos.org/t/patchmanager-patches-in-koli-4-0-1/4925/114

I see a couple or more options here:

  1. Patch /etc/firejail/whitelist-common.local automatically at install time - this need to take into accounts ports that already have entries in there (e.g. volla https://piggz.co.uk/sailfishos-porters-archive/index.php?log=2021-07-10.txt#line43 )
  2. Add an 'option' to enable patchmanager for sailjailed apps
  3. Just make a patch with this and not ship it with patchmanager

The latter seems harder, considering the contents (or absence/presence) of the whitelist-common.local file differs from one device to another.

i18n / l10n: Document the decision to accept only primary languages etc.

There are currently three project languages for German:
German (Germany), German (Austria) and German (de).
This is unnecessary and having only one tranlsation (German (de)) should be considered:

  • for one, there is no such distinction in the official SFOS translations
  • also, it is unclear which version will end up in Patchmanager:
    How does the App determine the locale variant to be used once installed?
  • And: In the worst case, this 'split' triples efforts for updating or improving translations

[Bug] Handling updated compatibility information of Patches

Prelude:
When SFOS 2.1.0.11 was released, most Patches in Patchmanager's Web catalog were still marked as for "... 2.1.0.10 EA" at most, so I had to toggle "Enable developer mode" in order to install them. This worked nicely and these Patches are displayed in red in Patchmanager's installed Patches list (which is good).
Meanwhile all these Patches were refreshed and are now marked as compatible to 2.1.0.11 in the Web catalog, but their version numbers were not increased (most of them are at 0.0.2).
Bug description:
Consequently Patchmanager 2 obviously does not handle them as updated, hence still displayes them in red in Patchmanager's installed Patches list and still shows "Compatible: 2.0.1.10" in the detailed Patch information (by a tap on a Patch name) there.
Expected behaviour:
Updates of the "Compatible with" information in the Web catalog should trigger an update of this information for already installed Patches from the Web catalog, thus eventually not displaying them in red anymore.

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 1. (due to issue #9; filing this here as promised).

Enhance documentation for analysing bugs

Enhance documentation for analysing bugs.

There were a couple of mini-guides by Andrey, especially how to properly filter the systemd journal. But IIRC a few variants exists, and they have to be re-searched at the PM-thread at TMO, the comments at Openrepos, at TJC etc.

Then these variants should be condensed into a single, optimal one, if possible.

Some patches show conflicts with themselves

If a patch has several hunks for the same file, the +++ prefix appears more than one time, and it is added more than once to filesConflict (

filesConflicts[path].append(patchFolder);
).

Example patch: https://coderus.openrepos.net/pm2/project/browser-history-swipes

(note that in m_fileToPatch patches are not added twice. That member seems to be used for some file watching. Maybe it can be used for conflicts too, it has the same structure as filesConflict)

[Note to self] cleanup PatchObject::setData

Why doesn't this loop close the brace after the first setProperty line ๐Ÿค”
https://github.com/sailfishos-patches/patchmanager/blob/master/src/qml/PatchObject.cpp#L77

    for (const QString &key : data.keys()) {
        m_details->setProperty(key.toUtf8().constData(), data.value(key));

What follows is not depending on the key

        m_details->setProperty("section",
                               PatchManager::GetInstance()->trCategory(m_details->value(QStringLiteral("category")).toString()));
        bool isNewPatch = data.contains(QStringLiteral("display_name"));
        m_details->setProperty("isNewPatch", isNewPatch);
        if (!isNewPatch) {
            m_details->setProperty("display_name", m_details->value(QStringLiteral("name")));
        }
    }
}

[Usability issue] Minor usability bug, when returning from detailed Patch information page to list view of installed Patches

Observation:
The specific position of the list view of installed Patches (when returning from a detailed Patch information page) depends on the position of the Patch within the list:

  1. A position above the word "Homescreen" (indicating the start of this section) or one below it with the word "Homescreen" still visible on the device screen / above the eighth Patch or one with the eighth Patch visible:
    The list position is the same as before entering the detailed Patch information page (O.K.).
  2. A position so far below the word "Homescreen", that the word "Homescreen" is not visible on the device screen / below the eighth Patch without it being visible:
    The list position jumps, so that the first Patch in the section "Homescreen" / the eighth Patch is the topmost displayed one (not O.K.).
    (Note that this bug occurs regardless of the device orientation {portrait, landscape}.)

Expected behaviour:
The list position is always the same as before entering a Patch's detailed info page.

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 6. (due to issue #9; filing this here as promised).

Enable download patches from git

Instead of having to distribute rpm:s each time a patch is added, how about adding the possibility to pull patches directly from the git repo?

[Feature suggestion] Display conflicting Patches, when a Patch fails to apply

Patches conflicting with each other are creating a "conflict hell", which is really hard to resolve manually. E.g. I am currently unable to identify all the Patches (out of about 35 installed ones), which conflict with "Ultimate statusbar patch" or "Devicelock faith text". Edit: "Force cover size" and "No notification preview" are conflicting with those two Patches!?!
Idea:
It would be extremely helpful for users of Patchmanager2 to be notified specifically, which other Patches (and / or which original file) a Patch conflicts with, when applying it fails.
Thoughts:
Basically all information needed is already there: Which lines in which files each Patch patches (and which original lines a Patch expects). So if Patches intend to patch the same lines, they conflict. If there is no conflict between Patches, but the expected original lines are not present, something else is wrong (most likely the Patch is not compatible with the installed SailfishOS version).

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 7. (due to issue #9; filing this here as promised).

Is the syntax of lines 50 & 51 in the spec file correct?

Lines 50 & 51 in the spec file, which are currently

/usr/lib/qt5/bin/qmlplugindump -v -noinstantiate -nonrelocatable org.SfietKonstantin.patchmanager 2.0 %{buildroot}%{_libdir}/qt5/qml > %{buildroot}%{_libdir}/qt5/qml/org/SfietKonstantin/%{name}/plugin.qmltypes |:
sed -i 's#%{buildroot}##g' %{buildroot}%{_libdir}/qt5/qml/org/SfietKonstantin/%{name}/plugin.qmltypes

do not make sense to me:

  1. In line 51 (the qmlplugindump call)
    • The trailing |: must be wrong, because qmlplugindump's output to std-out must be redirected to a file via >, so an additional redirection via a pipeline is nonsense, plus the bash built-in : does not read anything from std-in.
      Hence I assume it was supposed to be ||:, which I would write as || true.
    • I was not able to determine from qmlplugindump's documentation, in which cases it may fail (making a ||: or || true necessary), but it states "You can safely ignore the debug output.", which means adding a 2> /dev/null in order to discard it here (i.e., in a spec file).
    • Additionally I do not comprehend why qmlplugindump is called with then -v flag, but then its debug output is not used.
      For qmlplugindump's source code and calling conventions, see https://code.woboq.org/qt5/qtdeclarative/tools/qmlplugindump/main.cpp.html#744
    • Furthermore that line is too long IMO, so this flaw at the line's end is not easily noticed.
  2. Line 52 is supposed to process the freshly generated file, eliminating the prefix %{buildroot} for every path listed in it.
    But I have never seen sed's substitute command to work with the delimiter # (instead of /), and its man-page also does not list # as a special character.
    Am I completely missing some aspect (e.g., something crazy like rpmbuild transforms # which are not at the start of a line to /), or is this simply wrong?

    I was simply wrong.

Thus I posed commit 036b6e7 per MR #61, rewriting this line to

/usr/lib/qt5/bin/qmlplugindump -noinstantiate -nonrelocatable org.SfietKonstantin.patchmanager 2.0 %{buildroot}%{_libdir}/qt5/qml \
> %{buildroot}%{_libdir}/qt5/qml/org/SfietKonstantin/%{name}/plugin.qmltypes 2> /dev/null || true

, plus eliminating the \ at lines 105 and 141, because these lines are not overly long (for today's standards, i.e. up to 132 characters).

@nephros, @b100dian, am I missing something or does that make sense?

P.S.: qmlplugindump was fixed in SailfishOS 3.3.0

Missing dependency @OpenRepos / patchutils vs. patch?

On a freshly installed phone, installing Patchmanager3-beta failed in Storeman, because the patchmanager3_beta repository does not provide the package patchutils.
Adding the coderus repository resolves this.

Though this minor inconvenience is not really worth writing a bug report, I noted while analysing this, that the original Jolla repositories (i.e., not from Jolla's mer-tools repo) provide the package patch-2.7 5+git1-1.1.1.
If this version of the patch utility suffices Patchmanager's needs, it may be worth considering to depend on that package (instead of an own copy of patchutils).

HTH (if not: sorry for bugging you).

P.S.: As a quick measure it may be worth copying the extant patchutils-0.3.3-10.1.2 package from the coderus repo at OpenRepos to the patchmanager3_beta repo.

[PM3 bug] Fails to uninstall RPM Patches

Patchmanager 3.0.55 fails to uninstall RPM Patches per selecting "Uninstall" in the context menu of a Patch in Patchmanager's list view (i.e. its primary window): The remorse timer is triggered, but when it timed out nothing happens.

Tested under SFOS 2.2.0, 2.2.1 and 3.0.0 on a Jolla 1 phone and an Xperia X.
Workaround: Using Storeman, pkcon, zypper or rpm to uninstall an RPM Patch.
P.S.: I could swear (I know, one shouldn't ;) ) to have filed this issue before, but was unable to find it.

[Severe bug] Triggering "Unapply all patches" in Patchmanager2's top level pulley menu merely unapplies the first 10 Patches!

Observation: Triggering "Unapply all patches" in Patchmanager2's top level pulley menu merely unapplies the first 10 Patches!

NB: Hopefully Patchmanager2's built-in patch "Unapply all patches on Upgrade" behaves differently and really unapplies all Patches! (I still had Patchmanager1 installed when upgrading from SFOS 2.0.5.6 to 2.1.0.11, so I have not observed this situation, yet.) Edit: See TMO post 2276 by coderus for an answer.

Maybe this is related to issue #15 (or vice versa).

NB: To be on the safe side, there is https://openrepos.net/content/schturman/patch-unapply-all-patches-system-update-manually

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 12. (filing this here as promised).

[PM3 simplification suggestion] Remove ability to manually reorder Patches

Prelude:
When Patchmanager 3 was originally released, IIRC it did "exact patching" (in contrast to PM2). Hence the ability to determine the order, in which Patches are applied, was needed. This was nicely implemented by being able to manually drag the installed Patches in Patchmanager's list view (primary window) into their desired order of applying them (from top to bottom). Side note: The initial order is the order in which the patches were installed (freshly installed ones appear at the bottom of the list).

Meanwhile PM3 reverted to use "fuzzy patching" months ago (IIRC on Ancelad's request at TMO), hence the sequence in which the Patches are applied does not matter anymore (as it is the case for PM2). At least when experimenting with 50+ Patches installed under SFOS 2.2.0, 2.2.1 and 3.0.0 on a Jolla 1 phone and an Xperia X, the order of the Patches never made any difference (and why should it, as it is not an issue with PM2?).

Advantages:

  • While manually ordering Patches by dragging them is cool, it complicates the GUI for inexperienced users.
  • The extra code for dragging Patches may have bugs (just as any code).
  • The extra code for dragging Patches poses a permanent maintenance burden (just as any code).
  • Without a fixed order of the Patches (plus nicely grouped in their categories in PM2), the list of installed Patches is almost incomparable between devices at the GUI.
  • Without a fixed order it is hard to find a specific Patch in Patchmanager's list view, when many Patches are installed.

Suggestion:
Please revert the list of Patches (in Patchmanager's primary window) to a fixed order, as in Patchmanager 2: Alphabetically sorted and grouped in alphabetically sorted categories. PM2 is doing that fine and looking good in this regard.
Also eliminate the ability to manually reorder Patches by dragging them at the GUI in PM's list view.

Additional suggestion, unrelated to this issue:
Furthermore it would be nice to have the category of a specific Patch also displayed in an additional section "Category" (to the extant ones: Name, Version, Maintainer, Description, Patch log) in its Patch details sub-page.

All patches gone / Webcatalog empty

It did suddenly happen, i guess after a reboot, that all patches were gone and webcatalog remains in 'loading state'.
i did then try to install PM2 but it seems that there was an autoupdate to PM3 ?
not sure if that is possible.

however here is the log:
-- Logs begin at Fri 2019-05-17 18:37:09 CEST, end at Fri 2019-05-17 19:24:16 CEST. --
May 17 19:20:14 Sailfish estart[25554]: [W] unknown:0 - Mandatory field "path" missing in entry on file "sailfishos-devicelock-faith-text.json"
May 17 19:20:17 Sailfish estart[25554]: [D] unknown:0 - PatchManager::PatchManager(QObject*)
May 17 19:20:17 Sailfish estart[25554]: [D] unknown:0 - void PatchManager::requestListPatches(const QString&, bool) "" false
May 17 19:20:17 Sailfish estart[25554]: [D] unknown:0 - "No carrier"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() Patchmanager: "3.0.57"
May 17 19:20:17 Sailfish patchmanager[25635]: QString getLang() "en_GB.utf8"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() Translator loaded: false
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() Translator installed: false
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() Environment:
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() "NO_PM_PRELOAD" = "1"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() "PATH" = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() "SHELL" = "/bin/sh"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() "LOGNAME" = "root"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() "USER" = "root"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() "HOME" = "/root"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() "DBUS_SESSION_BUS_ADDRESS" = "unix:path=/run/user/100000/dbus/user_bus_socket"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() ld.so.preload:
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() /usr/lib/libpreloadpatchmanager.so
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() "/usr/libexec/pm_apply"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() QFlags(0x1|0x4|0x10|0x40|0x100|0x200|0x400|0x1000|0x2000|0x4000)
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() "/usr/libexec/pm_unapply"
May 17 19:20:17 Sailfish patchmanager[25635]: void PatchManagerObject::initialize() QFlags(0x1|0x4|0x10|0x40|0x100|0x200|0x400|0x1000|0x2000|0x4000)
May 17 19:20:18 Sailfish patchmanager[25635]: void Journal::init()
May 17 19:20:18 Sailfish patchmanager[25635]: void Journal::wait()
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::getVersion()
May 17 19:20:18 Sailfish patchmanager[25635]: Received ssu version: "3.0.3.9"
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::lateInitialize()
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::refreshPatchList()
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::prepareCacheRoot()
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::startLocalServer()
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::registerDBus()
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::checkForUpdates()
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doRefreshPatchList()
May 17 19:20:18 Sailfish patchmanager[25635]: QVariant PatchManagerObject::getSettings(const QString&, const QVariant&) const "applied" QVariant(QStringList, ()) QVariant(QStringList, ("launcher-combined", "sailfishos-patchmanager-unapplyall", "return-old-remorse-animation", "topmenu-control", "sailfishos-patch-improved-notification-preview", "return-old-button-style", "sailfishos-display-sneak-peak", "remorse-timeouts-control", "patchmanager-volume-warning", "combined-pulley-menu", "return-old-remorse-item-animation"))
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doRefreshPatchList() patchFiles: ("combined-pulley-menu", "disable-volume-warning", "enhanced-email-cover", "gallery-details-path", "launcher-combined", "remorse-timeouts-control", "return-old-button-style", "return-old-remorse-animation", "return-old-remorse-item-animation", "topmenu-control", "ultimate-statusbar", "voicecall-combined")
May 17 19:20:18 Sailfish patchmanager[25635]: "No carrier"
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doRefreshPatchList() fileToPatch: ("/usr/lib/qt5/qml/Sailfish/Gallery/DetailsPage.qml", "/usr/lib/qt5/qml/Sailfish/Silica/Button.qml", "/usr/lib/qt5/qml/Sailfish/Silica/PullDownMenu.qml", "/usr/lib/qt5/qml/Sailfish/Silica/PushUpMenu.qml", "/usr/lib/qt5/qml/Sailfish/Silica/RemorseItem.qml", "/usr/lib/qt5/qml/Sailfish/Silica/RemorsePopup.qml", "/usr/lib/qt5/qml/Sailfish/Silica/private/PulleyMenuBase.qml", "/usr/lib/qt5/qml/com/jolla/settings/SettingsSlider.qml", "/usr/lib/qt5/qml/com/jolla/settings/SettingsToggle.qml", "/usr/share/jolla-email/cover/MainViewCover.qml", "/usr/share/jolla-settings/entries/sailfishos-voicecall-combined-patch.json", "/usr/share/jolla-settings/pages/jolla-voicecall/voicecall.qml", "/usr/share/lipstick-jolla-home-qt5/compositor.qml", "/usr/share/lipstick-jolla-home-qt5/eventsview/EventsViewList.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconBigGrid.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconCascade.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconGrid.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconLoader.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconStack.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/Launcher.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherFolder.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherGrid.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherView.qml", "/usr/share/lipstick-jolla-home-qt5/layers/EdgeLayer.qml", "/usr/share/lipstick-jolla-home-qt5/layers/LauncherLayer.qml", "/usr/share/lipstick-jolla-home-qt5/layers/TopMenuLayer.qml", "/usr/share/lipstick-jolla-home-qt5/lockscreen/LockScreen.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/AlienDalvikIndicator.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/CellularNetworkNameStatusIndicator.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/MediaVolumeStatusIndicator.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/PresenceStatusIndicator.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/StatusArea.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/StatusBar.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/VolumeStatusIndicator.qml", "/usr/share/lipstick-jolla-home-qt5/topmenu/PowerButton.qml", "/usr/share/lipstick-jolla-home-qt5/topmenu/TopMenu.qml", "/usr/share/lipstick-jolla-home-qt5/topmenu/TopMenuWindow.qml", "/usr/share/lipstick-jolla-home-qt5/volumecontrol/VolumeControl.qml", "/usr/share/voicecall-ui-jolla/cover/IdleCover.qml", "/usr/share/voicecall-ui-jolla/main.qml", "/usr/share/voicecall-ui-jolla/pages/CallLogPage.qml", "/usr/share/voicecall-ui-jolla/pages/calling/InCallView.qml", "/usr/share/voicecall-ui-jolla/pages/calling/IncomingCallViewBase.qml", "/usr/share/voicecall-ui-jolla/pages/calllog/CallLogDetailsRow.qml", "/usr/share/voicecall-ui-jolla/pages/calllog/CallLogItem.qml")
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doRefreshPatchList() patchConflicts: ("combined-pulley-menu", "disable-volume-warning", "enhanced-email-cover", "gallery-details-path", "launcher-combined", "remorse-timeouts-control", "return-old-button-style", "return-old-remorse-animation", "return-old-remorse-item-animation", "topmenu-control", "ultimate-statusbar", "voicecall-combined")
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doRefreshPatchList() patches: 12
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doRefreshPatchList() metadata: ("combined-pulley-menu", "disable-volume-warning", "enhanced-email-cover", "gallery-details-path", "launcher-combined", "remorse-timeouts-control", "return-old-button-style", "return-old-remorse-animation", "return-old-remorse-item-animation", "topmenu-control", "ultimate-statusbar", "voicecall-combined")
May 17 19:20:18 Sailfish patchmanager[25635]: {
"combined-pulley-menu": {
"author": "Ancelad",
"available": true,
"category": "silica",
"compatible": [
"3.0.0.5",
"3.0.0.8",
"3.0.0.11",
"3.0.1.11"
],
"conflicts": [
],
"description": "Combines two styles of pulley-menu - old from 1.1.7.x and new from 2.0.x.x. Nice and fast.",
"discussion": "",
"display_name": "Combined pulley menu",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 28,
"isCompatible": false,
"last_updated": "2019-01-05T14:43:11.060",
"name": "combined-pulley-menu",
"patch": "combined-pulley-menu",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.3"
},
"disable-volume-warning": {
"author": "Ancelad",
"available": true,
"category": "homescreen",
"compatible": [
"2.1.0.11",
"2.1.1.12",
"2.1.1.23",
"2.1.1.24",
"2.1.1.26",
"2.1.2.3",
"2.1.3.3",
"2.1.3.5",
"2.1.3.7",
"2.1.4.13",
"2.1.4.14",
"2.1.4.15",
"2.2.0.29",
"2.2.1.18",
"2.2.1.19",
"3.0.0.5",
"3.0.0.8",
"3.0.0.11",
"3.0.1.11"
],
"conflicts": [
],
"description": "It will disable volume warning window while you're listening music in headsets",
"discussion": "",
"display_name": "Disable volume warning",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_uk_cgi-2Dbin_webscr-3Fcmd-3D-5Fflow-26SESSION-3DhVYeAGavS9xiQLEsjhcKsgvrHIOzzDcGz5utLesVVBz72o8QXfG94MXuevC-26dispatch-3D5885d80a13c0db1f8e263663d3faee8d333dc9aadeed3fe0b5b299d55fd35542&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=zBJVCeqPkrEiTTso2oL1RUMF4z9xdIV-paWaGi-M-wc&e= ",
"id": 16,
"isCompatible": false,
"last_updated": "2019-01-05T14:45:23.818",
"name": "disable-volume-warning",
"patch": "disable-volume-warning",
"patched": false,
"rpm": "",
"sources": "",
"version": "0.0.2"
},
"enhanced-email-cover": {
"author": "Ancelad",
"available": true,
"category": "email",
"compatible": [
"2.1.3.7",
"2.1.4.13",
"2.1.4.14",
"2.1.4.15",
"2.2.0.29",
"2.2.1.18",
"2.2.1.19",
"3.0.0.5",
"3.0.0.8",
"3.0.0.11",
"3.0.1.11",
"3.0.1.14"
],
"conflicts": [
],
"description": "Returns "New email" cover action",
"discussion": "",
"display_name": "Enhanced email cover",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 42,
"isCompatible": false,
"last_updated": "2019-02-01T11:46:27.638",
"name": "enhanced-email-cover",
"patch": "enhanced-email-cover",
"patched": false,
"rpm": "",
"sources": "",
"version": "0.0.1"
},
"gallery-details-path": {
"author": "luen",
"available": true,
"category": "gallery",
"compatible": [
"2.1.3.7",
"2.1.4.13",
"2.1.4.14",
"2.1.4.15",
"2.2.0.29",
"2.2.1.18",
"2.2.1.19",
"3.0.0.5",
"3.0.0.8"
],
"conflicts": [
],
"description": "Adds the full path to the filename shown in the details page of pictures in Jolla Gallery.",
"discussion": "https://urldefense.proofpoint.com/v2/url?u=https-3A__together.jolla.com_question_52584_feature-2Drequest-2Dgallery-2Dto-2Dshow-2Dpath-2Din-2Ddetails_&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=QHPd8kzHZcHQjnUzW4Airk51F3_NdGCsJTe3ChmbAjs&e= ",
"display_name": "Show path in picture details",
"donations": "",
"id": 66,
"isCompatible": false,
"last_updated": "2018-11-13T16:08:51.336",
"name": "gallery-details-path",
"patch": "gallery-details-path",
"patched": false,
"rpm": "",
"sources": "",
"version": "1.0.0"
},
"launcher-combined": {
"author": "coderus",
"available": true,
"category": "homescreen",
"compatible": [
"3.0.1.11"
],
"conflicts": [
],
"description": "original",
"discussion": "",
"display_name": "Launcher combined",
"donations": "",
"id": 57,
"isCompatible": false,
"last_updated": "2019-01-11T05:58:46.664",
"name": "launcher-combined",
"patch": "launcher-combined",
"patched": true,
"rpm": "",
"sources": "",
"version": "3.0.1"
},
"remorse-timeouts-control": {
"author": "Ancelad",
"available": true,
"category": "silica",
"compatible": [
"3.0.2.8"
],
"conflicts": [
"return-old-remorse-item-animation",
"return-old-remorse-animation"
],
"description": "This will allow to control remorse items timeout.",
"discussion": "",
"display_name": "Remorse items timeouts control",
"donations": "",
"id": 21,
"isCompatible": false,
"last_updated": "2019-03-21T05:02:31.129",
"name": "remorse-timeouts-control",
"patch": "remorse-timeouts-control",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.5"
},
"return-old-button-style": {
"author": "Ancelad",
"available": true,
"category": "silica",
"compatible": [
"2.2.0.29",
"2.2.1.18",
"2.2.1.19",
"3.0.0.5",
"3.0.0.8",
"3.0.0.11",
"3.0.1.11"
],
"conflicts": [
],
"description": "It will return "old" button style to SailfishOS 2.0",
"discussion": "",
"display_name": "Return old button style",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 58,
"isCompatible": false,
"last_updated": "2019-01-05T14:42:11.013",
"name": "return-old-button-style",
"patch": "return-old-button-style",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.1"
},
"return-old-remorse-animation": {
"author": "Ancelad",
"available": true,
"category": "silica",
"compatible": [
"3.0.0.8",
"3.0.0.11",
"3.0.1.11"
],
"conflicts": [
"remorse-timeouts-control"
],
"description": "This will return old remorse popup animation (like in 1.1.7.x)",
"discussion": "",
"display_name": "Return old remorse popup animation",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 71,
"isCompatible": false,
"last_updated": "2019-01-05T14:40:40.448",
"name": "return-old-remorse-animation",
"patch": "return-old-remorse-animation",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.1"
},
"return-old-remorse-item-animation": {
"author": "Ancelad",
"available": true,
"category": "silica",
"compatible": [
"3.0.0.8",
"3.0.0.11",
"3.0.1.11"
],
"conflicts": [
"remorse-timeouts-control"
],
"description": "This will return old remorse items animation (like in 1.1.7.x)",
"discussion": "",
"display_name": "Return old remorse item animation",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 72,
"isCompatible": false,
"last_updated": "2019-01-05T14:41:04.579",
"name": "return-old-remorse-item-animation",
"patch": "return-old-remorse-item-animation",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.1"
},
"topmenu-control": {
"author": "Ancelad",
"available": true,
"category": "homescreen",
"compatible": [
"3.0.2.8"
],
"conflicts": [
],
"description": "Contains:\r\n- Enhanced powermenu patch with eugenio's swipe-to-lock patch\r\n- Eventsview control patch\r\n- New topmenu patch\r\n\r\nConflicts with eugenio's swipe-to-lock patch, disable it before use my patch.",
"discussion": "",
"display_name": "Topmenu control",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_uk_cgi-2Dbin_webscr-3Fcmd-3D-5Fflow-26SESSION-3DhVYeAGavS9xiQLEsjhcKsgvrHIOzzDcGz5utLesVVBz72o8QXfG94MXuevC-26dispatch-3D5885d80a13c0db1f8e263663d3faee8d333dc9aadeed3fe0b5b299d55fd35542&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=zBJVCeqPkrEiTTso2oL1RUMF4z9xdIV-paWaGi-M-wc&e= ",
"id": 67,
"isCompatible": false,
"last_updated": "2019-03-21T04:54:37.637",
"name": "topmenu-control",
"patch": "topmenu-control",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.9"
},
"ultimate-statusbar": {
"author": "Ancelad",
"available": true,
"category": "homescreen",
"compatible": [
"3.0.2.8"
],
"conflicts": [
],
"description": "DISCLAIMER:\r\nPATCHMANAGER3 IS REQUIRED DUE SAFETY REASONS! PATCHMANAGER2 IS NOT SUPPORTED ANYMORE!\r\n\r\nPLEASE, UNAPPLY AND DELETE RPM-BASED PATCH MANUALLY BEFORE INSTALL THIS ONE!\r\n\r\nWARNING! MAY CAUSE BOOTLOOP IF YOU USE SAILFISHOS-PORTS! USE AT YOR OWN RISK!!!\r\n\r\nCombination of many statusbar patches:\r\n\r\nShow ringtone volume in statusbar\r\nShow presence indicator\r\nShow date when peeking\r\nCustom operator name\r\n- not available for Tablet\r\nShow statusbar on Sneak Peek screen\r\nEnlarge homescreen clock size by Schturman\r\nShow all indicators on lockscreen by alina\r\ncustom statusbar gradient-color and opacity\r\ncustom statusbar content-color\r\naliendalvik-runtime indicator",
"discussion": "",
"display_name": "Ultimate statusbar patch",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 65,
"isCompatible": false,
"last_updated": "2019-03-20T05:45:53.458",
"name": "ultimate-statusbar",
"patch": "ultimate-statusbar",
"patched": false,
"rpm": "",
"sources": "",
"version": "0.0.7"
},
"voicecall-combined": {
"author": "Ancelad",
"available": true,
"category": "phone",
"compatible": [
"3.0.2.8"
],
"conflicts": [
],
"description": "Combination of different patches with settings page: \r\n\r\n- swipe to remove in call log \r\n- "vibrate when connected" from base patches\r\n- alternative better call log\r\n- reduce hangup-animation duration\r\n- show number under calling person's name\r\n\r\nWARNING: patch conflicts with base patches, alternative better call log. Remove them before install this one.",
"discussion": "",
"display_name": "Voicecall combined patch",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 26,
"isCompatible": false,
"last_updated": "2019-03-20T04:53:31.707",
"name": "voicecall-combined",
"patch": "voicecall-combined",
"patched": false,
"rpm": "",
"sources": "",
"version": "0.1.0"
}
}
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCacheRoot()
May 17 19:20:18 Sailfish patchmanager[25635]: QVariant PatchManagerObject::getSettings(const QString&, const QVariant&) const "order" QVariant(QStringList, ()) QVariant(QStringList, ("combined-pulley-menu", "disable-volume-warning", "remorse-timeouts-control", "return-old-button-style", "return-old-remorse-animation", "return-old-remorse-item-animation", "topmenu-control", "ultimate-statusbar", "gallery-details-path", "voicecall-combined", "launcher-combined", "enhanced-email-cover", "sailfishos-display-sneak-peak", "patchmanager-volume-warning", "sailfishos-patch-improved-notification-preview"))
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "combined-pulley-menu" true
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "combined-pulley-menu" true
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/private/PulleyMenuBase.qml"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica/private"
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/PullDownMenu.qml"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/PushUpMenu.qml"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("combined-pulley-menu")
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:18 CEST 2019
----------------------------------

                                          combined-pulley-menu
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/private/PulleyMenuBase.qml
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/PullDownMenu.qml
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/PushUpMenu.qml
                                          patch unexpectedly ends in middle of line
                                          
                                          *** SUCCESS ***

May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "remorse-timeouts-control" true
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "remorse-timeouts-control" true
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/RemorseItem.qml"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/RemorsePopup.qml"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("remorse-timeouts-control")
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:18 CEST 2019
----------------------------------

                                          remorse-timeouts-control
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/RemorseItem.qml
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/RemorsePopup.qml
                                          
                                          *** SUCCESS ***

May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "return-old-button-style" true
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-button-style" true
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/Button.qml"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("return-old-button-style")
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:18 CEST 2019
----------------------------------

                                          return-old-button-style
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/Button.qml
                                          
                                          *** SUCCESS ***

May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "return-old-remorse-animation" true
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-remorse-animation" true
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/RemorsePopup.qml"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("return-old-remorse-animation")
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:18 CEST 2019
----------------------------------

                                          return-old-remorse-animation
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/RemorsePopup.qml
                                          Hunk #1 succeeded at 202 (offset 7 lines).
                                          Hunk #2 succeeded at 279 (offset 7 lines).
                                          
                                          *** SUCCESS ***

May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "return-old-remorse-item-animation" true
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-remorse-item-animation" true
May 17 19:20:18 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/RemorseItem.qml"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:18 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("return-old-remorse-item-animation")
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:18 CEST 2019
----------------------------------

                                          return-old-remorse-item-animation
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/RemorseItem.qml
                                          Hunk #1 succeeded at 211 (offset 7 lines).
                                          Hunk #2 succeeded at 252 (offset 7 lines).
                                          
                                          *** SUCCESS ***

May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "topmenu-control" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "topmenu-control" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/layers/EdgeLayer.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/layers"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/layers/TopMenuLayer.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/layers"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/eventsview/EventsViewList.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/eventsview"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/topmenu/PowerButton.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/topmenu"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/topmenu/TopMenu.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/topmenu"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/com/jolla/settings/SettingsSlider.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/com/jolla/settings"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/com/jolla/settings/SettingsToggle.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/com/jolla/settings"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/compositor.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/topmenu/TopMenuWindow.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/topmenu"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("topmenu-control")
May 17 19:20:19 Sailfish estart[25554]: [D] onTriggered:45 -
May 17 19:20:19 Sailfish estart[25554]: [D] onRunningChanged:46 - false
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:19 CEST 2019
----------------------------------

                                          topmenu-control
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/share/lipstick-jolla-home-qt5/layers/EdgeLayer.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/layers/TopMenuLayer.qml
                                          Hunk #2 succeeded at 28 with fuzz 2.
                                          checking file usr/share/lipstick-jolla-home-qt5/eventsview/EventsViewList.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/topmenu/PowerButton.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/topmenu/TopMenu.qml
                                          checking file usr/lib/qt5/qml/com/jolla/settings/SettingsSlider.qml
                                          checking file usr/lib/qt5/qml/com/jolla/settings/SettingsToggle.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/compositor.qml
                                          Hunk #1 succeeded at 665 (offset 11 lines).
                                          checking file usr/share/lipstick-jolla-home-qt5/topmenu/TopMenuWindow.qml
                                          
                                          *** SUCCESS ***

May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "launcher-combined" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "launcher-combined" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/Launcher.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherFolder.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherGrid.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherView.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/layers/LauncherLayer.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/layers"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconStack.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconBigGrid.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconCascade.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconGrid.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconLoader.qml"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("launcher-combined")
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:19 CEST 2019
----------------------------------

                                          launcher-combined
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/Launcher.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/LauncherFolder.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/LauncherGrid.qml
                                          Hunk #2 succeeded at 61 (offset 3 lines).
                                          Hunk #3 succeeded at 249 (offset 3 lines).
                                          Hunk #4 succeeded at 325 (offset 3 lines).
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/LauncherView.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/layers/LauncherLayer.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/FolderIconStack.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/FolderIconBigGrid.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/FolderIconCascade.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/FolderIconGrid.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/FolderIconLoader.qml
                                          
                                          *** SUCCESS ***

May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "sailfishos-display-sneak-peak" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-display-sneak-peak" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-display-sneak-peak"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("sailfishos-display-sneak-peak")
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: false
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:19 CEST 2019
----------------------------------

                                          sailfishos-display-sneak-peak
                                          
                                          ERROR: /usr/share/patchmanager/patches/sailfishos-display-sneak-peak is not a directory or does not exist!
                                          
                                          *** FAILED ***

May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-display-sneak-peak" false
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-display-sneak-peak"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "patchmanager-volume-warning" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "patchmanager-volume-warning" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "patchmanager-volume-warning"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("patchmanager-volume-warning")
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: false
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:19 CEST 2019
----------------------------------

                                          patchmanager-volume-warning
                                          
                                          ERROR: /usr/share/patchmanager/patches/patchmanager-volume-warning is not a directory or does not exist!
                                          
                                          *** FAILED ***

May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "patchmanager-volume-warning" false
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "patchmanager-volume-warning"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "sailfishos-patch-improved-notification-preview" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patch-improved-notification-preview" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patch-improved-notification-preview"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("sailfishos-patch-improved-notification-preview")
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: false
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:19 CEST 2019
----------------------------------

                                          sailfishos-patch-improved-notification-preview
                                          
                                          ERROR: /usr/share/patchmanager/patches/sailfishos-patch-improved-notification-preview is not a directory or does not exist!
                                          
                                          *** FAILED ***

May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patch-improved-notification-preview" false
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patch-improved-notification-preview"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "sailfishos-patchmanager-unapplyall" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patchmanager-unapplyall" true
May 17 19:20:19 Sailfish patchmanager[25635]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patchmanager-unapplyall"
May 17 19:20:19 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("sailfishos-patchmanager-unapplyall")
May 17 19:20:20 Sailfish patchmanager[25635]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: false
May 17 19:20:21 Sailfish estart[25554]: [D] unknown:0 - QDBusPendingCallWatcher* PatchManager::downloadCatalog(const QVariantMap&)
May 17 19:20:21 Sailfish estart[25554]: [W] unknown:471 - file:///usr/lib/qt5/qml/Sailfish/Silica/private/PulleyMenuBase.qml:471:13: QML State: Binding loop detected for property "when"
May 17 19:20:21 Sailfish estart[25554]: [D] unknown:0 - QDBusPendingCallWatcher* PatchManager::listVersions()
May 17 19:20:21 Sailfish estart[25554]: [D] unknown:0 - void PatchManager::checkForUpdates()
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() Patchmanager: "3.0.57"
May 17 19:20:25 Sailfish patchmanager[26065]: QString getLang() "en_GB.utf8"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() Translator loaded: false
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() Translator installed: false
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() Environment:
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() "PATH" = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() "SHELL" = "/bin/sh"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() "DBUS_SESSION_BUS_ADDRESS" = "unix:path=/run/user/100000/dbus/user_bus_socket"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() "USER" = "root"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() "LOGNAME" = "root"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() "HOME" = "/root"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() "NO_PM_PRELOAD" = "1"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() ld.so.preload:
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() /usr/lib/libpreloadpatchmanager.so
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() "/usr/libexec/pm_apply"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() QFlags(0x1|0x4|0x10|0x40|0x100|0x200|0x400|0x1000|0x2000|0x4000)
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() "/usr/libexec/pm_unapply"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::initialize() QFlags(0x1|0x4|0x10|0x40|0x100|0x200|0x400|0x1000|0x2000|0x4000)
May 17 19:20:25 Sailfish patchmanager[26065]: void Journal::init()
May 17 19:20:25 Sailfish patchmanager[26065]: void Journal::wait()
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::getVersion()
May 17 19:20:25 Sailfish patchmanager[26065]: "No carrier"
May 17 19:20:25 Sailfish patchmanager[26065]: Received ssu version: "3.0.3.9"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::lateInitialize()
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::refreshPatchList()
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::prepareCacheRoot()
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::startLocalServer()
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::registerDBus()
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::checkForUpdates()
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doRefreshPatchList()
May 17 19:20:25 Sailfish patchmanager[26065]: QVariant PatchManagerObject::getSettings(const QString&, const QVariant&) const "applied" QVariant(QStringList, ()) QVariant(QStringList, ("launcher-combined", "sailfishos-patchmanager-unapplyall", "return-old-remorse-animation", "topmenu-control", "sailfishos-patch-improved-notification-preview", "return-old-button-style", "sailfishos-display-sneak-peak", "remorse-timeouts-control", "patchmanager-volume-warning", "combined-pulley-menu", "return-old-remorse-item-animation"))
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doRefreshPatchList() patchFiles: ("combined-pulley-menu", "disable-volume-warning", "enhanced-email-cover", "gallery-details-path", "launcher-combined", "remorse-timeouts-control", "return-old-button-style", "return-old-remorse-animation", "return-old-remorse-item-animation", "topmenu-control", "ultimate-statusbar", "voicecall-combined")
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doRefreshPatchList() fileToPatch: ("/usr/lib/qt5/qml/Sailfish/Gallery/DetailsPage.qml", "/usr/lib/qt5/qml/Sailfish/Silica/Button.qml", "/usr/lib/qt5/qml/Sailfish/Silica/PullDownMenu.qml", "/usr/lib/qt5/qml/Sailfish/Silica/PushUpMenu.qml", "/usr/lib/qt5/qml/Sailfish/Silica/RemorseItem.qml", "/usr/lib/qt5/qml/Sailfish/Silica/RemorsePopup.qml", "/usr/lib/qt5/qml/Sailfish/Silica/private/PulleyMenuBase.qml", "/usr/lib/qt5/qml/com/jolla/settings/SettingsSlider.qml", "/usr/lib/qt5/qml/com/jolla/settings/SettingsToggle.qml", "/usr/share/jolla-email/cover/MainViewCover.qml", "/usr/share/jolla-settings/entries/sailfishos-voicecall-combined-patch.json", "/usr/share/jolla-settings/pages/jolla-voicecall/voicecall.qml", "/usr/share/lipstick-jolla-home-qt5/compositor.qml", "/usr/share/lipstick-jolla-home-qt5/eventsview/EventsViewList.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconBigGrid.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconCascade.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconGrid.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconLoader.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconStack.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/Launcher.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherFolder.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherGrid.qml", "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherView.qml", "/usr/share/lipstick-jolla-home-qt5/layers/EdgeLayer.qml", "/usr/share/lipstick-jolla-home-qt5/layers/LauncherLayer.qml", "/usr/share/lipstick-jolla-home-qt5/layers/TopMenuLayer.qml", "/usr/share/lipstick-jolla-home-qt5/lockscreen/LockScreen.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/AlienDalvikIndicator.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/CellularNetworkNameStatusIndicator.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/MediaVolumeStatusIndicator.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/PresenceStatusIndicator.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/StatusArea.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/StatusBar.qml", "/usr/share/lipstick-jolla-home-qt5/statusarea/VolumeStatusIndicator.qml", "/usr/share/lipstick-jolla-home-qt5/topmenu/PowerButton.qml", "/usr/share/lipstick-jolla-home-qt5/topmenu/TopMenu.qml", "/usr/share/lipstick-jolla-home-qt5/topmenu/TopMenuWindow.qml", "/usr/share/lipstick-jolla-home-qt5/volumecontrol/VolumeControl.qml", "/usr/share/voicecall-ui-jolla/cover/IdleCover.qml", "/usr/share/voicecall-ui-jolla/main.qml", "/usr/share/voicecall-ui-jolla/pages/CallLogPage.qml", "/usr/share/voicecall-ui-jolla/pages/calling/InCallView.qml", "/usr/share/voicecall-ui-jolla/pages/calling/IncomingCallViewBase.qml", "/usr/share/voicecall-ui-jolla/pages/calllog/CallLogDetailsRow.qml", "/usr/share/voicecall-ui-jolla/pages/calllog/CallLogItem.qml")
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doRefreshPatchList() patchConflicts: ("combined-pulley-menu", "disable-volume-warning", "enhanced-email-cover", "gallery-details-path", "launcher-combined", "remorse-timeouts-control", "return-old-button-style", "return-old-remorse-animation", "return-old-remorse-item-animation", "topmenu-control", "ultimate-statusbar", "voicecall-combined")
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doRefreshPatchList() patches: 12
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doRefreshPatchList() metadata: ("combined-pulley-menu", "disable-volume-warning", "enhanced-email-cover", "gallery-details-path", "launcher-combined", "remorse-timeouts-control", "return-old-button-style", "return-old-remorse-animation", "return-old-remorse-item-animation", "topmenu-control", "ultimate-statusbar", "voicecall-combined")
May 17 19:20:25 Sailfish patchmanager[26065]: {
"combined-pulley-menu": {
"author": "Ancelad",
"available": true,
"category": "silica",
"compatible": [
"3.0.0.5",
"3.0.0.8",
"3.0.0.11",
"3.0.1.11"
],
"conflicts": [
],
"description": "Combines two styles of pulley-menu - old from 1.1.7.x and new from 2.0.x.x. Nice and fast.",
"discussion": "",
"display_name": "Combined pulley menu",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 28,
"isCompatible": false,
"last_updated": "2019-01-05T14:43:11.060",
"name": "combined-pulley-menu",
"patch": "combined-pulley-menu",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.3"
},
"disable-volume-warning": {
"author": "Ancelad",
"available": true,
"category": "homescreen",
"compatible": [
"2.1.0.11",
"2.1.1.12",
"2.1.1.23",
"2.1.1.24",
"2.1.1.26",
"2.1.2.3",
"2.1.3.3",
"2.1.3.5",
"2.1.3.7",
"2.1.4.13",
"2.1.4.14",
"2.1.4.15",
"2.2.0.29",
"2.2.1.18",
"2.2.1.19",
"3.0.0.5",
"3.0.0.8",
"3.0.0.11",
"3.0.1.11"
],
"conflicts": [
],
"description": "It will disable volume warning window while you're listening music in headsets",
"discussion": "",
"display_name": "Disable volume warning",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_uk_cgi-2Dbin_webscr-3Fcmd-3D-5Fflow-26SESSION-3DhVYeAGavS9xiQLEsjhcKsgvrHIOzzDcGz5utLesVVBz72o8QXfG94MXuevC-26dispatch-3D5885d80a13c0db1f8e263663d3faee8d333dc9aadeed3fe0b5b299d55fd35542&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=zBJVCeqPkrEiTTso2oL1RUMF4z9xdIV-paWaGi-M-wc&e= ",
"id": 16,
"isCompatible": false,
"last_updated": "2019-01-05T14:45:23.818",
"name": "disable-volume-warning",
"patch": "disable-volume-warning",
"patched": false,
"rpm": "",
"sources": "",
"version": "0.0.2"
},
"enhanced-email-cover": {
"author": "Ancelad",
"available": true,
"category": "email",
"compatible": [
"2.1.3.7",
"2.1.4.13",
"2.1.4.14",
"2.1.4.15",
"2.2.0.29",
"2.2.1.18",
"2.2.1.19",
"3.0.0.5",
"3.0.0.8",
"3.0.0.11",
"3.0.1.11",
"3.0.1.14"
],
"conflicts": [
],
"description": "Returns "New email" cover action",
"discussion": "",
"display_name": "Enhanced email cover",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 42,
"isCompatible": false,
"last_updated": "2019-02-01T11:46:27.638",
"name": "enhanced-email-cover",
"patch": "enhanced-email-cover",
"patched": false,
"rpm": "",
"sources": "",
"version": "0.0.1"
},
"gallery-details-path": {
"author": "luen",
"available": true,
"category": "gallery",
"compatible": [
"2.1.3.7",
"2.1.4.13",
"2.1.4.14",
"2.1.4.15",
"2.2.0.29",
"2.2.1.18",
"2.2.1.19",
"3.0.0.5",
"3.0.0.8"
],
"conflicts": [
],
"description": "Adds the full path to the filename shown in the details page of pictures in Jolla Gallery.",
"discussion": "https://urldefense.proofpoint.com/v2/url?u=https-3A__together.jolla.com_question_52584_feature-2Drequest-2Dgallery-2Dto-2Dshow-2Dpath-2Din-2Ddetails_&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=QHPd8kzHZcHQjnUzW4Airk51F3_NdGCsJTe3ChmbAjs&e= ",
"display_name": "Show path in picture details",
"donations": "",
"id": 66,
"isCompatible": false,
"last_updated": "2018-11-13T16:08:51.336",
"name": "gallery-details-path",
"patch": "gallery-details-path",
"patched": false,
"rpm": "",
"sources": "",
"version": "1.0.0"
},
"launcher-combined": {
"author": "coderus",
"available": true,
"category": "homescreen",
"compatible": [
"3.0.1.11"
],
"conflicts": [
],
"description": "original",
"discussion": "",
"display_name": "Launcher combined",
"donations": "",
"id": 57,
"isCompatible": false,
"last_updated": "2019-01-11T05:58:46.664",
"name": "launcher-combined",
"patch": "launcher-combined",
"patched": true,
"rpm": "",
"sources": "",
"version": "3.0.1"
},
"remorse-timeouts-control": {
"author": "Ancelad",
"available": true,
"category": "silica",
"compatible": [
"3.0.2.8"
],
"conflicts": [
"return-old-remorse-item-animation",
"return-old-remorse-animation"
],
"description": "This will allow to control remorse items timeout.",
"discussion": "",
"display_name": "Remorse items timeouts control",
"donations": "",
"id": 21,
"isCompatible": false,
"last_updated": "2019-03-21T05:02:31.129",
"name": "remorse-timeouts-control",
"patch": "remorse-timeouts-control",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.5"
},
"return-old-button-style": {
"author": "Ancelad",
"available": true,
"category": "silica",
"compatible": [
"2.2.0.29",
"2.2.1.18",
"2.2.1.19",
"3.0.0.5",
"3.0.0.8",
"3.0.0.11",
"3.0.1.11"
],
"conflicts": [
],
"description": "It will return "old" button style to SailfishOS 2.0",
"discussion": "",
"display_name": "Return old button style",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 58,
"isCompatible": false,
"last_updated": "2019-01-05T14:42:11.013",
"name": "return-old-button-style",
"patch": "return-old-button-style",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.1"
},
"return-old-remorse-animation": {
"author": "Ancelad",
"available": true,
"category": "silica",
"compatible": [
"3.0.0.8",
"3.0.0.11",
"3.0.1.11"
],
"conflicts": [
"remorse-timeouts-control"
],
"description": "This will return old remorse popup animation (like in 1.1.7.x)",
"discussion": "",
"display_name": "Return old remorse popup animation",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 71,
"isCompatible": false,
"last_updated": "2019-01-05T14:40:40.448",
"name": "return-old-remorse-animation",
"patch": "return-old-remorse-animation",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.1"
},
"return-old-remorse-item-animation": {
"author": "Ancelad",
"available": true,
"category": "silica",
"compatible": [
"3.0.0.8",
"3.0.0.11",
"3.0.1.11"
],
"conflicts": [
"remorse-timeouts-control"
],
"description": "This will return old remorse items animation (like in 1.1.7.x)",
"discussion": "",
"display_name": "Return old remorse item animation",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 72,
"isCompatible": false,
"last_updated": "2019-01-05T14:41:04.579",
"name": "return-old-remorse-item-animation",
"patch": "return-old-remorse-item-animation",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.1"
},
"topmenu-control": {
"author": "Ancelad",
"available": true,
"category": "homescreen",
"compatible": [
"3.0.2.8"
],
"conflicts": [
],
"description": "Contains:\r\n- Enhanced powermenu patch with eugenio's swipe-to-lock patch\r\n- Eventsview control patch\r\n- New topmenu patch\r\n\r\nConflicts with eugenio's swipe-to-lock patch, disable it before use my patch.",
"discussion": "",
"display_name": "Topmenu control",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_uk_cgi-2Dbin_webscr-3Fcmd-3D-5Fflow-26SESSION-3DhVYeAGavS9xiQLEsjhcKsgvrHIOzzDcGz5utLesVVBz72o8QXfG94MXuevC-26dispatch-3D5885d80a13c0db1f8e263663d3faee8d333dc9aadeed3fe0b5b299d55fd35542&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=zBJVCeqPkrEiTTso2oL1RUMF4z9xdIV-paWaGi-M-wc&e= ",
"id": 67,
"isCompatible": false,
"last_updated": "2019-03-21T04:54:37.637",
"name": "topmenu-control",
"patch": "topmenu-control",
"patched": true,
"rpm": "",
"sources": "",
"version": "0.0.9"
},
"ultimate-statusbar": {
"author": "Ancelad",
"available": true,
"category": "homescreen",
"compatible": [
"3.0.2.8"
],
"conflicts": [
],
"description": "DISCLAIMER:\r\nPATCHMANAGER3 IS REQUIRED DUE SAFETY REASONS! PATCHMANAGER2 IS NOT SUPPORTED ANYMORE!\r\n\r\nPLEASE, UNAPPLY AND DELETE RPM-BASED PATCH MANUALLY BEFORE INSTALL THIS ONE!\r\n\r\nWARNING! MAY CAUSE BOOTLOOP IF YOU USE SAILFISHOS-PORTS! USE AT YOR OWN RISK!!!\r\n\r\nCombination of many statusbar patches:\r\n\r\nShow ringtone volume in statusbar\r\nShow presence indicator\r\nShow date when peeking\r\nCustom operator name\r\n- not available for Tablet\r\nShow statusbar on Sneak Peek screen\r\nEnlarge homescreen clock size by Schturman\r\nShow all indicators on lockscreen by alina\r\ncustom statusbar gradient-color and opacity\r\ncustom statusbar content-color\r\naliendalvik-runtime indicator",
"discussion": "",
"display_name": "Ultimate statusbar patch",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 65,
"isCompatible": false,
"last_updated": "2019-03-20T05:45:53.458",
"name": "ultimate-statusbar",
"patch": "ultimate-statusbar",
"patched": false,
"rpm": "",
"sources": "",
"version": "0.0.7"
},
"voicecall-combined": {
"author": "Ancelad",
"available": true,
"category": "phone",
"compatible": [
"3.0.2.8"
],
"conflicts": [
],
"description": "Combination of different patches with settings page: \r\n\r\n- swipe to remove in call log \r\n- "vibrate when connected" from base patches\r\n- alternative better call log\r\n- reduce hangup-animation duration\r\n- show number under calling person's name\r\n\r\nWARNING: patch conflicts with base patches, alternative better call log. Remove them before install this one.",
"discussion": "",
"display_name": "Voicecall combined patch",
"donations": "https://urldefense.proofpoint.com/v2/url?u=https-3A__www.paypal.com_cgi-2Dbin_webscr-3Fcmd-3D-5Fs-2Dxclick-26hosted-5Fbutton-5Fid-3DE33PBZ79WTQJY&d=DwIGAg&c=fbaT_DgZBVToMmtoR86Pug&r=B-fZ3qd0hWva-ZIHLSdiOWSB213tOuVygK4oPXMXIO0&m=aD4kEm6iUnb3b302zqGpz8knw3_ZDjIjGwJHFbTJQCk&s=xrnSSHSXFQvu4CHQoXVFtjA5ShCdEJbsZs_iJC3_xTU&e= ",
"id": 26,
"isCompatible": false,
"last_updated": "2019-03-20T04:53:31.707",
"name": "voicecall-combined",
"patch": "voicecall-combined",
"patched": false,
"rpm": "",
"sources": "",
"version": "0.1.0"
}
}
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCacheRoot()
May 17 19:20:25 Sailfish patchmanager[26065]: QVariant PatchManagerObject::getSettings(const QString&, const QVariant&) const "order" QVariant(QStringList, ()) QVariant(QStringList, ("combined-pulley-menu", "disable-volume-warning", "remorse-timeouts-control", "return-old-button-style", "return-old-remorse-animation", "return-old-remorse-item-animation", "topmenu-control", "ultimate-statusbar", "gallery-details-path", "voicecall-combined", "launcher-combined", "enhanced-email-cover", "sailfishos-display-sneak-peak", "patchmanager-volume-warning", "sailfishos-patch-improved-notification-preview"))
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "combined-pulley-menu" true
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "combined-pulley-menu" true
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/private/PulleyMenuBase.qml"
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica/private"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/PullDownMenu.qml"
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/PushUpMenu.qml"
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("combined-pulley-menu")
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:25 CEST 2019
----------------------------------

                                          combined-pulley-menu
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/private/PulleyMenuBase.qml
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/PullDownMenu.qml
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/PushUpMenu.qml
                                          patch unexpectedly ends in middle of line
                                          
                                          *** SUCCESS ***

May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "remorse-timeouts-control" true
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "remorse-timeouts-control" true
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/RemorseItem.qml"
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/RemorsePopup.qml"
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("remorse-timeouts-control")
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:25 CEST 2019
----------------------------------

                                          remorse-timeouts-control
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/RemorseItem.qml
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/RemorsePopup.qml
                                          
                                          *** SUCCESS ***

May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "return-old-button-style" true
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-button-style" true
May 17 19:20:25 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/Button.qml"
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:25 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("return-old-button-style")
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:25 CEST 2019
----------------------------------

                                          return-old-button-style
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/Button.qml
                                          
                                          *** SUCCESS ***

May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "return-old-remorse-animation" true
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-remorse-animation" true
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/RemorsePopup.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("return-old-remorse-animation")
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:26 CEST 2019
----------------------------------

                                          return-old-remorse-animation
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/RemorsePopup.qml
                                          Hunk #1 succeeded at 202 (offset 7 lines).
                                          Hunk #2 succeeded at 279 (offset 7 lines).
                                          
                                          *** SUCCESS ***

May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "return-old-remorse-item-animation" true
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-remorse-item-animation" true
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/Sailfish/Silica/RemorseItem.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/Sailfish/Silica"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("return-old-remorse-item-animation")
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:26 CEST 2019
----------------------------------

                                          return-old-remorse-item-animation
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/lib/qt5/qml/Sailfish/Silica/RemorseItem.qml
                                          Hunk #1 succeeded at 211 (offset 7 lines).
                                          Hunk #2 succeeded at 252 (offset 7 lines).
                                          
                                          *** SUCCESS ***

May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "topmenu-control" true
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "topmenu-control" true
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/layers/EdgeLayer.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/layers"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/layers/TopMenuLayer.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/layers"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/eventsview/EventsViewList.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/eventsview"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/topmenu/PowerButton.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/topmenu"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/topmenu/TopMenu.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/topmenu"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/com/jolla/settings/SettingsSlider.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/com/jolla/settings"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/lib/qt5/qml/com/jolla/settings/SettingsToggle.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/lib/qt5/qml/com/jolla/settings"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/compositor.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/topmenu/TopMenuWindow.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/topmenu"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("topmenu-control")
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:26 CEST 2019
----------------------------------

                                          topmenu-control
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/share/lipstick-jolla-home-qt5/layers/EdgeLayer.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/layers/TopMenuLayer.qml
                                          Hunk #2 succeeded at 28 with fuzz 2.
                                          checking file usr/share/lipstick-jolla-home-qt5/eventsview/EventsViewList.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/topmenu/PowerButton.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/topmenu/TopMenu.qml
                                          checking file usr/lib/qt5/qml/com/jolla/settings/SettingsSlider.qml
                                          checking file usr/lib/qt5/qml/com/jolla/settings/SettingsToggle.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/compositor.qml
                                          Hunk #1 succeeded at 665 (offset 11 lines).
                                          checking file usr/share/lipstick-jolla-home-qt5/topmenu/TopMenuWindow.qml
                                          
                                          *** SUCCESS ***

May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "launcher-combined" true
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "launcher-combined" true
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/Launcher.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherFolder.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherGrid.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/LauncherView.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/layers/LauncherLayer.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/layers"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconStack.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconBigGrid.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconCascade.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconGrid.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) processing: "/usr/share/lipstick-jolla-home-qt5/launcher/FolderIconLoader.qml"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::checkIsFakeLinked(const QString&) "/usr/share/lipstick-jolla-home-qt5/launcher"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("launcher-combined")
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: true
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:26 CEST 2019
----------------------------------

                                          launcher-combined
                                            contains text patch
                                          
                                          
                                          ----------------------------------
                                          Test if already applied patch
                                          ----------------------------------
                                          
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/Launcher.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/LauncherFolder.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/LauncherGrid.qml
                                          Hunk #2 succeeded at 61 (offset 3 lines).
                                          Hunk #3 succeeded at 249 (offset 3 lines).
                                          Hunk #4 succeeded at 325 (offset 3 lines).
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/LauncherView.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/layers/LauncherLayer.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/FolderIconStack.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/FolderIconBigGrid.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/FolderIconCascade.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/FolderIconGrid.qml
                                          checking file usr/share/lipstick-jolla-home-qt5/launcher/FolderIconLoader.qml
                                          
                                          *** SUCCESS ***

May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "sailfishos-display-sneak-peak" true
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-display-sneak-peak" true
May 17 19:20:26 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-display-sneak-peak"
May 17 19:20:26 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("sailfishos-display-sneak-peak")
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: false
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:26 CEST 2019
----------------------------------

                                          sailfishos-display-sneak-peak
                                          
                                          ERROR: /usr/share/patchmanager/patches/sailfishos-display-sneak-peak is not a directory or does not exist!
                                          
                                          *** FAILED ***

May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-display-sneak-peak" false
May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-display-sneak-peak"
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "patchmanager-volume-warning" true
May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "patchmanager-volume-warning" true
May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "patchmanager-volume-warning"
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("patchmanager-volume-warning")
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: false
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:27 CEST 2019
----------------------------------

                                          patchmanager-volume-warning
                                          
                                          ERROR: /usr/share/patchmanager/patches/patchmanager-volume-warning is not a directory or does not exist!
                                          
                                          *** FAILED ***

May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "patchmanager-volume-warning" false
May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "patchmanager-volume-warning"
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "sailfishos-patch-improved-notification-preview" true
May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patch-improved-notification-preview" true
May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patch-improved-notification-preview"
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("sailfishos-patch-improved-notification-preview")
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: false
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*)
----------------------------------
PM APPLY Fri May 17 19:20:27 CEST 2019
----------------------------------

                                          sailfishos-patch-improved-notification-preview
                                          
                                          ERROR: /usr/share/patchmanager/patches/sailfishos-patch-improved-notification-preview is not a directory or does not exist!
                                          
                                          *** FAILED ***

May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patch-improved-notification-preview" false
May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patch-improved-notification-preview"
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) "sailfishos-patchmanager-unapplyall" true
May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patchmanager-unapplyall" true
May 17 19:20:27 Sailfish patchmanager[26065]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patchmanager-unapplyall"
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Starting: "/usr/libexec/pm_apply" ("sailfishos-patchmanager-unapplyall")
May 17 19:20:27 Sailfish patchmanager[26065]: bool PatchManagerObject::doPatch(const QString&, bool, QString*) Success: false
May 17 19:20:32 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() Patchmanager: "3.0.57"
May 17 19:20:32 Sailfish patchmanager[26495]: QString getLang() "en_GB.utf8"
May 17 19:20:32 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() Translator loaded: false
May 17 19:20:32 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() Translator installed: false
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() Environment:
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() "HOME" = "/root"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() "USER" = "root"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() "PATH" = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() "DBUS_SESSION_BUS_ADDRESS" = "unix:path=/run/user/100000/dbus/user_bus_socket"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() "SHELL" = "/bin/sh"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() "NO_PM_PRELOAD" = "1"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() "LOGNAME" = "root"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() ld.so.preload:
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() /usr/lib/libpreloadpatchmanager.so
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() "/usr/libexec/pm_apply"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() QFlags(0x1|0x4|0x10|0x40|0x100|0x200|0x400|0x1000|0x2000|0x4000)
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() "/usr/libexec/pm_unapply"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::initialize() QFlags(0x1|0x4|0x10|0x40|0x100|0x200|0x400|0x1000|0x2000|0x4000)
May 17 19:20:33 Sailfish patchmanager[26495]: void Journal::init()
May 17 19:20:33 Sailfish patchmanager[26495]: void Journal::wait()
May 17 19:20:33 Sailfish patchmanager[26495]: "No carrier"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::getVersion()
May 17 19:20:33 Sailfish patchmanager[26495]: Received ssu version: "3.0.3.9"
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::lateInitialize()
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::refreshPatchList()
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::prepareCacheRoot()
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::startLocalServer()
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::registerDBus()
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::checkForUpdates()
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::doRefreshPatchList()
May 17 19:20:33 Sailfish patchmanager[26495]: QVariant PatchManagerObject::getSettings(const QString&, const QVariant&) const "applied" QVariant(QStringList, ()) QVariant(QStringList, ("launcher-combined", "sailfishos-patchmanager-unapplyall", "return-old-remorse-animation", "topmenu-control", "sailfishos-patch-improved-notification-preview", "return-old-button-style", "sailfishos-display-sneak-peak", "remorse-timeouts-control", "patchmanager-volume-warning", "combined-pulley-menu", "return-old-remorse-item-animation"))
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCacheRoot()
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "combined-pulley-menu" true
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "remorse-timeouts-control" true
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-button-style" true
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-remorse-animation" true
May 17 19:20:33 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-remorse-item-animation" true
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "topmenu-control" true
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "launcher-combined" true
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-display-sneak-peak" true
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-display-sneak-peak"
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-display-sneak-peak" false
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-display-sneak-peak"
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "patchmanager-volume-warning" true
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "patchmanager-volume-warning"
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "patchmanager-volume-warning" false
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "patchmanager-volume-warning"
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patch-improved-notification-preview" true
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patch-improved-notification-preview"
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patch-improved-notification-preview" false
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patch-improved-notification-preview"
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patchmanager-unapplyall" true
May 17 19:20:34 Sailfish patchmanager[26495]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patchmanager-unapplyall"
May 17 19:20:40 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCacheRoot()
May 17 19:20:40 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "combined-pulley-menu" true
May 17 19:20:40 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "remorse-timeouts-control" true
May 17 19:20:40 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-button-style" true
May 17 19:20:40 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-remorse-animation" true
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "return-old-remorse-item-animation" true
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "topmenu-control" true
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "launcher-combined" true
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-display-sneak-peak" true
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-display-sneak-peak"
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-display-sneak-peak" false
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-display-sneak-peak"
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "patchmanager-volume-warning" true
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "patchmanager-volume-warning"
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "patchmanager-volume-warning" false
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "patchmanager-volume-warning"
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patch-improved-notification-preview" true
May 17 19:20:41 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patch-improved-notification-preview"
May 17 19:20:42 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patch-improved-notification-preview" false
May 17 19:20:42 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patch-improved-notification-preview"
May 17 19:20:42 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patchmanager-unapplyall" true
May 17 19:20:42 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) Not installed: "sailfishos-patchmanager-unapplyall"
May 17 19:20:42 Sailfish patchmanager[26924]: void PatchManagerObject::doPrepareCache(const QString&, bool) "sailfishos-patchmanager-unapplyall" false
May 17 19:20:42 Sailfish estart[25554]: [W] unknown:0 - 5 "org.freedesktop.DBus.Error.NoReply" "Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken."
May 17 19:20:42 Sailfish estart[25554]: [W] unknown:0 - PatchManager::PatchManager(QObject*)::__lambda32 5 "org.freedesktop.DBus.Error.NoReply" "Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken."
May 17 19:20:42 Sailfish estart[25554]: [W] unknown:0 - PatchManager::PatchManager(QObject*)::__lambda33 5 "org.freedesktop.DBus.Error.NoReply" "Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken."
May 17 19:20:42 Sailfish estart[25554]: [W] unknown:0 - PatchManager::PatchManager(QObject*)::__lambda34 5 "org.freedesktop.DBus.Error.NoReply" "Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken."
May 17 19:20:42 Sailfish estart[25554]: [W] unknown:0 - PatchManager::PatchManager(QObject*)::__lambda35 5 "org.freedesktop.DBus.Error.NoReply" "Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken."
May 17 19:20:42 Sailfish estart[25554]: [W] unknown:0 - PatchManager::PatchManager(QObject*)::__lambda36 5 "org.freedesktop.DBus.Error.NoReply" "Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken."
May 17 19:20:42 Sailfish estart[25554]: [W] unknown:0 - PatchManager::PatchManager(QObject*)::__lambda37 5 "org.freedesktop.DBus.Error.NoReply" "Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken."
May 17 19:20:42 Sailfish estart[25554]: [W] unknown:0 - 17 "org.freedesktop.DBus.Error.TimedOut" "Failed to activate service 'org.SfietKonstantin.patchmanager': timed out"
May 17 19:20:42 Sailfish estart[25554]: [D] :53 - Failed to activate service 'org.SfietKonstantin.patchmanager': timed out

[Minor PM3 usability issue] List of Patches is not immediately refreshed, when uninstalling a Patch

When uninstalling a Patch (tested with an already unapplied RPM patch) in PM3's list of installed ("Available") Patches, the list is not refreshed immediately.
When trying to reapply the freshly uninstalled Patch (just for fun / testing), PM3 emits a notification "Failed to install patch" and crashes (the whole Settings app).

When reopening Patchmanager, the list entry is still there, but now empty (i.e., no Patch name displayed) Looking at its Patch details PM3 states, "This patch is no[t] available anymore. You won't be able to reinstall it." Hopefully I will be able to ever reinstall it (after a reboot or so). ;\

And ultimately PM3 does not crash, when trying to enable the "empty Patch" a second or third time: It just (correctly) emits a notification, "Failed to install patch".

Testing environment: PM3.0.51, SFOS2.0.2.29, sbj

[Feature suggestion] Indicate updateable Patches in the web catalog after entering it

Issue description: Currently one has to individually enter the sub-pages of all installed Patches in Patchmanager2's web catalog to look for updates. For RPM-Patches Warehouse handles this.

Possible solution: Indicate all installed Patches, for which an update is available, with some symbol (e.g. a star or a text "Update available") in the web catalog's top level list, after entering it (and hence refreshing the meta-data of all Patches available there).

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 10. (due to issue #9; filing this here as promised).

[Usability bug: Inconsistent wording] "install*" instead of "apply*" and "remove" instead of "unapply" used in notifications

Description:
The wording in Patchmanager2 consistently keeps "installing / uninstalling" and "applying / unapplying" a Patch clearly separate, which is excellent. But in the notifications "install*" instead of "apply*" and "remove" instead of "unapply" is used, which is confusing.

Possible solution:
Please alter the three notifications messages, e.g. as follows.
Note, I also removed the word "Patch" and the action taken repeated in each second line, because the second line is usually way too long for fitting into the transient notification pop-up in the upper left corner of the screen, and the duration the transient notification is displayed is too short for the second line to automatically scroll horizontally (it usually just starts scrolling shortly before the transient notification vanishes).
a. Patch installed : Patch XXX installed
--> Patch applied : "XXX"
b. Failed to install patch : Patch XXX installation failed
--> Failed to apply Patch : "XXX" conflicts with ["YYY" | and "ZZZ" | original file ]
c. When unapplying a Patch:
Patch removed : Patch XXX removed
--> Patch unapplied : "XXX"
d. But when uninstalling a Patch:
Patch removed : Removed patch XXX
--> Patch uninstalled : "XXX"
e. And it seems that:
Failed to remove patch : Patch removal failed
--> Failed to uninstall Patch : "XXX"
Or can Patches also fail to be unapplied (then one has to differentiate, as in c. & d.)?
f. Finally, the remorse timer label currently states
Uninstalling patch XXX in N seconds
which then ought be (just for consistency)
Uninstalling Patch "XXX" in N seconds

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 8. (due to issue #9; filing this here as promised).

[sort of solved-installation/dependency issue] Cannot apply any patches

I had to reset my Jolla 1 due to a failed downgrade to 2.1.0.11. (find the whole story here: https://together.jolla.com/question/168126/after-reset-and-updating-via-commandline-to-21011-phone-still-wants-to-install-11216/)

I am now back on a working 2.1.0.11 installation. But I cannot apply any patches. There is only a notification saying Failed to install patch. I tried with multiple different patches. It does not matter if I installed the patch via openrepos, via the webcatalog, or restored it from a backup of my filesystem.

I found the patchmanager CLI command, but I am not sure how to use it. I tried patchmanager -a /usr/share/patchmanager/patches/sailfishos-patch-volumecontrol/unified_diff.patch, but there is no output and nothing is changed.

What could be the problem?

patchmanager version: 2.3.3-10.41.1.jolla

EDIT: I did an strace of the above patchmanager command, and there was one curious line: read(8, "ERROR: Cannot find /usr/bin/patc"..., 34) = 34
So, I did a pkcon install patch, and after that I could apply patches via the GUI.

I had installed patchmanager via the warehouse app. So, there seems to be a problem with the dependencies.

PM3.0.61 crashes when trying to see the patch info on SFOS 3.2.0

Patchmanager 3.0.61 always crashes when trying to enter a Patch's information page on SailfishOS 3.2.0, regardless if that Patch is applied or not. It even happens when all Patches are unapplied.

"Crashing" means, Lipstick is restarted hard, and then all Patches are unapplied, Patchmanager's engine unloaded (Load engine entry in Patchmanager's pulley menu) and Patchmanager is in a special failure mode (Resolve failure entry in pulley).
Interestingly, entering and exiting the details page of any Patch works fine in this state.

  1. Using Resolve failure to resolve this results in returning to the original state: "PM3.0.61 always crashes when trying to enter a Patch's details page."
  2. Using Load engine to resolve this seems to make PM3.0.61 behave well, until Resolve failure is used (which then is still present in the pulley menu, apparently indicating that still something is wrong), ultimately ending up at point 1.

Under usability aspects, it is really annoying that all Patches are unapplied, after this issue has hit.

All this was working fine with Patchmanager 3.0.57 under SailfishOS 3.0.3 on this Xperia X.

As always, feel free to request special logs.

[Packaging bug] Each Patchmanager2 version should be installable only on the SFOS version(s) its built-in Patch is applicable to

IMO, each Patchmanager2 version should be only installable (by regular means) on the SailfishOS version(s) its built-in Patch "Unapply all patches on update" is applicable to.
Otherwise (as currently the case), users cannot apply this built-in Patch and have to take care about unapplying all Patches manually, when updating SailfishOS. This implicitly leads to a bad user experience and "accidents" due to still applied Patches while updating SailfishOS!
NB: Experienced users can always manually install any version of Patchmanager2 with rpm -ihv --force

Tested with Patchmanager 2.3.3-10.41.1.jolla (installs flawlessly, but built-in Patch fails to apply, as it is only for SFOS 2.1.1.24 / 2.1.1.26), 2.3.2-10.40.1.jolla (installs flawlessly, but built-in Patch fails to apply, as it is only for SFOS 2.1.1.23) and 2.3.1-10.39.1.jolla (installs and built-in Patch is applicable: O.K.) on a Jolla 1 phone under SFOS 2.1.0.11
Expected result: Patchmanager 2.3.3-10.41.1.jolla and 2.3.2-10.40.1.jolla fails to install (easily, i.e. without rpm --force) under SailfishOS 2.1.0.11

Hence please fix this packaging issue in future releases of Patchmanager2.

Originally reported on TMO.

[Usability issue] Missing ability to uninstall Patches in the web catalog (i.e. where they are installed)

As a Patch can be installed in a Patch details page within the Web catalog, I expected a possibility to uninstall them there as well. It took me quite a while to understand that both, Patches installed from Warehouse and Patches installed from the Web catalog, can be uninstalled by a long press on a installed Patch name in Patchmanager's installed Patches list.
Please provide a possibility to uninstall Patches in their Patch details page within the Web catalog as well (e.g. by a top pulley entry or by also a long press on an installed Patch version), as one expects an ability to uninstall, where one installs (this is already valid for RPM-Patches).
Still, I believe uninstalling by a long press on a installed Patch name in Patchmanager's installed Patches list should stay as well; once found, it is quite useful there and works for all Patches (regardless, if from Warehouse or the Web catalog).

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 2. (due to issue #9; filing this here as promised).

[Usability issue] Please move the entry "Unapply all patches" in Patchmanager's top level pulley menu one or two positions further up, i.e. *above* the "About" entry

Background: I accidentally selected "Unapply all patches" numerous times when trying to enter Patchmanager2's web catalog.
As entering the web catalog is often needed, the pulley menu entry "Unapply all patches" should be moved further away from the web catalog's entry.
Hence please move the entry "Unapply all patches" in Patchmanager2's top level pulley menu one or two positions further up, i.e. above the "About" entry.

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 11. (filing this here as promised).

[Minor usability bug] "Busy icon" displayed endlessly after a fresh install of Patchmanager3-beta

Patchmanager 3-beta displays an endlessly circling "busy icon" alongside the text "No patches available", when started the first time (i.e., when no Patch is installed).

Installing a single Patch (or more) resolves this.

Expected behaviour:
Patchmanager just displays an empty list of Patches (as there are none installed) or a static Message "No patches installed" (instead of "... available"), but not an continuously circling "busy icon" (while that may appear briefly).

Tested with Patchmanager 3.0.36 under SFOS 2.2.0

An (older) screenshot to depict this issue: screenshot_20171003_001

[Bug] Bug when applying multiple Patches in a row

Short description:
When applying multiple Patches one after the other, freshly enabled Patches are displayed as unapplied after a little while.

Steps to reproduce:

a. Install multiple new Patches (tested with 3 to 6). It does not matter, if from the Web catalog or via RPM (e.g. Warehouse).

b. Enable them one right after the other. Timing does not matter.

c. For each Patch, the cycle is:

  • When hitting the button, it lights up (O.K.)
  • A notification about installing this Patch is displayed (O.K.).
  • After applying the next Patch and waiting for a little while, the button is unlit, again (not O.K.).
    So finally it looks like only the last one of the freshly installed Patches is actually applied.

d. Exiting Patchmanager 2.0 and entering it again then correctly shows, which Patches are applied (and which are not).

Expected behaviour:
Buttons indicating an applied Patch stay lit, after applying multiple Patches in a row.

Edit: This seems the happen on every multiple "apply" / "unapply" actions in a row: After a while all toggled Patches are displayed as unapplied. Two toggle operations seem to be sufficient to trigger this bug (one of them an "apply" action), and when waiting long enough (not very long), it seems that even the last applied Patch becomes unlit.
This behaviour of Patchmanager 2 made me accidentally reappling an already applied Patch at least twice, but doing so does not seem to cause any harm.

Edit 2: Now I observed this happening even after applying just a single Patch: Waiting a few seconds, the freshly lit button becomes unlit again.

Tested with Patchmanager 2.3.1-10.39.1.jolla on a Jolla 1 phone under SFOS 2.1.0.11

Originally reported on TMO as issue 5. (due to issue #9; filing this here as promised).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.