Full Code of TheAssassin/AppImageLauncher for AI

master edd4ef418ece cached
141 files
843.2 KB
209.3k tokens
166 symbols
1 requests
Download .txt
Showing preview only (886K chars total). Download the full file or copy to clipboard to get everything.
Repository: TheAssassin/AppImageLauncher
Branch: master
Commit: edd4ef418ece
Files: 141
Total size: 843.2 KB

Directory structure:
gitextract_j5tkd942/

├── .dockerignore
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── dependabot.yml
│   └── workflows/
│       └── main.yml
├── .gitignore
├── .gitmodules
├── .idea/
│   └── codeStyles/
│       ├── Project.xml
│       └── codeStyleConfig.xml
├── BUILD.md
├── CMakeLists.txt
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── ci/
│   ├── .dockerignore
│   ├── Dockerfile
│   ├── build-docker-image.sh
│   ├── build-in-docker.sh
│   ├── build.sh
│   └── install-deps.sh
├── cmake/
│   ├── install.cmake
│   ├── modules/
│   │   └── FindINotify.cmake
│   ├── reproducible_builds.cmake
│   ├── scripts.cmake
│   ├── toolchains/
│   │   └── i386-linux-gnu.cmake
│   └── versioning.cmake
├── i18n/
│   ├── CMakeLists.txt
│   ├── auto-translate.py
│   ├── desktopfiles.ast.json
│   ├── desktopfiles.cs.json
│   ├── desktopfiles.de.json
│   ├── desktopfiles.en.json
│   ├── desktopfiles.es.json
│   ├── desktopfiles.fr.json
│   ├── desktopfiles.it.json
│   ├── desktopfiles.ko.json
│   ├── desktopfiles.nb_NO.json
│   ├── desktopfiles.nl.json
│   ├── desktopfiles.pl.json
│   ├── desktopfiles.pt.json
│   ├── desktopfiles.pt_BR.json
│   ├── desktopfiles.ru.json
│   ├── desktopfiles.tr.json
│   ├── desktopfiles.zh_Hans.json
│   ├── ui.ast.ts
│   ├── ui.cs.ts
│   ├── ui.de.ts
│   ├── ui.en.ts
│   ├── ui.es.ts
│   ├── ui.fr.ts
│   ├── ui.it.ts
│   ├── ui.nb_NO.ts
│   ├── ui.nl.ts
│   ├── ui.pl.ts
│   ├── ui.pt.ts
│   ├── ui.pt_BR.ts
│   ├── ui.pt_PT.ts
│   ├── ui.ru.ts
│   ├── ui.tr.ts
│   └── ui.zh_Hans.ts
├── resources/
│   ├── AppImageLauncher.1.in
│   ├── CMakeLists.txt
│   ├── ail-cli.desktop
│   ├── appimagelauncher-lite-AppRun.sh
│   ├── appimagelauncher-lite-installer-common.sh
│   ├── appimagelauncher-lite.desktop
│   ├── appimagelauncher.desktop
│   ├── appimagelauncherd.desktop
│   ├── appimagelauncherd.service.in
│   ├── appimagelaunchersettings.desktop
│   ├── binfmt.d/
│   │   └── appimagelauncher.conf.in
│   ├── fallback-icons/
│   │   └── .gitignore
│   ├── icons/
│   │   └── generate-icons.sh
│   ├── install-scripts/
│   │   ├── post-install.in
│   │   └── post-uninstall.in
│   └── mime/
│       └── packages/
│           └── appimage.xml
└── src/
    ├── CMakeLists.txt
    ├── binfmt-bypass/
    │   ├── CMakeLists.txt
    │   ├── bypass_main.cpp
    │   ├── elf.cpp
    │   ├── elf.h
    │   ├── fix-preload-library.sh
    │   ├── interpreter_main.cpp
    │   ├── lib.cpp
    │   ├── lib.h
    │   ├── logging.h
    │   └── preload.c
    ├── cli/
    │   ├── CMakeLists.txt
    │   ├── cli_main.cpp
    │   ├── commands/
    │   │   ├── CMakeLists.txt
    │   │   ├── Command.h
    │   │   ├── CommandFactory.cpp
    │   │   ├── CommandFactory.h
    │   │   ├── IntegrateCommand.cpp
    │   │   ├── IntegrateCommand.h
    │   │   ├── UnintegrateCommand.cpp
    │   │   ├── UnintegrateCommand.h
    │   │   ├── WouldIntegrateCommand.cpp
    │   │   ├── WouldIntegrateCommand.h
    │   │   └── exceptions.h
    │   └── logging/
    │       ├── CMakeLists.txt
    │       └── logging.h
    ├── daemon/
    │   ├── CMakeLists.txt
    │   ├── daemon.cpp
    │   ├── daemon.h
    │   ├── main.cpp
    │   ├── worker.cpp
    │   └── worker.h
    ├── fswatcher/
    │   ├── CMakeLists.txt
    │   ├── filesystemwatcher.cpp
    │   └── filesystemwatcher.h
    ├── i18n/
    │   ├── CMakeLists.txt
    │   ├── translationmanager.cpp
    │   └── translationmanager.h
    ├── shared/
    │   ├── CMakeLists.txt
    │   ├── shared.cpp
    │   ├── shared.h
    │   ├── types.cpp
    │   └── types.h
    ├── trashbin/
    │   ├── CMakeLists.txt
    │   ├── trashbin.cpp
    │   └── trashbin.h
    └── ui/
        ├── CMakeLists.txt
        ├── first-run.cpp
        ├── first-run.h
        ├── first-run.ui
        ├── integration_dialog.cpp
        ├── integration_dialog.h
        ├── integration_dialog.ui
        ├── main.cpp
        ├── remove.ui
        ├── remove_main.cpp
        ├── resources.qrc
        ├── settings_dialog.cpp
        ├── settings_dialog.h
        ├── settings_dialog.ui
        ├── settings_main.cpp
        ├── update.ui
        ├── update_main.cpp
        └── update_spinner.qml

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
# ignore everything but ci/ and lib/AppImageUpdate/ci/
# note that the last line that matches a file decides, so ! rules after * decide which files to include
*
!ci/
!lib/AppImageUpdate/ci/


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: "Bug report"
description: "Report a bug to help us improve AppImageLauncher"
labels: ["bug", "needs verification"]
body:
- type: markdown
  attributes:
    value: |
      Thank you for making AppImageLauncher better by reporting a bug. Please fill in as much information as possible about your bog so that we do not have to play "information ping-pong" but can help you immediately.

      If this is the first time you report a bug, please read https://www.chiark.greenend.org.uk/~sgtatham/bugs.html.

      Please note: this is an issue tracker. ***Questions may not be asked here.*** Instead, please visit the IRC channel `#appimage` on Libera.Chat. See https://docs.appimage.org/contact.html for more information.
- type: checkboxes
  id: pre-submit-checks
  attributes:
    label: Pre-submit checks
    description: |
      Before submitting a bug report, please make sure you check the following boxes. Otherwise, your issue will not be processed.
    options:
      - label: I [checked for similar issues](https://github.com/TheAssassin/AppImageLauncher/issues?q=) beforehand, but could not find any, not even closed ones. I could not add my bug report to any existing issue.
        required: true
      - label: I am going to take the time to to fill in all the required details. I know that the bug report will be dismissed otherwise.
        required: true
- type: textarea
  id: description
  attributes:
    label: Describe the bug
    description: Please describe the bug as precisely as possible. You cannot add too many details, every information is important!
    placeholder: While clicking on button [...], the application unexpectedly [...]
  validations:
    required: true
- type: textarea
  id: expected-behavior
  attributes:
    label: Expected behavior
    description: Describe what you think should have happened instead as precisely as possible.
    placeholder: "I expected to see [...]"
  validations:
    required: true
- type: textarea
  id: to-reproduce
  attributes:
    label: Steps to reproduce the issue
    description: |
      We need to reproduce the issue in a neutral environment in order to understand what causes it.
      Please describe the steps needed to do to trigger the bug as detailedly as possible.
    placeholder: |
      1. Go to [...]
      2. Click on [...]
      3. Scroll down to [...]
      4. See the error message
- type: textarea
  id: screenshots
  attributes:
    label: Screenshots
    description: Please add screenshots if possible that visualize your problem and/or show how to reproduce the bug.
    placeholder: ![screenshot describing the issue](https://raw.githubusercontent.com/TheAssassin/AppImageLauncher/master/resources/doc/screenshot.png)
- type: textarea
  id: distro
  attributes:
    label: Distribution and desktop environment
    description: |
      We need precise information about your computer's operating system. Please include version numbers.
      You can find guides about varying distributions and desktop environments on [this Wiki page](https://github.com/TheAssassin/AppImageLauncher/wiki/Find-information-about-distribution-and-desktop-environment).
  validations:
    required: true
- type: textarea
  id: appimagelauncher-version
  attributes:
    label: Installed AppImageLauncher version
    description: Please post the output of `AppImageLauncher --appimagelauncher-version`.
    placeholder: For example, AppImageLauncher version 2.2.0 (git commit ea0984c), built on 2021-12-22 22:03:21 UTC
  validations:
    required: true
- type: textarea
  id: appimages-tried
  attributes:
    label: List of AppImages you tried (ideally with URL)
    description: Please post a list of AppImages you tried (including the information whether they work or not, a version number or filename, ideally also a URL)
    placeholder: |
      - FreeCAD 0.19.3 (working), https://github.com/FreeCAD/FreeCAD/releases/download/0.19.3/FreeCAD_0.19.3-Linux-Conda_glibc2.12-x86_64.AppImage
      - Subsurface Divelog 5.0.5 (broken), using download button on https://subsurface.github.io/de/download/
- type: textarea
  id: additional-context
  attributes:
    label: Additional context
    description: Any other information you'd like to include.



================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false

contact_links:
  - name: 💬 IRC Webchat
    url: https://web.libera.chat/#appimage
    about: Chat with the AppImage community in `#appimage` on the Libera.Chat IRC network
  - name: 💡 AppImageKit issue tracker
    url: https://github.com/AppImage/AppImageKit
    about: Issues regarding AppImages in general need to be opened there.
  - name: 💡 libappimage issue tracker
    url: https://github.com/AppImage/libappimage
    about: The right place to open issues about the desktop integration of AppImages.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: "Feature request"
description: "Suggest an idea for this project"
labels: ["enhancement"]
body:
- type: markdown
  attributes:
    value: |
      Thank you for making AppImageLauncher better by suggesting a feature. Your ideas are highly welcome! It's a tool for you, the users, after all.

      Please try to describe your proposal as precisely as possible, including as many details as you can. Please don't hesitate to add screenshots or mockups.

      Please note: this is an issue tracker. ***Questions may not be asked here.*** Instead, please visit the IRC channel `#appimage` on Libera.Chat. See https://docs.appimage.org/contact.html for more
- type: checkboxes
  id: pre-submit-checks
  attributes:
    label: Pre-submit checks
    description: |
      Before submitting a bug report, please make sure you check the following boxes. Otherwise, your issue will not be processed.
    options:
      - label: I checked for similar issues beforehand, but could not find any. I could not add my proposal to any existing issue.
        required: true
      - label: I am going to take the time to to fill in all the required details. I know that the bug report will be dismissed otherwise.
        required: true
- type: textarea
  id: description
  attributes:
    label: Feature description
    description: Is your feature request to a problem? Please describe your suggestion as detailedly as possible.
    placeholder: I would like to have another button that [...]
  validations:
    required: true
- type: textarea
  id: proposed-solution
  attributes:
    label: Proposed solution
    description: Describe the solution you would like to see.
    placeholder: Instead of the current blue button, I would like a yellow button that says [...]
  validations:
    required: true
- type: textarea
  id: alternatives
  attributes:
    label: Alternative solutions you considered
    description: |
      Please list alternative solutions or features you considered to cover your use case. Ideally, include their pros and cons.
- type: textarea
  id: additional-context
  attributes:
    label: Additional context
    description: Any other information you'd like to include, for instance, screnshots, mockups, etc.
---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "docker"
    directory: "/ci"
    schedule:
      interval: "weekly"

  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"


================================================
FILE: .github/workflows/main.yml
================================================
name: Continuous builds

on: [push, pull_request, workflow_dispatch]

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        include:
          - NAME: Packages x86_64
            RUNS_ON: ubuntu-24.04
            DOCKER_PLATFORM: linux/amd64
          - NAME: Packages aarch64
            RUNS_ON: ubuntu-24.04-arm
            DOCKER_PLATFORM: linux/arm64/v8
          - NAME: Packages armhf
            RUNS_ON: ubuntu-24.04-arm
            DOCKER_PLATFORM: linux/arm/v7
          - NAME: Lite AppImage x86_64
            RUNS_ON: ubuntu-24.04
            DOCKER_PLATFORM: linux/amd64
            BUILD_LITE: 1
          - NAME: Lite AppImage aarch64
            RUNS_ON: ubuntu-24.04-arm
            DOCKER_PLATFORM: linux/arm64/v8
            BUILD_LITE: 1
          - NAME: Lite AppImage armhf
            RUNS_ON: ubuntu-24.04-arm
            DOCKER_PLATFORM: linux/arm/v7
            BUILD_LITE: 1

    name: ${{ matrix.NAME }}
    env:
      DOCKER_PLATFORM: ${{ matrix.DOCKER_PLATFORM }}
      DIST: ${{ matrix.DIST }}
      BUILD_LITE: ${{ matrix.BUILD_LITE }}
    runs-on: ${{ matrix.RUNS_ON }}
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: 'recursive'
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build in Docker
        run: bash -ex ci/build-in-docker.sh
      - name: Archive artifacts
        uses: actions/upload-artifact@v6
        with:
          name: build ${{ matrix.NAME }}
          path: |
              appimagelauncher*.deb*
              appimagelauncher*.rpm*
              appimagelauncher*.tar*
              appimagelauncher-lite-*.AppImage*

  upload:
    name: Create release and upload artifacts
    needs:
      - build
    runs-on: ubuntu-latest
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v8
      - name: Inspect directory after downloading artifacts
        run: ls -alFR
      - name: Create release and upload artifacts
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          WEBDAV_URL: ${{ secrets.WEBDAV_URL }}
          WEBDAV_USER: ${{ secrets.WEBDAV_USER }}
          WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
          APPIMAGE_EXTRACT_AND_RUN: 1
        run: |
            wget -q https://github.com/TheAssassin/pyuploadtool/releases/download/continuous/pyuploadtool-x86_64.AppImage
            chmod +x pyuploadtool-x86_64.AppImage
            ./pyuploadtool-x86_64.AppImage **/appimagelauncher*.{deb,rpm,AppImage*}


================================================
FILE: .gitignore
================================================
cmake-build-*/
build*/
*.AppImage*
*.deb*
*.tar*
cmake/GIT_COMMIT
squashfs-root/
*.qm
resources/l10n/*
*.html
*.swp
*.rpm*


================================================
FILE: .gitmodules
================================================


================================================
FILE: .idea/codeStyles/Project.xml
================================================
<component name="ProjectCodeStyleConfiguration">
  <code_scheme name="Project" version="173">
    <CMakeCodeStyleSettings>
      <option name="FORCE_COMMANDS_CASE" value="1" />
    </CMakeCodeStyleSettings>
    <Objective-C>
      <option name="SPACE_BEFORE_POINTER_IN_DECLARATION" value="false" />
      <option name="SPACE_AFTER_POINTER_IN_DECLARATION" value="true" />
      <option name="SPACE_BEFORE_REFERENCE_IN_DECLARATION" value="false" />
      <option name="SPACE_AFTER_REFERENCE_IN_DECLARATION" value="true" />
    </Objective-C>
    <codeStyleSettings language="CMake">
      <indentOptions>
        <option name="CONTINUATION_INDENT_SIZE" value="4" />
      </indentOptions>
    </codeStyleSettings>
    <codeStyleSettings language="ObjectiveC">
      <indentOptions>
        <option name="CONTINUATION_INDENT_SIZE" value="4" />
      </indentOptions>
    </codeStyleSettings>
    <codeStyleSettings language="Shell Script">
      <indentOptions>
        <option name="INDENT_SIZE" value="4" />
        <option name="TAB_SIZE" value="4" />
      </indentOptions>
    </codeStyleSettings>
  </code_scheme>
</component>

================================================
FILE: .idea/codeStyles/codeStyleConfig.xml
================================================
<component name="ProjectCodeStyleConfiguration">
  <state>
    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
  </state>
</component>

================================================
FILE: BUILD.md
================================================
# How to build AppImageLauncher

**Note:** This file was contributed by a user. It may be out of date.

If there are no pre-build binaries for your platform you may consider to build AppImageLauncher yourself. Please follow these instructions.


## Download source

This step is only required if you would like to build the source from GitHub. *If you have a local copy, please skip this section.*

You can download the source either using Git or by mannually downloading a tarball on the [Releases page](https://github.com/TheAssassin/AppImageLauncher/releases).

The branch can be customized by setting the `-b` or `--branch` argument. Select `stable` to download the current stable source or use `master` to get the most current unstable source containing the latest features.

```shell
git clone https://github.com/TheAssassin/AppImageLauncher.git -b stable
cd AppImageLauncher
git submodule update --init --recursive
```


## Dependencies

All dependencies need to be installed as development libraries. Some names may differ on your system.

 - make
 - cmake
 - glib-2
 - cairo
 - librsvg
 - fuse
 - libarchive
 - libXpm
 - qt5
 - libcurl
 - boost

For Ubuntu/Debian systems, this might look like:

```bash
sudo apt install make cmake libglib2.0-dev libcairo2-dev librsvg2-dev libfuse-dev libarchive-dev libxpm-dev libcurl4-openssl-dev libboost-all-dev qtbase5-dev qtdeclarative5-dev qttools5-dev-tools patchelf libc6-dev libc6-dev gcc-multilib g++-multilib
```

## Build

Please update the `PREFIX` if you want. The prefix is the location the final application will be installed to. Usual locations may be `/usr/local` (default), `/usr`, `~/.local` or `/opt`.

```shell
export PREFIX="/usr/local/"
mkdir build
cd build

cmake .. -DCMAKE_INSTALL_PREFIX="$PREFIX" -DUSE_SYSTEM_BOOST=true

# See https://github.com/TheAssassin/AppImageLauncher/issues/251 for more details why this is required
make libappimage libappimageupdate libappimageupdate-qt
cmake .

make
```

Now you may create a distribution package or alternatively install the source for testing purpose.

*Note: This may harm your system. It's highly recommended to build and install distribution packages instead.*

```shell
sudo make install
```


================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.5)

project(AppImageLauncher)

# versioning
include(cmake/versioning.cmake)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake/modules)

include(cmake/scripts.cmake)

include(cmake/reproducible_builds.cmake)

# support for ccache
# call CMake with -DUSE_CCACHE=ON to make use of it
option(USE_CCACHE OFF)
if(USE_CCACHE)
    find_program(CCACHE ccache)
    if(CCACHE)
        message(STATUS "Using ccache")
        set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE})
        set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE})
    else()
        message(WARNING "USE_CCACHE set, but could not find ccache")
    endif()
endif()

# used by Debian packaging infrastructure
include(GNUInstallDirs)

# if there's a system libappimage package on the system, we can use that directly
option(USE_SYSTEM_LIBAPPIMAGE OFF)

# if the system version should be used, import globally _before_ including third-party stuff and own executables/libs
if(USE_SYSTEM_LIBAPPIMAGE)
    find_package(libappimage REQUIRED)
endif()

include(FetchContent)

# AppImageUpdate is needed for the updater UI (and libappimage)
FetchContent_Declare(AppImageUpdate
    GIT_REPOSITORY https://github.com/AppImageCommunity/AppImageUpdate.git
    GIT_TAG 2.0.0-alpha-1-20251018
    EXCLUDE_FROM_ALL
)

# work around Wimplicit-function-declaration in ancient squashfuse code
set(DEPENDENCIES_CFLAGS "-Wno-implicit-function-declaration" CACHE STRING "" FORCE)

option(ENABLE_UPDATE_HELPER ON)
if(ENABLE_UPDATE_HELPER)
    # instruct AppImageUpdate to build the Qt UI
    set(BUILD_QT_UI ON CACHE BOOL "" FORCE)
endif()

# note: for the time being, we require AppImageUpdate to be fetched during build, even if only to make libappimage available
FetchContent_MakeAvailable(AppImageUpdate)

# install resources, bundle libraries privately, etc.
# initializes important installation destination variables, therefore must be included before adding subdirectories
include(cmake/install.cmake)

add_subdirectory(src)

# contains install configs for resource files
add_subdirectory(resources)

# translation management
add_subdirectory(i18n)


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to AppImageLauncher

There are many ways how you can help improve the AppImageLauncher project. Everyone with some interest in technology, not just developers, can help make the project better. Any contribution is welcome!


## Translations

AppImageLauncher is developed in the English language. If you speak any other language (e.g., your mother language or a foreign language), you can help translate AppImageLauncher into that language.

To translate AppImageLauncher, you can use the very good [Weblate](https://weblate.org). We run [our own instance](https://translate.assassinate-you.net/projects/appimagelauncher/). Just sign up there and start translating strings.

You can also review and improve existing translations.

During development, strings regularly change, and new strings are added while olds are removed. Therefore, you're welcome to check from time to time whether there's new work to be done. We appreciate every contribution.


## Documentation & Tutorials

AppImageLauncher is a tool for everyone, not just tech savvy people. However, there is a lack of documentation. We invite every interested user to improve our README, add and edit our
[Wiki](https://github.com/TheAssassin/AppImageLauncher/wiki), write articles, make (video) tutorials etc. The only limit is your imagination!

The README already links to a lot of articles, videos, podcasts and potentially other media. If you find some more and want them to be added to the list, just send a
[pull request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests).


## Bug reporting

If you encounter a problem and consider it to be a bug, please do not hesitate to [open a new issue](https://github.com/TheAssassin/AppImageLauncher/issues/new). Even if you can't help fix the problem, reporting it is required
and the only way for you to receive a solution. Also, if the problem is affecting others, too, others can find the discussion online and find out how to solve the issue.

Please make sure to add as many details as possible to your bug report. This way, the developers can focus on finding a solution instead of playing information ping-pong.

See also: https://www.chiark.greenend.org.uk/~sgtatham/bugs.html (but please don't send bug reports to Simon Tatham!)


## Feature requests

You can also [open a new issue](https://github.com/TheAssassin/AppImageLauncher/issues/new) to request new features. If you have an idea and think it might help the users of the project, please don't hesitate to send it to us.

Please describe your idea as detailedly as possible.


## Fix bugs and send pull requests

If you encounter a bug and have the skill and ability to find the solution even, please feel free to send us a pull request. Any contribution is welcome!


================================================
FILE: LICENSE.txt
================================================
Copyright (C) 2018-2020 TheAssassin <theassassin@assassinate-you.net>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# AppImageLauncher
makes your Linux desktop AppImage ready™
<p align="center">
<img src="https://github.com/TheAssassin/AppImageLauncher/raw/master/resources/icons/hicolor/128x128/apps/AppImageLauncher.png"/>
</p>

Integrate AppImages to your application launcher with one click, and manage, update and remove them from there.
Double-click AppImages to open them, without having to make them executable first.

AppImageLauncher plays well with other applications managing AppImages, for example app stores.
However, it doesn't depend on any of those, and can run completely standalone.

<p align="center">
<img src="https://github.com/TheAssassin/AppImageLauncher/raw/master/resources/doc/screenshot.png"/>
</p>

> ### :smiley: Info on how to install and use AppImageLauncher on the [wiki](https://github.com/TheAssassin/AppImageLauncher/wiki).

AppImageLauncher is a novel and unique solution of integrating with the system. It intercepts all attempts to open an AppImage to provide its integration features.

Being the launcher for AppImages, AppImageLauncher can control how the system treats AppImages. It integrates them into the system, provides helpers for updating or removing AppImages, and a lot more.

On their first execution (i.e., if they have not been integrated yet), it displays a dialog prompting the user whether to run the AppImage once, or move it to a predefined location and adding it to the application menus, launchers, etc.


## Features

### AppImage desktop integration

This core feature allows you to integrate AppImages you download into your application menu or launcher, to make it easier for you to launch them. It also takes care of moving them into a central location, where you can find them later.
Furthermore, it sets up the update and removal entries in the launcher for you.

AppImages use the term "desktop integration", as they're not "installed" in the traditional sense. They remain single, self-contained executable files. AppImageLauncher and other tools extract and patch the [desktop entry](https://specifications.freedesktop.org/desktop-entry-spec/latest/) as well as the related [icons](https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html) into the relevant locations.
More information on desktop integration can be found in the [AppImage docs](https://docs.appimage.org/reference/desktop-integration.html).


### Update management

After desktop integration, the context menu of the AppImage's entry in the application launcher will have an "Update" entry that launches a little helper tool to apply updates.


### Remove AppImages from system

Click the "Remove" entry in the context menu in the application launcher and the removal tool will ask you to confirm.
If you choose to do so, the desktop integration is undone, and the file is removed from your system.


### CLI

The packages ship with a CLI tool called `ail-cli`, providing basic operations in the terminal, for automation in scripts etc. As of February 2020, only integration and unintegration are supported. More features planned!


## Differences between regular and Lite version

From version 1.4.0, there's a *Lite* edition of AppImageLauncher.
It provides all of AppImageLauncher you can get without having root access to your computer. AppImageLauncher Lite is shipped as an AppImage, which can be installed by users from the command-line.
Enter `./appimagelauncher-lite...AppImage install`. in a terminal, and it integrates itself in the users' home directory.

**Traditional packages are highly recommended *if possible*, as they provide many more features and provide a much better overall experience.**

*Note: if you're interested in a GUI installer, please consider sending a pull request. More information in [#243](https://github.com/TheAssassin/AppImageLauncher/issues/243).*

## About

Currently, desktop environments consider executables a security risk, and would rather have users use the app stores they include.

The ability to easily run them, however, isn't all that's needed to provide a good AppImage desktop experience. Making them accessible from the application menus and launchers is a level of "desktop integration" that can't be provided by the AppImages themselves properly (even though some AppImages ship with a "desktop integration script" prompting the user to do so). There are too many impliciations requiring external software, especially regarding cleanup and removal of AppImages. (If applications are simply made executable, they're still spread all over the users' personal files and folders.) The average user will not find a "Downloads" directory full of AppImages with cryptic filenames friendly.

Therefore, system-side ways have been developed to perform the desktop integration.
One of the first solutions was [appimaged](https://github.com/AppImage/appimaged), a daemon users could install to perform everything automagically in the background, without notifying the user in any way.
It scans a predefined set of directories including `~/Downloads` and `~/.bin`, making recognized AppImages executable and then performing the desktop integration. Those operations and monitoring produced a lot of file I/O, so were rather inefficent. Also, many users don't like the lack of control. The approach also opens attack vectors and thus can be considered a security hazard, as a vulnerability discovered in appimaged recently has shown.


## As seen in

### :movie_camera: Tutorials:

* [Eric Adams](https://invidio.us/watch?v=D2WA2zdLvVk)


### :sound: Podcasts:

* [DLN Xtend 11h](ttps://dlnxtend.com/11)
  + [Invidious](https://invidio.us/watch?v=yaZygqyN_KE)
* [DLN Xtend 14](https://dlnxtend.com/14)
  + [Invidious](https://invidio.us/watch?v=QCkJ74kOlGQ)


### :page_facing_up: Articles

  * [Linux Uprising](https://www.linuxuprising.com/2018/04/easily-run-and-integrate-appimage-files.html) (English)
  * [Linux-OS.net](https://linux-os.net/appimagelauncher-ejecuta-e-integra-facilmente-aplicaciones-en-appimage/) (Spanish)
    + Same article also available [here](https://blog.desdelinux.net/appimagelauncher-ejecuta-e-integra-facilmente-aplicaciones-en-appimage/).
  * [Edvaldo Brito](https://www.edivaldobrito.com.br/integrador-appimagelauncher-no-linux/) (Portuguese)
  * [przystajnik](https://404.g-net.pl/2018/08/appimagelauncher/) (Polish)
  * [Linux Mint Magyar Közösség](https://linuxmint.hu/blog/2018/12/appimage) (Hungarian)
  * [FreeYourDesktop](https://medium.com/@freeyourdesktopblog/install-manage-appimages-with-appimagelauncher-2a2078c55f37) (English)
    + Please note that AppImageLauncher could *not* be "installed" via AppImage at that time, only recently was a Lite version added, that now can be installed from an AppImage (more info to follow.)
  * [Pardus forum](https://forum.pardus.org.tr/t/appimagelauncher-tek-tiklama-ile-appimage-sisteminizle-butunlestiriniz/11275) (Turkish)
  * [Linux Team Vietnam](https://linuxteamvietnam.us/cach-chay-ung-dung-dinh-dang-appimage-tren-linux/) (Vietnamese)
    + Contains a few wrong assumptions: as soon as AppImageLauncher is installed, you do not have to make AppImages executable, you can just double-click them (or otherwise open them, e.g., from your file- or web-browsers' downloads).
  * [RealLinuxUser](https://www.reallinuxuser.com/15-best-things-to-do-after-installing-zorin-os-15/) (English)
  * [manjaro.site](https://manjaro.site/how-to-install-appimage-launcher-on-ubuntu-19-04/) (English)
  * [CubicleNate's Techpad](https://cubiclenate.com/2020/01/09/appimagelauncher-appimage-manager-on-opensuse/) (English)
    + See also: [CubicleNate's Techpad](https://cubiclenate.com/2020/01/10/noodlings-lighting-the-emby-server-with-kdenlive/)
  * [CHRIS R MILLER](https://chrisrmiller.com/2019/05/29/integrate-appimages-into-your-linux-distro/) (English)
  * [doLys Forum](https://dolys.fr/forums/topic/gerer-les-appimage-sous-linux/) (French)
  * [LINUXUSER](https://linux-user.gr/t/eykolh-chrhsh-efarmogwn-appimage/2066) (Greek)


## Installation

### System-wide Installation

AppImageLauncher integrates deeply into the system. Therefore, an installation via native system packages is the preferred way to install AppImageLauncher. This way, AppImageLauncher's package can perform the necessary steps to have your system use it for all AppImage invocations.

Compatibility table (likely incomplete.) Please, feel free to open PRs to add distributions.

| Release filename | Build system | Compatible distributions (incomplete) |
| ---------------- | ------------ | ------------------------------------- |
| `appimagelauncher-<version>.xenial_(amd64,i386).deb` | Ubuntu Xenial | Ubuntu Xenial (16.04), Debian Stretch (9), Netrunner 17.01 |
| `appimagelauncher-<version>.bionic_(amd64,i386).deb` | Ubuntu Bionic | Ubuntu Bionic (18.04), Ubuntu Disco (19.04), Ubuntu Eoan (19.10) and newer, Debian buster (10) and newer, Netrunner 19.01, 19.08 and newer, LMDE 6 "Faye" |
| ~~`appimagelauncher-<version>.disco_(amd64,i386).deb`~~  | ~~Ubuntu Disco~~  | ~~Ubuntu Disco (19.04)~~ |
| ~~`appimagelauncher-<version>.eoan_(amd64,i386).deb`~~   | ~~Ubuntu Eoan~~   | ~~Ubuntu Eoan (19.10) and newer~~ |
| ~~`appimagelauncher-<version>.buster_(amd64,i386).deb`~~ | ~~Debian Buster~~ | ~~Debian Buster (10) and newer, Netrunner 19.01 and 19.08~~ |
| `appimagelauncher-<version>.(i386,x86_64).rpm`       | Ubuntu Xenial | openSUSE Leap 42 and newer, possibly openSUSE Tumbleweed, SUSE Enterprise Linux, RHEL 7, CentOS 7 |

  - Ubuntu Trusty (14.04) and newer
    - **Important:** Ubuntu Bionic (and newer) broke with the backwards compatibility of its `libcurl` packages, therefore users of these systems need to install the special `bionic` package
  - Debian stable (Jessie, 8) and newer
  - Netrunner 17 and newer
  - openSUSE Leap 42 and newer
  - openSUSE Tumbleweed

The installation of packages on systems with a set of packages similar to one of the listed ones (e.g., Linux Mint, Fedora, etc.) should work as well.

Manjaro and Netrunner Rolling users can install AppImageLauncher with a distribution-provided package called `appimagelauncher`.

Arch Linux, Manjaro, Antergos and Netrunner Rolling users can use AUR to install AppImageLauncher by installing [appimagelauncher](https://aur.archlinux.org/packages/appimagelauncher) or [appimagelauncher-git](https://aur.archlinux.org/packages/appimagelauncher-git) (possibly broken, see [#574](https://github.com/TheAssassin/AppImageLauncher/issues/574)) (thanks @NuLogicSystems for setting up the build). 

Other systems derived from the listed ones, such as for instance Linux Mint (Ubuntu), should support AppImageLauncher as well.
If they don't, please don't hesitate to create an issue.

**Note:** Feel free to request support for other distributions by [opening an issue](https://github.com/TheAssassin/AppImageLauncher/issues/new).


### Build from source

Build instructions in [BUILD.md](BUILD.md).


## Background

Technical details about how AppImageLauncher registers itself on [this wiki page](https://github.com/TheAssassin/AppImageLauncher/wiki/Idea).


================================================
FILE: ci/.dockerignore
================================================
*
!install-deps.sh


================================================
FILE: ci/Dockerfile
================================================
FROM ubuntu:jammy

# tell scripts that we're building in an automated release scenario
ENV CI=1

# we re-use the DOCKER_PLATFORM to tell the build scripts about the build target architecture without the need to use uname
# the build scripts will have to map the architecture to names Debian/RPM/AppImage support
ARG DOCKER_PLATFORM
ENV DOCKER_PLATFORM="${DOCKER_PLATFORM}"

# we need to provide some writable $HOME for the (random) used ID we use in the build script
RUN install -d -m 0777 /home/user
ENV HOME=/home/user

# let the install script do the heavy lifting (easier than replicating the complex behavior in a Dockerfile)
COPY install-deps.sh /
RUN bash -xe install-deps.sh


================================================
FILE: ci/build-docker-image.sh
================================================
#! /bin/bash

if [[ "$DOCKER_PLATFORM" == "" ]]; then
    echo "Usage: env DOCKER_PLATFORM=... bash $0"
    exit 1
fi

set -euo pipefail

# the other script sources this script, therefore we have to support that use case
if [[ "${BASH_SOURCE[*]}" != "" ]]; then
    this_dir="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")"
else
    this_dir="$(readlink -f "$(dirname "$0")")"
fi

# we need a "docker-container" type builder to make use of all the buildx features regarding caching and multi-arch
# support
builder_name="appimagelauncher-builder"
if ! docker buildx inspect "$builder_name" &>/dev/null; then
    echo "Docker builder $builder_name not found, creating"
    docker buildx create --name="$builder_name" --driver=docker-container --bootstrap
else
    echo "Using existing Docker builder $builder_name found"
fi

image=ghcr.io/theassassin/appimagelauncher-build
branch="$(git rev-parse --abbrev-ref HEAD | tr -c 'A-Za-z0-9-' '_')"
# append platform to Docker image tag since we can't push separate (multi-arch) images to the same name without
# creating the manifest manually
# see https://github.com/docker/build-push-action/issues/671
platform_suffix="$(echo -n "$DOCKER_PLATFORM" | tr -c 'A-Za-z0-9-' '_')"

current_branch_tag="${image}:${branch}_${platform_suffix}"
master_branch_tag="${image}:master_${platform_suffix}"

docker_command=(
    docker buildx build
    --builder "$builder_name"
    --load  # --output=type=docker
    --pull
    --platform "$DOCKER_PLATFORM"
    --build-arg DOCKER_PLATFORM="$DOCKER_PLATFORM"

    # cache from the current branch's image
    --cache-from type=registry,ref="$current_branch_tag"

    # we can always cache from the master branch's image
    --cache-from type=registry,ref="$master_branch_tag"

    --tag "$current_branch_tag"
)

# if we are building on GitHub actions, we can also push the resulting image
# we skip pull request builds, though; regular branch builds will push the built images (if possible)
# also, skip Dependabot builds, it is not allowed to push images
if [[ "${GITHUB_ACTIONS:-}" != "" ]] && [[ "${GITHUB_EVENT_NAME:-}" != "pull_request" ]] && [[ "${GITHUB_ACTOR:-}" != "dependabot"* ]]; then
    echo "Going to push built image"
    docker_command+=(
        --cache-to type=inline
        --push
    )
fi

docker_command+=(
   "$this_dir"
)

# using inline cache to speed up builds by fetching the image from the GitHub registry first
# this should speed up local builds as well
# if the image hasn't changed, this should be a no-op
"${docker_command[@]}"


================================================
FILE: ci/build-in-docker.sh
================================================
#! /bin/bash

if [[ "$DOCKER_PLATFORM" == "" ]]; then
    echo "Usage: env DOCKER_PLATFORM=... bash $0"
    exit 1
fi

set -x
set -euo pipefail

cd "$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")"

# sets variables $image, $dockerfile
source build-docker-image.sh

DOCKER_OPTS=()
# fix for https://stackoverflow.com/questions/51195528/rcc-error-in-resource-qrc-cannot-find-file-png
if [ "${CI:-}" != "" ]; then
    DOCKER_OPTS+=("--security-opt" "seccomp:unconfined")
fi

# only if there's more than 3G of free space in RAM, we can build in a RAM disk
if [[ "${GITHUB_ACTIONS:-}" != "" ]]; then
    echo "Building on GitHub actions, which does not support --tmpfs flag -> building on regular disk"
elif [[ "$(env LC_ALL=C free -m  | grep "Mem:" | awk '{print $4}')" -gt 3072 ]]; then
    echo "Host system has enough free memory -> building in RAM disk"
    DOCKER_OPTS+=("--tmpfs" "/docker-ramdisk:exec,mode=777")
else
    echo "Host system does not have enough free memory -> building on regular disk"
fi

[[ -t 0 ]] && DOCKER_OPTS+=("-t")

# run the build with the current user to
#   a) make sure root is not required for builds
#   b) allow the build scripts to "mv" the binaries into the /out directory
uid="$(id -u)"
# run build
docker run --platform "$DOCKER_PLATFORM" -e BUILD_LITE -e DIST -e ARCH -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ID --rm -i --user "$uid" -w /ws -e CI=1 \
     "${DOCKER_OPTS[@]}" \
     -v "$(readlink -f ..):/ws" \
     "$current_branch_tag" \
     bash ci/build.sh



================================================
FILE: ci/build.sh
================================================
#! /bin/bash

set -euo pipefail

# use RAM disk if possible
if [ -d /dev/shm ] && mount | grep /dev/shm | grep -v -q noexec; then
    TEMP_BASE=/dev/shm
elif [ -d /docker-ramdisk ]; then
    TEMP_BASE=/docker-ramdisk
else
    TEMP_BASE=/tmp
fi

BUILD_DIR="$(mktemp -d -p "$TEMP_BASE" AppImageLauncher-build-XXXXXX)"

cleanup () {
    if [ -d "$BUILD_DIR" ]; then
        rm -rf "$BUILD_DIR"
    fi
}

trap cleanup EXIT

# store repo root as variable
REPO_ROOT="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")"/..)"
OLD_CWD="$(readlink -f .)"

pushd "$BUILD_DIR"

# list available versions of Qt to be able to choose the right one for the build
cat <<\EOF
##########################
# Available Qt versions: #
##########################
EOF
qtchooser -list-versions
echo

# the Docker images provide a clang/clang++ symlink to the actual clang[++] binaries
# see install-deps.sh for more information
cmake_args=(
    "-DCMAKE_C_COMPILER=clang"
    "-DCMAKE_CXX_COMPILER=clang++"
    "-DCMAKE_INSTALL_PREFIX=/usr"
    "-DCMAKE_BUILD_TYPE=RelWithDebInfo"
    "-DBUILD_TESTING=OFF"
    "-DCMAKE_BUILD_TYPE=RelWithDebInfo"
    # TODO: we don't necessarily want to hardcode this here
    "-DBINFMT_INTERPRETER_PATH_PREPEND_LD_P_NATIVE_PACKAGES_PREFIX=/opt/appimagelauncher.AppDir/"
)

if [[ "${BUILD_LITE:-}" == "" ]]; then
    cmake_args+=("-DENABLE_UPDATE_HELPER=ON")
else
    cmake_args+=("-DBUILD_LITE=ON")
fi

export QT_SELECT=qt5

cmake "$REPO_ROOT" "${cmake_args[@]}"

make -j$(nproc)

# prepare AppDir
make install DESTDIR=AppDir

ARCH="$(dpkg --print-architecture)"

# "translate" to linuxdeploy/AppImage architecture
# note: linuxdeploy and AppImage differ in i386/i686, but we don't support that any more anyway
case "$ARCH" in
    amd64)
        ARCH=x86_64
        ;;
    arm64)
        ARCH=aarch64
        ;;
esac

# build release formats
curl -LO https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-"$ARCH".AppImage
curl -LO https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-"$ARCH".AppImage

VERSION=$(src/cli/ail-cli --version | awk '{print $3}')

gha_build="${GITHUB_RUN_NUMBER:-}"

if [[ "$gha_build" != "" ]]; then
    VERSION="${VERSION}-gha${gha_build}"
else
    VERSION="${VERSION}-local"
fi

# should be overwritten for every output plugin below, this is a fallback only
export LINUXDEPLOY_OUTPUT_APP_NAME=appimagelauncher

LINUXDEPLOY_OUTPUT_VERSION="${VERSION}~$(cd "$REPO_ROOT" && git rev-parse --short HEAD)"
export LINUXDEPLOY_OUTPUT_VERSION

export APPIMAGE_EXTRACT_AND_RUN=1

linuxdeploy_extra_args=()

if [[ "${BUILD_LITE:-}" == "" ]]; then
    # configure linuxdeploy-plugin-native_packages
    export LDNP_PACKAGE_NAME=appimagelauncher

    export LDNP_BUILD="deb rpm"
    export LDNP_DESCRIPTION=""
    export LDNP_SHORT_DESCRIPTION=""

    rpm_lib_suffix=""

    case "$ARCH" in
        x86_64)
            rpm_build_arch=x86_64
            rpm_lib_suffix="()(64bit)"
            deb_build_arch=amd64
            ;;
        i?86)
            rpm_build_arch=i386
            deb_build_arch=i386
            ;;
        aarch64)
            rpm_build_arch=aarch64
            deb_build_arch=arm64
            ;;
        armhf)
            deb_build_arch=armhf
            rpm_build_arch=armv7hl
            ;;
        *)
            echo "Unsupported architecture: $ARCH"
            exit 2
            ;;
    esac

    # common meta info
    export LDNP_META_URL="https://github.com/TheAssassin/AppImageLauncher"
    export LDNP_META_BUG_URL="https://github.com/TheAssassin/AppImageLauncher/issues"
    export LDNP_META_VENDOR="TheAssassin"

    export LDNP_META_DEB_DEPENDS="systemd, libgl1, libfontconfig1, libharfbuzz0b, libfribidi0"
    export LDNP_META_DEB_ARCHITECTURE="$deb_build_arch"
    export LDNP_META_DEB_PRE_DEPENDS="bash"
    export LDNP_DEB_EXTRA_DEBIAN_FILES="${BUILD_DIR}/cmake/debian/postinst;${BUILD_DIR}/cmake/debian/postrm"

    rpm_requires=(
        "systemd"
        "libGL.so.1${rpm_lib_suffix}"
        "libfontconfig.so.1${rpm_lib_suffix}"
        "libfreetype.so.6${rpm_lib_suffix}"
        "libfribidi.so.0${rpm_lib_suffix}"
        "libgpg-error.so.0${rpm_lib_suffix}"
        "libharfbuzz.so.0${rpm_lib_suffix}"
    )
    export LDNP_META_RPM_REQUIRES="${rpm_requires[*]}"
    export LDNP_META_RPM_BUILD_ARCH="$rpm_build_arch"
    export LDNP_RPM_SCRIPTLET_POST="${BUILD_DIR}/cmake/debian/postinst"
    export LDNP_RPM_SCRIPTLET_PREUN="${BUILD_DIR}/cmake/debian/postrm"

    # updater is not available for the lite build
    linuxdeploy_extra_args+=(
        -e "$(find AppDir/usr/lib/*/appimagelauncher/update | head -n1)"
        --output native_packages
    )

    # tools like pipx would have side effects on the build host and it's generally a bit overkill for our purpose
    if which python3.13 &> /dev/null; then
        # python3.13, installed from the deadsnakes PPA for the Docker builds
        python3() {
            python3.13 "$@"
        }
    fi
    python3 -m venv venv
    venv/bin/pip install git+https://github.com/linuxdeploy/linuxdeploy-plugin-native_packages
    export PATH="$PWD/venv/bin:$PATH"
else
    linuxdeploy_extra_args+=(
        --custom-apprun "$REPO_ROOT"/resources/appimagelauncher-lite-AppRun.sh
        --output appimage
    )

    LDAI_OUTPUT="$(echo appimagelauncher-lite-"$VERSION"-"$ARCH".AppImage | tr '~' -)"
    export LDAI_OUTPUT

    # since we extracted common parts from the installer built into the AppRun script, we have to copy the "library" script
    # before building an AppImage
    install "$REPO_ROOT"/resources/appimagelauncher-lite-installer-common.sh "$(readlink -f AppDir/)"
fi

chmod -v +x linuxdeploy*-"$ARCH".AppImage

# workaround for QEMU
for appimage in *.AppImage; do
    dd if=/dev/zero bs=1 count=3 seek=8 conv=notrunc of="$appimage"
done

ldd AppDir/usr/bin/AppImageLauncherSettings

./linuxdeploy-"$ARCH".AppImage -v0 \
    --appdir "$(readlink -f AppDir)" \
    --plugin qt \
    -d AppDir/usr/share/applications/appimagelauncher.desktop \
    -e "$(find AppDir/usr/lib/*/appimagelauncher/remove | head -n1)" \
    "${linuxdeploy_extra_args[@]}"

if [[ "${BUILD_LITE:-}" == "" ]]; then
    mv "$LDNP_PACKAGE_NAME"*.{rpm,deb} "$OLD_CWD"
else
    mv "$LDAI_OUTPUT" "$OLD_CWD"
fi


================================================
FILE: ci/install-deps.sh
================================================
#! /bin/bash

set -euo pipefail

if [[ "$DOCKER_PLATFORM" == "" ]]; then
    echo "Usage: env DOCKER_PLATFORM=... bash $0"
    exit 2
fi

if [[ "$CI" == "" ]]; then
    echo "Caution: this script is supposed to run inside a (disposable) CI environment"
    echo "It will alter a system, and should not be run on workstations or alike"
    echo "You can export CI=1 to prevent this error from being shown again"
    exit 3
fi

case "$DOCKER_PLATFORM" in
    linux/amd64|linux/arm/v7|linux/arm64/v8)
        ;;
    *)
        echo "Error: unsupported architecture: $DOCKER_PLATFORM"
        exit 4
        ;;
esac

set -x

# this array collects all the packages we want to install
# running as few operations as possible is a runtime optimization
packages=()

# install 32-bit build dependencies and multilib/cross compilers for binfmt-bypass's 32-bit preload library
# must be done before apt-get update, otherwise the packages cannot be found during installation
if [[ "$DOCKER_PLATFORM" == "linux/amd64" ]]; then
    dpkg --add-architecture i386
    packages+=(
        libc6-dev:i386
    )
elif [[ "$DOCKER_PLATFORM" == "linux/arm64/v8" ]]; then
    dpkg --add-architecture armhf
    packages+=(
        libc6-dev:armhf
    )
fi

export DEBIAN_FRONTEND=noninteractive

# allow setup of PPA
apt-get update
apt-get install -y software-properties-common

# we depend on the deadsnakes PPA to provide a sufficiently recent Python to linuxdeploy-plugin-native_packages
add-apt-repository -y ppa:deadsnakes/ppa

packages=(
    libcurl4-openssl-dev
    libfuse-dev
    desktop-file-utils
    libglib2.0-dev
    libcairo2-dev
    libssl-dev
    ca-certificates
    libbsd-dev
    qttools5-dev-tools
    make
    build-essential
    git
    automake
    autoconf
    libtool
    patch
    wget
    curl
    vim-common
    desktop-file-utils
    pkg-config
    libarchive-dev
    libboost-filesystem-dev
    librsvg2-dev
    librsvg2-bin
    libssl-dev
    rpm
    rpm2cpio
    liblzma-dev

    # cross-compiling for 32-bit is only really easy with clang, where we can specify the target as a compiler option
    # clang -target arm-linux-gnueabihf ...
    clang

    qtbase5-dev
    qt5-qmake
    qtdeclarative5-dev

    # libappimage
    libgcrypt-dev
    argagg-dev
    nlohmann-json3-dev
    libgpgme-dev
    libzstd-dev

    # linuxdeploy-plugin-native_packages
    # see also above re. deadsnakes PPA
    python3.13-venv
)

# headless install
export DEBIAN_FRONTEND=noninteractive

apt-get -y --no-install-recommends install "${packages[@]}"

# install more recent CMake and patchelf
cmake_arch="$(dpkg --print-architecture)"

case "$cmake_arch" in
    amd64)
        cmake_arch=x86_64
        ;;
    arm64)
        cmake_arch=aarch64
        ;;
    armhf)
        patchelf_arch=armv7l
        ;;
esac

patchelf_arch="${patchelf_arch:-$cmake_arch}"

curl -L https://artifacts.assassinate-you.net/prebuilt-cmake/cmake-v3.29.6-ubuntu-jammy-"${cmake_arch}".tar.gz | \
    tar xz --strip-components=1 -C /usr

curl -L https://github.com/NixOS/patchelf/releases/download/0.18.0/patchelf-0.18.0-"$patchelf_arch".tar.gz | tar xz -C/usr/local

  # g{cc,++}-multilib usually install these dependencies for us
  # however, as the multilib stuff is not available for ARM, we have to install these dev packages ourselves
  # we can't really predict the names of the packages (they differ on different distros/releases)
  # therefore, we have to install the other dependencies first to be able to query them with dpkg -l
if [[ "$DOCKER_PLATFORM" == "linux/arm64/v8" ]] || [[ "$DOCKER_PLATFORM" == "linux/amd64" ]]; then
    if [[ "$DOCKER_PLATFORM" == "linux/amd64" ]]; then
        arch_32bit=i386
    elif [[ "$DOCKER_PLATFORM" == "linux/arm64/v8" ]]; then
        arch_32bit=armhf
    else
        echo "Cannot determine 32-bit architecture matching 64-bit architecture $ARCH"
        exit 6
    fi

    apt-get install -y \
        "$(dpkg -l | grep libgcc | grep dev | awk '{print $2}' | cut -d: -f1 | uniq)":"$arch_32bit" \
        "$(dpkg -l | grep libstdc++ | grep dev | awk '{print $2}' | cut -d: -f1 | uniq)":"$arch_32bit"
fi


================================================
FILE: cmake/install.cmake
================================================
# required by file(CHMOD ...)
cmake_minimum_required(VERSION 3.19)

# define private libraries install destination
include(GNUInstallDirs)

# debugging: libdir should be lib/<triplet>
message(STATUS "CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}")

if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_LIBDIR})
    set(_libdir ${CMAKE_INSTALL_LIBDIR})
else()
    file(RELATIVE_PATH _libdir ${CMAKE_INSTALL_LIBDIR} ${CMAKE_INSTALL_PREFIX})
endif()

set(_private_libdir ${_libdir}/appimagelauncher)

# calculate relative path from binary install destination to private library install dir
if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_BINDIR})
    set(_bindir ${CMAKE_INSTALL_BINDIR})
else()
    file(RELATIVE_PATH _bindir ${CMAKE_INSTALL_BINDIR} ${CMAKE_INSTALL_PREFIX})
    #set(_bindir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})
endif()

set(_abs_bindir ${CMAKE_INSTALL_PREFIX}/${_bindir})
set(_abs_private_libdir ${CMAKE_INSTALL_PREFIX}/${_private_libdir})

file(RELATIVE_PATH _rpath ${_abs_bindir} ${_abs_private_libdir})
set(_rpath "\$ORIGIN/${_rpath}")

# install libappimage.so into lib/appimagekit to avoid overwriting a libappimage potentially installed into /usr/lib
# or /usr/lib/x86_64-... or wherever the OS puts its libraries
install(
    TARGETS libappimage
    LIBRARY DESTINATION "${_private_libdir}" COMPONENT APPIMAGELAUNCHER
)

if(ENABLE_UPDATE_HELPER)
    install(
        TARGETS libappimageupdate libappimageupdate-qt
        LIBRARY DESTINATION "${_private_libdir}" COMPONENT APPIMAGELAUNCHER
    )
endif()

option(BINFMT_INTERPRETER_PATH_PREPEND_LD_P_NATIVE_PACKAGES_PREFIX "")

if(NOT BUILD_LITE)
    # unfortunately, due to a cyclic dependency, we need to hardcode parts of this variable, which is included in the
    # install scripts and the binfmt.d config
    set(BINFMT_INTERPRETER_PATH ${CMAKE_INSTALL_PREFIX}/${_private_libdir}/binfmt-interpreter)

    if(BINFMT_INTERPRETER_PATH_PREPEND_LD_P_NATIVE_PACKAGES_PREFIX)
        message(STATUS "Prepending prefix ${BINFMT_INTERPRETER_PATH_PREPEND_LD_P_NATIVE_PACKAGES_PREFIX} to binfmt interpreter path")
        set(BINFMT_INTERPRETER_PATH "${BINFMT_INTERPRETER_PATH_PREPEND_LD_P_NATIVE_PACKAGES_PREFIX}${BINFMT_INTERPRETER_PATH}")
    endif()

    # according to https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html, we must make sure the
    # interpreter string does not exceed 127 characters
    set(BINFMT_INTERPRETER_PATH_LENGTH_MAX 127)
    string(LENGTH BINFMT_INTERPRETER_PATH BINFMT_INTERPRETER_PATH_LENGTH)

    if(BINFMT_INTERPRETER_PATH_LENGTH GREATER BINFMT_INTERPRETER_PATH_LENGTH_MAX)
        message(FATAL_ERROR "interpreter path exceeds maximum length of ${BINFMT_INTERPRETER_PATH_LENGTH_MAX}")
    endif()

    # binfmt.d config file -- used as a fallback, if update-binfmts is not available
    configure_file(
        ${PROJECT_SOURCE_DIR}/resources/binfmt.d/appimagelauncher.conf.in
        ${PROJECT_BINARY_DIR}/resources/binfmt.d/appimagelauncher.conf
        @ONLY
    )
    # caution: don't use ${CMAKE_INSTALL_LIBDIR} here, it's really just lib/binfmt.d
    install(
        FILES ${PROJECT_BINARY_DIR}/resources/binfmt.d/appimagelauncher.conf
        DESTINATION lib/binfmt.d COMPONENT APPIMAGELAUNCHER
    )

    # prepare postinst and prerm hooks to Debian package
    configure_file(
        ${PROJECT_SOURCE_DIR}/resources/install-scripts/post-install.in
        ${PROJECT_BINARY_DIR}/cmake/debian/postinst
        @ONLY
    )
    configure_file(
        ${PROJECT_SOURCE_DIR}/resources/install-scripts/post-uninstall.in
        ${PROJECT_BINARY_DIR}/cmake/debian/postrm
        @ONLY
    )
endif()

# install systemd service configuration for appimagelauncherd
configure_file(
    ${PROJECT_SOURCE_DIR}/resources/appimagelauncherd.service.in
    ${PROJECT_BINARY_DIR}/resources/appimagelauncherd.service
    @ONLY
)
# caution: don't use ${CMAKE_INSTALL_LIBDIR} here, it's really just lib/systemd/user
install(
    FILES ${PROJECT_BINARY_DIR}/resources/appimagelauncherd.service
    DESTINATION lib/systemd/user/ COMPONENT APPIMAGELAUNCHER
)


================================================
FILE: cmake/modules/FindINotify.cmake
================================================
find_path(INOTIFY_INCLUDE_DIR sys/inotify.h PATH_SUFFIXES inotify)
find_library(INOTIFY_LIBRARY inotify)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(INotify DEFAULT_MSG INOTIFY_INCLUDE_DIR)

IF(INOTIFY_FOUND)
  set(INotify_INCLUDE_DIRS ${INOTIFY_INCLUDE_DIR})

  add_library(inotify IMPORTED INTERFACE)
  set_property(TARGET inotify PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INOTIFY_INCLUDE_DIRS})
ENDIF(INOTIFY_FOUND)


================================================
FILE: cmake/reproducible_builds.cmake
================================================
# this little snippet makes sure that no absolute paths end up in the binaries built by CMake
# it will replace such paths with relative ones
# see https://reproducible-builds.org/docs/build-path/ for more information

cmake_minimum_required(VERSION 3.5)

include(CheckCCompilerFlag)

if(CMAKE_BUILD_TYPE STREQUAL Release)
    message(STATUS "Release build detected, enabling reproducible builds mode")
    get_filename_component(abs_source_path ${PROJECT_SOURCE_DIR} ABSOLUTE)
    file(RELATIVE_PATH rel_source_path ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR})

    set(map_fix ${abs_source_path}=${rel_source_path})

    # can only add flags when the compiler supports them
    # known working compilers: GCC >= 8
    foreach(type debug macro)
        set(flag_name -f${type}-prefix-map)
        set(flags ${flag_name}=${map_fix})

        check_c_compiler_flag(${flags} ${type}_prefix_map_flag_available)

        if(${type}_prefix_map_flag_available)
            set(extra_flags "${extra_flags} ${flags}")
        else()
            message(WARNING "${flag_name} not available, cannot enable full reproducible builds mode")
        endif()
    endforeach()

    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${extra_flags}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${extra_flags}")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${extra_flags}")
endif()


================================================
FILE: cmake/scripts.cmake
================================================
# borrowed from libappimage
if(NOT COMMAND check_program)
    function(check_program)
        set(keywords FORCE_PREFIX)
        set(oneValueArgs NAME)
        cmake_parse_arguments(ARG "${keywords}" "${oneValueArgs}" "" "${ARGN}")

        if(NOT ARG_NAME)
            message(FATAL_ERROR "NAME argument required for check_program")
        endif()

        if(TOOLS_PREFIX)
            set(prefix ${TOOLS_PREFIX})
        endif()

        message(STATUS "Checking for program ${ARG_NAME}")

        string(TOUPPER ${ARG_NAME} name_upper)

        if(prefix)
            # try prefixed version first
            find_program(${name_upper} ${prefix}${ARG_NAME})
        endif()

        # try non-prefixed version
        if(NOT ${name_upper})
            if(TOOLS_PREFIX AND ARG_FORCE_PREFIX)
                message(FATAL_ERROR "TOOLS_PREFIX set, but could not find program with prefix in PATH (FORCE_PREFIX is set)")
            endif()

            find_program(${name_upper} ${ARG_NAME})

            if(NOT ${name_upper})
                message(FATAL_ERROR "Could not find required program ${ARG_NAME}.")
            endif()
        endif()

        message(STATUS "Found program ${ARG_NAME}: ${${name_upper}}")

        mark_as_advanced(${name_upper})
    endfunction()
endif()


================================================
FILE: cmake/toolchains/i386-linux-gnu.cmake
================================================
# this toolchain file works for cross compiling on Ubuntu when the following prerequisites are given:
# - all dependencies that would be needed for a normal build must be installed as i386 versions
# - building XZ/liblzma doesn't work yet, so one has to install liblzma-dev:i386 and set -DUSE_SYSTEM_XZ=ON
# - building GTest doesn't work yet, so one has to install libgtest-dev:i386 and set -DUSE_SYSTEM_GTEST=ON
# - building libarchive doesn't work yet, so one has to install liblzma-dev:i386 and set -DUSE_SYSTEM_LIBARCHIVE=ON (TODO: link system libarchive statically like liblzma)
# some of the packets interfere with their x86_64 version (e.g., libfuse-dev:i386, libglib2-dev:i386), so building on a
# normal system will most likely not work, but on systems like Travis it should work fine

set(CMAKE_SYSTEM_NAME Linux CACHE STRING "" FORCE)
set(CMAKE_SYSTEM_PROCESSOR i386 CACHE STRING "" FORCE)

set(CMAKE_C_FLAGS "-m32" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS "-m32" CACHE STRING "" FORCE)

# CMAKE_SHARED_LINKER_FLAGS, CMAKE_STATIC_LINKER_FLAGS etc. must not be set, but CMAKE_EXE_LINKER_FLAGS is necessary
set(CMAKE_EXE_LINKER_FLAGS "-m32" CACHE STRING "" FORCE)

set(DEPENDENCIES_CFLAGS "-m32" CACHE STRING "" FORCE)
set(DEPENDENCIES_CPPFLAGS "-m32" CACHE STRING "" FORCE)
set(DEPENDENCIES_LDFLAGS "-m32" CACHE STRING "" FORCE)

# host = target system
# build = build system
# both must be specified
set(EXTRA_CONFIGURE_FLAGS "--host=i686-pc-linux-gnu" "--build=x86_64-pc-linux-gnu" CACHE STRING "" FORCE)

# may help with some rare issues
set(CMAKE_PREFIX_PATH /usr/lib/i386-linux-gnu CACHE STRING "" FORCE)

# makes sure that at least on Ubuntu pkg-config will search for the :i386 packages
set(ENV{PKG_CONFIG_PATH} /usr/lib/i386-linux-gnu/pkgconfig/ CACHE STRING "" FORCE)

# make qtchooser find qt5
set(ENV{QT_SELECT} qt5 CACHE STRING "" FORCE)


================================================
FILE: cmake/versioning.cmake
================================================
set(V_MAJOR 3)
set(V_MINOR 0)
set(V_PATCH 0)
set(V_SUFFIX "-beta-2")

set(APPIMAGELAUNCHER_VERSION ${V_MAJOR}.${V_MINOR}.${V_PATCH}${V_SUFFIX})

# check whether git is available
find_program(GIT git)
set(GIT_COMMIT_CACHE_FILE "${PROJECT_SOURCE_DIR}/cmake/GIT_COMMIT")

if(NOT GIT STREQUAL "GIT-NOTFOUND")
    # read Git revision ID
    # WARNING: this value will be stored in the CMake cache
    # to update it, you will have to reset the CMake cache
    # (doesn't matter for CI builds like Travis for instance, where there's no permanent CMake cache)
    execute_process(
        COMMAND git rev-parse --short HEAD
        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
        OUTPUT_VARIABLE APPIMAGELAUNCHER_GIT_COMMIT
        OUTPUT_STRIP_TRAILING_WHITESPACE
        ERROR_QUIET
        RESULT_VARIABLE GIT_RESULT
    )

    if(GIT_RESULT EQUAL 0)
        message(STATUS "Storing git commit ID in cache file")
        file(WRITE "${GIT_COMMIT_CACHE_FILE}" "${APPIMAGELAUNCHER_GIT_COMMIT}")
    endif()
endif()

if(NOT GIT_RESULT EQUAL 0)
    # git call failed or git hasn't been found, might happen when calling CMake in an extracted source tarball
    # therefore we try to find the git commit cache file
    # if it doesn't exist, refuse to configure

    message(WARNING "Failed to gather commit ID via git command, trying to read cache file")
    if(EXISTS "${GIT_COMMIT_CACHE_FILE}")
        file(READ "${GIT_COMMIT_CACHE_FILE}" APPIMAGELAUNCHER_CACHED_GIT_COMMIT)
        mark_as_advanced(FORCE APPIMAGELAUNCHER_CACHED_GIT_COMMIT)
        string(REPLACE "\n" "" APPIMAGELAUNCHER_GIT_COMMIT "${APPIMAGELAUNCHER_CACHED_GIT_COMMIT}")
    else()
        message(FATAL_ERROR "Could not find git commit cache file, git commit ID not available for versioning")
    endif()
endif()

if("${APPIMAGELAUNCHER_GIT_COMMIT}" STREQUAL "")
    message(FATAL_ERROR "Invalid git commit ID: ${APPIMAGELAUNCHER_GIT_COMMIT}")
endif()

message(STATUS "Git commit: ${APPIMAGELAUNCHER_GIT_COMMIT}")
mark_as_advanced(FORCE APPIMAGELAUNCHER_GIT_COMMIT)

# add build number based on GitHub actions build number if possible
if("$ENV{GITHUB_RUN_NUMBER}" STREQUAL "")
    set(APPIMAGELAUNCHER_BUILD_NUMBER "<local dev build>")
else()
    set(APPIMAGELAUNCHER_BUILD_NUMBER "$ENV{GITHUB_RUN_NUMBER}")
endif()

# get current date
execute_process(
    COMMAND env LC_ALL=C date -u "+%Y-%m-%d %H:%M:%S %Z"
    OUTPUT_VARIABLE APPIMAGELAUNCHER_BUILD_DATE
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

add_definitions(-DAPPIMAGELAUNCHER_VERSION="${APPIMAGELAUNCHER_VERSION}")
add_definitions(-DAPPIMAGELAUNCHER_GIT_COMMIT="${APPIMAGELAUNCHER_GIT_COMMIT}")
add_definitions(-DAPPIMAGELAUNCHER_BUILD_NUMBER="${APPIMAGELAUNCHER_BUILD_NUMBER}")
add_definitions(-DAPPIMAGELAUNCHER_BUILD_DATE="${APPIMAGELAUNCHER_BUILD_DATE}")


================================================
FILE: i18n/CMakeLists.txt
================================================
# lupdate must be installed and available
check_program(NAME lupdate)
check_program(NAME lrelease)

# create target calling custom commands
add_custom_target(i18n)

# create/update AppImageLauncher strings
function(ail_generate_translations)
    if(ARGC LESS 2)
        message(ERROR "ail_generate_translations called with wrong amount of arguments")
    endif()

    add_custom_command(
        TARGET i18n POST_BUILD
        COMMAND ${LUPDATE} "${ARGV0}" -ts "${ARGV1}" -locations relative
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    )
endfunction()

ail_generate_translations(../src/ ui.en.ts)

file(GLOB TS_FILES *.ts)

foreach(TS_FILE IN LISTS TS_FILES)
    get_filename_component(TS_FILENAME ${TS_FILE} NAME)
    ail_generate_translations(../src/ ${TS_FILENAME})
endforeach()

add_custom_command(
    TARGET i18n POST_BUILD
    COMMAND ./auto-translate.py ui.en.ts
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)


add_custom_target(l10n ALL)

# generate Qt qm files from translation source files
function(ail_generate_qm)
    if(ARGC LESS 2)
        message(ERROR "ail_generate_translations called with wrong amount of arguments")
    endif()

    add_custom_command(
        TARGET l10n POST_BUILD
        COMMAND ${LRELEASE} "${ARGV0}" -qm "${ARGV1}"
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    )
endfunction()

file(GLOB TS_FILES *.ts)

set(target_dir ${CMAKE_CURRENT_BINARY_DIR}/generated/l10n)

foreach(TS_FILE IN LISTS TS_FILES)
    get_filename_component(TS_FILENAME ${TS_FILE} NAME)
    string(REPLACE .ts .qm QM_FILENAME ${TS_FILENAME})
    ail_generate_qm(${TS_FILENAME} ${target_dir}/${QM_FILENAME})
endforeach()

# deploy JSON files
file(GLOB JSON_FILES *.json)

foreach(JSON_FILE IN LISTS JSON_FILES)
    get_filename_component(JSON_FILENAME ${JSON_FILE} NAME)
    add_custom_command(
        TARGET l10n POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy ${JSON_FILENAME} ${target_dir}/${JSON_FILENAME}
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    )
endforeach()


# empty directories aren't tracked by Git
# therefore the directory needs to be created by CMake
file(MAKE_DIRECTORY ${target_dir})

install(
    DIRECTORY ${target_dir}
    DESTINATION ${CMAKE_INSTALL_DATADIR}/appimagelauncher COMPONENT APPIMAGELAUNCHER
)


================================================
FILE: i18n/auto-translate.py
================================================
#! /usr/bin/env python3

import sys

from xml.etree import ElementTree as ET


def copy_sources_to_translations(root: ET.Element):
    for context in root.findall("context"):
        for message in context.findall("message"):
            source = message.find("source")
            translation = message.find("translation")

            translation.text = source.text

            if "type" in translation.attrib:
                if translation.attrib["type"] in ("", "unfinished"):
                    del translation.attrib["type"]


def main():
    with open(sys.argv[1]) as f:
        et = ET.parse(f)

    root = et.getroot()

    copy_sources_to_translations(root)

    with open(sys.argv[1], "wb") as f:
        f.write(ET.tostring(root))


if __name__ == "__main__":
    main()


================================================
FILE: i18n/desktopfiles.ast.json
================================================
{
    "Desktop Action remove/Name": "Desaniciar AppImage del sistema",
    "Desktop Action update/Name": "Anovar AppImage"
}


================================================
FILE: i18n/desktopfiles.cs.json
================================================
{
    "Desktop Action update/Name": "Aktualizovat AppImage",
    "Desktop Action remove/Name": "Odebrat AppImage ze systému"
}


================================================
FILE: i18n/desktopfiles.de.json
================================================
{
    "Desktop Action remove/Name": "Dieses AppImage löschen",
    "Desktop Action update/Name": "Dieses AppImage aktualisieren"
}


================================================
FILE: i18n/desktopfiles.en.json
================================================
{
    "Desktop Action remove/Name": "Delete this AppImage",
    "Desktop Action update/Name": "Update this AppImage"
}


================================================
FILE: i18n/desktopfiles.es.json
================================================
{
    "Desktop Action remove/Name": "Eliminar Appimage del Sistema",
    "Desktop Action update/Name": "Actualizar Appimage"
}


================================================
FILE: i18n/desktopfiles.fr.json
================================================
{
    "Desktop Action remove/Name": "Supprimer cette AppImage",
    "Desktop Action update/Name": "Mettre à jour l'AppImage"
}


================================================
FILE: i18n/desktopfiles.it.json
================================================
{
    "Desktop Action remove/Name": "Rimuovi questa AppImage",
    "Desktop Action update/Name": "Aggiorna questa AppImage"
}


================================================
FILE: i18n/desktopfiles.ko.json
================================================
{
    "Desktop Action remove/Name": "이 AppImage 삭제",
    "Desktop Action update/Name": "이 AppImage 업데이트"
}


================================================
FILE: i18n/desktopfiles.nb_NO.json
================================================
{
    "Desktop Action update/Name": "Oppdater AppImage",
    "Desktop Action remove/Name": "Slett AppImage"
}


================================================
FILE: i18n/desktopfiles.nl.json
================================================
{
    "Desktop Action remove/Name": "AppImage deïnstalleren",
    "Desktop Action update/Name": "AppImage bijwerken"
}


================================================
FILE: i18n/desktopfiles.pl.json
================================================
{
    "Desktop Action remove/Name": "Usuń AppImage z systemu",
    "Desktop Action update/Name": "Uaktualnij AppImage"
}


================================================
FILE: i18n/desktopfiles.pt.json
================================================
{
    "Desktop Action remove/Name": "Remover AppImage do sistema",
    "Desktop Action update/Name": "Atualizar AppImage"
}


================================================
FILE: i18n/desktopfiles.pt_BR.json
================================================
{
    "Desktop Action remove/Name": "Remover AppImage do sistema",
    "Desktop Action update/Name": "Atualizar AppImage"
}


================================================
FILE: i18n/desktopfiles.ru.json
================================================
{
    "Desktop Action remove/Name": "Удалить AppImage",
    "Desktop Action update/Name": "Обновить AppImage"
}


================================================
FILE: i18n/desktopfiles.tr.json
================================================
{
    "Desktop Action update/Name": "Bu AppImage uygulamasını güncelle",
    "Desktop Action remove/Name": "Bu AppImage uygulamasını sil"
}


================================================
FILE: i18n/desktopfiles.zh_Hans.json
================================================
{
    "Desktop Action remove/Name": "删除此 AppImage",
    "Desktop Action update/Name": "更新此 AppImage"
}


================================================
FILE: i18n/ui.ast.ts
================================================
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ast">
<context>
    <name>FirstRunDialog</name>
    <message>
        <location filename="../src/ui/first-run.ui" line="+20"/>
        <source>First run</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+55"/>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Welcome to AppImageLauncher!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This little helper is designed to improve your AppImage experience on your computer.&lt;/p&gt;&lt;p&gt;It appears you have never run AppImageLauncher before. Please take a minute and configure your preferences. You can always change these later on, using the control panel.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+22"/>
        <source>Ask me whether to move new AppImages into a central location</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+21"/>
        <source>Integration target destination directory:</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+36"/>
        <source>Customize</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="../src/ui/first-run.cpp" line="+86"/>
        <source>Choose integration destination dir</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+17"/>
        <source>(default)</source>
        <translation type="unfinished"></translation>
    </message>
</context>
<context>
    <name>IntegrationDialog</name>
    <message>
        <location filename="../src/ui/integration_dialog.ui" line="+23"/>
        <source>Desktop Integration</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+20"/>
        <source>Icon</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+21"/>
        <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;%1 has not been integrated into your system.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; &lt;br /&gt;Integrating it will move the AppImage into a predefined location, and include it in your application launcher.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;To remove or update the AppImage, please use the context menu of the application icon in your task bar or launcher. &lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;The directory where the integrated AppImages are stored in is currently set to: %2&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+41"/>
        <source>Integrate and run</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+10"/>
        <source>Run once</source>
        <translation type="unfinished"></translation>
    </message>
</context>
<context>
    <name>QMessageBox</name>
    <message>
        <location filename="../src/ui/main.cpp" line="+385"/>
        <source>Warning</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+1"/>
        <source>AppImage %1 has already been integrated, but it is not in the current integration destination directory.

Do you want to move it into the new destination?

Choosing No will run the AppImage once, and leave the AppImage in its current directory.

</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+23"/>
        <source>Failed to unregister AppImage before re-integrating it</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="+755"/>
        <source>Could not parse desktop file translations:
Could not open file for reading:

%1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+11"/>
        <source>Could not parse desktop file translations:
Invalid syntax:

%1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+409"/>
        <source>File %1 is owned by another user: %2</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+6"/>
        <source>Permissions problem</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+51"/>
        <location line="+8"/>
        <source>Error</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="-7"/>
        <source>Failed to run permissions helper, exited with return code %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Could not find suitable permissions helper, aborting</source>
        <translation type="unfinished"></translation>
    </message>
</context>
<context>
    <name>QObject</name>
    <message>
        <location line="-985"/>
        <location line="+680"/>
        <location filename="../src/ui/remove_main.cpp" line="+106"/>
        <location line="+12"/>
        <location line="+12"/>
        <location filename="../src/ui/update_main.cpp" line="+119"/>
        <location line="+42"/>
        <source>Error</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="../src/ui/main.cpp" line="-362"/>
        <source>AppImageLauncher does not support type %1 AppImages at the moment.</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+7"/>
        <source>Could not make AppImage executable: %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+40"/>
        <source>execv() failed: %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+70"/>
        <source>Usage: %1 [options] &lt;path&gt;</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Desktop integration helper for AppImages, for use by Linux distributions.</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+3"/>
        <source>Options:</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Display this help and exit</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Display version and exit</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+2"/>
        <source>Arguments:</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Path to AppImage (mandatory)</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+265"/>
        <source>Unexpected result from the integration dialog.</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="-287"/>
        <source>Failed to clean up old desktop files</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+8"/>
        <location filename="../src/ui/remove_main.cpp" line="+1"/>
        <source>Failed to clean up AppImage trash bin: %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+49"/>
        <source>Unknown AppImageLauncher option: %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+12"/>
        <location filename="../src/ui/remove_main.cpp" line="-74"/>
        <location filename="../src/ui/update_main.cpp" line="-99"/>
        <source>Error: no such file or directory: %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+13"/>
        <location filename="../src/ui/update_main.cpp" line="+7"/>
        <source>Not an AppImage: %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+162"/>
        <source>The directory the integrated AppImages are stored in is currently set to:
%1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="../src/ui/remove_main.cpp" line="-28"/>
        <source>Helper to delete integrated AppImages easily, e.g., from the application launcher&apos;s context menu</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+19"/>
        <source>Path to AppImage</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+0"/>
        <source>&lt;path&gt;</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+20"/>
        <source>AppImage delete helper error</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Not an AppImage:

%1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+38"/>
        <source>Failed to unregister AppImage: %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+12"/>
        <source>Failed to move AppImage into trash bin directory</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="-27"/>
        <source>AppImage with same filename has already been integrated.</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+2"/>
        <source>Do you wish to overwrite the existing AppImage?</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Choosing No will run the AppImage once, and leave the system in its current state.</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="-652"/>
        <location line="+656"/>
        <source>Warning</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="-296"/>
        <source>Failed to register AppImage in system via libappimage</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Failed to find integrated desktop file</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+6"/>
        <source>Couldn&apos;t find integrated AppImage&apos;s desktop file</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+20"/>
        <source>Failed to load desktop file:</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+12"/>
        <source>AppImage has invalid desktop file</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+271"/>
        <source>Failed to move AppImage to target location.
Try to copy AppImage instead?</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+181"/>
        <source>Failed to call stat() on path:

%1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="../src/ui/update_main.cpp" line="-40"/>
        <source>Updates AppImages after desktop integration, for use by Linux distributions</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+3"/>
        <source>AppImageLauncher update</source>
        <comment>update helper app name</comment>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+67"/>
        <source>No updates found</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Could not find updates for AppImage %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+7"/>
        <source>No update information found</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Could not find update information in AppImage:
%1

The AppImage doesn&apos;t support updating. Please ask the authors to embed update information to allow for easy updating.</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+12"/>
        <source>Failed to check for updates:

%1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+12"/>
        <source>An update has been found for the AppImage %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+2"/>
        <source>Do you want to perform the update?</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+4"/>
        <source>Remove old AppImage after successful update</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+24"/>
        <source>Failed to update AppImage:

%1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+14"/>
        <source>File reported as updated does not exist: %1</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Failed to register updated AppImage in system</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+14"/>
        <source>Failed to unregister old AppImage in system</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+5"/>
        <source>Failed to remove old AppImage</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="../src/daemon/main.cpp" line="+101"/>
        <source>Tracks AppImages in applications directories (user&apos;s, system and other ones). Automatically integrates AppImages moved into those directories and unintegrates ones removed from them.</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Lists directories watched by this daemon and exit</source>
        <translation type="unfinished"></translation>
    </message>
</context>
<context>
    <name>RemoveDialog</name>
    <message>
        <location filename="../src/ui/remove.ui" line="+17"/>
        <source>Delete AppImage</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+14"/>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Are you sure you want to delete this AppImage?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+22"/>
        <source>%1</source>
        <translation type="unfinished"></translation>
    </message>
</context>
<context>
    <name>SettingsDialog</name>
    <message>
        <location filename="../src/ui/settings_dialog.ui" line="+14"/>
        <source>AppImageLauncher Settings</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+16"/>
        <source>Launcher Dialog</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+6"/>
        <source>Ask whether to move AppImage files into the applications directory</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+119"/>
        <source>General settings</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+6"/>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When this box is checked, AppImageLauncher automatically starts a daemon called appimagelauncherd.&lt;/p&gt;&lt;p&gt;This daemon automatically integrates AppImages you copy into the &amp;quot;Applications directory&amp;quot; and the additional directories you configured. When the files are deleted, the daemon will clean up the integration data.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+3"/>
        <source>Auto start auto-integration daemon</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+13"/>
        <source>Additional directories to watch</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+11"/>
        <source>Add new directory to list</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+13"/>
        <source>Remove selected directory from list</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="-144"/>
        <source>Applications directory path</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="-11"/>
        <source>Location where to store your AppImage files to ease their management</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+49"/>
        <source>Available Features</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location filename="../src/ui/settings_dialog.cpp" line="+40"/>
        <source>updater available for AppImages supporting AppImageUpdate</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+2"/>
        <source>updater unavailable</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+5"/>
        <source>&lt;strong&gt;Note: this is an AppImageLauncher Lite build, only supports a limited set of features&lt;/strong&gt;&lt;br /&gt;Please install the full version via the provided native packages to enjoy the full AppImageLauncher experience</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+137"/>
        <source>Select Applications directory</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+17"/>
        <source>Select additional directory to watch</source>
        <translation type="unfinished"></translation>
    </message>
</context>
</TS>


================================================
FILE: i18n/ui.cs.ts
================================================
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="cs">
<context>
    <name>FirstRunDialog</name>
    <message>
        <location filename="../src/ui/first-run.ui" line="+20"/>
        <source>First run</source>
        <translation>První spuštění</translation>
    </message>
    <message>
        <location line="+55"/>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Welcome to AppImageLauncher!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This little helper is designed to improve your AppImage experience on your computer.&lt;/p&gt;&lt;p&gt;It appears you have never run AppImageLauncher before. Please take a minute and configure your preferences. You can always change these later on, using the control panel.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Vítejte v aplikaci AppImageLauncher!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Tento malý pomocník je navržen ke zlepšení vašich zkušeností s AppImage na vašem počítači.&lt;/p&gt;&lt;p&gt;Zdá se, že jste aplikaci AppImageLauncher nikdy předtím nespustili. Věnujte prosím chvíli nastavení vašich předvoleb. Tato nastavení můžete kdykoliv později změnit pomocí ovládacího panelu.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="+22"/>
        <source>Ask me whether to move new AppImages into a central location</source>
        <translation>Ptát se, jestli přesunout nové AppImage soubory do určitého umístění</translation>
    </message>
    <message>
        <location line="+21"/>
        <source>Integration target destination directory:</source>
        <translation>Cílový adresář pro integraci:</translation>
    </message>
    <message>
        <location line="+36"/>
        <source>Customize</source>
        <translation>Přizpůsobit</translation>
    </message>
    <message>
        <location filename="../src/ui/first-run.cpp" line="+86"/>
        <source>Choose integration destination dir</source>
        <translation>Vyberte cílový adresář pro integraci</translation>
    </message>
    <message>
        <location line="+17"/>
        <source>(default)</source>
        <translation>(výchozí)</translation>
    </message>
</context>
<context>
    <name>IntegrationDialog</name>
    <message>
        <location filename="../src/ui/integration_dialog.ui" line="+23"/>
        <source>Desktop Integration</source>
        <translation type="unfinished">Integrace pracovní plochy</translation>
    </message>
    <message>
        <location line="+20"/>
        <source>Icon</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+21"/>
        <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;%1 has not been integrated into your system.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; &lt;br /&gt;Integrating it will move the AppImage into a predefined location, and include it in your application launcher.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;To remove or update the AppImage, please use the context menu of the application icon in your task bar or launcher. &lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;The directory where the integrated AppImages are stored in is currently set to: %2&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+41"/>
        <source>Integrate and run</source>
        <translation type="unfinished">Integrovat a spustit</translation>
    </message>
    <message>
        <location line="+10"/>
        <source>Run once</source>
        <translation type="unfinished">Spustit jednou</translation>
    </message>
</context>
<context>
    <name>QMessageBox</name>
    <message>
        <location filename="../src/ui/main.cpp" line="+385"/>
        <source>Warning</source>
        <translation>Varování</translation>
    </message>
    <message>
        <source>AppImage has already been integrated, but it is not in the current integration destination directory.

Do you want to move it into the new destination?
Choosing No will run the AppImage once, and leave the AppImage in its current directory.</source>
        <translation type="vanished">AppImage has already been integrated, but it is not in the current integration destination directory.

Do you want to move it into the new destination?
Choosing No will run the AppImage once, and leave the AppImage in its current directory.</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>AppImage %1 has already been integrated, but it is not in the current integration destination directory.

Do you want to move it into the new destination?

Choosing No will run the AppImage once, and leave the AppImage in its current directory.

</source>
        <translation>AppImage %1 již byl integrován, ale není v aktuálním cílovém adresáři pro integraci.

Chcete jej přesunout do nového cíle?

Vybráním Ne bude tento AppImage spuštěn jednou a ponechán ve svém aktuálním adresáři.

</translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="+1232"/>
        <location line="+8"/>
        <source>Error</source>
        <translation>Chyba</translation>
    </message>
    <message>
        <location filename="../src/ui/main.cpp" line="+23"/>
        <source>Failed to unregister AppImage before re-integrating it</source>
        <translation>Selhalo zrušení registrace AppImage před opětovnou integrací</translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="-485"/>
        <source>Could not parse desktop file translations:
Could not open file for reading:

%1</source>
        <translation>Nelze zpracovat překlady desktop souboru:
Nelze otevřít soubor pro čtení:

%1</translation>
    </message>
    <message>
        <location line="+11"/>
        <source>Could not parse desktop file translations:
Invalid syntax:

%1</source>
        <translation>Nelze zpracovat překlady desktop souboru:
Neplatná syntaxe:

%1</translation>
    </message>
    <message>
        <location line="+409"/>
        <source>File %1 is owned by another user: %2</source>
        <translation>Soubor %1 je vlastněn jiným uživatelem: %2</translation>
    </message>
    <message>
        <location line="+6"/>
        <source>Permissions problem</source>
        <translation>Problém oprávnění</translation>
    </message>
    <message>
        <source>File %1 is owned by another user: %2

Relaunch with their permissions?</source>
        <translation type="vanished">File %1 is owned by another user: %2

Relaunch with their permissions?</translation>
    </message>
    <message>
        <location line="+52"/>
        <source>Failed to run permissions helper, exited with return code %1</source>
        <translation>Selhalo spuštění pomocníka oprávnění, ukončen s návratovým kódem %1</translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Could not find suitable permissions helper, aborting</source>
        <translation>Nelze nalézt vhodný pomocník oprávnění, přerušuje se</translation>
    </message>
</context>
<context>
    <name>QObject</name>
    <message>
        <location line="-985"/>
        <location line="+680"/>
        <location filename="../src/ui/remove_main.cpp" line="+106"/>
        <location line="+12"/>
        <location line="+12"/>
        <location filename="../src/ui/update_main.cpp" line="+119"/>
        <location line="+42"/>
        <source>Error</source>
        <translation>Chyba</translation>
    </message>
    <message>
        <location filename="../src/ui/main.cpp" line="-362"/>
        <source>AppImageLauncher does not support type %1 AppImages at the moment.</source>
        <translation>AppImageLauncher momentálně nepodporuje AppImage soubory typu %1.</translation>
    </message>
    <message>
        <location line="+7"/>
        <source>Could not make AppImage executable: %1</source>
        <translation>Nelze nastavit soubor AppImage jako spustitelný: %1</translation>
    </message>
    <message>
        <source>Failed to open AppImage for reading: %1</source>
        <translation type="vanished">Failed to open AppImage for reading: %1</translation>
    </message>
    <message>
        <source>Failed to create temporary directory</source>
        <translation type="vanished">Failed to create temporary directory</translation>
    </message>
    <message>
        <source>Failed to create temporary copy of type 1 AppImage</source>
        <translation type="vanished">Failed to create temporary copy of type 1 AppImage</translation>
    </message>
    <message>
        <source>Failed to open temporary AppImage copy for writing</source>
        <translation type="vanished">Failed to open temporary AppImage copy for writing</translation>
    </message>
    <message>
        <source>Failed to remove magic bytes from temporary AppImage copy</source>
        <translation type="vanished">Failed to remove magic bytes from temporary AppImage copy</translation>
    </message>
    <message>
        <source>execv() failed: %1</source>
        <comment>error message</comment>
        <translation type="vanished">execv() failed: %1</translation>
    </message>
    <message>
        <source>runtime not found: no such file or directory: %1</source>
        <translation type="vanished">runtime not found: no such file or directory: %1</translation>
    </message>
    <message>
        <location line="+40"/>
        <source>execv() failed: %1</source>
        <translation>execv() selhalo: %1</translation>
    </message>
    <message>
        <location line="+70"/>
        <source>Usage: %1 [options] &lt;path&gt;</source>
        <translation>Použití: %1 [volby] &lt;cesta&gt;</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Desktop integration helper for AppImages, for use by Linux distributions.</source>
        <translation>Pomocník s integrací pracovní plochy pro soubory AppImage, pro použití v linuxových distribucích.</translation>
    </message>
    <message>
        <location line="+3"/>
        <source>Options:</source>
        <translation>Volby:</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Display this help and exit</source>
        <translation>Zobrazit tuto nápovědu a skončit</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Display version and exit</source>
        <translation>Zobrazit verzi a skončit</translation>
    </message>
    <message>
        <location line="+2"/>
        <source>Arguments:</source>
        <translation>Argumenty:</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Path to AppImage (mandatory)</source>
        <translation>Cesta k AppImage (povinná)</translation>
    </message>
    <message>
        <location line="+265"/>
        <source>Unexpected result from the integration dialog.</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="-287"/>
        <source>Failed to clean up old desktop files</source>
        <translation>Selhalo vyčištění starých desktop souborů</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: error while trying to start appimagelauncherfs.service</source>
        <translation type="vanished">Selhala registrace souboru AppImage v AppImageLauncherFS: chyba během pokusu o spuštění appimagelauncherfs.service</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: failed to register AppImage path %1</source>
        <translation type="vanished">Selhala registrace souboru AppImage v AppImageLauncherFS: selhala registrace AppImage cesty %1</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: could not open map file</source>
        <translation type="vanished">Selhala registrace souboru AppImage v AppImageLauncherFS: nelze otevřít map soubor</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: could not find virtual file for AppImage</source>
        <translation type="vanished">Selhala registrace souboru AppImage v AppImageLauncherFS: nelze nalézt virtuální soubor pro AppImage</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: unknown failure</source>
        <translation type="vanished">Selhala registrace souboru AppImage v AppImageLauncherFS: neznámá chyba</translation>
    </message>
    <message>
        <location line="+8"/>
        <location filename="../src/ui/remove_main.cpp" line="+1"/>
        <source>Failed to clean up AppImage trash bin: %1</source>
        <translation>Selhalo vyčištění koše souborů AppImage: %1</translation>
    </message>
    <message>
        <location line="+49"/>
        <source>Unknown AppImageLauncher option: %1</source>
        <translation>Neznámá volba AppImageLauncher: %1</translation>
    </message>
    <message>
        <location line="+12"/>
        <location filename="../src/ui/remove_main.cpp" line="-74"/>
        <location filename="../src/ui/update_main.cpp" line="-99"/>
        <source>Error: no such file or directory: %1</source>
        <translation>Chyba: neexistující soubor nebo adresář: %1</translation>
    </message>
    <message>
        <location line="+13"/>
        <location filename="../src/ui/update_main.cpp" line="+7"/>
        <source>Not an AppImage: %1</source>
        <translation>Není soubor AppImage: %1</translation>
    </message>
    <message>
        <location line="+162"/>
        <source>The directory the integrated AppImages are stored in is currently set to:
%1</source>
        <translation>Adresář pro uložení integrovaných souborů AppImage je aktuálně nastaven na:
%1</translation>
    </message>
    <message>
        <source>The directory the integrated AppImages are stored in is currently set to: %1</source>
        <translation type="vanished">The directory the integrated AppImages are stored in is currently set to: %1</translation>
    </message>
    <message>
        <source>Integrating it will move the AppImage into a predefined location, and include it in your application launcher.</source>
        <translation type="vanished">Integrací bude soubor AppImage přesunut do předdefinovaného umístění a zahrnut ve vašem spouštěči aplikací.</translation>
    </message>
    <message>
        <source>To remove or update the AppImage, please use the context menu of the application icon in your task bar or launcher.</source>
        <translation type="vanished">Pro odebrání nebo aktualizaci AppImage prosím použijte kontextové menu ikony aplikace ve vašem panelu úloh nebo spouštěči.</translation>
    </message>
    <message>
        <source>The directory the integrated AppImages are stored in is currently set to:</source>
        <translation type="vanished">Adresář pro uložení integrovaných souborů AppImage je aktuálně nastaven na:</translation>
    </message>
    <message>
        <source>%1 has not been integrated into your system.</source>
        <translation type="vanished">%1 nebylo integrováno do vašeho systému.</translation>
    </message>
    <message>
        <source>Desktop Integration</source>
        <translation type="vanished">Integrace pracovní plochy</translation>
    </message>
    <message>
        <source>Integrate and run</source>
        <translation type="vanished">Integrovat a spustit</translation>
    </message>
    <message>
        <source>Run once</source>
        <translation type="vanished">Spustit jednou</translation>
    </message>
    <message>
        <source>Cancel</source>
        <translation type="vanished">Zrušit</translation>
    </message>
    <message>
        <source>Removes AppImages after desktop integration, for use by Linux distributions</source>
        <translation type="vanished">Removes AppImages after desktop integration, for use by Linux distributions</translation>
    </message>
    <message>
        <source>AppImageLauncher remove</source>
        <comment>remove helper app name</comment>
        <translation type="vanished">AppImageLauncher remove</translation>
    </message>
    <message>
        <source>Helper to delete integrated AppImages easily, e.g., from the application launcher&apos;s context menuz</source>
        <translation type="vanished">Helper to delete integrated AppImages easily, e.g., from the application launcher&apos;s context menuz</translation>
    </message>
    <message>
        <location filename="../src/ui/remove_main.cpp" line="-28"/>
        <source>Helper to delete integrated AppImages easily, e.g., from the application launcher&apos;s context menu</source>
        <translation>Pomocník pro jednoduché odebrání integrovaných souborů AppImage, např. z kontextového menu spouštěče aplikací</translation>
    </message>
    <message>
        <location line="+19"/>
        <source>Path to AppImage</source>
        <translation>Cesta k souboru AppImage</translation>
    </message>
    <message>
        <location line="+0"/>
        <source>&lt;path&gt;</source>
        <translation>&lt;cesta&gt;</translation>
    </message>
    <message>
        <location line="+20"/>
        <source>AppImage delete helper error</source>
        <translation>Chyba pomocníka odebrání AppImage</translation>
    </message>
    <message>
        <source>AppImage remove helper error</source>
        <translation type="vanished">AppImage remove helper error</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Not an AppImage:

%1</source>
        <translation>Není soubor AppImage:

%1</translation>
    </message>
    <message>
        <source>Refusing to work on non-integrated AppImage:

%1</source>
        <translation type="vanished">Refusing to work on non-integrated AppImage:

%1</translation>
    </message>
    <message>
        <source>Please confirm</source>
        <translation type="vanished">Please confirm</translation>
    </message>
    <message>
        <source>Are you sure you want to remove this AppImage?</source>
        <translation type="vanished">Are you sure you want to remove this AppImage?</translation>
    </message>
    <message>
        <location line="+38"/>
        <source>Failed to unregister AppImage: %1</source>
        <translation>Selhalo zrušení registrace AppImage: %1</translation>
    </message>
    <message>
        <location line="+12"/>
        <source>Failed to move AppImage into trash bin directory</source>
        <translation>Selhalo přesunutí souboru AppImage do adresáře koše</translation>
    </message>
    <message>
        <source>Failed to remove AppImage: %1</source>
        <translation type="vanished">Failed to remove AppImage: %1</translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="-27"/>
        <source>AppImage with same filename has already been integrated.</source>
        <translation>AppImage se stejným jménem souboru již byl integrován.</translation>
    </message>
    <message>
        <location line="+2"/>
        <source>Do you wish to overwrite the existing AppImage?</source>
        <translation>Přejete si přepsat existující soubor AppImage?</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Choosing No will run the AppImage once, and leave the system in its current state.</source>
        <translation>Vybráním Ne bude tento AppImage spuštěn jednou a systém bude ponechán ve svém aktuálním stavu.</translation>
    </message>
    <message>
        <location line="-652"/>
        <location line="+656"/>
        <source>Warning</source>
        <translation>Varování</translation>
    </message>
    <message>
        <source>Failed to move AppImage to target location</source>
        <translation type="vanished">Failed to move AppImage to target location</translation>
    </message>
    <message>
        <location line="-296"/>
        <source>Failed to register AppImage in system via libappimage</source>
        <translation>Selhala registrace AppImage v systému pomocí libappimage</translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Failed to find integrated desktop file</source>
        <translation>Nelze nalézt integrovaný desktop soubor</translation>
    </message>
    <message>
        <location line="+6"/>
        <source>Couldn&apos;t find integrated AppImage&apos;s desktop file</source>
        <translation>Nebyl nalezen desktop soubor integrovaného AppImage</translation>
    </message>
    <message>
        <location line="+20"/>
        <source>Failed to load desktop file:</source>
        <translation>Nelze načíst desktop soubor:</translation>
    </message>
    <message>
        <location line="+12"/>
        <source>AppImage has invalid desktop file</source>
        <translation>AppImage má neplatný desktop soubor</translation>
    </message>
    <message>
        <location line="+271"/>
        <source>Failed to move AppImage to target location.
Try to copy AppImage instead?</source>
        <translation>Selhalo přesunutí souboru AppImage do cílového umístění.
Zkusit namísto toho soubor AppImage zkopírovat?</translation>
    </message>
    <message>
        <location line="+181"/>
        <source>Failed to call stat() on path:

%1</source>
        <translation>Selhalo volání stat() na cestě:

%1</translation>
    </message>
    <message>
        <source>Failed to copy AppImage to target location</source>
        <translation type="vanished">Failed to copy AppImage to target location</translation>
    </message>
    <message>
        <location filename="../src/ui/update_main.cpp" line="-40"/>
        <source>Updates AppImages after desktop integration, for use by Linux distributions</source>
        <translation>Aktualizuje soubory AppImage po jejich integraci s pracovní plochou, pro použití v linuxových distribucích</translation>
    </message>
    <message>
        <location line="+3"/>
        <source>AppImageLauncher update</source>
        <comment>update helper app name</comment>
        <translation>AppImageLauncher aktualizace</translation>
    </message>
    <message>
        <source>The AppImage hasn&apos;t been integrated before. This tool will, however, integrate the updated AppImage.</source>
        <translation type="vanished">The AppImage hasn&apos;t been integrated before. This tool will, however, integrate the updated AppImage.</translation>
    </message>
    <message>
        <source>Do you wish to continue?</source>
        <translation type="vanished">Do you wish to continue?</translation>
    </message>
    <message>
        <location line="+67"/>
        <source>No updates found</source>
        <translation>Nenalezeny žádné aktualizace</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Could not find updates for AppImage %1</source>
        <translation>Nebyly nalezeny aktualizace pro AppImage %1</translation>
    </message>
    <message>
        <source>Failed to check for updates. Please check the command line output for details.</source>
        <translation type="vanished">Failed to check for updates. Please check the command line output for details.</translation>
    </message>
    <message>
        <location line="+7"/>
        <source>No update information found</source>
        <translation>Nebyly nalezeny žádné informace o aktualizaci</translation>
    </message>
    <message>
        <source>Could not find update information in AppImage:
%1

The AppImage doesn&apos;t support updating. Please ask the authors to set update information to allow for easy updating.</source>
        <translation type="vanished">Could not find update information in AppImage:
%1

The AppImage doesn&apos;t support updating. Please ask the authors to set update information to allow for easy updating.</translation>
    </message>
    <message>
        <source>Could not find update information in AppImage:
%1

The AppImage doesn&apos;t support updating. Please ask the authors to set upupdate information to allow for easy updating.</source>
        <translation type="vanished">Nelze nalézt informace o aktualizaci v souboru AppImage:
%1

Tento AppImage nepodporuje aktualizace. Požádejte prosím jeho autory, aby nastavili upupdate informace pro umožnění jednoduchých aktualizací.</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Could not find update information in AppImage:
%1

The AppImage doesn&apos;t support updating. Please ask the authors to embed update information to allow for easy updating.</source>
        <translation type="unfinished"></translation>
    </message>
    <message>
        <location line="+12"/>
        <source>Failed to check for updates:

%1</source>
        <translation>Selhala kontrola aktualizací:

%1</translation>
    </message>
    <message>
        <location line="+12"/>
        <source>An update has been found for the AppImage %1</source>
        <translation>Byla nalezena aktualizace pro AppImage %1</translation>
    </message>
    <message>
        <location line="+2"/>
        <source>Do you want to perform the update?</source>
        <translation>Chcete provést aktualizaci?</translation>
    </message>
    <message>
        <location line="+4"/>
        <source>Remove old AppImage after successful update</source>
        <translation>Odebrat starý soubor AppImage po úspěšné aktualizaci</translation>
    </message>
    <message>
        <location line="+24"/>
        <source>Failed to update AppImage:

%1</source>
        <translation>Selhala aktualizace AppImage:

%1</translation>
    </message>
    <message>
        <location line="+14"/>
        <source>File reported as updated does not exist: %1</source>
        <translation>Soubor nahlášen jako aktualizovaný neexistuje: %1</translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Failed to register updated AppImage in system</source>
        <translation>Selhala registrace aktualizovaného AppImage v systému</translation>
    </message>
    <message>
        <location line="+14"/>
        <source>Failed to unregister old AppImage in system</source>
        <translation>Selhalo zrušení registrace starého AppImage v systému</translation>
    </message>
    <message>
        <location line="+5"/>
        <source>Failed to remove old AppImage</source>
        <translation>Selhalo odebrání starého AppImage</translation>
    </message>
    <message>
        <location filename="../src/daemon/main.cpp" line="+101"/>
        <source>Tracks AppImages in applications directories (user&apos;s, system and other ones). Automatically integrates AppImages moved into those directories and unintegrates ones removed from them.</source>
        <translation>Sleduje soubory AppImage v adresářích aplikací (uživatelských, systémových a dalších). Automaticky integruje soubory AppImage přesunuté do těchto adresářů a ruší integrace těch, které jsou z nich odebrány.</translation>
    </message>
    <message>
        <source>Search for AppImages in /Applications directories in suitable mounted filesystems</source>
        <translation type="vanished">Search for AppImages in /Applications directories in suitable mounted filesystems</translation>
    </message>
    <message>
        <source>Search for AppImages in /Applications directories suitable mounted filesystems</source>
        <translation type="vanished">Search for AppImages in /Applications directories suitable mounted filesystems</translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Lists directories watched by this daemon and exit</source>
        <translation>Vypsat adresáře sledované tímto démonem a skončit</translation>
    </message>
</context>
<context>
    <name>RemoveDialog</name>
    <message>
        <source>Please confirm</source>
        <translation type="vanished">Please confirm</translation>
    </message>
    <message>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Are you sure you want to remove this AppImage?&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Are you sure you want to remove this AppImage?&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location filename="../src/ui/remove.ui" line="+17"/>
        <source>Delete AppImage</source>
        <translation>Odebrat AppImage</translation>
    </message>
    <message>
        <location line="+14"/>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Are you sure you want to delete this AppImage?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Jste si jisti, že chcete odebrat tento AppImage?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="+22"/>
        <source>%1</source>
        <translation>%1</translation>
    </message>
    <message>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Uncheck to only remove the desktop integration, but leave the file on the system.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Uncheck to only remove the desktop integration, but leave the file on the system.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <source>Remove AppImage file from system</source>
        <translation type="vanished">Remove AppImage file from system</translation>
    </message>
</context>
<context>
    <name>SettingsDialog</name>
    <message>
        <location filename="../src/ui/settings_dialog.ui" line="+14"/>
        <source>AppImageLauncher Settings</source>
        <translation>AppImageLauncher nastavení</translation>
    </message>
    <message>
        <source>AppImageLauncher</source>
        <translation type="vanished">AppImageLauncher</translation>
    </message>
    <message>
        <location line="+16"/>
        <source>Launcher Dialog</source>
        <translation>Dialog spouštěče</translation>
    </message>
    <message>
        <location line="+6"/>
        <source>Ask whether to move AppImage files into the applications directory</source>
        <translation>Ptát se, jestli přesunout soubory AppImage do adresáře aplikací</translation>
    </message>
    <message>
        <source>appimagelauncherd</source>
        <translation type="vanished">appimagelauncherd</translation>
    </message>
    <message>
        <location line="+119"/>
        <source>General settings</source>
        <translation>Obecná nastavení</translation>
    </message>
    <message>
        <location line="+6"/>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When this box is checked, AppImageLauncher automatically starts a daemon called appimagelauncherd.&lt;/p&gt;&lt;p&gt;This daemon automatically integrates AppImages you copy into the &amp;quot;Applications directory&amp;quot; and the additional directories you configured. When the files are deleted, the daemon will clean up the integration data.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Když je toto políčko zaškrtnuto, AppImageLauncher automaticky spouští démona jménem appimagelauncherd.&lt;/p&gt;&lt;p&gt;Tento démon automaticky integruje soubory AppImage, které zkopírujete do &amp;quot;Adresáře aplikací&amp;quot; a dalších adresářů, které jste nastavili. Když jsou soubory odebrány, tento démon vyčistí data integrace.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="+3"/>
        <source>Auto start auto-integration daemon</source>
        <translation>Automaticky spustit auto-integrační démon</translation>
    </message>
    <message>
        <location line="+13"/>
        <source>Additional directories to watch</source>
        <translation>Další adresáře pro sledování</translation>
    </message>
    <message>
        <location line="+11"/>
        <source>Add new directory to list</source>
        <translation>Přidat do seznamu nový adresář</translation>
    </message>
    <message>
        <location line="+13"/>
        <source>Remove selected directory from list</source>
        <translation>Odebrat vybraný adresář ze seznamu</translation>
    </message>
    <message>
        <source>-</source>
        <translation type="vanished">-</translation>
    </message>
    <message>
        <source>Applications directory</source>
        <translation type="vanished">Applications directory</translation>
    </message>
    <message>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When enabled, the daemon automatically integrates AppImages you copy into the &amp;quot;Applications directory&amp;quot;. When the files are deleted, the daemon will clean up the integration data.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When enabled, the daemon automatically integrates AppImages you copy into the &amp;quot;Applications directory&amp;quot;. When the files are deleted, the daemon will clean up the integration data.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="-144"/>
        <source>Applications directory path</source>
        <translation>Cesta k adresáři aplikací</translation>
    </message>
    <message>
        <location line="-11"/>
        <source>Location where to store your AppImage files to ease their management</source>
        <translation>Umístění, kam ukládat vaše soubory AppImage pro zjednodušení jejich správy</translation>
    </message>
    <message>
        <source>Location where to store your AppImage files to ease their management using the file manager.</source>
        <translation type="vanished">Location where to store your AppImage files to ease their management using the file manager.</translation>
    </message>
    <message>
        <source>/path</source>
        <translation type="vanished">/path</translation>
    </message>
    <message>
        <source>Enable auto-integration daemon</source>
        <translation type="vanished">Enable auto-integration daemon</translation>
    </message>
    <message>
        <location line="+49"/>
        <source>Available Features</source>
        <translation>Dostupné vlastnosti</translation>
    </message>
    <message>
        <location filename="../src/ui/settings_dialog.cpp" line="+40"/>
        <source>updater available for AppImages supporting AppImageUpdate</source>
        <translation>aktualizátor dostupný pro soubory AppImage podporující AppImageUpdate</translation>
    </message>
    <message>
        <location line="+2"/>
        <source>updater unavailable</source>
        <translation>aktualizátor nedostupný</translation>
    </message>
    <message>
        <location line="+5"/>
        <source>&lt;strong&gt;Note: this is an AppImageLauncher Lite build, only supports a limited set of features&lt;/strong&gt;&lt;br /&gt;Please install the full version via the provided native packages to enjoy the full AppImageLauncher experience</source>
        <translation>&lt;strong&gt;Poznámka: toto je sestavení AppImageLauncher Lite, podporuje pouze limitovanou sadu funkcí&lt;/strong&gt;&lt;br /&gt;Nainstalujte prosím plnou verzi pomocí poskytnutých nativních balíčků pro plný zážitek z aplikace AppImageLauncher</translation>
    </message>
    <message>
        <location line="+137"/>
        <source>Select Applications directory</source>
        <translation>Vyberte adresář aplikací</translation>
    </message>
    <message>
        <location line="+17"/>
        <source>Select additional directory to watch</source>
        <translation>Vyberte další adresář pro sledování</translation>
    </message>
</context>
</TS>


================================================
FILE: i18n/ui.de.ts
================================================
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de">
<context>
    <name>FirstRunDialog</name>
    <message>
        <location filename="../src/ui/first-run.ui" line="+20"/>
        <source>First run</source>
        <translation>Erste Ausführung</translation>
    </message>
    <message>
        <location line="+55"/>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Welcome to AppImageLauncher!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This little helper is designed to improve your AppImage experience on your computer.&lt;/p&gt;&lt;p&gt;It appears you have never run AppImageLauncher before. Please take a minute and configure your preferences. You can always change these later on, using the control panel.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;Willkommen bei AppImageLauncher!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Dieses kleine Hilfsprogramm wurde entworfen, um Ihre AppImage-Erfahrung auf Ihrem Computer zu verbessern.&lt;/p&gt;&lt;p&gt;Es scheint, als hätten Sie AppImageLauncher nie zuvor ausgeführt. Bitte nehmen Sie sich eine Minute zeit und konfigurieren Sie Ihre Einstellungen. Sie können diese jederzeit über den Einstellungsdialog ändern.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="+22"/>
        <source>Ask me whether to move new AppImages into a central location</source>
        <translation>Frage mich, ob neue AppImages in ein zentrales Verzeichnis verschoben werden sollen</translation>
    </message>
    <message>
        <location line="+21"/>
        <source>Integration target destination directory:</source>
        <translation>Integrations-Zielverzeichnis:</translation>
    </message>
    <message>
        <location line="+36"/>
        <source>Customize</source>
        <translation>Anpassen</translation>
    </message>
    <message>
        <location filename="../src/ui/first-run.cpp" line="+86"/>
        <source>Choose integration destination dir</source>
        <translation>Wähle Integrations-Zielverzeichnis</translation>
    </message>
    <message>
        <location line="+17"/>
        <source>(default)</source>
        <translation>(Standard)</translation>
    </message>
</context>
<context>
    <name>IntegrationDialog</name>
    <message>
        <location filename="../src/ui/integration_dialog.ui" line="+23"/>
        <source>Desktop Integration</source>
        <translation>Desktop-Integration</translation>
    </message>
    <message>
        <location line="+20"/>
        <source>Icon</source>
        <translation>Symbol</translation>
    </message>
    <message>
        <location line="+21"/>
        <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;%1 has not been integrated into your system.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; &lt;br /&gt;Integrating it will move the AppImage into a predefined location, and include it in your application launcher.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;To remove or update the AppImage, please use the context menu of the application icon in your task bar or launcher. &lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;The directory where the integrated AppImages are stored in is currently set to: %2&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Noto Sans&apos;; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;%1 wurde noch nicht in Ihr System integriert.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; &lt;br /&gt;Durch die Integration wird das AppImage in ein vordefiniertes Verzeichnis verschoben, und in das Anwendungsmenü aufgenommen.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Um das AppImage zu aktualisieren oder zu entfernen, benutzen Sie bitte das Kontextmenü des Anwendungs-Icons in Ihrer Anwendungsleiste oder im Anwendungsmenü. &lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Das Verzeichnis, in dem die integrierten AppImages gespeichert werden, ist derzeit: %2&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="+41"/>
        <source>Integrate and run</source>
        <translation>Integrieren und ausführen</translation>
    </message>
    <message>
        <location line="+10"/>
        <source>Run once</source>
        <translation>Einmalig ausführen</translation>
    </message>
</context>
<context>
    <name>QMessageBox</name>
    <message>
        <location filename="../src/ui/main.cpp" line="+385"/>
        <source>Warning</source>
        <translation>Warnung</translation>
    </message>
    <message>
        <source>AppImage has already been integrated, but it is not in the current integration destination directory.

Do you want to move it into the new destination?
Choosing No will run the AppImage once, and leave the AppImage in its current directory.</source>
        <translation type="vanished">AppImage wurde bereits integriert, aber befindet sich nicht im aktuell gewählten Zielverzeichnis.

Möchten Sie es in das neue Verzeichnis verschieben?
Sofern Sie Nein wählen, wird das AppImage einmal ausgeführt, und verbleibt in seinem derzeitigen Verzeichnis.</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>AppImage %1 has already been integrated, but it is not in the current integration destination directory.

Do you want to move it into the new destination?

Choosing No will run the AppImage once, and leave the AppImage in its current directory.

</source>
        <translation>Das AppImage %1 wurde bereits integriert, aber befindet sich nicht im derzeit konfigurierten Zielverzeichnis.

Möchten Sie es in das neue Zielverzeichnis verschieben?

Sollten Sie Nein wählen, wird das AppImage einmalig ausgeführt, und es wird im aktuellen Verzeichnis belassen.

</translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="+1232"/>
        <location line="+8"/>
        <source>Error</source>
        <translation>Fehler</translation>
    </message>
    <message>
        <location filename="../src/ui/main.cpp" line="+23"/>
        <source>Failed to unregister AppImage before re-integrating it</source>
        <translation>Fehler beim Deregistrieren des AppImages vor der Reintegration</translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="-485"/>
        <source>Could not parse desktop file translations:
Could not open file for reading:

%1</source>
        <translation>Konnte Übersetzungen für Desktop-Datei nicht parsen:
Konnte Datei nicht zum Lesen öffnen:

%1</translation>
    </message>
    <message>
        <location line="+11"/>
        <source>Could not parse desktop file translations:
Invalid syntax:

%1</source>
        <translation>Konnte Übersetzungen für Desktop-Datei nicht parsen:
Kaputte Syntax:

%1</translation>
    </message>
    <message>
        <location line="+409"/>
        <source>File %1 is owned by another user: %2</source>
        <translation>Datei %1 gehört einem anderen Benutzer: %2</translation>
    </message>
    <message>
        <location line="+6"/>
        <source>Permissions problem</source>
        <translation>Rechte-Problem</translation>
    </message>
    <message>
        <source>File %1 is owned by another user: %2

Relaunch with their permissions?</source>
        <translation type="vanished">Datei %1 gehört anderem Nutzer: %2

Neu starten mit deren Rechten?</translation>
    </message>
    <message>
        <location line="+52"/>
        <source>Failed to run permissions helper, exited with return code %1</source>
        <translation>Fehler beim Ausführen des Rechte-Hilfsprogramms, beendet mit Rückgabewert %1</translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Could not find suitable permissions helper, aborting</source>
        <translation>Konnte kein geeignetes Rechte-Hilfsprogramm finden, breche ab</translation>
    </message>
</context>
<context>
    <name>QObject</name>
    <message>
        <location line="-985"/>
        <location line="+680"/>
        <location filename="../src/ui/remove_main.cpp" line="+106"/>
        <location line="+12"/>
        <location line="+12"/>
        <location filename="../src/ui/update_main.cpp" line="+119"/>
        <location line="+42"/>
        <source>Error</source>
        <translation>Fehler</translation>
    </message>
    <message>
        <location filename="../src/ui/main.cpp" line="-362"/>
        <source>AppImageLauncher does not support type %1 AppImages at the moment.</source>
        <translation>AppImageLauncher unterstützt zur Zeit keine AppImages vom Typ %1.</translation>
    </message>
    <message>
        <location line="+7"/>
        <source>Could not make AppImage executable: %1</source>
        <translation>AppImage konnte nicht ausführbar gemacht werden: %1</translation>
    </message>
    <message>
        <source>Failed to open AppImage for reading: %1</source>
        <translation type="vanished">AppImage konnte nicht lesend geöffnet werden: %1</translation>
    </message>
    <message>
        <source>Failed to create temporary directory</source>
        <translation type="vanished">Fehler beim Erstellen des temporären Verzeichnisses</translation>
    </message>
    <message>
        <source>Failed to create temporary copy of type 1 AppImage</source>
        <translation type="vanished">Temporäre Kopie des Typ-1-AppImages konnte nicht erstellt werden</translation>
    </message>
    <message>
        <source>Failed to open temporary AppImage copy for writing</source>
        <translation type="vanished">AppImage konnte nicht schreibend geöffnet werden: %1</translation>
    </message>
    <message>
        <source>Failed to remove magic bytes from temporary AppImage copy</source>
        <translation type="vanished">Entfernen der magischen Bytes in der temporären AppImage-Kopie fehlgeschlagen</translation>
    </message>
    <message>
        <source>execv() failed: %1</source>
        <comment>error message</comment>
        <translation type="vanished">execv() fehlgeschlagen: %1</translation>
    </message>
    <message>
        <source>runtime not found: no such file or directory: %1</source>
        <translation type="vanished">runtime nicht gefunden: Datei oder Verzeichnis nicht vorhanden: %1</translation>
    </message>
    <message>
        <location line="+40"/>
        <source>execv() failed: %1</source>
        <translation>execv() fehlgeschlagen: %1</translation>
    </message>
    <message>
        <location line="+70"/>
        <source>Usage: %1 [options] &lt;path&gt;</source>
        <translation>Benutzung: %1 [Optionen] &lt;Pfad&gt;</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Desktop integration helper for AppImages, for use by Linux distributions.</source>
        <translation>Hilfsprogramm zur Desktop-Integration von AppImages, zur Verwendung durch Linux-Distributionen.</translation>
    </message>
    <message>
        <location line="+3"/>
        <source>Options:</source>
        <translation>Optionen:</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Display this help and exit</source>
        <translation>Hilfetext anzeigen und beenden</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Display version and exit</source>
        <translation>Version anzeigen und beenden</translation>
    </message>
    <message>
        <location line="+2"/>
        <source>Arguments:</source>
        <translation>Argumente:</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Path to AppImage (mandatory)</source>
        <translation>Pfad zu AppImage (erforderlich)</translation>
    </message>
    <message>
        <location line="+265"/>
        <source>Unexpected result from the integration dialog.</source>
        <translation>Unerwartetes Ergebnis vom Integrations-Dialog.</translation>
    </message>
    <message>
        <location line="-287"/>
        <source>Failed to clean up old desktop files</source>
        <translation>Fehler beim Aufräumen der alten Desktop-Dateien</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: error while trying to start appimagelauncherfs.service</source>
        <translation type="vanished">Fehler beim Registrieren des AppImages in AppImageLauncherFS: Fehler beim Starten von appimagelauncherfs.service</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: failed to register AppImage path %1</source>
        <translation type="vanished">Fehler beim Registrieren des AppImages in AppImageLauncherFS: Registrieren des AppImage-Pfades %1 fehlgeschlagen</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: could not open map file</source>
        <translation type="vanished">Fehler beim Registrieren des AppImages in AppImageLauncherFS: konnte Map-Datei nicht öffnen</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: could not find virtual file for AppImage</source>
        <translation type="vanished">Fehler beim Registrieren des AppImages in AppImageLauncherFS: konnte virtuelle Datei für AppImage nicht finden</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: unknown failure</source>
        <translation type="vanished">Fehler beim Registrieren des AppImages in AppImageLauncherFS: unbekannter Fehler</translation>
    </message>
    <message>
        <location line="+8"/>
        <location filename="../src/ui/remove_main.cpp" line="+1"/>
        <source>Failed to clean up AppImage trash bin: %1</source>
        <translation>Fehler beim Aufräumen des AppImage-Papierkorbs: %1</translation>
    </message>
    <message>
        <location line="+49"/>
        <source>Unknown AppImageLauncher option: %1</source>
        <translation>Unbekannte AppImageLauncher-Option: %1</translation>
    </message>
    <message>
        <location line="+12"/>
        <location filename="../src/ui/remove_main.cpp" line="-74"/>
        <location filename="../src/ui/update_main.cpp" line="-99"/>
        <source>Error: no such file or directory: %1</source>
        <translation>Fehler: Datei oder Verzeichnis nicht gefunden: %1</translation>
    </message>
    <message>
        <location line="+13"/>
        <location filename="../src/ui/update_main.cpp" line="+7"/>
        <source>Not an AppImage: %1</source>
        <translation>Datei ist kein AppImage: %1</translation>
    </message>
    <message>
        <location line="+162"/>
        <source>The directory the integrated AppImages are stored in is currently set to:
%1</source>
        <translation>Das Verzeichnis zum Speichern der integrierten AppImages ist derzeit:
%1</translation>
    </message>
    <message>
        <source>The directory the integrated AppImages are stored in is currently set to: %1</source>
        <translation type="vanished">Das derzeit konfigurierte Zielverzeichnis für integrierte AppImages ist: %1</translation>
    </message>
    <message>
        <source>Integrating it will move the AppImage into a predefined location, and include it in your application launcher.</source>
        <translation type="vanished">Durch die Integration wird das AppImage in ein vordefiniertes Verzeichnis verschoben, und in das Applikationsmenü aufgenommen.</translation>
    </message>
    <message>
        <source>To remove or update the AppImage, please use the context menu of the application icon in your task bar or launcher.</source>
        <translation type="vanished">Um das AppImage zu aktualisieren oder zu entfernen, benutzen Sie bitte das Kontextmenü des Anwendungs-Icons in Ihrer Task-Bar oder im Applikationsmenü.</translation>
    </message>
    <message>
        <source>The directory the integrated AppImages are stored in is currently set to:</source>
        <translation type="vanished">Das Verzeichnis, in welchem die integrierten AppImages gespeichert werden, ist derzeit:</translation>
    </message>
    <message>
        <source>%1 has not been integrated into your system.</source>
        <translation type="vanished">%1 wurde noch nicht in Ihr System integriert.</translation>
    </message>
    <message>
        <source>Desktop Integration</source>
        <translation type="vanished">Desktop-Integration</translation>
    </message>
    <message>
        <source>Integrate and run</source>
        <translation type="vanished">Integrieren und ausführen</translation>
    </message>
    <message>
        <source>Run once</source>
        <translation type="vanished">Einmalig ausführen</translation>
    </message>
    <message>
        <source>Cancel</source>
        <translation type="vanished">Abbruch</translation>
    </message>
    <message>
        <source>Removes AppImages after desktop integration, for use by Linux distributions</source>
        <translation type="vanished">Entfernt AppImages nach ihrer Desktop-Integration, zur Verwendung durch Linux-Distributionen</translation>
    </message>
    <message>
        <source>AppImageLauncher remove</source>
        <comment>remove helper app name</comment>
        <translation type="vanished">AppImageLauncher Löschhelfer</translation>
    </message>
    <message>
        <location filename="../src/ui/remove_main.cpp" line="-28"/>
        <source>Helper to delete integrated AppImages easily, e.g., from the application launcher&apos;s context menu</source>
        <translation>Hilfsprogramm zum einfachen Löschen integrierter AppImages, z.B. durch das Kontextmenü des Programm-Menüs</translation>
    </message>
    <message>
        <location line="+19"/>
        <source>Path to AppImage</source>
        <translation>Pfad zu AppImage</translation>
    </message>
    <message>
        <location line="+0"/>
        <source>&lt;path&gt;</source>
        <translation>&lt;Pfad&gt;</translation>
    </message>
    <message>
        <location line="+20"/>
        <source>AppImage delete helper error</source>
        <translation>AppImage Lösch-Hilfsprogramm Fehler</translation>
    </message>
    <message>
        <source>AppImage remove helper error</source>
        <translation type="vanished">AppImage Löschhelfer Fehler</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Not an AppImage:

%1</source>
        <translation>Kein AppImage:

%1</translation>
    </message>
    <message>
        <source>Refusing to work on non-integrated AppImage:

%1</source>
        <translation type="vanished">Verweigere Arbeit an nicht integriertem AppImage:

%1</translation>
    </message>
    <message>
        <source>Please confirm</source>
        <translation type="vanished">Bitte bestätigen</translation>
    </message>
    <message>
        <source>Are you sure you want to remove this AppImage?</source>
        <translation type="vanished">Sind Sie sicher, dass Sie dieses AppImage entfernen möchten?</translation>
    </message>
    <message>
        <location line="+38"/>
        <source>Failed to unregister AppImage: %1</source>
        <translation>Fehler beim Deregistrieren des AppImages: %1</translation>
    </message>
    <message>
        <location line="+12"/>
        <source>Failed to move AppImage into trash bin directory</source>
        <translation>Fehler beim Verschieben des AppImages in das Papierkorb-Verzeichnis</translation>
    </message>
    <message>
        <source>Failed to remove AppImage: %1</source>
        <translation type="vanished">Entfernen des AppImages fehlgeschlagen: %1</translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="-27"/>
        <source>AppImage with same filename has already been integrated.</source>
        <translation>AppImage mit gleichem Dateinamen wurde bereits integriert.</translation>
    </message>
    <message>
        <location line="+2"/>
        <source>Do you wish to overwrite the existing AppImage?</source>
        <translation>Möchten Sie das existierende AppImage überschreiben?</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Choosing No will run the AppImage once, and leave the system in its current state.</source>
        <translation>Bei Klick auf Nein wird das AppImage einmalig ausgeführt, und das System in seinem derzeitigen Zustand belassen.</translation>
    </message>
    <message>
        <location line="-652"/>
        <location line="+656"/>
        <source>Warning</source>
        <translation>Warnung</translation>
    </message>
    <message>
        <source>Failed to move AppImage to target location</source>
        <translation type="vanished">Verschieben des AppImages in Zielverzeichnis fehlgeschlagen</translation>
    </message>
    <message>
        <location line="-296"/>
        <source>Failed to register AppImage in system via libappimage</source>
        <translation>Fehler beim Registrieren des AppImages im System via libappimage</translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Failed to find integrated desktop file</source>
        <translation>Suche nach integrierter Desktop-Datei fehlgeschlagen</translation>
    </message>
    <message>
        <location line="+6"/>
        <source>Couldn&apos;t find integrated AppImage&apos;s desktop file</source>
        <translation>Konnte Desktop-Datei des integrierten AppImages nicht finden</translation>
    </message>
    <message>
        <location line="+20"/>
        <source>Failed to load desktop file:</source>
        <translation>Fehler beim Laden der Desktop-Datei:</translation>
    </message>
    <message>
        <location line="+12"/>
        <source>AppImage has invalid desktop file</source>
        <translation>AppImage hat ungültige Desktop-Datei</translation>
    </message>
    <message>
        <location line="+271"/>
        <source>Failed to move AppImage to target location.
Try to copy AppImage instead?</source>
        <translation>Fehler beim Verschieben des AppImages in Zielverzeichnis.
Stattdessen versuchen, das AppImage zu kopieren?</translation>
    </message>
    <message>
        <location line="+181"/>
        <source>Failed to call stat() on path:

%1</source>
        <translation>Aufruf von stat() auf Pfad fehlgeschlagen:

%1</translation>
    </message>
    <message>
        <source>Failed to copy AppImage to target location</source>
        <translation type="vanished">Fehler beim Kopieren des AppImages in Zielverzeichnis</translation>
    </message>
    <message>
        <location filename="../src/ui/update_main.cpp" line="-40"/>
        <source>Updates AppImages after desktop integration, for use by Linux distributions</source>
        <translation>Aktualisiert AppImages nach Desktop-Integration, zur Verwendung durch Linux-Distributionen</translation>
    </message>
    <message>
        <location line="+3"/>
        <source>AppImageLauncher update</source>
        <comment>update helper app name</comment>
        <translation>AppImageLauncher Update</translation>
    </message>
    <message>
        <source>The AppImage hasn&apos;t been integrated before. This tool will, however, integrate the updated AppImage.</source>
        <translation type="vanished">Das AppImage wurde bisher noch nicht integriert. Dieses Programm wird aber das aktualisierte AppImage integrieren.</translation>
    </message>
    <message>
        <source>Do you wish to continue?</source>
        <translation type="vanished">Möchten Sie fortfahren?</translation>
    </message>
    <message>
        <location line="+67"/>
        <source>No updates found</source>
        <translation>Keine Aktualisierungen gefunden</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Could not find updates for AppImage %1</source>
        <translation>Konnte keine Updates finden für AppImage %1</translation>
    </message>
    <message>
        <source>Failed to check for updates. Please check the command line output for details.</source>
        <translation type="vanished">Fehler beim Update-Check. Bitte überprüfen Sie den Kommandozeilen-Log für weitere Details.</translation>
    </message>
    <message>
        <location line="+7"/>
        <source>No update information found</source>
        <translation>Keine Update-Informationen gefunden</translation>
    </message>
    <message>
        <source>Could not find update information in AppImage:
%1

The AppImage doesn&apos;t support updating. Please ask the authors to set update information to allow for easy updating.</source>
        <translation type="vanished">Konnte keine Update-Informationen finden im AppImage:
%1

Das AppImage unterstützt keine Updates. Bitte fragen Sie die Autoren, die Update-Informationen zu setzen, um einfaches Aktualisieren zu ermöglichen.</translation>
    </message>
    <message>
        <source>Could not find update information in AppImage:
%1

The AppImage doesn&apos;t support updating. Please ask the authors to set upupdate information to allow for easy updating.</source>
        <translation type="vanished">Konnte keine Update-Informationen finden im AppImage:
%1

Das AppImage unterstützt keine Updates. Bitten Sie die Autoren, die Update-Informationen zu setzen, um einfaches Aktualisieren zu ermöglichen.</translation>
    </message>
    <message>
        <location line="+1"/>
        <source>Could not find update information in AppImage:
%1

The AppImage doesn&apos;t support updating. Please ask the authors to embed update information to allow for easy updating.</source>
        <translation>Konnte keine Update-Informationen finden im AppImage:
%1

Das AppImage unterstützt keine Aktualisierungen. Bitten Sie die Autoren, Update-Informationen einzubetten, um einfaches Aktualisieren zu ermöglichen.</translation>
    </message>
    <message>
        <location line="+12"/>
        <source>Failed to check for updates:

%1</source>
        <translation>Fehler beim Update-Check:

%1</translation>
    </message>
    <message>
        <location line="+12"/>
        <source>An update has been found for the AppImage %1</source>
        <translation>Eine Aktualisierung wurde gefunden für das AppImage %1</translation>
    </message>
    <message>
        <location line="+2"/>
        <source>Do you want to perform the update?</source>
        <translation>Möchten Sie die Aktualisierung durchführen?</translation>
    </message>
    <message>
        <location line="+4"/>
        <source>Remove old AppImage after successful update</source>
        <translation>Entferne altes AppImage nach erfolgreicher Aktualisierung</translation>
    </message>
    <message>
        <location line="+24"/>
        <source>Failed to update AppImage:

%1</source>
        <translation>Fehler beim Aktualisieren des AppImages:

%1</translation>
    </message>
    <message>
        <location line="+14"/>
        <source>File reported as updated does not exist: %1</source>
        <translation>Datei, die als aktualisiert angegeben wurde, existiert nicht: %1</translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Failed to register updated AppImage in system</source>
        <translation>Fehler beim Registrieren des aktualisierten AppImages im System</translation>
    </message>
    <message>
        <location line="+14"/>
        <source>Failed to unregister old AppImage in system</source>
        <translation>Fehler beim Deregistrieren des alten AppImages im System</translation>
    </message>
    <message>
        <location line="+5"/>
        <source>Failed to remove old AppImage</source>
        <translation>Fehler beim Entfernen des alten AppImages</translation>
    </message>
    <message>
        <location filename="../src/daemon/main.cpp" line="+101"/>
        <source>Tracks AppImages in applications directories (user&apos;s, system and other ones). Automatically integrates AppImages moved into those directories and unintegrates ones removed from them.</source>
        <translation>Überwacht AppImages in Applikations-Verzeichnissen (dem des Benutzers, des Systems und anderen). Integriert AppImages, die in diese Verzeichnisse verschoben werden, und entfernt die Integration derer, die von dort entfernt werden, automatisch.</translation>
    </message>
    <message>
        <source>Search for AppImages in /Applications directories in suitable mounted filesystems</source>
        <translation type="vanished">Suche nach AppImages in /Applications-Verzeichnis auf geeigneten, eingehängten Dateisystemen</translation>
    </message>
    <message>
        <location line="+8"/>
        <source>Lists directories watched by this daemon and exit</source>
        <translation>Listet Verzeichnisse auf, welche von diesem Dienst überwacht werden, und beendet sich</translation>
    </message>
</context>
<context>
    <name>RemoveDialog</name>
    <message>
        <source>Please confirm</source>
        <translation type="vanished">Bitte bestätigen</translation>
    </message>
    <message>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Are you sure you want to remove this AppImage?&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Sind Sie sicher, dass Sie dieses AppImage entfernen wollen?&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location filename="../src/ui/remove.ui" line="+17"/>
        <source>Delete AppImage</source>
        <translation>AppImage löschen</translation>
    </message>
    <message>
        <location line="+14"/>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Are you sure you want to delete this AppImage?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Sind Sie sicher, dass Sie dieses AppImage löschen möchten?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="+22"/>
        <source>%1</source>
        <translation>%1</translation>
    </message>
    <message>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Uncheck to only remove the desktop integration, but leave the file on the system.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Abwählen, um nur die Desktop-Integration zu entfernen, die Datei aber auf dem System zu behalten.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <source>Remove AppImage file from system</source>
        <translation type="vanished">AppImage vom System entfernen</translation>
    </message>
</context>
<context>
    <name>SettingsDialog</name>
    <message>
        <location filename="../src/ui/settings_dialog.ui" line="+14"/>
        <source>AppImageLauncher Settings</source>
        <translation>AppImageLauncher-Einstellungen</translation>
    </message>
    <message>
        <location line="+16"/>
        <source>Launcher Dialog</source>
        <translation>Launcher-Dialog</translation>
    </message>
    <message>
        <location line="+6"/>
        <source>Ask whether to move AppImage files into the applications directory</source>
        <translation>Frage, ob AppImages in Applications-Verzeichnis verschoben werden sollen</translation>
    </message>
    <message>
        <location line="+119"/>
        <source>General settings</source>
        <translation>Allgemeine Einstellungen</translation>
    </message>
    <message>
        <location line="+6"/>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When this box is checked, AppImageLauncher automatically starts a daemon called appimagelauncherd.&lt;/p&gt;&lt;p&gt;This daemon automatically integrates AppImages you copy into the &amp;quot;Applications directory&amp;quot; and the additional directories you configured. When the files are deleted, the daemon will clean up the integration data.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Wird das Kästchen angehakt, wird AppImageLauncher automatisch einen Dienst namens appimagelauncherd starten.&lt;/p&gt;&lt;p&gt;Dieser Dienst integriert AppImages, die Sie in ihr &amp;quot; -Verzeichnis&amp;quot; und in die anderen überwachten Verzeichnisse kopieren, automatisch. Wenn die Dateien gelöscht werden, wird der Dienst die Integrations-Daten automatisch aufräumen.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="+3"/>
        <source>Auto start auto-integration daemon</source>
        <translation>Auto-Integrations-Dienst automatisch starten</translation>
    </message>
    <message>
        <location line="+13"/>
        <source>Additional directories to watch</source>
        <translation>Zusätzlich zu überwachende Verzeichnisse</translation>
    </message>
    <message>
        <location line="+11"/>
        <source>Add new directory to list</source>
        <translation>Neues Verzeichnis zur Liste hinzufügen</translation>
    </message>
    <message>
        <location line="+13"/>
        <source>Remove selected directory from list</source>
        <translation>Ausgewähltes Verzeichnis aus Liste entfernen</translation>
    </message>
    <message>
        <source>Applications directory</source>
        <translation type="vanished">Applications-Verzeichnis</translation>
    </message>
    <message>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When enabled, the daemon automatically integrates AppImages you copy into the &amp;quot;Applications directory&amp;quot;. When the files are deleted, the daemon will clean up the integration data.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Wenn aktiviert, wird der Dienst automatisch AppImages, die in das &amp;quot;Applikationsverzeichnis&amp;quot; kopiert werden, integrieren. Wenn die Dateien gelöscht werden, wird der Dienst die Integrationsdaten automatisch aufräumen.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="-144"/>
        <source>Applications directory path</source>
        <translation>Pfad des Applikationsverzeichnisses</translation>
    </message>
    <message>
        <location line="-11"/>
        <source>Location where to store your AppImage files to ease their management</source>
        <translation>Ort zur Speicherung der AppImage-Dateien, um sie leichter handhaben zu können</translation>
    </message>
    <message>
        <source>Enable auto-integration daemon</source>
        <translation type="vanished">Auto-Integrations-Dienst aktivieren</translation>
    </message>
    <message>
        <location line="+49"/>
        <source>Available Features</source>
        <translation>Verfügbare Features</translation>
    </message>
    <message>
        <location filename="../src/ui/settings_dialog.cpp" line="+40"/>
        <source>updater available for AppImages supporting AppImageUpdate</source>
        <translation>Updater verfügbar für AppImages, die AppImageUpdate unterstützen</translation>
    </message>
    <message>
        <location line="+2"/>
        <source>updater unavailable</source>
        <translation>Updater nicht verfügbar</translation>
    </message>
    <message>
        <location line="+5"/>
        <source>&lt;strong&gt;Note: this is an AppImageLauncher Lite build, only supports a limited set of features&lt;/strong&gt;&lt;br /&gt;Please install the full version via the provided native packages to enjoy the full AppImageLauncher experience</source>
        <translation>&lt;strong&gt;Anmerkung: dies ist ein AppImageLauncher-Lite-Build, welcher nur ein begrenztes Spektrum an Funktionen bietet&lt;/strong&gt;&lt;br /&gt;Bitte installieren Sie die Vollversion mittels der bereitgestellten nativen Pakete, um in den Genuss der vollständigen AppImageLauncher-Erfahrung kommen zu können</translation>
    </message>
    <message>
        <location line="+137"/>
        <source>Select Applications directory</source>
        <translation>Wähle Applications-Verzeichnis</translation>
    </message>
    <message>
        <location line="+17"/>
        <source>Select additional directory to watch</source>
        <translation>Zusätzlich zu überwachendes Verzeichnis auswählen</translation>
    </message>
</context>
</TS>


================================================
FILE: i18n/ui.en.ts
================================================
<TS version="2.1" language="en_US">
<context>
    <name>FirstRunDialog</name>
    <message>
        <location filename="../src/ui/first-run.ui" line="+20" />
        <source>First run</source>
        <translation>First run</translation>
    </message>
    <message>
        <location line="+55" />
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=" font-size:11pt; font-weight:600;"&gt;Welcome to AppImageLauncher!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This little helper is designed to improve your AppImage experience on your computer.&lt;/p&gt;&lt;p&gt;It appears you have never run AppImageLauncher before. Please take a minute and configure your preferences. You can always change these later on, using the control panel.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=" font-size:11pt; font-weight:600;"&gt;Welcome to AppImageLauncher!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This little helper is designed to improve your AppImage experience on your computer.&lt;/p&gt;&lt;p&gt;It appears you have never run AppImageLauncher before. Please take a minute and configure your preferences. You can always change these later on, using the control panel.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="+22" />
        <source>Ask me whether to move new AppImages into a central location</source>
        <translation>Ask me whether to move new AppImages into a central location</translation>
    </message>
    <message>
        <location line="+21" />
        <source>Integration target destination directory:</source>
        <translation>Integration target destination directory:</translation>
    </message>
    <message>
        <location line="+36" />
        <source>Customize</source>
        <translation>Customize</translation>
    </message>
    <message>
        <location filename="../src/ui/first-run.cpp" line="+86" />
        <source>Choose integration destination dir</source>
        <translation>Choose integration destination dir</translation>
    </message>
    <message>
        <location line="+17" />
        <source>(default)</source>
        <translation>(default)</translation>
    </message>
</context>
<context>
    <name>IntegrationDialog</name>
    <message>
        <location filename="../src/ui/integration_dialog.ui" line="+23" />
        <source>Desktop Integration</source>
        <translation>Desktop Integration</translation>
    </message>
    <message>
        <location line="+20" />
        <source>Icon</source>
        <translation>Icon</translation>
    </message>
    <message>
        <location line="+21" />
        <source>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name="qrichtext" content="1" /&gt;&lt;style type="text/css"&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=" font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;"&gt;
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt;%1 has not been integrated into your system.&lt;/p&gt;
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt; &lt;br /&gt;Integrating it will move the AppImage into a predefined location, and include it in your application launcher.&lt;/p&gt;
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt;To remove or update the AppImage, please use the context menu of the application icon in your task bar or launcher. &lt;/p&gt;
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt;The directory where the integrated AppImages are stored in is currently set to: %2&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name="qrichtext" content="1" /&gt;&lt;style type="text/css"&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=" font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;"&gt;
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt;%1 has not been integrated into your system.&lt;/p&gt;
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt; &lt;br /&gt;Integrating it will move the AppImage into a predefined location, and include it in your application launcher.&lt;/p&gt;
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt;To remove or update the AppImage, please use the context menu of the application icon in your task bar or launcher. &lt;/p&gt;
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"&gt;The directory where the integrated AppImages are stored in is currently set to: %2&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="+41" />
        <source>Integrate and run</source>
        <translation>Integrate and run</translation>
    </message>
    <message>
        <location line="+10" />
        <source>Run once</source>
        <translation>Run once</translation>
    </message>
</context>
<context>
    <name>QMessageBox</name>
    <message>
        <location filename="../src/ui/main.cpp" line="+385" />
        <source>Warning</source>
        <translation>Warning</translation>
    </message>
    <message>
        <source>AppImage has already been integrated, but it is not in the current integration destination directory.

Do you want to move it into the new destination?
Choosing No will run the AppImage once, and leave the AppImage in its current directory.</source>
        <translation type="vanished">AppImage has already been integrated, but it is not in the current integration destination directory.

Do you want to move it into the new destination?
Choosing No will run the AppImage once, and leave the AppImage in its current directory.</translation>
    </message>
    <message>
        <location line="+1" />
        <source>AppImage %1 has already been integrated, but it is not in the current integration destination directory.

Do you want to move it into the new destination?

Choosing No will run the AppImage once, and leave the AppImage in its current directory.

</source>
        <translation>AppImage %1 has already been integrated, but it is not in the current integration destination directory.

Do you want to move it into the new destination?

Choosing No will run the AppImage once, and leave the AppImage in its current directory.

</translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="+1232" />
        <location line="+8" />
        <source>Error</source>
        <translation>Error</translation>
    </message>
    <message>
        <location filename="../src/ui/main.cpp" line="+23" />
        <source>Failed to unregister AppImage before re-integrating it</source>
        <translation>Failed to unregister AppImage before re-integrating it</translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="-485" />
        <source>Could not parse desktop file translations:
Could not open file for reading:

%1</source>
        <translation>Could not parse desktop file translations:
Could not open file for reading:

%1</translation>
    </message>
    <message>
        <location line="+11" />
        <source>Could not parse desktop file translations:
Invalid syntax:

%1</source>
        <translation>Could not parse desktop file translations:
Invalid syntax:

%1</translation>
    </message>
    <message>
        <location line="+409" />
        <source>File %1 is owned by another user: %2</source>
        <translation>File %1 is owned by another user: %2</translation>
    </message>
    <message>
        <location line="+6" />
        <source>Permissions problem</source>
        <translation>Permissions problem</translation>
    </message>
    <message>
        <source>File %1 is owned by another user: %2

Relaunch with their permissions?</source>
        <translation type="vanished">File %1 is owned by another user: %2

Relaunch with their permissions?</translation>
    </message>
    <message>
        <location line="+52" />
        <source>Failed to run permissions helper, exited with return code %1</source>
        <translation>Failed to run permissions helper, exited with return code %1</translation>
    </message>
    <message>
        <location line="+8" />
        <source>Could not find suitable permissions helper, aborting</source>
        <translation>Could not find suitable permissions helper, aborting</translation>
    </message>
</context>
<context>
    <name>QObject</name>
    <message>
        <location line="-985" />
        <location line="+680" />
        <location filename="../src/ui/remove_main.cpp" line="+106" />
        <location line="+12" />
        <location line="+12" />
        <location filename="../src/ui/update_main.cpp" line="+119" />
        <location line="+42" />
        <source>Error</source>
        <translation>Error</translation>
    </message>
    <message>
        <location filename="../src/ui/main.cpp" line="-362" />
        <source>AppImageLauncher does not support type %1 AppImages at the moment.</source>
        <translation>AppImageLauncher does not support type %1 AppImages at the moment.</translation>
    </message>
    <message>
        <location line="+7" />
        <source>Could not make AppImage executable: %1</source>
        <translation>Could not make AppImage executable: %1</translation>
    </message>
    <message>
        <source>Failed to open AppImage for reading: %1</source>
        <translation type="vanished">Failed to open AppImage for reading: %1</translation>
    </message>
    <message>
        <source>Failed to create temporary directory</source>
        <translation type="vanished">Failed to create temporary directory</translation>
    </message>
    <message>
        <source>Failed to create temporary copy of type 1 AppImage</source>
        <translation type="vanished">Failed to create temporary copy of type 1 AppImage</translation>
    </message>
    <message>
        <source>Failed to open temporary AppImage copy for writing</source>
        <translation type="vanished">Failed to open temporary AppImage copy for writing</translation>
    </message>
    <message>
        <source>Failed to remove magic bytes from temporary AppImage copy</source>
        <translation type="vanished">Failed to remove magic bytes from temporary AppImage copy</translation>
    </message>
    <message>
        <source>execv() failed: %1</source>
        <comment>error message</comment>
        <translation type="vanished">execv() failed: %1</translation>
    </message>
    <message>
        <source>runtime not found: no such file or directory: %1</source>
        <translation type="vanished">runtime not found: no such file or directory: %1</translation>
    </message>
    <message>
        <location line="+40" />
        <source>execv() failed: %1</source>
        <translation>execv() failed: %1</translation>
    </message>
    <message>
        <location line="+70" />
        <source>Usage: %1 [options] &lt;path&gt;</source>
        <translation>Usage: %1 [options] &lt;path&gt;</translation>
    </message>
    <message>
        <location line="+1" />
        <source>Desktop integration helper for AppImages, for use by Linux distributions.</source>
        <translation>Desktop integration helper for AppImages, for use by Linux distributions.</translation>
    </message>
    <message>
        <location line="+3" />
        <source>Options:</source>
        <translation>Options:</translation>
    </message>
    <message>
        <location line="+1" />
        <source>Display this help and exit</source>
        <translation>Display this help and exit</translation>
    </message>
    <message>
        <location line="+1" />
        <source>Display version and exit</source>
        <translation>Display version and exit</translation>
    </message>
    <message>
        <location line="+2" />
        <source>Arguments:</source>
        <translation>Arguments:</translation>
    </message>
    <message>
        <location line="+1" />
        <source>Path to AppImage (mandatory)</source>
        <translation>Path to AppImage (mandatory)</translation>
    </message>
    <message>
        <location line="+265" />
        <source>Unexpected result from the integration dialog.</source>
        <translation>Unexpected result from the integration dialog.</translation>
    </message>
    <message>
        <location line="-287" />
        <source>Failed to clean up old desktop files</source>
        <translation>Failed to clean up old desktop files</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: error while trying to start appimagelauncherfs.service</source>
        <translation type="vanished">Failed to register AppImage in AppImageLauncherFS: error while trying to start appimagelauncherfs.service</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: failed to register AppImage path %1</source>
        <translation type="vanished">Failed to register AppImage in AppImageLauncherFS: failed to register AppImage path %1</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: could not open map file</source>
        <translation type="vanished">Failed to register AppImage in AppImageLauncherFS: could not open map file</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: could not find virtual file for AppImage</source>
        <translation type="vanished">Failed to register AppImage in AppImageLauncherFS: could not find virtual file for AppImage</translation>
    </message>
    <message>
        <source>Failed to register AppImage in AppImageLauncherFS: unknown failure</source>
        <translation type="vanished">Failed to register AppImage in AppImageLauncherFS: unknown failure</translation>
    </message>
    <message>
        <location line="+8" />
        <location filename="../src/ui/remove_main.cpp" line="+1" />
        <source>Failed to clean up AppImage trash bin: %1</source>
        <translation>Failed to clean up AppImage trash bin: %1</translation>
    </message>
    <message>
        <location line="+49" />
        <source>Unknown AppImageLauncher option: %1</source>
        <translation>Unknown AppImageLauncher option: %1</translation>
    </message>
    <message>
        <location line="+12" />
        <location filename="../src/ui/remove_main.cpp" line="-74" />
        <location filename="../src/ui/update_main.cpp" line="-99" />
        <source>Error: no such file or directory: %1</source>
        <translation>Error: no such file or directory: %1</translation>
    </message>
    <message>
        <location line="+13" />
        <location filename="../src/ui/update_main.cpp" line="+7" />
        <source>Not an AppImage: %1</source>
        <translation>Not an AppImage: %1</translation>
    </message>
    <message>
        <location line="+162" />
        <source>The directory the integrated AppImages are stored in is currently set to:
%1</source>
        <translation>The directory the integrated AppImages are stored in is currently set to:
%1</translation>
    </message>
    <message>
        <source>The directory the integrated AppImages are stored in is currently set to: %1</source>
        <translation type="vanished">The directory the integrated AppImages are stored in is currently set to: %1</translation>
    </message>
    <message>
        <source>Integrating it will move the AppImage into a predefined location, and include it in your application launcher.</source>
        <translation type="vanished">Integrating it will move the AppImage into a predefined location, and include it in your application launcher.</translation>
    </message>
    <message>
        <source>To remove or update the AppImage, please use the context menu of the application icon in your task bar or launcher.</source>
        <translation type="vanished">To remove or update the AppImage, please use the context menu of the application icon in your task bar or launcher.</translation>
    </message>
    <message>
        <source>The directory the integrated AppImages are stored in is currently set to:</source>
        <translation type="vanished">The directory the integrated AppImages are stored in is currently set to:</translation>
    </message>
    <message>
        <source>%1 has not been integrated into your system.</source>
        <translation type="vanished">%1 has not been integrated into your system.</translation>
    </message>
    <message>
        <source>Desktop Integration</source>
        <translation type="vanished">Desktop Integration</translation>
    </message>
    <message>
        <source>Integrate and run</source>
        <translation type="vanished">Integrate and run</translation>
    </message>
    <message>
        <source>Run once</source>
        <translation type="vanished">Run once</translation>
    </message>
    <message>
        <source>Cancel</source>
        <translation type="vanished">Cancel</translation>
    </message>
    <message>
        <source>Removes AppImages after desktop integration, for use by Linux distributions</source>
        <translation type="vanished">Removes AppImages after desktop integration, for use by Linux distributions</translation>
    </message>
    <message>
        <source>AppImageLauncher remove</source>
        <comment>remove helper app name</comment>
        <translation type="vanished">AppImageLauncher remove</translation>
    </message>
    <message>
        <source>Helper to delete integrated AppImages easily, e.g., from the application launcher's context menuz</source>
        <translation type="vanished">Helper to delete integrated AppImages easily, e.g., from the application launcher's context menuz</translation>
    </message>
    <message>
        <location filename="../src/ui/remove_main.cpp" line="-28" />
        <source>Helper to delete integrated AppImages easily, e.g., from the application launcher's context menu</source>
        <translation>Helper to delete integrated AppImages easily, e.g., from the application launcher's context menu</translation>
    </message>
    <message>
        <location line="+19" />
        <source>Path to AppImage</source>
        <translation>Path to AppImage</translation>
    </message>
    <message>
        <location line="+0" />
        <source>&lt;path&gt;</source>
        <translation>&lt;path&gt;</translation>
    </message>
    <message>
        <location line="+20" />
        <source>AppImage delete helper error</source>
        <translation>AppImage delete helper error</translation>
    </message>
    <message>
        <source>AppImage remove helper error</source>
        <translation type="vanished">AppImage remove helper error</translation>
    </message>
    <message>
        <location line="+1" />
        <source>Not an AppImage:

%1</source>
        <translation>Not an AppImage:

%1</translation>
    </message>
    <message>
        <source>Refusing to work on non-integrated AppImage:

%1</source>
        <translation type="vanished">Refusing to work on non-integrated AppImage:

%1</translation>
    </message>
    <message>
        <source>Please confirm</source>
        <translation type="vanished">Please confirm</translation>
    </message>
    <message>
        <source>Are you sure you want to remove this AppImage?</source>
        <translation type="vanished">Are you sure you want to remove this AppImage?</translation>
    </message>
    <message>
        <location line="+38" />
        <source>Failed to unregister AppImage: %1</source>
        <translation>Failed to unregister AppImage: %1</translation>
    </message>
    <message>
        <location line="+12" />
        <source>Failed to move AppImage into trash bin directory</source>
        <translation>Failed to move AppImage into trash bin directory</translation>
    </message>
    <message>
        <source>Failed to remove AppImage: %1</source>
        <translation type="vanished">Failed to remove AppImage: %1</translation>
    </message>
    <message>
        <location filename="../src/shared/shared.cpp" line="-27" />
        <source>AppImage with same filename has already been integrated.</source>
        <translation>AppImage with same filename has already been integrated.</translation>
    </message>
    <message>
        <location line="+2" />
        <source>Do you wish to overwrite the existing AppImage?</source>
        <translation>Do you wish to overwrite the existing AppImage?</translation>
    </message>
    <message>
        <location line="+1" />
        <source>Choosing No will run the AppImage once, and leave the system in its current state.</source>
        <translation>Choosing No will run the AppImage once, and leave the system in its current state.</translation>
    </message>
    <message>
        <location line="-652" />
        <location line="+656" />
        <source>Warning</source>
        <translation>Warning</translation>
    </message>
    <message>
        <source>Failed to move AppImage to target location</source>
        <translation type="vanished">Failed to move AppImage to target location</translation>
    </message>
    <message>
        <location line="-296" />
        <source>Failed to register AppImage in system via libappimage</source>
        <translation>Failed to register AppImage in system via libappimage</translation>
    </message>
    <message>
        <location line="+8" />
        <source>Failed to find integrated desktop file</source>
        <translation>Failed to find integrated desktop file</translation>
    </message>
    <message>
        <location line="+6" />
        <source>Couldn't find integrated AppImage's desktop file</source>
        <translation>Couldn't find integrated AppImage's desktop file</translation>
    </message>
    <message>
        <location line="+20" />
        <source>Failed to load desktop file:</source>
        <translation>Failed to load desktop file:</translation>
    </message>
    <message>
        <location line="+12" />
        <source>AppImage has invalid desktop file</source>
        <translation>AppImage has invalid desktop file</translation>
    </message>
    <message>
        <location line="+271" />
        <source>Failed to move AppImage to target location.
Try to copy AppImage instead?</source>
        <translation>Failed to move AppImage to target location.
Try to copy AppImage instead?</translation>
    </message>
    <message>
        <location line="+181" />
        <source>Failed to call stat() on path:

%1</source>
        <translation>Failed to call stat() on path:

%1</translation>
    </message>
    <message>
        <source>Failed to copy AppImage to target location</source>
        <translation type="vanished">Failed to copy AppImage to target location</translation>
    </message>
    <message>
        <location filename="../src/ui/update_main.cpp" line="-40" />
        <source>Updates AppImages after desktop integration, for use by Linux distributions</source>
        <translation>Updates AppImages after desktop integration, for use by Linux distributions</translation>
    </message>
    <message>
        <location line="+3" />
        <source>AppImageLauncher update</source>
        <comment>update helper app name</comment>
        <translation>AppImageLauncher update</translation>
    </message>
    <message>
        <source>The AppImage hasn't been integrated before. This tool will, however, integrate the updated AppImage.</source>
        <translation type="vanished">The AppImage hasn't been integrated before. This tool will, however, integrate the updated AppImage.</translation>
    </message>
    <message>
        <source>Do you wish to continue?</source>
        <translation type="vanished">Do you wish to continue?</translation>
    </message>
    <message>
        <location line="+67" />
        <source>No updates found</source>
        <translation>No updates found</translation>
    </message>
    <message>
        <location line="+1" />
        <source>Could not find updates for AppImage %1</source>
        <translation>Could not find updates for AppImage %1</translation>
    </message>
    <message>
        <source>Failed to check for updates. Please check the command line output for details.</source>
        <translation type="vanished">Failed to check for updates. Please check the command line output for details.</translation>
    </message>
    <message>
        <location line="+7" />
        <source>No update information found</source>
        <translation>No update information found</translation>
    </message>
    <message>
        <source>Could not find update information in AppImage:
%1

The AppImage doesn't support updating. Please ask the authors to set update information to allow for easy updating.</source>
        <translation type="vanished">Could not find update information in AppImage:
%1

The AppImage doesn't support updating. Please ask the authors to set update information to allow for easy updating.</translation>
    </message>
    <message>
        <source>Could not find update information in AppImage:
%1

The AppImage doesn't support updating. Please ask the authors to set upupdate information to allow for easy updating.</source>
        <translation type="vanished">Could not find update information in AppImage:
%1

The AppImage doesn't support updating. Please ask the authors to set upupdate information to allow for easy updating.</translation>
    </message>
    <message>
        <location line="+1" />
        <source>Could not find update information in AppImage:
%1

The AppImage doesn't support updating. Please ask the authors to embed update information to allow for easy updating.</source>
        <translation>Could not find update information in AppImage:
%1

The AppImage doesn't support updating. Please ask the authors to embed update information to allow for easy updating.</translation>
    </message>
    <message>
        <location line="+12" />
        <source>Failed to check for updates:

%1</source>
        <translation>Failed to check for updates:

%1</translation>
    </message>
    <message>
        <location line="+12" />
        <source>An update has been found for the AppImage %1</source>
        <translation>An update has been found for the AppImage %1</translation>
    </message>
    <message>
        <location line="+2" />
        <source>Do you want to perform the update?</source>
        <translation>Do you want to perform the update?</translation>
    </message>
    <message>
        <location line="+4" />
        <source>Remove old AppImage after successful update</source>
        <translation>Remove old AppImage after successful update</translation>
    </message>
    <message>
        <location line="+24" />
        <source>Failed to update AppImage:

%1</source>
        <translation>Failed to update AppImage:

%1</translation>
    </message>
    <message>
        <location line="+14" />
        <source>File reported as updated does not exist: %1</source>
        <translation>File reported as updated does not exist: %1</translation>
    </message>
    <message>
        <location line="+8" />
        <source>Failed to register updated AppImage in system</source>
        <translation>Failed to register updated AppImage in system</translation>
    </message>
    <message>
        <location line="+14" />
        <source>Failed to unregister old AppImage in system</source>
        <translation>Failed to unregister old AppImage in system</translation>
    </message>
    <message>
        <location line="+5" />
        <source>Failed to remove old AppImage</source>
        <translation>Failed to remove old AppImage</translation>
    </message>
    <message>
        <location filename="../src/daemon/main.cpp" line="+101" />
        <source>Tracks AppImages in applications directories (user's, system and other ones). Automatically integrates AppImages moved into those directories and unintegrates ones removed from them.</source>
        <translation>Tracks AppImages in applications directories (user's, system and other ones). Automatically integrates AppImages moved into those directories and unintegrates ones removed from them.</translation>
    </message>
    <message>
        <source>Search for AppImages in /Applications directories in suitable mounted filesystems</source>
        <translation type="vanished">Search for AppImages in /Applications directories in suitable mounted filesystems</translation>
    </message>
    <message>
        <source>Search for AppImages in /Applications directories suitable mounted filesystems</source>
        <translation type="vanished">Search for AppImages in /Applications directories suitable mounted filesystems</translation>
    </message>
    <message>
        <location line="+8" />
        <source>Lists directories watched by this daemon and exit</source>
        <translation>Lists directories watched by this daemon and exit</translation>
    </message>
</context>
<context>
    <name>RemoveDialog</name>
    <message>
        <source>Please confirm</source>
        <translation type="vanished">Please confirm</translation>
    </message>
    <message>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Are you sure you want to remove this AppImage?&lt;/body&gt;&lt;/html&gt;</source>
        <translation type="vanished">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Are you sure you want to remove this AppImage?&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location filename="../src/ui/remove.ui" line="+17" />
        <source>Delete AppImage</source>
        <translation>Delete AppImage</translation>
    </message>
    <message>
        <location line="+14" />
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Are you sure you want to delete this AppImage?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
        <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Are you sure you want to delete this AppImage?&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
    </message>
    <message>
        <location line="+22" />
        <source>%1</source>
        <translation>%1</translation>
    </message>
    <message>
        <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Uncheck to only remove the desktop integration, but leave the file on the sy
Download .txt
gitextract_j5tkd942/

├── .dockerignore
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   └── feature_request.yml
│   ├── dependabot.yml
│   └── workflows/
│       └── main.yml
├── .gitignore
├── .gitmodules
├── .idea/
│   └── codeStyles/
│       ├── Project.xml
│       └── codeStyleConfig.xml
├── BUILD.md
├── CMakeLists.txt
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── ci/
│   ├── .dockerignore
│   ├── Dockerfile
│   ├── build-docker-image.sh
│   ├── build-in-docker.sh
│   ├── build.sh
│   └── install-deps.sh
├── cmake/
│   ├── install.cmake
│   ├── modules/
│   │   └── FindINotify.cmake
│   ├── reproducible_builds.cmake
│   ├── scripts.cmake
│   ├── toolchains/
│   │   └── i386-linux-gnu.cmake
│   └── versioning.cmake
├── i18n/
│   ├── CMakeLists.txt
│   ├── auto-translate.py
│   ├── desktopfiles.ast.json
│   ├── desktopfiles.cs.json
│   ├── desktopfiles.de.json
│   ├── desktopfiles.en.json
│   ├── desktopfiles.es.json
│   ├── desktopfiles.fr.json
│   ├── desktopfiles.it.json
│   ├── desktopfiles.ko.json
│   ├── desktopfiles.nb_NO.json
│   ├── desktopfiles.nl.json
│   ├── desktopfiles.pl.json
│   ├── desktopfiles.pt.json
│   ├── desktopfiles.pt_BR.json
│   ├── desktopfiles.ru.json
│   ├── desktopfiles.tr.json
│   ├── desktopfiles.zh_Hans.json
│   ├── ui.ast.ts
│   ├── ui.cs.ts
│   ├── ui.de.ts
│   ├── ui.en.ts
│   ├── ui.es.ts
│   ├── ui.fr.ts
│   ├── ui.it.ts
│   ├── ui.nb_NO.ts
│   ├── ui.nl.ts
│   ├── ui.pl.ts
│   ├── ui.pt.ts
│   ├── ui.pt_BR.ts
│   ├── ui.pt_PT.ts
│   ├── ui.ru.ts
│   ├── ui.tr.ts
│   └── ui.zh_Hans.ts
├── resources/
│   ├── AppImageLauncher.1.in
│   ├── CMakeLists.txt
│   ├── ail-cli.desktop
│   ├── appimagelauncher-lite-AppRun.sh
│   ├── appimagelauncher-lite-installer-common.sh
│   ├── appimagelauncher-lite.desktop
│   ├── appimagelauncher.desktop
│   ├── appimagelauncherd.desktop
│   ├── appimagelauncherd.service.in
│   ├── appimagelaunchersettings.desktop
│   ├── binfmt.d/
│   │   └── appimagelauncher.conf.in
│   ├── fallback-icons/
│   │   └── .gitignore
│   ├── icons/
│   │   └── generate-icons.sh
│   ├── install-scripts/
│   │   ├── post-install.in
│   │   └── post-uninstall.in
│   └── mime/
│       └── packages/
│           └── appimage.xml
└── src/
    ├── CMakeLists.txt
    ├── binfmt-bypass/
    │   ├── CMakeLists.txt
    │   ├── bypass_main.cpp
    │   ├── elf.cpp
    │   ├── elf.h
    │   ├── fix-preload-library.sh
    │   ├── interpreter_main.cpp
    │   ├── lib.cpp
    │   ├── lib.h
    │   ├── logging.h
    │   └── preload.c
    ├── cli/
    │   ├── CMakeLists.txt
    │   ├── cli_main.cpp
    │   ├── commands/
    │   │   ├── CMakeLists.txt
    │   │   ├── Command.h
    │   │   ├── CommandFactory.cpp
    │   │   ├── CommandFactory.h
    │   │   ├── IntegrateCommand.cpp
    │   │   ├── IntegrateCommand.h
    │   │   ├── UnintegrateCommand.cpp
    │   │   ├── UnintegrateCommand.h
    │   │   ├── WouldIntegrateCommand.cpp
    │   │   ├── WouldIntegrateCommand.h
    │   │   └── exceptions.h
    │   └── logging/
    │       ├── CMakeLists.txt
    │       └── logging.h
    ├── daemon/
    │   ├── CMakeLists.txt
    │   ├── daemon.cpp
    │   ├── daemon.h
    │   ├── main.cpp
    │   ├── worker.cpp
    │   └── worker.h
    ├── fswatcher/
    │   ├── CMakeLists.txt
    │   ├── filesystemwatcher.cpp
    │   └── filesystemwatcher.h
    ├── i18n/
    │   ├── CMakeLists.txt
    │   ├── translationmanager.cpp
    │   └── translationmanager.h
    ├── shared/
    │   ├── CMakeLists.txt
    │   ├── shared.cpp
    │   ├── shared.h
    │   ├── types.cpp
    │   └── types.h
    ├── trashbin/
    │   ├── CMakeLists.txt
    │   ├── trashbin.cpp
    │   └── trashbin.h
    └── ui/
        ├── CMakeLists.txt
        ├── first-run.cpp
        ├── first-run.h
        ├── first-run.ui
        ├── integration_dialog.cpp
        ├── integration_dialog.h
        ├── integration_dialog.ui
        ├── main.cpp
        ├── remove.ui
        ├── remove_main.cpp
        ├── resources.qrc
        ├── settings_dialog.cpp
        ├── settings_dialog.h
        ├── settings_dialog.ui
        ├── settings_main.cpp
        ├── update.ui
        ├── update_main.cpp
        └── update_spinner.qml
Download .txt
SYMBOL INDEX (166 symbols across 40 files)

FILE: i18n/auto-translate.py
  function copy_sources_to_translations (line 8) | def copy_sources_to_translations(root: ET.Element):
  function main (line 21) | def main():

FILE: src/binfmt-bypass/bypass_main.cpp
  function main (line 8) | int main(int argc, char** argv) {

FILE: src/binfmt-bypass/elf.cpp
  function bswap (line 28) | uint16_t bswap(uint16_t val) {
  function bswap (line 33) | uint32_t bswap(uint32_t val) {
  function bswap (line 38) | unsigned long long bswap(unsigned long long val) {
  function swap_data_if_necessary (line 43) | void swap_data_if_necessary(const EhdrT& ehdr, ValT& val) {
  function off_t (line 53) | off_t get_elf_size(std::ifstream& ifs)
  function get_pt_dynamic_offset (line 96) | ssize_t get_pt_dynamic_offset(std::ifstream& ifs)
  function is_32bit_elf (line 138) | bool is_32bit_elf(std::ifstream& ifs) {
  function is_32bit_elf (line 163) | bool is_32bit_elf(const std::string& filename) {
  function is_statically_linked_elf (line 174) | bool is_statically_linked_elf(std::ifstream& ifs) {
  function is_statically_linked_elf (line 191) | bool is_statically_linked_elf(const std::string& filename) {
  function elf_binary_size (line 202) | ssize_t elf_binary_size(const std::string& filename) {

FILE: src/binfmt-bypass/interpreter_main.cpp
  function executableExists (line 10) | bool executableExists(const std::string& path) {
  function main (line 19) | int main(int argc, char** argv) {

FILE: src/binfmt-bypass/lib.cpp
  function copy_and_patch_runtime (line 26) | bool copy_and_patch_runtime(int fd, const char* const appimage_filename,...
  function create_memfd_with_patched_runtime (line 51) | int create_memfd_with_patched_runtime(const char* const appimage_filenam...
  function create_shm_fd_with_patched_runtime (line 76) | int create_shm_fd_with_patched_runtime(const char* const appimage_filena...
  function find_preload_library (line 126) | std::filesystem::path find_preload_library(bool is_32bit) {
  class TemporaryPreloadLibFile (line 154) | class TemporaryPreloadLibFile {
    method TemporaryPreloadLibFile (line 156) | TemporaryPreloadLibFile(const unsigned char* libContents, const std::s...
    method path (line 176) | std::string path() {
  function forwardSignal (line 192) | void forwardSignal(int signal) {
  function bypassBinfmtAndRunAppImage (line 202) | int bypassBinfmtAndRunAppImage(const std::string& appimage_path, const s...

FILE: src/binfmt-bypass/logging.h
  function v_log_message (line 13) | inline static int v_log_message(const char* const format, va_list args) {
  function v_log_message_prefix (line 23) | inline static int v_log_message_prefix(const char* const prefix, const c...
  function log_message (line 32) | inline static int log_message(const char* const format, ...) {
  function log_debug (line 43) | inline static void log_debug(const char* const format, ...) {
  function log_error (line 56) | inline static void log_error(const char* const format, ...) {
  function log_warning (line 66) | inline static void log_warning(const char* const format, ...) {

FILE: src/binfmt-bypass/preload.c
  function __init (line 39) | void __init() {
  function readlink (line 90) | __attribute__((visibility ("default")))
  function open (line 143) | __attribute__((visibility ("default")))

FILE: src/cli/cli_main.cpp
  function main (line 16) | int main(int argc, char** argv) {

FILE: src/cli/commands/Command.h
  function namespace (line 10) | namespace appimagelauncher {

FILE: src/cli/commands/CommandFactory.cpp
  type appimagelauncher (line 9) | namespace appimagelauncher {
    type cli (line 10) | namespace cli {
      type commands (line 11) | namespace commands {

FILE: src/cli/commands/CommandFactory.h
  function namespace (line 16) | namespace appimagelauncher {

FILE: src/cli/commands/IntegrateCommand.cpp
  type appimagelauncher (line 10) | namespace appimagelauncher {
    type cli (line 11) | namespace cli {
      type commands (line 12) | namespace commands {

FILE: src/cli/commands/IntegrateCommand.h
  function namespace (line 6) | namespace appimagelauncher {

FILE: src/cli/commands/UnintegrateCommand.cpp
  type appimagelauncher (line 10) | namespace appimagelauncher {
    type cli (line 11) | namespace cli {
      type commands (line 12) | namespace commands {

FILE: src/cli/commands/UnintegrateCommand.h
  function namespace (line 6) | namespace appimagelauncher {

FILE: src/cli/commands/WouldIntegrateCommand.cpp
  type appimagelauncher (line 14) | namespace appimagelauncher {
    type cli (line 15) | namespace cli {
      type commands (line 16) | namespace commands {

FILE: src/cli/commands/WouldIntegrateCommand.h
  function namespace (line 6) | namespace appimagelauncher {

FILE: src/cli/commands/exceptions.h
  function namespace (line 9) | namespace appimagelauncher {

FILE: src/daemon/daemon.cpp
  type appimagelauncher::daemon (line 16) | namespace appimagelauncher::daemon {
    function QDirSet (line 71) | QDirSet Daemon::watchedDirectories() const {

FILE: src/daemon/daemon.h
  function namespace (line 14) | namespace appimagelauncher::daemon {

FILE: src/daemon/main.cpp
  function readFileModificationTime (line 26) | long readFileModificationTime(char* filePath) {
  function QTimer (line 38) | QTimer* setupBinaryUpdatesMonitor(char* const* argv) {
  function main (line 59) | int main(int argc, char* argv[]) {

FILE: src/daemon/worker.cpp
  type OP_TYPE (line 22) | enum OP_TYPE {
  type appimagelauncher::daemon (line 31) | namespace appimagelauncher::daemon {
    class Worker::PrivateData (line 35) | class Worker::PrivateData {
      class OperationTask (line 44) | class OperationTask : public QRunnable {
        method OperationTask (line 50) | OperationTask(const Operation& operation, QMutex* mutex) : operati...
        method run (line 52) | void run() override {
      method PrivateData (line 95) | PrivateData() {
      method isDuplicate (line 105) | bool isDuplicate(Operation operation) {

FILE: src/daemon/worker.h
  function namespace (line 10) | namespace appimagelauncher::daemon {

FILE: src/fswatcher/filesystemwatcher.cpp
  class INotifyEvent (line 18) | class INotifyEvent {
    method INotifyEvent (line 24) | INotifyEvent(uint32_t mask, QString path) : mask(mask), path(std::move...
  type appimagelauncher::daemon (line 30) | namespace appimagelauncher::daemon {
    class FileSystemWatcher::PrivateData (line 34) | class FileSystemWatcher::PrivateData {
      type EVENT_TYPES (line 36) | enum EVENT_TYPES {
      method readEventsFromFd (line 57) | std::vector<INotifyEvent> readEventsFromFd() {
      method PrivateData (line 102) | PrivateData() : isRunning(false), watchedDirectories(), mutex(new QM...
      method startWatching (line 112) | bool startWatching(const QDir& directory) {
      method startWatching (line 136) | bool startWatching() {
      method startWatching (line 147) | bool startWatching(const QDirSet& directories) {
      method stopWatching (line 160) | bool stopWatching(int watchFd) {
      method stopWatching (line 176) | bool stopWatching() {
      method stopWatching (line 191) | bool stopWatching(const QDirSet& directories) {
    function QDirSet (line 226) | QDirSet FileSystemWatcher::directories() {

FILE: src/fswatcher/filesystemwatcher.h
  function namespace (line 19) | namespace appimagelauncher::daemon {

FILE: src/i18n/translationmanager.cpp
  function QString (line 44) | QString TranslationManager::getTranslationDir() {

FILE: src/i18n/translationmanager.h
  function class (line 13) | class TranslationManager {

FILE: src/shared/shared.cpp
  function gKeyFileDeleter (line 44) | static void gKeyFileDeleter(GKeyFile* ptr) {
  function gErrorDeleter (line 49) | static void gErrorDeleter(GError* ptr) {
  function makeExecutable (line 54) | bool makeExecutable(const QString& path) {
  function makeNonExecutable (line 73) | bool makeNonExecutable(const QString& path) {
  function QString (line 92) | QString expandTilde(QString path) {
  function QString (line 102) | QString getConfigFilePath() {
  function createConfigFile (line 108) | void createConfigFile(int askToMove,
  function QSettings (line 180) | QSettings* getConfig(QObject* parent) {
  function isHeadless (line 200) | bool isHeadless() {
  function displayMessageBox (line 234) | void displayMessageBox(const QString& title, const QString& message, con...
  function displayError (line 245) | void displayError(const QString& message) {
  function displayWarning (line 249) | void displayWarning(const QString& message) {
  function QDir (line 253) | QDir integratedAppImagesDestination() {
  class Mount (line 266) | class Mount {
    method Mount (line 274) | Mount(QString device, QString mountPoint, QString fsType, QString moun...
    method Mount (line 281) | Mount(const Mount& other) = default;
    method Mount (line 283) | Mount& operator=(const Mount& other) = default;
    method QString (line 286) | const QString& getDevice() const {
    method QString (line 290) | const QString& getMountPoint() const {
    method QString (line 294) | const QString& getFsType() const {
    method QString (line 298) | const QString& getMountOptions() const {
  function listMounts (line 303) | QList<Mount> listMounts() {
  function additionalAppImagesLocations (line 320) | QSet<QString> additionalAppImagesLocations(const bool includeAllMountPoi...
  function shallMonitorMountedFilesystems (line 397) | bool shallMonitorMountedFilesystems(const QSettings* config) {
  function QDirSet (line 403) | QDirSet getAdditionalDirectoriesFromConfig(const QSettings* config) {
  function QDirSet (line 445) | QDirSet daemonDirectoriesToWatch(const QSettings* config) {
  function QString (line 482) | QString buildPathToIntegratedAppImage(const QString& pathToAppImage) {
  function findCollisions (line 511) | std::map<std::string, std::string> findCollisions(const QString& current...
  function updateDesktopDatabaseAndIconCaches (line 551) | bool updateDesktopDatabaseAndIconCaches() {
  function getOwnBinaryPath (line 574) | std::shared_ptr<char> getOwnBinaryPath() {
  function QString (line 584) | QString privateLibDirPath(const QString& srcSubdirName) {
  function installDesktopFileAndIcons (line 613) | bool installDesktopFileAndIcons(const QString& pathToAppImage, bool reso...
  function updateDesktopFileAndIcons (line 904) | bool updateDesktopFileAndIcons(const QString& pathToAppImage) {
  function IntegrationState (line 908) | IntegrationState integrateAppImage(const QString& pathToAppImage, const ...
  function QString (line 976) | QString getAppImageDigestMd5(const QString& path) {
  function hasAlreadyBeenIntegrated (line 1039) | bool hasAlreadyBeenIntegrated(const QString& pathToAppImage) {
  function isInDirectory (line 1043) | bool isInDirectory(const QString& pathToAppImage, const QDir& directory) {
  function cleanUpOldDesktopIntegrationResources (line 1047) | bool cleanUpOldDesktopIntegrationResources(bool verbose) {
  function time_t (line 1128) | time_t getMTime(const QString& path) {
  function desktopFileHasBeenUpdatedSinceLastUpdate (line 1138) | bool desktopFileHasBeenUpdatedSinceLastUpdate(const QString& pathToAppIm...
  function isAppImage (line 1153) | bool isAppImage(const QString& path) {
  function QString (line 1158) | QString which(const std::string& name) {
  function checkAuthorizationAndShowDialogIfNecessary (line 1180) | void checkAuthorizationAndShowDialogIfNecessary(const QString& path, con...
  function QString (line 1260) | QString pathToPrivateDataDirectory() {
  function unregisterAppImage (line 1289) | bool unregisterAppImage(const QString& pathToAppImage) {
  function QIcon (line 1298) | QIcon loadIconWithFallback(const QString& iconName) {
  function setUpFallbackIconPaths (line 1340) | void setUpFallbackIconPaths(QWidget* parent) {

FILE: src/shared/shared.h
  type IntegrationState (line 17) | enum IntegrationState {

FILE: src/shared/types.cpp
  function QDebug (line 3) | QDebug operator<<(QDebug debug, const QDirSet& set) {

FILE: src/shared/types.h
  type QDirComparator (line 10) | struct QDirComparator {
  type std (line 17) | typedef std::set<QDir, QDirComparator> QDirSet;

FILE: src/trashbin/trashbin.cpp
  class TrashBin::PrivateData (line 15) | class TrashBin::PrivateData {
    method PrivateData (line 20) | PrivateData() : dir(integratedAppImagesDestination().path() + "/.trash...
    method canBeCleanedUp (line 25) | bool canBeCleanedUp(const QString& path) {
  function QString (line 34) | QString TrashBin::path() {

FILE: src/trashbin/trashbin.h
  function class (line 6) | class TrashBin {

FILE: src/ui/first-run.cpp
  class FirstRunDialog (line 24) | class FirstRunDialog : public QDialog {
    method resetDefaults (line 38) | void resetDefaults() {
    method handleButtonClicked (line 45) | void handleButtonClicked(QAbstractButton* button) {
    method handleAskMoveCheckBoxStateChange (line 58) | void handleAskMoveCheckBoxStateChange(int state) {
    method handleCustomizeIntegrationDirButtonClicked (line 79) | void handleCustomizeIntegrationDirButtonClicked(bool checked = false) {
    method updateDestinationDirLabel (line 98) | void updateDestinationDirLabel() {
    method initUi (line 108) | void initUi() {
    method FirstRunDialog (line 134) | FirstRunDialog() {
    method writeConfigFile (line 138) | void writeConfigFile() {
  function showFirstRunDialog (line 145) | void showFirstRunDialog() {

FILE: src/ui/integration_dialog.h
  function QT_BEGIN_NAMESPACE (line 7) | QT_BEGIN_NAMESPACE
  type ResultingAction (line 15) | enum ResultingAction {

FILE: src/ui/main.cpp
  function runAppImage (line 39) | int runAppImage(const QString& pathToAppImage, unsigned long argc, char*...
  function QCoreApplication (line 102) | QCoreApplication* getApp(char** argv) {
  function main (line 141) | int main(int argc, char** argv) {

FILE: src/ui/remove_main.cpp
  function main (line 27) | int main(int argc, char** argv) {

FILE: src/ui/settings_dialog.h
  function namespace (line 12) | namespace Ui {
  function class (line 16) | class SettingsDialog : public QDialog {

FILE: src/ui/settings_main.cpp
  function main (line 9) | int main(int argc, char** argv) {

FILE: src/ui/update_main.cpp
  class UpdateDialog (line 27) | class UpdateDialog : public QDialog {
    method connect (line 56) | connect(
  function QString (line 114) | QString statusMessages() const {
  function clearStatusMessages (line 118) | void clearStatusMessages() {
  function asyncCheckForUpdate (line 122) | void asyncCheckForUpdate() {
  function main (line 144) | int main(int argc, char** argv) {
Condensed preview — 141 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (902K chars).
[
  {
    "path": ".dockerignore",
    "chars": 190,
    "preview": "# ignore everything but ci/ and lib/AppImageUpdate/ci/\n# note that the last line that matches a file decides, so ! rules"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 4237,
    "preview": "name: \"Bug report\"\ndescription: \"Report a bug to help us improve AppImageLauncher\"\nlabels: [\"bug\", \"needs verification\"]"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 535,
    "preview": "blank_issues_enabled: false\n\ncontact_links:\n  - name: 💬 IRC Webchat\n    url: https://web.libera.chat/#appimage\n    about"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 2722,
    "preview": "name: \"Feature request\"\ndescription: \"Suggest an idea for this project\"\nlabels: [\"enhancement\"]\nbody:\n- type: markdown\n "
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 211,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"docker\"\n    directory: \"/ci\"\n    schedule:\n      interval: \"weekly\"\n\n  - pac"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 2671,
    "preview": "name: Continuous builds\n\non: [push, pull_request, workflow_dispatch]\n\njobs:\n  build:\n    strategy:\n      fail-fast: fals"
  },
  {
    "path": ".gitignore",
    "chars": 123,
    "preview": "cmake-build-*/\nbuild*/\n*.AppImage*\n*.deb*\n*.tar*\ncmake/GIT_COMMIT\nsquashfs-root/\n*.qm\nresources/l10n/*\n*.html\n*.swp\n*.rp"
  },
  {
    "path": ".gitmodules",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".idea/codeStyles/Project.xml",
    "chars": 1129,
    "preview": "<component name=\"ProjectCodeStyleConfiguration\">\n  <code_scheme name=\"Project\" version=\"173\">\n    <CMakeCodeStyleSetting"
  },
  {
    "path": ".idea/codeStyles/codeStyleConfig.xml",
    "chars": 142,
    "preview": "<component name=\"ProjectCodeStyleConfiguration\">\n  <state>\n    <option name=\"USE_PER_PROJECT_SETTINGS\" value=\"true\" />\n "
  },
  {
    "path": "BUILD.md",
    "chars": 2215,
    "preview": "# How to build AppImageLauncher\n\n**Note:** This file was contributed by a user. It may be out of date.\n\nIf there are no "
  },
  {
    "path": "CMakeLists.txt",
    "chars": 2160,
    "preview": "cmake_minimum_required(VERSION 3.5)\n\nproject(AppImageLauncher)\n\n# versioning\ninclude(cmake/versioning.cmake)\n\nset(CMAKE_"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 2810,
    "preview": "# Contributing to AppImageLauncher\n\nThere are many ways how you can help improve the AppImageLauncher project. Everyone "
  },
  {
    "path": "LICENSE.txt",
    "chars": 1094,
    "preview": "Copyright (C) 2018-2020 TheAssassin <theassassin@assassinate-you.net>\n\nPermission is hereby granted, free of charge, to "
  },
  {
    "path": "README.md",
    "chars": 11090,
    "preview": "# AppImageLauncher\nmakes your Linux desktop AppImage ready™\n<p align=\"center\">\n<img src=\"https://github.com/TheAssassin/"
  },
  {
    "path": "ci/.dockerignore",
    "chars": 19,
    "preview": "*\n!install-deps.sh\n"
  },
  {
    "path": "ci/Dockerfile",
    "chars": 683,
    "preview": "FROM ubuntu:jammy\n\n# tell scripts that we're building in an automated release scenario\nENV CI=1\n\n# we re-use the DOCKER_"
  },
  {
    "path": "ci/build-docker-image.sh",
    "chars": 2542,
    "preview": "#! /bin/bash\n\nif [[ \"$DOCKER_PLATFORM\" == \"\" ]]; then\n    echo \"Usage: env DOCKER_PLATFORM=... bash $0\"\n    exit 1\nfi\n\ns"
  },
  {
    "path": "ci/build-in-docker.sh",
    "chars": 1498,
    "preview": "#! /bin/bash\n\nif [[ \"$DOCKER_PLATFORM\" == \"\" ]]; then\n    echo \"Usage: env DOCKER_PLATFORM=... bash $0\"\n    exit 1\nfi\n\ns"
  },
  {
    "path": "ci/build.sh",
    "chars": 6299,
    "preview": "#! /bin/bash\n\nset -euo pipefail\n\n# use RAM disk if possible\nif [ -d /dev/shm ] && mount | grep /dev/shm | grep -v -q noe"
  },
  {
    "path": "ci/install-deps.sh",
    "chars": 4121,
    "preview": "#! /bin/bash\n\nset -euo pipefail\n\nif [[ \"$DOCKER_PLATFORM\" == \"\" ]]; then\n    echo \"Usage: env DOCKER_PLATFORM=... bash $"
  },
  {
    "path": "cmake/install.cmake",
    "chars": 4046,
    "preview": "# required by file(CHMOD ...)\ncmake_minimum_required(VERSION 3.19)\n\n# define private libraries install destination\ninclu"
  },
  {
    "path": "cmake/modules/FindINotify.cmake",
    "chars": 448,
    "preview": "find_path(INOTIFY_INCLUDE_DIR sys/inotify.h PATH_SUFFIXES inotify)\nfind_library(INOTIFY_LIBRARY inotify)\n\ninclude(FindPa"
  },
  {
    "path": "cmake/reproducible_builds.cmake",
    "chars": 1363,
    "preview": "# this little snippet makes sure that no absolute paths end up in the binaries built by CMake\n# it will replace such pat"
  },
  {
    "path": "cmake/scripts.cmake",
    "chars": 1286,
    "preview": "# borrowed from libappimage\nif(NOT COMMAND check_program)\n    function(check_program)\n        set(keywords FORCE_PREFIX)"
  },
  {
    "path": "cmake/toolchains/i386-linux-gnu.cmake",
    "chars": 1862,
    "preview": "# this toolchain file works for cross compiling on Ubuntu when the following prerequisites are given:\n# - all dependenci"
  },
  {
    "path": "cmake/versioning.cmake",
    "chars": 2782,
    "preview": "set(V_MAJOR 3)\nset(V_MINOR 0)\nset(V_PATCH 0)\nset(V_SUFFIX \"-beta-2\")\n\nset(APPIMAGELAUNCHER_VERSION ${V_MAJOR}.${V_MINOR}"
  },
  {
    "path": "i18n/CMakeLists.txt",
    "chars": 2289,
    "preview": "# lupdate must be installed and available\ncheck_program(NAME lupdate)\ncheck_program(NAME lrelease)\n\n# create target call"
  },
  {
    "path": "i18n/auto-translate.py",
    "chars": 786,
    "preview": "#! /usr/bin/env python3\n\nimport sys\n\nfrom xml.etree import ElementTree as ET\n\n\ndef copy_sources_to_translations(root: ET"
  },
  {
    "path": "i18n/desktopfiles.ast.json",
    "chars": 125,
    "preview": "{\n    \"Desktop Action remove/Name\": \"Desaniciar AppImage del sistema\",\n    \"Desktop Action update/Name\": \"Anovar AppImag"
  },
  {
    "path": "i18n/desktopfiles.cs.json",
    "chars": 127,
    "preview": "{\n    \"Desktop Action update/Name\": \"Aktualizovat AppImage\",\n    \"Desktop Action remove/Name\": \"Odebrat AppImage ze syst"
  },
  {
    "path": "i18n/desktopfiles.de.json",
    "chars": 131,
    "preview": "{\n    \"Desktop Action remove/Name\": \"Dieses AppImage löschen\",\n    \"Desktop Action update/Name\": \"Dieses AppImage aktual"
  },
  {
    "path": "i18n/desktopfiles.en.json",
    "chars": 119,
    "preview": "{\n    \"Desktop Action remove/Name\": \"Delete this AppImage\",\n    \"Desktop Action update/Name\": \"Update this AppImage\"\n}\n"
  },
  {
    "path": "i18n/desktopfiles.es.json",
    "chars": 127,
    "preview": "{\n    \"Desktop Action remove/Name\": \"Eliminar Appimage del Sistema\",\n    \"Desktop Action update/Name\": \"Actualizar Appim"
  },
  {
    "path": "i18n/desktopfiles.fr.json",
    "chars": 127,
    "preview": "{\n    \"Desktop Action remove/Name\": \"Supprimer cette AppImage\",\n    \"Desktop Action update/Name\": \"Mettre à jour l'AppIm"
  },
  {
    "path": "i18n/desktopfiles.it.json",
    "chars": 126,
    "preview": "{\n    \"Desktop Action remove/Name\": \"Rimuovi questa AppImage\",\n    \"Desktop Action update/Name\": \"Aggiorna questa AppIma"
  },
  {
    "path": "i18n/desktopfiles.ko.json",
    "chars": 107,
    "preview": "{\n    \"Desktop Action remove/Name\": \"이 AppImage 삭제\",\n    \"Desktop Action update/Name\": \"이 AppImage 업데이트\"\n}\n"
  },
  {
    "path": "i18n/desktopfiles.nb_NO.json",
    "chars": 110,
    "preview": "{\n    \"Desktop Action update/Name\": \"Oppdater AppImage\",\n    \"Desktop Action remove/Name\": \"Slett AppImage\"\n}\n"
  },
  {
    "path": "i18n/desktopfiles.nl.json",
    "chars": 119,
    "preview": "{\n    \"Desktop Action remove/Name\": \"AppImage deïnstalleren\",\n    \"Desktop Action update/Name\": \"AppImage bijwerken\"\n}\n"
  },
  {
    "path": "i18n/desktopfiles.pl.json",
    "chars": 121,
    "preview": "{\n    \"Desktop Action remove/Name\": \"Usuń AppImage z systemu\",\n    \"Desktop Action update/Name\": \"Uaktualnij AppImage\"\n}"
  },
  {
    "path": "i18n/desktopfiles.pt.json",
    "chars": 124,
    "preview": "{\n    \"Desktop Action remove/Name\": \"Remover AppImage do sistema\",\n    \"Desktop Action update/Name\": \"Atualizar AppImage"
  },
  {
    "path": "i18n/desktopfiles.pt_BR.json",
    "chars": 124,
    "preview": "{\n    \"Desktop Action remove/Name\": \"Remover AppImage do sistema\",\n    \"Desktop Action update/Name\": \"Atualizar AppImage"
  },
  {
    "path": "i18n/desktopfiles.ru.json",
    "chars": 112,
    "preview": "{\n    \"Desktop Action remove/Name\": \"Удалить AppImage\",\n    \"Desktop Action update/Name\": \"Обновить AppImage\"\n}\n"
  },
  {
    "path": "i18n/desktopfiles.tr.json",
    "chars": 140,
    "preview": "{\n    \"Desktop Action update/Name\": \"Bu AppImage uygulamasını güncelle\",\n    \"Desktop Action remove/Name\": \"Bu AppImage "
  },
  {
    "path": "i18n/desktopfiles.zh_Hans.json",
    "chars": 103,
    "preview": "{\n    \"Desktop Action remove/Name\": \"删除此 AppImage\",\n    \"Desktop Action update/Name\": \"更新此 AppImage\"\n}\n"
  },
  {
    "path": "i18n/ui.ast.ts",
    "chars": 21496,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ast\">\n<context>\n    <name>FirstRunDialo"
  },
  {
    "path": "i18n/ui.cs.ts",
    "chars": 37638,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"cs\">\n<context>\n    <name>FirstRunDialog"
  },
  {
    "path": "i18n/ui.de.ts",
    "chars": 39260,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"de\">\n<context>\n    <name>FirstRunDialog"
  },
  {
    "path": "i18n/ui.en.ts",
    "chars": 38786,
    "preview": "<TS version=\"2.1\" language=\"en_US\">\n<context>\n    <name>FirstRunDialog</name>\n    <message>\n        <location filename=\""
  },
  {
    "path": "i18n/ui.es.ts",
    "chars": 35633,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"es\">\n<context>\n    <name>FirstRunDialog"
  },
  {
    "path": "i18n/ui.fr.ts",
    "chars": 35685,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"fr\">\n<context>\n    <name>FirstRunDialog"
  },
  {
    "path": "i18n/ui.it.ts",
    "chars": 37335,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"it\">\n<context>\n    <name>FirstRunDialog"
  },
  {
    "path": "i18n/ui.nb_NO.ts",
    "chars": 37956,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nb_NO\">\n<context>\n    <name>FirstRunDia"
  },
  {
    "path": "i18n/ui.nl.ts",
    "chars": 37556,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"nl\">\n<context>\n    <name>FirstRunDialog"
  },
  {
    "path": "i18n/ui.pl.ts",
    "chars": 37943,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pl\">\n<context>\n    <name>FirstRunDialog"
  },
  {
    "path": "i18n/ui.pt.ts",
    "chars": 37761,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_PT\">\n<context>\n    <name>FirstRunDia"
  },
  {
    "path": "i18n/ui.pt_BR.ts",
    "chars": 34103,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt\">\n<context>\n    <name>FirstRunDialog"
  },
  {
    "path": "i18n/ui.pt_PT.ts",
    "chars": 34155,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"pt_PT\">\n<context>\n    <name>FirstRunDia"
  },
  {
    "path": "i18n/ui.ru.ts",
    "chars": 27605,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"ru\">\n<context>\n    <name>FirstRunDialog"
  },
  {
    "path": "i18n/ui.tr.ts",
    "chars": 33037,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"tr\">\n<context>\n    <name>FirstRunDialog"
  },
  {
    "path": "i18n/ui.zh_Hans.ts",
    "chars": 30549,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE TS>\n<TS version=\"2.1\" language=\"zh_Hans\">\n<context>\n    <name>FirstRunD"
  },
  {
    "path": "resources/AppImageLauncher.1.in",
    "chars": 1423,
    "preview": ".\\\" Manpage for AppImageLauncher.\n.\\\" Contact theassassin@assassinate-you.net to correct errors or typos.\n.TH man 1 \"28 "
  },
  {
    "path": "resources/CMakeLists.txt",
    "chars": 2498,
    "preview": "# install configs for resource files\n\n# we depend on GNUInstallDirs, so let's make sure it's been loaded\ninclude(GNUInst"
  },
  {
    "path": "resources/ail-cli.desktop",
    "chars": 215,
    "preview": "[Desktop Entry]\nVersion=1.0\nType=Application\nExec=ail-cli\nName=AppImageLauncher CLI\nIcon=AppImageLauncher\nTerminal=false"
  },
  {
    "path": "resources/appimagelauncher-lite-AppRun.sh",
    "chars": 4142,
    "preview": "#! /bin/bash\n\nset -e\n\nif [[ \"$VERBOSE\" != \"\" ]]; then\n    set -x\nfi\n\n# shift does not work if no arguments have been pas"
  },
  {
    "path": "resources/appimagelauncher-lite-installer-common.sh",
    "chars": 3966,
    "preview": "prefix=\"appimagelauncher-lite\"\ninstall_dir=~/.local/lib/appimagelauncher-lite\ninstalled_appimage_path=\"$install_dir\"/app"
  },
  {
    "path": "resources/appimagelauncher-lite.desktop",
    "chars": 171,
    "preview": "[Desktop Entry]\nName=appimagelauncher-lite\nExec=appimagelauncher-lite\nIcon=AppImageLauncher\nType=Application\nX-AppImage-"
  },
  {
    "path": "resources/appimagelauncher.desktop",
    "chars": 312,
    "preview": "[Desktop Entry]\nVersion=1.0\nType=Application\nExec=AppImageLauncher %f\nName=AppImageLauncher\nIcon=AppImageLauncher\nTermin"
  },
  {
    "path": "resources/appimagelauncherd.desktop",
    "chars": 190,
    "preview": "[Desktop Entry]\nVersion=1.0\nType=Application\nExec=appimagelauncherd\nName=appimagelauncherd\nIcon=appimagelauncherd\nTermin"
  },
  {
    "path": "resources/appimagelauncherd.service.in",
    "chars": 177,
    "preview": "[Unit]\nDescription=AppImageLauncher daemon\n\n[Service]\nExecStart=@CMAKE_INSTALL_PREFIX@/bin/appimagelauncherd\nRestart=on-"
  },
  {
    "path": "resources/appimagelaunchersettings.desktop",
    "chars": 549,
    "preview": "[Desktop Entry]\nVersion=1.0\nType=Application\nExec=AppImageLauncherSettings %f\nName=AppImageLauncher Settings\nName[de]=Ap"
  },
  {
    "path": "resources/binfmt.d/appimagelauncher.conf.in",
    "chars": 323,
    "preview": "# Launch AppImages with AppImageLauncher\n# we use the F (fix binary) mode to make sure the interpreter is available in a"
  },
  {
    "path": "resources/fallback-icons/.gitignore",
    "chars": 10,
    "preview": "inkscape/\n"
  },
  {
    "path": "resources/icons/generate-icons.sh",
    "chars": 718,
    "preview": "#! /bin/bash\n\nset -e\n\nif ! (which inkscape &>/dev/null); then\n    echo \"Error: this tool requires inkscape\" >&2\n    exit"
  },
  {
    "path": "resources/install-scripts/post-install.in",
    "chars": 530,
    "preview": "#! /bin/bash\n\nset -euo pipefail\n\necho \"Installing AppImageLauncher as interpreter for AppImages\"\n\n# as there's no _real_"
  },
  {
    "path": "resources/install-scripts/post-uninstall.in",
    "chars": 823,
    "preview": "#! /bin/bash\n\nset -euo pipefail\n\necho \"Removing AppImageLauncher as interpreter for AppImages\"\n(set -x; systemctl restar"
  },
  {
    "path": "resources/mime/packages/appimage.xml",
    "chars": 1443,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<mime-info xmlns=\"http://www.freedesktop.org/standards/shared-mime-info\">\n\n  <mi"
  },
  {
    "path": "src/CMakeLists.txt",
    "chars": 1764,
    "preview": "# in version 3.6 IMPORTED_TARGET has been added to pkg_*_modules\ncmake_minimum_required(VERSION 3.10)\n\nset(CMAKE_CXX_STA"
  },
  {
    "path": "src/binfmt-bypass/CMakeLists.txt",
    "chars": 7897,
    "preview": "# needed for LINK_OPTIONS/target_link_options\ncmake_minimum_required(VERSION 3.13)\n\nproject(appimage-binfmt-bypass)\n\n# c"
  },
  {
    "path": "src/binfmt-bypass/bypass_main.cpp",
    "chars": 366,
    "preview": "// system headers\n#include <vector>\n\n// own headers\n#include \"logging.h\"\n#include \"lib.h\"\n\nint main(int argc, char** arg"
  },
  {
    "path": "src/binfmt-bypass/elf.cpp",
    "chars": 6349,
    "preview": "// system headers\n#include <cstdio>\n#include <cstdlib>\n#include <cstdint>\n#include <type_traits>\n#include <linux/elf.h>\n"
  },
  {
    "path": "src/binfmt-bypass/elf.h",
    "chars": 679,
    "preview": "#pragma once\n\n#include <string>\n\n/**\n * Check whether file is linked staticallly.\n * @param filename path to ELF file\n *"
  },
  {
    "path": "src/binfmt-bypass/fix-preload-library.sh",
    "chars": 1268,
    "preview": "#! /bin/bash\n\nset -euo pipefail\n\n# 2.17 ensures compatibility with CentOS 7 and beyond\n# cf. https://gist.github.com/wag"
  },
  {
    "path": "src/binfmt-bypass/interpreter_main.cpp",
    "chars": 1884,
    "preview": "// system headers\n#include <cassert>\n#include <unistd.h>\n#include <vector>\n\n// own headers\n#include \"logging.h\"\n#include"
  },
  {
    "path": "src/binfmt-bypass/lib.cpp",
    "chars": 11235,
    "preview": "// system headers\n#include <cstdio>\n#include <sys/mman.h>\n#include <unistd.h>\n#include <fcntl.h>\n#include <wait.h>\n#incl"
  },
  {
    "path": "src/binfmt-bypass/lib.h",
    "chars": 206,
    "preview": "#pragma once\n\n// system headers\n#include <string>\n#include <vector>\n\n#define EXIT_CODE_FAILURE 0xff\n\nint bypassBinfmtAnd"
  },
  {
    "path": "src/binfmt-bypass/logging.h",
    "chars": 1699,
    "preview": "#pragma once\n\n// system headers\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#ifndef "
  },
  {
    "path": "src/binfmt-bypass/preload.c",
    "chars": 4573,
    "preview": "// system headers\n#include <stdio.h>\n#include <dlfcn.h>\n#include <unistd.h>\n#include <memory.h>\n#include <stdlib.h>\n#inc"
  },
  {
    "path": "src/cli/CMakeLists.txt",
    "chars": 318,
    "preview": "add_subdirectory(logging)\n\nadd_subdirectory(commands)\n\nadd_executable(ail-cli cli_main.cpp)\ntarget_link_libraries(ail-cl"
  },
  {
    "path": "src/cli/cli_main.cpp",
    "chars": 2208,
    "preview": "// system headers\n#include <sstream>\n\n// library headers\n#include <QCoreApplication>\n#include <QCommandLineParser>\n\n// l"
  },
  {
    "path": "src/cli/commands/CMakeLists.txt",
    "chars": 411,
    "preview": "add_library(cli_commands STATIC\n    Command.h\n    CommandFactory.h CommandFactory.cpp\n    exceptions.h\n    IntegrateComm"
  },
  {
    "path": "src/cli/commands/Command.h",
    "chars": 460,
    "preview": "#pragma once\n\n// system headers\n#include <memory>\n\n// library headers\n#include <QList>\n#include <QString>\n\nnamespace app"
  },
  {
    "path": "src/cli/commands/CommandFactory.cpp",
    "chars": 838,
    "preview": "// local headers\n#include \"CommandFactory.h\"\n#include \"IntegrateCommand.h\"\n#include \"UnintegrateCommand.h\"\n#include \"Wou"
  },
  {
    "path": "src/cli/commands/CommandFactory.h",
    "chars": 407,
    "preview": "#pragma once\n\n// system headers\n#include <memory>\n\n// library headers\n#include <QString>\n\n// local headers\n#include <Com"
  },
  {
    "path": "src/cli/commands/IntegrateCommand.cpp",
    "chars": 3814,
    "preview": "// library headers\n#include <QFileInfo>\n\n// local headers\n#include \"IntegrateCommand.h\"\n#include \"exceptions.h\"\n#include"
  },
  {
    "path": "src/cli/commands/IntegrateCommand.h",
    "chars": 385,
    "preview": "#pragma once\n\n// local headers\n#include \"Command.h\"\n\nnamespace appimagelauncher {\n    namespace cli {\n        namespace "
  },
  {
    "path": "src/cli/commands/UnintegrateCommand.cpp",
    "chars": 1946,
    "preview": "// library headers\n#include <QFileInfo>\n\n// local headers\n#include \"UnintegrateCommand.h\"\n#include \"exceptions.h\"\n#inclu"
  },
  {
    "path": "src/cli/commands/UnintegrateCommand.h",
    "chars": 387,
    "preview": "#pragma once\n\n// local headers\n#include \"Command.h\"\n\nnamespace appimagelauncher {\n    namespace cli {\n        namespace "
  },
  {
    "path": "src/cli/commands/WouldIntegrateCommand.cpp",
    "chars": 3675,
    "preview": "// library headers\n#include <QFileInfo>\n\nextern \"C\" {\n#include <appimage/appimage.h>\n}\n\n// local headers\n#include \"Would"
  },
  {
    "path": "src/cli/commands/WouldIntegrateCommand.h",
    "chars": 376,
    "preview": "#pragma once\n\n// local headers\n#include \"Command.h\"\n\nnamespace appimagelauncher {\n    namespace cli {\n        namespace "
  },
  {
    "path": "src/cli/commands/exceptions.h",
    "chars": 1276,
    "preview": "#pragma once\n\n// system headers\n#include <stdexcept>\n\n// library headers\n#include <QString>\n\nnamespace appimagelauncher "
  },
  {
    "path": "src/cli/logging/CMakeLists.txt",
    "chars": 135,
    "preview": "add_library(cli_logging INTERFACE)\nset_property(TARGET cli_logging PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURREN"
  },
  {
    "path": "src/cli/logging/logging.h",
    "chars": 273,
    "preview": "#pragma once\n\n// system headers\n#include <string.h>\n\n// library headers\n#include <QTextStream>\n#include <QDebug>\n\n// wra"
  },
  {
    "path": "src/daemon/CMakeLists.txt",
    "chars": 417,
    "preview": "# daemon binary\nadd_executable(appimagelauncherd main.cpp daemon.cpp worker.cpp)\ntarget_link_libraries(appimagelauncherd"
  },
  {
    "path": "src/daemon/daemon.cpp",
    "chars": 5815,
    "preview": "// STL headers\n#include <chrono>\n\n// library headers\n#include <QDirIterator>\n\n// local headers\n#include \"daemon.h\"\n#incl"
  },
  {
    "path": "src/daemon/daemon.h",
    "chars": 774,
    "preview": "#pragma once\n\n// library headers\n#include <QObject>\n#include <QSettings>\n#include <QTimer>\n#include <QLoggingCategory>\n\n"
  },
  {
    "path": "src/daemon/main.cpp",
    "chars": 4327,
    "preview": "// system includes\n#include <deque>\n#include <iostream>\n#include <sstream>\n#include <sys/stat.h>\n\n// library includes\n#i"
  },
  {
    "path": "src/daemon/worker.cpp",
    "chars": 6479,
    "preview": "// system includes\n#include <atomic>\n#include <iostream>\n#include <deque>\n\n// library includes\n#include <QDebug>\n#includ"
  },
  {
    "path": "src/daemon/worker.h",
    "chars": 717,
    "preview": "// system includes\n#include <memory>\n\n// library includes\n#include <QObject>\n#include <QLoggingCategory>\n\n#pragma once\n\n"
  },
  {
    "path": "src/fswatcher/CMakeLists.txt",
    "chars": 226,
    "preview": "add_library(filesystemwatcher STATIC filesystemwatcher.cpp filesystemwatcher.h)\ntarget_link_libraries(filesystemwatcher "
  },
  {
    "path": "src/fswatcher/filesystemwatcher.cpp",
    "chars": 11693,
    "preview": "// system includes\n#include <iostream>\n#include <map>\n#include <unistd.h>\n\n// library includes\n#include <QDir>\n#include "
  },
  {
    "path": "src/fswatcher/filesystemwatcher.h",
    "chars": 1374,
    "preview": "// system includes\n#include <algorithm>\n#include <memory>\n#include <unordered_set>\n\n// library includes\n#include <QDir>\n"
  },
  {
    "path": "src/i18n/CMakeLists.txt",
    "chars": 279,
    "preview": "add_library(translationmanager translationmanager.cpp translationmanager.h)\ntarget_link_libraries(translationmanager PUB"
  },
  {
    "path": "src/i18n/translationmanager.cpp",
    "chars": 2718,
    "preview": "// system headers\n#include <iostream>\n\n// library headers\n#include <QDebug>\n#include <QDir>\n#include <QLibraryInfo>\n#inc"
  },
  {
    "path": "src/i18n/translationmanager.h",
    "chars": 547,
    "preview": "#pragma once\n\n// library includes\n#include <QApplication>\n#include <QTranslator>\n#include <QList>\n\n/*\n * Installs transl"
  },
  {
    "path": "src/shared/CMakeLists.txt",
    "chars": 502,
    "preview": "add_library(shared STATIC shared.h shared.cpp types.h types.cpp)\ntarget_link_libraries(shared PUBLIC PkgConfig::glib Qt5"
  },
  {
    "path": "src/shared/shared.cpp",
    "chars": 49355,
    "preview": "// system includes\n#include <fstream>\n#include <iostream>\n#include <memory>\n#include <sstream>\n#include <tuple>\nextern \""
  },
  {
    "path": "src/shared/shared.h",
    "chars": 5679,
    "preview": "/* central file for utility functions */\n\n#pragma once\n\n// system headers\n#include <string>\n#include <memory>\n\n// librar"
  },
  {
    "path": "src/shared/types.cpp",
    "chars": 193,
    "preview": "#include \"types.h\"\n\nQDebug operator<<(QDebug debug, const QDirSet& set) {\n    QDebugStateSaver saver(debug);\n    for (co"
  },
  {
    "path": "src/shared/types.h",
    "chars": 359,
    "preview": "#pragma once\n\n// system headers\n#include <set>\n\n// library headers\n#include <QDebug>\n#include <QDir>\n\nstruct QDirCompara"
  },
  {
    "path": "src/trashbin/CMakeLists.txt",
    "chars": 203,
    "preview": "add_library(trashbin STATIC trashbin.cpp trashbin.h)\ntarget_link_libraries(trashbin PUBLIC Qt5::Core libappimage shared)"
  },
  {
    "path": "src/trashbin/trashbin.cpp",
    "chars": 2705,
    "preview": "// system includes\n#include <iostream>\n#include <sys/stat.h>\n\n// library includes\n#include <QDateTime>\n#include <QDir>\n#"
  },
  {
    "path": "src/trashbin/trashbin.h",
    "chars": 566,
    "preview": "// system includes\n#include <QString>\n\n#pragma once\n\nclass TrashBin {\n    private:\n        class PrivateData;\n        Pr"
  },
  {
    "path": "src/ui/CMakeLists.txt",
    "chars": 2471,
    "preview": "if(NOT BUILD_LITE)\n    # main AppImageLauncher application\n    add_executable(AppImageLauncher main.cpp resources.qrc fi"
  },
  {
    "path": "src/ui/first-run.cpp",
    "chars": 5223,
    "preview": "// system includes\n#include <stdexcept>\n\n// library includes\n#include <QDesktopServices>\n#include <QDialog>\n#include <QD"
  },
  {
    "path": "src/ui/first-run.h",
    "chars": 27,
    "preview": "void showFirstRunDialog();\n"
  },
  {
    "path": "src/ui/first-run.ui",
    "chars": 6340,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>FirstRunDialog</class>\n <widget class=\"QDialog\" name=\""
  },
  {
    "path": "src/ui/integration_dialog.cpp",
    "chars": 1877,
    "preview": "// system includes\n#include <sstream>\n#include <utility>\n\n// library includes\n#include <QStyle>\n\n// local headers\n#inclu"
  },
  {
    "path": "src/ui/integration_dialog.h",
    "chars": 952,
    "preview": "#ifndef APPIMAGELAUNCHER_INTEGRATION_DIALOG_H\n#define APPIMAGELAUNCHER_INTEGRATION_DIALOG_H\n\n// library includes\n#includ"
  },
  {
    "path": "src/ui/integration_dialog.ui",
    "chars": 4985,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>IntegrationDialog</class>\n <widget class=\"QDialog\" nam"
  },
  {
    "path": "src/ui/main.cpp",
    "chars": 17531,
    "preview": "// system includes\n#include <fstream>\n#include <iostream>\n#include <sstream>\n\nextern \"C\" {\n#include <sys/stat.h>\n#includ"
  },
  {
    "path": "src/ui/remove.ui",
    "chars": 2844,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>RemoveDialog</class>\n <widget class=\"QDialog\" name=\"Re"
  },
  {
    "path": "src/ui/remove_main.cpp",
    "chars": 4294,
    "preview": "// system includes\n#include <iostream>\n#include <sstream>\n\n// library includes\n#include <QApplication>\n#include <QComman"
  },
  {
    "path": "src/ui/resources.qrc",
    "chars": 257,
    "preview": "<!DOCTYPE RCC>\n<RCC version=\"1.0\">\n    <qresource>\n        <file alias=\"AppImageLauncher.svg\">../../resources/icons/hico"
  },
  {
    "path": "src/ui/settings_dialog.cpp",
    "chars": 8456,
    "preview": "// libraries\n#include <QDebug>\n#include <QFileDialog>\n#include <QFileIconProvider>\n#include <QStandardPaths>\n\n// local\n#"
  },
  {
    "path": "src/ui/settings_dialog.h",
    "chars": 774,
    "preview": "#pragma once\n\n// system\n#include <memory>\n\n// libraries\n#include <QDialog>\n#include <QListWidgetItem>\n#include <QSetting"
  },
  {
    "path": "src/ui/settings_dialog.ui",
    "chars": 9587,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>SettingsDialog</class>\n <widget class=\"QDialog\" name=\""
  },
  {
    "path": "src/ui/settings_main.cpp",
    "chars": 622,
    "preview": "// libraries\n#include <QApplication>\n\n// local\n#include <translationmanager.h>\n#include <shared.h>\n#include \"settings_di"
  },
  {
    "path": "src/ui/update.ui",
    "chars": 3199,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ui version=\"4.0\">\n <class>UpdateDialog</class>\n <widget class=\"QDialog\" name=\"Up"
  },
  {
    "path": "src/ui/update_main.cpp",
    "chars": 6705,
    "preview": "// system includes\n#include <iostream>\n#include <sstream>\n\n// library includes\n#include <QApplication>\n#include <QCheckB"
  },
  {
    "path": "src/ui/update_spinner.qml",
    "chars": 220,
    "preview": "import QtQuick.Controls 2.15\nimport QtQuick.Layouts 1.15\n\nColumnLayout {\n    BusyIndicator {\n        running: true\n     "
  }
]

About this extraction

This page contains the full source code of the TheAssassin/AppImageLauncher GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 141 files (843.2 KB), approximately 209.3k tokens, and a symbol index with 166 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!