diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 00000000..42e4670c --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,6 @@ + +--- +Checks: '*,-fuchsia-*,-google-*,-zircon-*,-abseil-*,-modernize-use-trailing-return-type,-llvm-*' +WarningsAsErrors: '*' +HeaderFilterRegex: '' +FormatStyle: none \ No newline at end of file diff --git a/.cmake-format.yaml b/.cmake-format.yaml new file mode 100644 index 00000000..e7be3399 --- /dev/null +++ b/.cmake-format.yaml @@ -0,0 +1,18 @@ +additional_commands: + foo: + flags: + - BAR + - BAZ + kwargs: + DEPENDS: '*' + HEADERS: '*' + SOURCES: '*' +bullet_char: '*' +dangle_parens: false +enum_char: . +line_ending: unix +line_width: 120 +max_pargs_hwrap: 3 +separate_ctrl_name_with_space: false +separate_fn_name_with_space: false +tab_size: 2 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 78489381..7bd1b5e5 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,8 @@ stage/ .snapcraft/ flameshot*.tar.bz2 +.vscode/ +build/ # NVIM *~ diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 9d4c8f5e..00000000 --- a/.travis.yml +++ /dev/null @@ -1,98 +0,0 @@ -dist: xenial -sudo: required - -language: cpp - -branches: - only: - - master - -cache: - directories: - - $HOME/.cache - -env: - global: - # Environment variables for packaging - - PRODUCT=flameshot - - VERSION=0.6.0 - - RELEASE=1 - - ARCH=x86_64 - # Dockerfile from https://github.com/flameshotapp/flameshot-docker-images - - DOCKER_REPO=vitzy/flameshot - # Option: wetransfer.com, file.io, 0x0.st, transfer.sh - - UPLOAD_SERVICE=wetransfer.com - -# The actual list of distribution is available on -# https://hub.docker.com/r/vitzy/flameshot/tags/ -matrix: - include: - - os: linux - # 28 - env: OS=fedora DIST=28 EXTEN=rpm - services: docker - - os: linux - # 29 - env: OS=fedora DIST=29 EXTEN=rpm - services: docker - - os: linux - # 30 - env: OS=fedora DIST=30 EXTEN=rpm - services: docker - - os: linux - # 16.04 LTS - env: OS=ubuntu DIST=xenial EXTEN=deb - services: docker - - os: linux - # 18.04 LTS - env: OS=ubuntu DIST=bionic EXTEN=deb - services: docker - - os: linux - # 19.04 - env: OS=ubuntu DIST=disco EXTEN=deb - services: docker - - os: linux - # 8 - env: OS=debian DIST=jessie EXTEN=deb - services: docker - - os: linux - # 9 - env: OS=debian DIST=stretch EXTEN=deb - services: docker - - os: linux - # No docker environment, just for CI build & test - # ubuntu xenial; default Qt version is 5.6.1 - env: OS=ubuntu DIST=xenial EXTEN=other -# - os: osx -# compiler: clang -# osx_image: xcode9.2 - -before_install: - - export ROOT_PATH="$(pwd)" - - chmod +x .travis/*.sh - - chmod +x .travis/services/*.sh - - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then source .travis/linux_before_install.sh; fi - -install: - - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then source .travis/linux_install.sh; fi - -script: -# - git submodule update --init --recursive -# - git describe --long - - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then source .travis/linux_script.sh; fi -# - if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then source .travis/osx_script.sh; fi - -after_success: - - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then source .travis/linux_after_success.sh; fi - - echo "Download URL is $TEMP_DOWNLOAD_URL ." - -# deploy: -# # Deploy packages to Github Release -# provider: releases -# api_key: "GITHUB ENCYPTED OAUTH TOKEN" -# file_glob: true -# file: dist/*.{deb,rpm,AppImage,dmg} -# skip_cleanup: true -# on: -# tags: true -# branch: master diff --git a/.travis/linux_after_success.sh b/.travis/linux_after_success.sh deleted file mode 100644 index 8d101d33..00000000 --- a/.travis/linux_after_success.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -- - -set -e - -DIST_PATH=dist - -if [[ "${EXTEN}" == "other" ]]; then - cp "${BUILD_DST_PATH}/flameshot" "${ROOT_PATH}/.travis/services/flameshot_${VERSION}_${ARCH}" - cd "${ROOT_PATH}/.travis/services" - TEMP_DOWNLOAD_URL=$(travis_retry bash \ - "${ROOT_PATH}/.travis/services/${UPLOAD_SERVICE}.sh" \ - flameshot_"${VERSION}_${ARCH}") -else - case "${OS}" in - "ubuntu"|"debian") - cp "${DIST_PATH}/flameshot_${VERSION}_${DIST}_${ARCH}.${EXTEN}" "${ROOT_PATH}/.travis/services/flameshot_${VERSION}_${DIST}_${ARCH}.${EXTEN}" - cd "${ROOT_PATH}/.travis/services" - TEMP_DOWNLOAD_URL=$(travis_retry bash \ - "${ROOT_PATH}/.travis/services/${UPLOAD_SERVICE}.sh" \ - "flameshot_${VERSION}_${DIST}_${ARCH}.${EXTEN}") - ;; - "fedora") - cp "${DIST_PATH}/flameshot_${VERSION}_fedora${DIST}_${ARCH}.${EXTEN}" "${ROOT_PATH}/.travis/services/flameshot_${VERSION}_fedora${DIST}_${ARCH}.${EXTEN}" - cd "${ROOT_PATH}/.travis/services" - TEMP_DOWNLOAD_URL=$(travis_retry bash \ - "${ROOT_PATH}/.travis/services/${UPLOAD_SERVICE}.sh" \ - "flameshot_${VERSION}_fedora${DIST}_${ARCH}.${EXTEN}") - ;; - esac -fi - diff --git a/.travis/linux_before_install.sh b/.travis/linux_before_install.sh deleted file mode 100644 index 68e6cc53..00000000 --- a/.travis/linux_before_install.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -- - -set -e - -if [[ "${EXTEN}" == "other" ]]; then - travis_retry sudo apt update -fi diff --git a/.travis/linux_install.sh b/.travis/linux_install.sh deleted file mode 100644 index f0006ea1..00000000 --- a/.travis/linux_install.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -- - -set -e - -if [[ "${EXTEN}" == "other" ]]; then - # Compile-time - travis_retry sudo apt install -y gcc g++ build-essential qt5-default qt5-qmake qttools5-dev-tools - # Run-time - travis_retry sudo apt install -y libqt5dbus5 libqt5network5 libqt5core5a libqt5widgets5 libqt5gui5 libqt5svg5-dev - # Optional - travis_retry sudo apt install -y openssl ca-certificates - # Install fcitx-frontend-qt5 - travis_retry sudo apt install -y fcitx-frontend-qt5 - -fi diff --git a/.travis/linux_script.sh b/.travis/linux_script.sh deleted file mode 100644 index 8b1b29a2..00000000 --- a/.travis/linux_script.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash -- - -set -e - -DIST_PATH=dist - -if [[ ! -d "${DIST_PATH}" ]]; then - mkdir "${DIST_PATH}" -fi - -if [[ "${EXTEN}" == "other" ]]; then - project_dir="$(pwd)" - BUILD_DST_PATH=build-test - - qmake --version - mkdir "${BUILD_DST_PATH}" - qmake -makefile DESTDIR="${BUILD_DST_PATH}" "${project_dir}"/flameshot.pro - # Building flameshot - make -j$(nproc) - # Running flameshot tests - make check -j$(nproc) - ls -alhR - -else - travis_retry git clone https://github.com/flameshotapp/packpack.git - travis_retry packpack/packpack - pwd && ls - - case "${OS}" in - "ubuntu"|"debian") - # copy deb to dist path for distribution - cp \ - build/flameshot_*_*.deb \ - "${DIST_PATH}"/flameshot_${VERSION}_${DIST}_${ARCH}.${EXTEN} - ;; - "fedora") - cp \ - build/flameshot-${VERSION}-${RELEASE}.*.${ARCH}.rpm \ - "${DIST_PATH}"/flameshot_${VERSION}_fedora${DIST}_${ARCH}.${EXTEN} - ;; - esac -fi diff --git a/.travis/osx_script.sh b/.travis/osx_script.sh deleted file mode 100644 index 49bf68af..00000000 --- a/.travis/osx_script.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash -- - -set -e - -project_dir="$(pwd)" - -brew update > /dev/null -brew install qt -QTDIR=/usr/local/opt/qt -PATH="${QTDIR}"/bin:"${PATH}" -LDFLAGS=-L"${QTDIR}"/lib -CPPFLAGS=-I"${QTDIR}"/include - -# Build your app -cd "${project_dir}" -mkdir dist -mkdir build -cd build -qmake -version -qmake CONFIG-=debug CONFIG+=release CONFIG+=packaging ../flameshot.pro -make -j$(nproc) - -git clone https://github.com/aurelien-rainone/macdeployqtfix.git -pwd -ls - -ls /Users/travis/build/ZetaoYang/flameshot - -# Package DMG from build/flamshot.app directory -"${QTDIR}"/bin/macdeployqt flameshot.app -python \ - "${project_dir}"/build/macdeployqtfix/macdeployqtfix.py \ - flameshot.app/Contents/MacOS/flameshot \ - "${QTDIR}" - -cd "${project_dir}"/build -mkdir -p distrib/Flameshot -cd distrib/Flameshot -mv "${project_dir}"/build/flameshot.app "${project_dir}"/build/distrib/Flameshot/ -cp "${project_dir}"/LICENSE LICENSE -cp "${project_dir}"/README.md README.md -echo "${VERSION}" > version -echo "${TRAVIS_COMMIT}" >> version - -ln -s /Applications ./Applications - -cd .. -hdiutil create -srcfolder ./Flameshot -format UDBZ ./flameshot.dmg -mv flameshot.dmg flameshot_X64_${VERSION}.dmg -mv flameshot_X64_${VERSION}.dmg "${project_dir}"/dist/flameshot_X64_$VERSION.dmg -TEMP_DOWNLOAD_URL=$(curl \ - --upload-file \ - flameshot_X64_$VERSION.dmg \ - "https://transfer.sh/flameshot_X64_$VERSION.dmg") -cd .. diff --git a/.travis/services/0x0.st.sh b/.travis/services/0x0.st.sh deleted file mode 100644 index c2f5ad09..00000000 --- a/.travis/services/0x0.st.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -#=============================================================== -# File URLs are valid for at least 30 days and up to a year (see below). -# Shortened URLs do not expire. -# Maximum file size: 512.0 MiB -# Blocked file types: application/x-dosexec, application/x-executable -#=============================================================== - -URL="https://0x0.st" - -if [ $# -eq 0 ]; then - echo "Usage: 0x0.st FILE\n" - exit 1 -fi - -FILE=$1 - -if [ ! -f "$FILE" ]; then - echo "File ${FILE} not found" - exit 1 -fi - -RESPONSE=$(curl -# -F "file=@${FILE}" "${URL}") - -echo "${RESPONSE}" # to terminal diff --git a/.travis/services/file.io.sh b/.travis/services/file.io.sh deleted file mode 100644 index ec55d921..00000000 --- a/.travis/services/file.io.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -#========================================== -# 100 uploads per day, 5GB file size limit for FREE plan. -#========================================== - -URL="https://file.io" -DEFAULT_EXPIRE="14d" # Default to 14 days - -if [ $# -eq 0 ]; then - echo "Usage: file.io FILE [DURATION]\n" - echo "Example: file.io path/to/my/file 1w\n" - exit 1 -fi - -FILE=$1 -EXPIRE=${2:-$DEFAULT_EXPIRE} - -if [ ! -f "$FILE" ]; then - echo "File ${FILE} not found" - exit 1 -fi - -RESPONSE=$(curl -# -F "file=@${FILE}" "${URL}/?expires=${EXPIRE}") - -echo "${RESPONSE}" # to terminal diff --git a/.travis/services/transfer.sh.sh b/.travis/services/transfer.sh.sh deleted file mode 100644 index 082ac8c4..00000000 --- a/.travis/services/transfer.sh.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -URL="https://transfer.sh" - -if [ $# -eq 0 ]; then - echo "Usage: transfer.sh FILE\n" - exit 1 -fi - -FILE=$1 - -if [ ! -f "$FILE" ]; then - echo "File ${FILE} not found" - exit 1 -fi - -RESPONSE=$(curl -# -F "file=@${FILE}" "${URL}") - -echo "${RESPONSE}" # to terminal \ No newline at end of file diff --git a/.travis/services/transferwee.py b/.travis/services/transferwee.py deleted file mode 100755 index 3bf4fc30..00000000 --- a/.travis/services/transferwee.py +++ /dev/null @@ -1,330 +0,0 @@ -#!/usr/bin/env python3.7 - -# -# Copyright (c) 2018-2019 Leonardo Taccari -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS -# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# - - -""" -Download/upload files via wetransfer.com - -transferwee is a script/module to download/upload files via wetransfer.com. - -It exposes `download' and `upload' subcommands, respectively used to download -files from a `we.tl' or `wetransfer.com/downloads' URLs and upload files that -will be shared via emails or link. -""" - - -from typing import List -import os.path -import urllib.parse -import zlib - -import requests - - -WETRANSFER_API_URL = 'https://wetransfer.com/api/v4/transfers' -WETRANSFER_DOWNLOAD_URL = WETRANSFER_API_URL + '/{transfer_id}/download' -WETRANSFER_UPLOAD_EMAIL_URL = WETRANSFER_API_URL + '/email' -WETRANSFER_UPLOAD_LINK_URL = WETRANSFER_API_URL + '/link' -WETRANSFER_FILES_URL = WETRANSFER_API_URL + '/{transfer_id}/files' -WETRANSFER_PART_PUT_URL = WETRANSFER_FILES_URL + '/{file_id}/part-put-url' -WETRANSFER_FINALIZE_MPP_URL = WETRANSFER_FILES_URL + '/{file_id}/finalize-mpp' -WETRANSFER_FINALIZE_URL = WETRANSFER_API_URL + '/{transfer_id}/finalize' - -WETRANSFER_DEFAULT_CHUNK_SIZE = 5242880 - - -def download_url(url: str) -> str: - """Given a wetransfer.com download URL download return the downloadable URL. - - The URL should be of the form `https://we.tl/' or - `https://wetransfer.com/downloads/'. If it is a short URL (i.e. `we.tl') - the redirect is followed in order to retrieve the corresponding - `wetransfer.com/downloads/' URL. - - The following type of URLs are supported: - - `https://we.tl/`: - received via link upload, via email to the sender and printed by - `upload` action - - `https://wetransfer.com//`: - directly not shared in any ways but the short URLs actually redirect to - them - - `https://wetransfer.com///`: - received via email by recipients when the files are shared via email - upload - - Return the download URL (AKA `direct_link') as a str or None if the URL - could not be parsed. - """ - # Follow the redirect if we have a short URL - if url.startswith('https://we.tl/'): - r = requests.head(url, allow_redirects=True) - url = r.url - - recipient_id = None - params = url.replace('https://wetransfer.com/downloads/', '').split('/') - - if len(params) == 2: - transfer_id, security_hash = params - elif len(params) == 3: - transfer_id, recipient_id, security_hash = params - else: - return None - - j = { - "security_hash": security_hash, - } - if recipient_id: - j["recipient_id"] = recipient_id - r = requests.post(WETRANSFER_DOWNLOAD_URL.format(transfer_id=transfer_id), - json=j) - - j = r.json() - return j.get('direct_link') - - -def download(url: str) -> None: - """Given a `we.tl/' or `wetransfer.com/downloads/' download it. - - First a direct link is retrieved (via download_url()), the filename will - be extracted to it and it will be fetched and stored on the current - working directory. - """ - dl_url = download_url(url) - file = urllib.parse.urlparse(dl_url).path.split('/')[-1] - - r = requests.get(dl_url, stream=True) - with open(file, 'wb') as f: - for chunk in r.iter_content(chunk_size=1024): - f.write(chunk) - - -def _file_name_and_size(file: str) -> dict: - """Given a file, prepare the "name" and "size" dictionary. - - Return a dictionary with "name" and "size" keys. - """ - filename = os.path.basename(file) - filesize = os.path.getsize(file) - - return { - "name": filename, - "size": filesize - } - - -def _prepare_email_upload(filenames: List[str], message: str, - sender: str, recipients: List[str]) -> str: - """Given a list of filenames, message a sender and recipients prepare for - the email upload. - - Return the parsed JSON response. - """ - j = { - "files": [_file_name_and_size(f) for f in filenames], - "from": sender, - "message": message, - "recipients": recipients, - "ui_language": "en", - } - - r = requests.post(WETRANSFER_UPLOAD_EMAIL_URL, json=j) - return r.json() - - -def _prepare_link_upload(filenames: List[str], message: str) -> str: - """Given a list of filenames and a message prepare for the link upload. - - Return the parsed JSON response. - """ - j = { - "files": [_file_name_and_size(f) for f in filenames], - "message": message, - "ui_language": "en", - } - - r = requests.post(WETRANSFER_UPLOAD_LINK_URL, json=j) - return r.json() - - -def _prepare_file_upload(transfer_id: str, file: str) -> str: - """Given a transfer_id and file prepare it for the upload. - - Return the parsed JSON response. - """ - j = _file_name_and_size(file) - r = requests.post(WETRANSFER_FILES_URL.format(transfer_id=transfer_id), - json=j) - return r.json() - - -def _upload_chunks(transfer_id: str, file_id: str, file: str, - default_chunk_size: int = WETRANSFER_DEFAULT_CHUNK_SIZE) -> str: - """Given a transfer_id, file_id and file upload it. - - Return the parsed JSON response. - """ - f = open(file, 'rb') - - chunk_number = 0 - while True: - chunk = f.read(default_chunk_size) - chunk_size = len(chunk) - if chunk_size == 0: - break - chunk_number += 1 - - j = { - "chunk_crc": zlib.crc32(chunk), - "chunk_number": chunk_number, - "chunk_size": chunk_size, - "retries": 0 - } - - r = requests.post( - WETRANSFER_PART_PUT_URL.format(transfer_id=transfer_id, - file_id=file_id), - json=j) - url = r.json().get('url') - r = requests.options(url, - headers={ - 'Origin': 'https://wetransfer.com', - 'Access-Control-Request-Method': 'PUT', - }) - r = requests.put(url, data=chunk) - - j = { - 'chunk_count': chunk_number - } - r = requests.put( - WETRANSFER_FINALIZE_MPP_URL.format(transfer_id=transfer_id, - file_id=file_id), - json=j) - - return r.json() - - -def _finalize_upload(transfer_id: str) -> str: - """Given a transfer_id finalize the upload. - - Return the parsed JSON response. - """ - r = requests.put(WETRANSFER_FINALIZE_URL.format(transfer_id=transfer_id)) - - return r.json() - - -def upload(files: List[str], message: str = '', sender: str = None, - recipients: List[str] = []) -> str: - """Given a list of files upload them and return the corresponding URL. - - Also accepts optional parameters: - - `message': message used as a description of the transfer - - `sender': email address used to receive an ACK if the upload is - successfull. For every download by the recipients an email - will be also sent - - `recipients': list of email addresses of recipients. When the upload - succeed every recipients will receive an email with a link - - If both sender and recipient parameters are passed the email upload will be - used. Otherwise, the link upload will be used. - - Return the short URL of the transfer on success. - """ - - # Check that all files exists - for f in files: - if not os.path.exists(f): - return None - - # Check that there are no duplicates filenames - # (despite possible different dirname()) - filenames = [os.path.basename(f) for f in files] - if len(files) != len(set(filenames)): - return None - - transfer_id = None - if sender and recipients: - # email upload - transfer_id = \ - _prepare_email_upload(filenames, message, sender, recipients)['id'] - else: - # link upload - transfer_id = _prepare_link_upload(filenames, message)['id'] - - for f in files: - file_id = _prepare_file_upload(transfer_id, os.path.basename(f))['id'] - _upload_chunks(transfer_id, file_id, f) - - return _finalize_upload(transfer_id)['shortened_url'] - - -if __name__ == '__main__': - import argparse - - ap = argparse.ArgumentParser( - prog='transferwee', - description='Download/upload files via wetransfer.com' - ) - sp = ap.add_subparsers(dest='action', help='action') - - # download subcommand - dp = sp.add_parser('download', help='download files') - dp.add_argument('-g', action='store_true', - help='only print the direct link (without downloading it)') - dp.add_argument('url', nargs='+', type=str, metavar='url', - help='URL (we.tl/... or wetransfer.com/downloads/...)') - - # upload subcommand - up = sp.add_parser('upload', help='upload files') - up.add_argument('-m', type=str, default='', metavar='message', - help='message description for the transfer') - up.add_argument('-f', type=str, metavar='from', help='sender email') - up.add_argument('-t', nargs='+', type=str, metavar='to', - help='recipient emails') - up.add_argument('files', nargs='+', type=str, metavar='file', - help='files to upload') - - args = ap.parse_args() - - if args.action == 'download': - if args.g: - for u in args.url: - print(download_url(u)) - else: - for u in args.url: - download(u) - exit(0) - - if args.action == 'upload': - print(upload(args.files, args.m, args.f, args.t)) - exit(0) - - # No action selected, print help message - ap.print_help() - exit(1) diff --git a/.travis/services/wetransfer.com.sh b/.travis/services/wetransfer.com.sh deleted file mode 100755 index e730f46d..00000000 --- a/.travis/services/wetransfer.com.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -#========================================================================================================================= -# WeTransfer is a service to send big or small files from A to B. -# It can transfer any type of file - such as presentations, photos, videos, music or documents - to friends and colleagues. -# You can send files up to 2 GB and they will be available for 7 days, with no registration. - -# API doc: https://developers.wetransfer.com/documentation -# Using transferwee.py: https://github.com/iamleot/transferwee -#========================================================================================================================= - -if [ $# -eq 0 ]; then - echo "Usage: python3 transferwee.py FILE\n" - exit 1 -fi - -FILE=$1 - -if [ ! -f "$FILE" ]; then - echo "File ${FILE} not found" - exit 1 -fi - -RESPONSE=$(python3 transferwee.py upload "${FILE}") - -echo "${RESPONSE}" # to terminal diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..d2e3c2ce --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.15) + +project(flameshot CXX) +include(cmake/StandardProjectSettings.cmake) + + +add_library(project_options INTERFACE) +target_compile_features(project_options INTERFACE cxx_std_17) + +add_library(project_warnings INTERFACE) + +# standard compiler warnings +include(cmake/CompilerWarnings.cmake) +#set_project_warnings(project_warnings) + +# sanitizer options if supported by compiler +include(cmake/Sanitizers.cmake) +#enable_sanitizers(project_options) + +# allow for static analysis options +#include(cmake/StaticAnalyzers.cmake) + + +add_subdirectory(src) \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index d2b6560d..00000000 --- a/appveyor.yml +++ /dev/null @@ -1,72 +0,0 @@ -image: Visual Studio 2015 - -version: 0.6.{build}.0 -# Major_Version_Number.Minor_Version_Number.Build_Number.Revision_Number - -branches: - only: - - master - -environment: - COMPILER: msvc - VSVER: 14 - - matrix: - - QT: C:\Qt\5.9\msvc2015_64 - PLATFORM: amd64 - - QT: C:\Qt\5.9\msvc2015 - PLATFORM: x86 -init: - - ps: | - $version = new-object System.Version $env:APPVEYOR_BUILD_VERSION - $packageVersion = "{0}.{1}.{2}" -f $version.Major, $version.Minor, $version.Revision - $env:build_number = $version.Build - $env:flameshot_version = $packageVersion - -# scripts that run after cloning repository -install: - - set PATH=%QT%\bin\;C:\Qt\Tools\QtCreator\bin\;C:\Qt\QtIFW3.0.1\bin\;%PATH% - -# scripts that run before build -before_build: - - call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %PLATFORM% - # After calling vcvarsall.bat, %PLATFORM% will be X64 or x86 - - qmake --version - - mkdir build - - cd build - - if "%PLATFORM%" EQU "X64" (qmake -r -spec win32-msvc CONFIG+=x86_64 CONFIG-=debug CONFIG+=release ../flameshot.pro) - - if "%PLATFORM%" EQU "x86" (qmake -r -spec win32-msvc CONFIG+=Win32 CONFIG-=debug CONFIG+=release ../flameshot.pro) - -# custom build scripts -build_script: - - nmake - -# scripts that run after build -after_build: - # Clone OpenSSL DLLs - - git clone https://github.com/tamlok/openssl-utils.git openssl-utils.git - - mkdir distrib\flameshot - - windeployqt.exe --dir .\distrib\flameshot %APPVEYOR_BUILD_FOLDER%\build\release\flameshot.exe - - copy "%APPVEYOR_BUILD_FOLDER%\build\release\flameshot.exe" "distrib\flameshot\flameshot.exe" - - copy "%APPVEYOR_BUILD_FOLDER%\README.md" "distrib\flameshot\README.md" - - copy "%APPVEYOR_BUILD_FOLDER%\LICENSE" "distrib\flameshot\LICENSE.txt" - - echo %flameshot_version% > "distrib\flameshot\version.txt" - - echo Build:%build_number% >> "distrib\flameshot\version.txt" - - echo %APPVEYOR_REPO_COMMIT% >> "distrib\flameshot\version.txt" - - copy "distrib\flameshot\flameshot.exe" "distrib\flameshot_win_%PLATFORM%.exe" - - copy "%APPVEYOR_BUILD_FOLDER%\build\translations\Internationalization_*.qm" "distrib\flameshot\translations" - # Delete translations\qt_*.qm - - del /F /Q "distrib\flameshot\translations\qt_*.qm" - # Copy OpenSSL DLLs - - if "%PLATFORM%" EQU "X64" (xcopy "openssl-utils.git\win64\*.dll" "distrib\flameshot") - - if "%PLATFORM%" EQU "x86" (xcopy "openssl-utils.git\win32\*.dll" "distrib\flameshot") - - cd distrib - - 7z a flameshot_%flameshot_version%_win_%PLATFORM%.zip flameshot - - appveyor-retry curl --upload-file ./flameshot_%flameshot_version%_win_%PLATFORM%.zip https://transfer.sh/flameshot_%flameshot_version%_win_%PLATFORM%.zip - - -# artifacts: -# - path: build\distrib\flameshot_win_%PLATFORM%_portable_%flameshot_version%.zip -# name: portable -# - path: build\distrib\flameshot_win_%PLATFORM%.exe -# name: exe_only diff --git a/cmake/CompilerWarnings.cmake b/cmake/CompilerWarnings.cmake new file mode 100644 index 00000000..d933ce30 --- /dev/null +++ b/cmake/CompilerWarnings.cmake @@ -0,0 +1,78 @@ +# from here: +# +# https://github.com/lefticus/cppbestpractices/blob/master/02-Use_the_Tools_Avai lable.md + +function(set_project_warnings project_name) + option(WARNINGS_AS_ERRORS "Treat compiler warnings as errors" TRUE) + + set(MSVC_WARNINGS + /W4 # Baseline reasonable warnings + /w14242 # 'identifier': conversion from 'type1' to 'type1', possible loss of data + /w14254 # 'operator': conversion from 'type1:field_bits' to 'type2:field_bits', possible loss of data + /w14263 # 'function': member function does not override any base class virtual member function + /w14265 # 'classname': class has virtual functions, but destructor is not virtual instances of this class may not + # be destructed correctly + /w14287 # 'operator': unsigned/negative constant mismatch + /we4289 # nonstandard extension used: 'variable': loop control variable declared in the for-loop is used outside + # the for-loop scope + /w14296 # 'operator': expression is always 'boolean_value' + /w14311 # 'variable': pointer truncation from 'type1' to 'type2' + /w14545 # expression before comma evaluates to a function which is missing an argument list + /w14546 # function call before comma missing argument list + /w14547 # 'operator': operator before comma has no effect; expected operator with side-effect + /w14549 # 'operator': operator before comma has no effect; did you intend 'operator'? + /w14555 # expression has no effect; expected expression with side- effect + /w14619 # pragma warning: there is no warning number 'number' + /w14640 # Enable warning on thread un-safe static member initialization + /w14826 # Conversion from 'type1' to 'type_2' is sign-extended. This may cause unexpected runtime behavior. + /w14905 # wide string literal cast to 'LPSTR' + /w14906 # string literal cast to 'LPWSTR' + /w14928 # illegal copy-initialization; more than one user-defined conversion has been implicitly applied + /permissive- # standards conformance mode for MSVC compiler. + ) + + set(CLANG_WARNINGS + -Wall + -Wextra # reasonable and standard + -Wshadow # warn the user if a variable declaration shadows one from a parent context + -Wnon-virtual-dtor # warn the user if a class with virtual functions has a non-virtual destructor. This helps + # catch hard to track down memory errors + -Wold-style-cast # warn for c-style casts + -Wcast-align # warn for potential performance problem casts + -Wunused # warn on anything being unused + -Woverloaded-virtual # warn if you overload (not override) a virtual function + -Wpedantic # warn if non-standard C++ is used + -Wconversion # warn on type conversions that may lose data + -Wsign-conversion # warn on sign conversions + -Wnull-dereference # warn if a null dereference is detected + -Wdouble-promotion # warn if float is implicit promoted to double + -Wformat=2 # warn on security issues around functions that format output (ie printf) + ) + + if(WARNINGS_AS_ERRORS) + set(CLANG_WARNINGS ${CLANG_WARNINGS} -Werror) + set(MSVC_WARNINGS ${MSVC_WARNINGS} /WX) + endif() + + set(GCC_WARNINGS + ${CLANG_WARNINGS} + -Wmisleading-indentation # warn if indentation implies blocks where blocks do not exist + -Wduplicated-cond # warn if if / else chain has duplicated conditions + -Wduplicated-branches # warn if if / else branches have duplicated code + -Wlogical-op # warn about logical operations being used where bitwise were probably wanted + -Wuseless-cast # warn if you perform a cast to the same type + ) + + if(MSVC) + set(PROJECT_WARNINGS ${MSVC_WARNINGS}) + elseif(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") + set(PROJECT_WARNINGS ${CLANG_WARNINGS}) + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(PROJECT_WARNINGS ${GCC_WARNINGS}) + else() + message(AUTHOR_WARNING "No compiler warnings set for '${CMAKE_CXX_COMPILER_ID}' compiler.") + endif() + + target_compile_options(${project_name} INTERFACE ${PROJECT_WARNINGS}) + +endfunction() diff --git a/cmake/Sanitizers.cmake b/cmake/Sanitizers.cmake new file mode 100644 index 00000000..dda0d26c --- /dev/null +++ b/cmake/Sanitizers.cmake @@ -0,0 +1,66 @@ +function(enable_sanitizers project_name) + + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") + option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" FALSE) + + if(ENABLE_COVERAGE) + target_compile_options(${project_name} INTERFACE --coverage -O0 -g) + target_link_libraries(${project_name} INTERFACE --coverage) + endif() + + set(SANITIZERS "") + + option(ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" FALSE) + if(ENABLE_SANITIZER_ADDRESS) + list(APPEND SANITIZERS "address") + endif() + + option(ENABLE_SANITIZER_LEAK "Enable leak sanitizer" FALSE) + if(ENABLE_SANITIZER_LEAK) + list(APPEND SANITIZERS "leak") + endif() + + option(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR "Enable undefined behavior sanitizer" FALSE) + if(ENABLE_SANITIZER_UNDEFINED_BEHAVIOR) + list(APPEND SANITIZERS "undefined") + endif() + + option(ENABLE_SANITIZER_THREAD "Enable thread sanitizer" FALSE) + if(ENABLE_SANITIZER_THREAD) + if("address" IN_LIST SANITIZERS OR "leak" IN_LIST SANITIZERS) + message(WARNING "Thread sanitizer does not work with Address and Leak sanitizer enabled") + else() + list(APPEND SANITIZERS "thread") + endif() + endif() + + option(ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" FALSE) + if(ENABLE_SANITIZER_MEMORY AND CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") + if("address" IN_LIST SANITIZERS + OR "thread" IN_LIST SANITIZERS + OR "leak" IN_LIST SANITIZERS) + message(WARNING "Memory sanitizer does not work with Address, Thread and Leak sanitizer enabled") + else() + list(APPEND SANITIZERS "memory") + endif() + endif() + + list( + JOIN + SANITIZERS + "," + LIST_OF_SANITIZERS) + + endif() + + if(LIST_OF_SANITIZERS) + if(NOT + "${LIST_OF_SANITIZERS}" + STREQUAL + "") + target_compile_options(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS}) + target_link_libraries(${project_name} INTERFACE -fsanitize=${LIST_OF_SANITIZERS}) + endif() + endif() + +endfunction() \ No newline at end of file diff --git a/cmake/StandardProjectSettings.cmake b/cmake/StandardProjectSettings.cmake new file mode 100644 index 00000000..743b0712 --- /dev/null +++ b/cmake/StandardProjectSettings.cmake @@ -0,0 +1,34 @@ +# Set a default build type if none was specified +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") + set(CMAKE_BUILD_TYPE + RelWithDebInfo + CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui, ccmake + set_property( + CACHE CMAKE_BUILD_TYPE + PROPERTY STRINGS + "Debug" + "Release" + "MinSizeRel" + "RelWithDebInfo") +endif() + +# Generate compile_commands.json to make it easier to work with clang based tools +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +option(ENABLE_IPO "Enable Interprocedural Optimization, aka Link Time Optimization (LTO)" OFF) + +if(ENABLE_IPO) + include(CheckIPOSupported) + check_ipo_supported( + RESULT + result + OUTPUT + output) + if(result) + set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) + else() + message(SEND_ERROR "IPO is not supported: ${output}") + endif() +endif() \ No newline at end of file diff --git a/cmake/StaticAnalyzers.cmake b/cmake/StaticAnalyzers.cmake new file mode 100644 index 00000000..43964447 --- /dev/null +++ b/cmake/StaticAnalyzers.cmake @@ -0,0 +1,37 @@ +option(ENABLE_CPPCHECK "Enable static analysis with cppcheck" OFF) +option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy" OFF) +option(ENABLE_INCLUDE_WHAT_YOU_USE "Enable static analysis with include-what-you-use" OFF) + +if(ENABLE_CPPCHECK) + find_program(CPPCHECK cppcheck) + if(CPPCHECK) + set(CMAKE_CXX_CPPCHECK + ${CPPCHECK} + --suppress=missingInclude + --enable=all + --inline-suppr + --inconclusive + -i + ${CMAKE_SOURCE_DIR}/imgui/lib) + else() + message(SEND_ERROR "cppcheck requested but executable not found") + endif() +endif() + +if(ENABLE_CLANG_TIDY) + find_program(CLANGTIDY clang-tidy) + if(CLANGTIDY) + set(CMAKE_CXX_CLANG_TIDY ${CLANGTIDY} -extra-arg=-Wno-unknown-warning-option) + else() + message(SEND_ERROR "clang-tidy requested but executable not found") + endif() +endif() + +if(ENABLE_INCLUDE_WHAT_YOU_USE) + find_program(INCLUDE_WHAT_YOU_USE include-what-you-use) + if(INCLUDE_WHAT_YOU_USE) + set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${INCLUDE_WHAT_YOU_USE}) + else() + message(SEND_ERROR "include-what-you-use requested but executable not found") + endif() +endif() diff --git a/dbus/make/org.dharkael.Flameshot.service b/data/dbus/make/org.dharkael.Flameshot.service similarity index 100% rename from dbus/make/org.dharkael.Flameshot.service rename to data/dbus/make/org.dharkael.Flameshot.service diff --git a/dbus/org.dharkael.Flameshot.xml b/data/dbus/org.dharkael.Flameshot.xml similarity index 100% rename from dbus/org.dharkael.Flameshot.xml rename to data/dbus/org.dharkael.Flameshot.xml diff --git a/dbus/org.freedesktop.Notifications.xml b/data/dbus/org.freedesktop.Notifications.xml similarity index 100% rename from dbus/org.freedesktop.Notifications.xml rename to data/dbus/org.freedesktop.Notifications.xml diff --git a/dbus/other-path/service-gen.sh b/data/dbus/other-path/service-gen.sh similarity index 100% rename from dbus/other-path/service-gen.sh rename to data/dbus/other-path/service-gen.sh diff --git a/dbus/package/org.dharkael.Flameshot.service b/data/dbus/package/org.dharkael.Flameshot.service similarity index 100% rename from dbus/package/org.dharkael.Flameshot.service rename to data/dbus/package/org.dharkael.Flameshot.service diff --git a/debian/changelog b/data/debian/changelog similarity index 100% rename from debian/changelog rename to data/debian/changelog diff --git a/debian/compat b/data/debian/compat similarity index 100% rename from debian/compat rename to data/debian/compat diff --git a/debian/control b/data/debian/control similarity index 100% rename from debian/control rename to data/debian/control diff --git a/debian/copyright b/data/debian/copyright similarity index 100% rename from debian/copyright rename to data/debian/copyright diff --git a/debian/docs b/data/debian/docs similarity index 100% rename from debian/docs rename to data/debian/docs diff --git a/debian/rules b/data/debian/rules similarity index 100% rename from debian/rules rename to data/debian/rules diff --git a/debian/source/format b/data/debian/source/format similarity index 100% rename from debian/source/format rename to data/debian/source/format diff --git a/graphics.qrc b/data/graphics.qrc similarity index 100% rename from graphics.qrc rename to data/graphics.qrc diff --git a/img/app/flameshot.ico b/data/img/app/flameshot.ico similarity index 100% rename from img/app/flameshot.ico rename to data/img/app/flameshot.ico diff --git a/img/app/flameshot.png b/data/img/app/flameshot.png similarity index 100% rename from img/app/flameshot.png rename to data/img/app/flameshot.png diff --git a/img/app/flameshot.svg b/data/img/app/flameshot.svg similarity index 100% rename from img/app/flameshot.svg rename to data/img/app/flameshot.svg diff --git a/img/app/flameshotLogoLicense.txt b/data/img/app/flameshotLogoLicense.txt similarity index 100% rename from img/app/flameshotLogoLicense.txt rename to data/img/app/flameshotLogoLicense.txt diff --git a/img/hicolor/128x128/apps/flameshot.png b/data/img/hicolor/128x128/apps/flameshot.png similarity index 100% rename from img/hicolor/128x128/apps/flameshot.png rename to data/img/hicolor/128x128/apps/flameshot.png diff --git a/img/hicolor/48x48/apps/flameshot.png b/data/img/hicolor/48x48/apps/flameshot.png similarity index 100% rename from img/hicolor/48x48/apps/flameshot.png rename to data/img/hicolor/48x48/apps/flameshot.png diff --git a/img/hicolor/scalable/apps/flameshot.svg b/data/img/hicolor/scalable/apps/flameshot.svg similarity index 100% rename from img/hicolor/scalable/apps/flameshot.svg rename to data/img/hicolor/scalable/apps/flameshot.svg diff --git a/img/material/LICENSE.txt b/data/img/material/LICENSE.txt similarity index 100% rename from img/material/LICENSE.txt rename to data/img/material/LICENSE.txt diff --git a/img/material/README.md b/data/img/material/README.md similarity index 100% rename from img/material/README.md rename to data/img/material/README.md diff --git a/img/material/black/arrow-bottom-left.png b/data/img/material/black/arrow-bottom-left.png similarity index 100% rename from img/material/black/arrow-bottom-left.png rename to data/img/material/black/arrow-bottom-left.png diff --git a/img/material/black/arrow-bottom-left.svg b/data/img/material/black/arrow-bottom-left.svg similarity index 100% rename from img/material/black/arrow-bottom-left.svg rename to data/img/material/black/arrow-bottom-left.svg diff --git a/img/material/black/blur.png b/data/img/material/black/blur.png similarity index 100% rename from img/material/black/blur.png rename to data/img/material/black/blur.png diff --git a/img/material/black/blur.svg b/data/img/material/black/blur.svg similarity index 100% rename from img/material/black/blur.svg rename to data/img/material/black/blur.svg diff --git a/img/material/black/circle-outline.png b/data/img/material/black/circle-outline.png similarity index 100% rename from img/material/black/circle-outline.png rename to data/img/material/black/circle-outline.png diff --git a/img/material/black/circle-outline.svg b/data/img/material/black/circle-outline.svg similarity index 100% rename from img/material/black/circle-outline.svg rename to data/img/material/black/circle-outline.svg diff --git a/img/material/black/circlecount-outline.png b/data/img/material/black/circlecount-outline.png similarity index 100% rename from img/material/black/circlecount-outline.png rename to data/img/material/black/circlecount-outline.png diff --git a/img/material/black/circlecount-outline.svg b/data/img/material/black/circlecount-outline.svg similarity index 100% rename from img/material/black/circlecount-outline.svg rename to data/img/material/black/circlecount-outline.svg diff --git a/img/material/black/close.png b/data/img/material/black/close.png similarity index 100% rename from img/material/black/close.png rename to data/img/material/black/close.png diff --git a/img/material/black/close.svg b/data/img/material/black/close.svg similarity index 100% rename from img/material/black/close.svg rename to data/img/material/black/close.svg diff --git a/img/material/black/cloud-upload.png b/data/img/material/black/cloud-upload.png similarity index 100% rename from img/material/black/cloud-upload.png rename to data/img/material/black/cloud-upload.png diff --git a/img/material/black/cloud-upload.svg b/data/img/material/black/cloud-upload.svg similarity index 100% rename from img/material/black/cloud-upload.svg rename to data/img/material/black/cloud-upload.svg diff --git a/img/material/black/colorize.png b/data/img/material/black/colorize.png similarity index 100% rename from img/material/black/colorize.png rename to data/img/material/black/colorize.png diff --git a/img/material/black/colorize.svg b/data/img/material/black/colorize.svg similarity index 100% rename from img/material/black/colorize.svg rename to data/img/material/black/colorize.svg diff --git a/img/material/black/config.png b/data/img/material/black/config.png similarity index 100% rename from img/material/black/config.png rename to data/img/material/black/config.png diff --git a/img/material/black/config.svg b/data/img/material/black/config.svg similarity index 100% rename from img/material/black/config.svg rename to data/img/material/black/config.svg diff --git a/img/material/black/content-copy.png b/data/img/material/black/content-copy.png similarity index 100% rename from img/material/black/content-copy.png rename to data/img/material/black/content-copy.png diff --git a/img/material/black/content-copy.svg b/data/img/material/black/content-copy.svg similarity index 100% rename from img/material/black/content-copy.svg rename to data/img/material/black/content-copy.svg diff --git a/img/material/black/content-save.png b/data/img/material/black/content-save.png similarity index 100% rename from img/material/black/content-save.png rename to data/img/material/black/content-save.png diff --git a/img/material/black/content-save.svg b/data/img/material/black/content-save.svg similarity index 100% rename from img/material/black/content-save.svg rename to data/img/material/black/content-save.svg diff --git a/img/material/black/cursor-move.png b/data/img/material/black/cursor-move.png similarity index 100% rename from img/material/black/cursor-move.png rename to data/img/material/black/cursor-move.png diff --git a/img/material/black/cursor-move.svg b/data/img/material/black/cursor-move.svg similarity index 100% rename from img/material/black/cursor-move.svg rename to data/img/material/black/cursor-move.svg diff --git a/img/material/black/exit-to-app.png b/data/img/material/black/exit-to-app.png similarity index 100% rename from img/material/black/exit-to-app.png rename to data/img/material/black/exit-to-app.png diff --git a/img/material/black/exit-to-app.svg b/data/img/material/black/exit-to-app.svg similarity index 100% rename from img/material/black/exit-to-app.svg rename to data/img/material/black/exit-to-app.svg diff --git a/img/material/black/format-text.svg b/data/img/material/black/format-text.svg similarity index 100% rename from img/material/black/format-text.svg rename to data/img/material/black/format-text.svg diff --git a/img/material/black/format_bold.png b/data/img/material/black/format_bold.png similarity index 100% rename from img/material/black/format_bold.png rename to data/img/material/black/format_bold.png diff --git a/img/material/black/format_bold.svg b/data/img/material/black/format_bold.svg similarity index 100% rename from img/material/black/format_bold.svg rename to data/img/material/black/format_bold.svg diff --git a/img/material/black/format_italic.png b/data/img/material/black/format_italic.png similarity index 100% rename from img/material/black/format_italic.png rename to data/img/material/black/format_italic.png diff --git a/img/material/black/format_italic.svg b/data/img/material/black/format_italic.svg similarity index 100% rename from img/material/black/format_italic.svg rename to data/img/material/black/format_italic.svg diff --git a/img/material/black/format_strikethrough.png b/data/img/material/black/format_strikethrough.png similarity index 100% rename from img/material/black/format_strikethrough.png rename to data/img/material/black/format_strikethrough.png diff --git a/img/material/black/format_strikethrough.svg b/data/img/material/black/format_strikethrough.svg similarity index 100% rename from img/material/black/format_strikethrough.svg rename to data/img/material/black/format_strikethrough.svg diff --git a/img/material/black/format_underlined.png b/data/img/material/black/format_underlined.png similarity index 100% rename from img/material/black/format_underlined.png rename to data/img/material/black/format_underlined.png diff --git a/img/material/black/format_underlined.svg b/data/img/material/black/format_underlined.svg similarity index 100% rename from img/material/black/format_underlined.svg rename to data/img/material/black/format_underlined.svg diff --git a/img/material/black/graphics.png b/data/img/material/black/graphics.png similarity index 100% rename from img/material/black/graphics.png rename to data/img/material/black/graphics.png diff --git a/img/material/black/graphics.svg b/data/img/material/black/graphics.svg similarity index 100% rename from img/material/black/graphics.svg rename to data/img/material/black/graphics.svg diff --git a/img/material/black/line.png b/data/img/material/black/line.png similarity index 100% rename from img/material/black/line.png rename to data/img/material/black/line.png diff --git a/img/material/black/line.svg b/data/img/material/black/line.svg similarity index 100% rename from img/material/black/line.svg rename to data/img/material/black/line.svg diff --git a/img/material/black/marker.png b/data/img/material/black/marker.png similarity index 100% rename from img/material/black/marker.png rename to data/img/material/black/marker.png diff --git a/img/material/black/marker.svg b/data/img/material/black/marker.svg similarity index 100% rename from img/material/black/marker.svg rename to data/img/material/black/marker.svg diff --git a/img/material/black/mouse-off.svg b/data/img/material/black/mouse-off.svg similarity index 100% rename from img/material/black/mouse-off.svg rename to data/img/material/black/mouse-off.svg diff --git a/img/material/black/mouse.svg b/data/img/material/black/mouse.svg similarity index 100% rename from img/material/black/mouse.svg rename to data/img/material/black/mouse.svg diff --git a/img/material/black/name_edition.png b/data/img/material/black/name_edition.png similarity index 100% rename from img/material/black/name_edition.png rename to data/img/material/black/name_edition.png diff --git a/img/material/black/name_edition.svg b/data/img/material/black/name_edition.svg similarity index 100% rename from img/material/black/name_edition.svg rename to data/img/material/black/name_edition.svg diff --git a/img/material/black/open_with.png b/data/img/material/black/open_with.png similarity index 100% rename from img/material/black/open_with.png rename to data/img/material/black/open_with.png diff --git a/img/material/black/open_with.svg b/data/img/material/black/open_with.svg similarity index 100% rename from img/material/black/open_with.svg rename to data/img/material/black/open_with.svg diff --git a/img/material/black/pencil.png b/data/img/material/black/pencil.png similarity index 100% rename from img/material/black/pencil.png rename to data/img/material/black/pencil.png diff --git a/img/material/black/pencil.svg b/data/img/material/black/pencil.svg similarity index 100% rename from img/material/black/pencil.svg rename to data/img/material/black/pencil.svg diff --git a/img/material/black/pin.png b/data/img/material/black/pin.png similarity index 100% rename from img/material/black/pin.png rename to data/img/material/black/pin.png diff --git a/img/material/black/pin.svg b/data/img/material/black/pin.svg similarity index 100% rename from img/material/black/pin.svg rename to data/img/material/black/pin.svg diff --git a/img/material/black/redo-variant.png b/data/img/material/black/redo-variant.png similarity index 100% rename from img/material/black/redo-variant.png rename to data/img/material/black/redo-variant.png diff --git a/img/material/black/redo-variant.svg b/data/img/material/black/redo-variant.svg similarity index 100% rename from img/material/black/redo-variant.svg rename to data/img/material/black/redo-variant.svg diff --git a/img/material/black/size_indicator.png b/data/img/material/black/size_indicator.png similarity index 100% rename from img/material/black/size_indicator.png rename to data/img/material/black/size_indicator.png diff --git a/img/material/black/size_indicator.svg b/data/img/material/black/size_indicator.svg similarity index 100% rename from img/material/black/size_indicator.svg rename to data/img/material/black/size_indicator.svg diff --git a/img/material/black/square-outline.png b/data/img/material/black/square-outline.png similarity index 100% rename from img/material/black/square-outline.png rename to data/img/material/black/square-outline.png diff --git a/img/material/black/square-outline.svg b/data/img/material/black/square-outline.svg similarity index 100% rename from img/material/black/square-outline.svg rename to data/img/material/black/square-outline.svg diff --git a/img/material/black/square.png b/data/img/material/black/square.png similarity index 100% rename from img/material/black/square.png rename to data/img/material/black/square.png diff --git a/img/material/black/square.svg b/data/img/material/black/square.svg similarity index 100% rename from img/material/black/square.svg rename to data/img/material/black/square.svg diff --git a/img/material/black/text.png b/data/img/material/black/text.png similarity index 100% rename from img/material/black/text.png rename to data/img/material/black/text.png diff --git a/img/material/black/text.svg b/data/img/material/black/text.svg similarity index 100% rename from img/material/black/text.svg rename to data/img/material/black/text.svg diff --git a/img/material/black/undo-variant.png b/data/img/material/black/undo-variant.png similarity index 100% rename from img/material/black/undo-variant.png rename to data/img/material/black/undo-variant.png diff --git a/img/material/black/undo-variant.svg b/data/img/material/black/undo-variant.svg similarity index 100% rename from img/material/black/undo-variant.svg rename to data/img/material/black/undo-variant.svg diff --git a/img/material/white/arrow-bottom-left.png b/data/img/material/white/arrow-bottom-left.png similarity index 100% rename from img/material/white/arrow-bottom-left.png rename to data/img/material/white/arrow-bottom-left.png diff --git a/img/material/white/arrow-bottom-left.svg b/data/img/material/white/arrow-bottom-left.svg similarity index 100% rename from img/material/white/arrow-bottom-left.svg rename to data/img/material/white/arrow-bottom-left.svg diff --git a/img/material/white/blur.png b/data/img/material/white/blur.png similarity index 100% rename from img/material/white/blur.png rename to data/img/material/white/blur.png diff --git a/img/material/white/blur.svg b/data/img/material/white/blur.svg similarity index 100% rename from img/material/white/blur.svg rename to data/img/material/white/blur.svg diff --git a/img/material/white/circle-outline.png b/data/img/material/white/circle-outline.png similarity index 100% rename from img/material/white/circle-outline.png rename to data/img/material/white/circle-outline.png diff --git a/img/material/white/circle-outline.svg b/data/img/material/white/circle-outline.svg similarity index 100% rename from img/material/white/circle-outline.svg rename to data/img/material/white/circle-outline.svg diff --git a/img/material/white/circlecount-outline.png b/data/img/material/white/circlecount-outline.png similarity index 100% rename from img/material/white/circlecount-outline.png rename to data/img/material/white/circlecount-outline.png diff --git a/img/material/white/circlecount-outline.svg b/data/img/material/white/circlecount-outline.svg similarity index 100% rename from img/material/white/circlecount-outline.svg rename to data/img/material/white/circlecount-outline.svg diff --git a/img/material/white/close.png b/data/img/material/white/close.png similarity index 100% rename from img/material/white/close.png rename to data/img/material/white/close.png diff --git a/img/material/white/close.svg b/data/img/material/white/close.svg similarity index 100% rename from img/material/white/close.svg rename to data/img/material/white/close.svg diff --git a/img/material/white/cloud-upload.png b/data/img/material/white/cloud-upload.png similarity index 100% rename from img/material/white/cloud-upload.png rename to data/img/material/white/cloud-upload.png diff --git a/img/material/white/cloud-upload.svg b/data/img/material/white/cloud-upload.svg similarity index 100% rename from img/material/white/cloud-upload.svg rename to data/img/material/white/cloud-upload.svg diff --git a/img/material/white/colorize.png b/data/img/material/white/colorize.png similarity index 100% rename from img/material/white/colorize.png rename to data/img/material/white/colorize.png diff --git a/img/material/white/colorize.svg b/data/img/material/white/colorize.svg similarity index 100% rename from img/material/white/colorize.svg rename to data/img/material/white/colorize.svg diff --git a/img/material/white/config.png b/data/img/material/white/config.png similarity index 100% rename from img/material/white/config.png rename to data/img/material/white/config.png diff --git a/img/material/white/config.svg b/data/img/material/white/config.svg similarity index 100% rename from img/material/white/config.svg rename to data/img/material/white/config.svg diff --git a/img/material/white/content-copy.png b/data/img/material/white/content-copy.png similarity index 100% rename from img/material/white/content-copy.png rename to data/img/material/white/content-copy.png diff --git a/img/material/white/content-copy.svg b/data/img/material/white/content-copy.svg similarity index 100% rename from img/material/white/content-copy.svg rename to data/img/material/white/content-copy.svg diff --git a/img/material/white/content-save.png b/data/img/material/white/content-save.png similarity index 100% rename from img/material/white/content-save.png rename to data/img/material/white/content-save.png diff --git a/img/material/white/content-save.svg b/data/img/material/white/content-save.svg similarity index 100% rename from img/material/white/content-save.svg rename to data/img/material/white/content-save.svg diff --git a/img/material/white/cursor-move.png b/data/img/material/white/cursor-move.png similarity index 100% rename from img/material/white/cursor-move.png rename to data/img/material/white/cursor-move.png diff --git a/img/material/white/cursor-move.svg b/data/img/material/white/cursor-move.svg similarity index 100% rename from img/material/white/cursor-move.svg rename to data/img/material/white/cursor-move.svg diff --git a/img/material/white/exit-to-app.png b/data/img/material/white/exit-to-app.png similarity index 100% rename from img/material/white/exit-to-app.png rename to data/img/material/white/exit-to-app.png diff --git a/img/material/white/exit-to-app.svg b/data/img/material/white/exit-to-app.svg similarity index 100% rename from img/material/white/exit-to-app.svg rename to data/img/material/white/exit-to-app.svg diff --git a/img/material/white/format-text.png b/data/img/material/white/format-text.png similarity index 100% rename from img/material/white/format-text.png rename to data/img/material/white/format-text.png diff --git a/img/material/white/format-text.svg b/data/img/material/white/format-text.svg similarity index 100% rename from img/material/white/format-text.svg rename to data/img/material/white/format-text.svg diff --git a/img/material/white/format_bold.png b/data/img/material/white/format_bold.png similarity index 100% rename from img/material/white/format_bold.png rename to data/img/material/white/format_bold.png diff --git a/img/material/white/format_bold.svg b/data/img/material/white/format_bold.svg similarity index 100% rename from img/material/white/format_bold.svg rename to data/img/material/white/format_bold.svg diff --git a/img/material/white/format_italic.png b/data/img/material/white/format_italic.png similarity index 100% rename from img/material/white/format_italic.png rename to data/img/material/white/format_italic.png diff --git a/img/material/white/format_italic.svg b/data/img/material/white/format_italic.svg similarity index 100% rename from img/material/white/format_italic.svg rename to data/img/material/white/format_italic.svg diff --git a/img/material/white/format_strikethrough.png b/data/img/material/white/format_strikethrough.png similarity index 100% rename from img/material/white/format_strikethrough.png rename to data/img/material/white/format_strikethrough.png diff --git a/img/material/white/format_strikethrough.svg b/data/img/material/white/format_strikethrough.svg similarity index 100% rename from img/material/white/format_strikethrough.svg rename to data/img/material/white/format_strikethrough.svg diff --git a/img/material/white/format_underlined.png b/data/img/material/white/format_underlined.png similarity index 100% rename from img/material/white/format_underlined.png rename to data/img/material/white/format_underlined.png diff --git a/img/material/white/format_underlined.svg b/data/img/material/white/format_underlined.svg similarity index 100% rename from img/material/white/format_underlined.svg rename to data/img/material/white/format_underlined.svg diff --git a/img/material/white/graphics.png b/data/img/material/white/graphics.png similarity index 100% rename from img/material/white/graphics.png rename to data/img/material/white/graphics.png diff --git a/img/material/white/graphics.svg b/data/img/material/white/graphics.svg similarity index 100% rename from img/material/white/graphics.svg rename to data/img/material/white/graphics.svg diff --git a/img/material/white/line.png b/data/img/material/white/line.png similarity index 100% rename from img/material/white/line.png rename to data/img/material/white/line.png diff --git a/img/material/white/line.svg b/data/img/material/white/line.svg similarity index 100% rename from img/material/white/line.svg rename to data/img/material/white/line.svg diff --git a/img/material/white/marker.png b/data/img/material/white/marker.png similarity index 100% rename from img/material/white/marker.png rename to data/img/material/white/marker.png diff --git a/img/material/white/marker.svg b/data/img/material/white/marker.svg similarity index 100% rename from img/material/white/marker.svg rename to data/img/material/white/marker.svg diff --git a/img/material/white/mouse-off.svg b/data/img/material/white/mouse-off.svg similarity index 100% rename from img/material/white/mouse-off.svg rename to data/img/material/white/mouse-off.svg diff --git a/img/material/white/mouse.svg b/data/img/material/white/mouse.svg similarity index 100% rename from img/material/white/mouse.svg rename to data/img/material/white/mouse.svg diff --git a/img/material/white/name_edition.png b/data/img/material/white/name_edition.png similarity index 100% rename from img/material/white/name_edition.png rename to data/img/material/white/name_edition.png diff --git a/img/material/white/name_edition.svg b/data/img/material/white/name_edition.svg similarity index 100% rename from img/material/white/name_edition.svg rename to data/img/material/white/name_edition.svg diff --git a/img/material/white/open_with.png b/data/img/material/white/open_with.png similarity index 100% rename from img/material/white/open_with.png rename to data/img/material/white/open_with.png diff --git a/img/material/white/open_with.svg b/data/img/material/white/open_with.svg similarity index 100% rename from img/material/white/open_with.svg rename to data/img/material/white/open_with.svg diff --git a/img/material/white/pencil.png b/data/img/material/white/pencil.png similarity index 100% rename from img/material/white/pencil.png rename to data/img/material/white/pencil.png diff --git a/img/material/white/pencil.svg b/data/img/material/white/pencil.svg similarity index 100% rename from img/material/white/pencil.svg rename to data/img/material/white/pencil.svg diff --git a/img/material/white/pin.png b/data/img/material/white/pin.png similarity index 100% rename from img/material/white/pin.png rename to data/img/material/white/pin.png diff --git a/img/material/white/pin.svg b/data/img/material/white/pin.svg similarity index 100% rename from img/material/white/pin.svg rename to data/img/material/white/pin.svg diff --git a/img/material/white/redo-variant.png b/data/img/material/white/redo-variant.png similarity index 100% rename from img/material/white/redo-variant.png rename to data/img/material/white/redo-variant.png diff --git a/img/material/white/redo-variant.svg b/data/img/material/white/redo-variant.svg similarity index 100% rename from img/material/white/redo-variant.svg rename to data/img/material/white/redo-variant.svg diff --git a/img/material/white/size_indicator.png b/data/img/material/white/size_indicator.png similarity index 100% rename from img/material/white/size_indicator.png rename to data/img/material/white/size_indicator.png diff --git a/img/material/white/size_indicator.svg b/data/img/material/white/size_indicator.svg similarity index 100% rename from img/material/white/size_indicator.svg rename to data/img/material/white/size_indicator.svg diff --git a/img/material/white/square-outline.png b/data/img/material/white/square-outline.png similarity index 100% rename from img/material/white/square-outline.png rename to data/img/material/white/square-outline.png diff --git a/img/material/white/square-outline.svg b/data/img/material/white/square-outline.svg similarity index 100% rename from img/material/white/square-outline.svg rename to data/img/material/white/square-outline.svg diff --git a/img/material/white/square.png b/data/img/material/white/square.png similarity index 100% rename from img/material/white/square.png rename to data/img/material/white/square.png diff --git a/img/material/white/square.svg b/data/img/material/white/square.svg similarity index 100% rename from img/material/white/square.svg rename to data/img/material/white/square.svg diff --git a/img/material/white/text.png b/data/img/material/white/text.png similarity index 100% rename from img/material/white/text.png rename to data/img/material/white/text.png diff --git a/img/material/white/text.svg b/data/img/material/white/text.svg similarity index 100% rename from img/material/white/text.svg rename to data/img/material/white/text.svg diff --git a/img/material/white/undo-variant.png b/data/img/material/white/undo-variant.png similarity index 100% rename from img/material/white/undo-variant.png rename to data/img/material/white/undo-variant.png diff --git a/img/material/white/undo-variant.svg b/data/img/material/white/undo-variant.svg similarity index 100% rename from img/material/white/undo-variant.svg rename to data/img/material/white/undo-variant.svg diff --git a/img/preview/animatedUsage.gif b/data/img/preview/animatedUsage.gif similarity index 100% rename from img/preview/animatedUsage.gif rename to data/img/preview/animatedUsage.gif diff --git a/img/preview/usageStatic.png b/data/img/preview/usageStatic.png similarity index 100% rename from img/preview/usageStatic.png rename to data/img/preview/usageStatic.png diff --git a/rpm/flameshot.spec b/data/rpm/flameshot.spec similarity index 100% rename from rpm/flameshot.spec rename to data/rpm/flameshot.spec diff --git a/translations/Internationalization_ca.ts b/data/translations/Internationalization_ca.ts similarity index 100% rename from translations/Internationalization_ca.ts rename to data/translations/Internationalization_ca.ts diff --git a/translations/Internationalization_de_DE.ts b/data/translations/Internationalization_de_DE.ts similarity index 100% rename from translations/Internationalization_de_DE.ts rename to data/translations/Internationalization_de_DE.ts diff --git a/translations/Internationalization_es.ts b/data/translations/Internationalization_es.ts similarity index 100% rename from translations/Internationalization_es.ts rename to data/translations/Internationalization_es.ts diff --git a/translations/Internationalization_fr.ts b/data/translations/Internationalization_fr.ts similarity index 100% rename from translations/Internationalization_fr.ts rename to data/translations/Internationalization_fr.ts diff --git a/translations/Internationalization_hu.ts b/data/translations/Internationalization_hu.ts similarity index 100% rename from translations/Internationalization_hu.ts rename to data/translations/Internationalization_hu.ts diff --git a/translations/Internationalization_ja.ts b/data/translations/Internationalization_ja.ts similarity index 100% rename from translations/Internationalization_ja.ts rename to data/translations/Internationalization_ja.ts diff --git a/translations/Internationalization_ka.ts b/data/translations/Internationalization_ka.ts similarity index 100% rename from translations/Internationalization_ka.ts rename to data/translations/Internationalization_ka.ts diff --git a/translations/Internationalization_nl.ts b/data/translations/Internationalization_nl.ts similarity index 100% rename from translations/Internationalization_nl.ts rename to data/translations/Internationalization_nl.ts diff --git a/translations/Internationalization_pl.ts b/data/translations/Internationalization_pl.ts similarity index 100% rename from translations/Internationalization_pl.ts rename to data/translations/Internationalization_pl.ts diff --git a/translations/Internationalization_pt_br.ts b/data/translations/Internationalization_pt_br.ts similarity index 100% rename from translations/Internationalization_pt_br.ts rename to data/translations/Internationalization_pt_br.ts diff --git a/translations/Internationalization_ru.ts b/data/translations/Internationalization_ru.ts similarity index 100% rename from translations/Internationalization_ru.ts rename to data/translations/Internationalization_ru.ts diff --git a/translations/Internationalization_sk.ts b/data/translations/Internationalization_sk.ts similarity index 100% rename from translations/Internationalization_sk.ts rename to data/translations/Internationalization_sk.ts diff --git a/translations/Internationalization_sr.ts b/data/translations/Internationalization_sr.ts similarity index 100% rename from translations/Internationalization_sr.ts rename to data/translations/Internationalization_sr.ts diff --git a/translations/Internationalization_tr.ts b/data/translations/Internationalization_tr.ts similarity index 100% rename from translations/Internationalization_tr.ts rename to data/translations/Internationalization_tr.ts diff --git a/translations/Internationalization_uk.ts b/data/translations/Internationalization_uk.ts similarity index 100% rename from translations/Internationalization_uk.ts rename to data/translations/Internationalization_uk.ts diff --git a/translations/Internationalization_zh_CN.ts b/data/translations/Internationalization_zh_CN.ts similarity index 100% rename from translations/Internationalization_zh_CN.ts rename to data/translations/Internationalization_zh_CN.ts diff --git a/translations/Internationalization_zh_TW.ts b/data/translations/Internationalization_zh_TW.ts similarity index 100% rename from translations/Internationalization_zh_TW.ts rename to data/translations/Internationalization_zh_TW.ts diff --git a/CONTRIBUTING.md b/docs/CONTRIBUTING.md similarity index 100% rename from CONTRIBUTING.md rename to docs/CONTRIBUTING.md diff --git a/src/third-party/Qt-Color-Widgets/COPYING b/external/Qt-Color-Widgets/COPYING similarity index 100% rename from src/third-party/Qt-Color-Widgets/COPYING rename to external/Qt-Color-Widgets/COPYING diff --git a/src/third-party/Qt-Color-Widgets/LICENSE-EXCEPTION b/external/Qt-Color-Widgets/LICENSE-EXCEPTION similarity index 100% rename from src/third-party/Qt-Color-Widgets/LICENSE-EXCEPTION rename to external/Qt-Color-Widgets/LICENSE-EXCEPTION diff --git a/src/third-party/Qt-Color-Widgets/README.md b/external/Qt-Color-Widgets/README.md similarity index 100% rename from src/third-party/Qt-Color-Widgets/README.md rename to external/Qt-Color-Widgets/README.md diff --git a/src/third-party/Qt-Color-Widgets/color_widgets.pri b/external/Qt-Color-Widgets/color_widgets.pri similarity index 100% rename from src/third-party/Qt-Color-Widgets/color_widgets.pri rename to external/Qt-Color-Widgets/color_widgets.pri diff --git a/src/third-party/Qt-Color-Widgets/color_widgets.pro b/external/Qt-Color-Widgets/color_widgets.pro similarity index 100% rename from src/third-party/Qt-Color-Widgets/color_widgets.pro rename to external/Qt-Color-Widgets/color_widgets.pro diff --git a/src/third-party/Qt-Color-Widgets/include/ColorWheel b/external/Qt-Color-Widgets/include/ColorWheel similarity index 100% rename from src/third-party/Qt-Color-Widgets/include/ColorWheel rename to external/Qt-Color-Widgets/include/ColorWheel diff --git a/src/third-party/Qt-Color-Widgets/include/color_wheel.hpp b/external/Qt-Color-Widgets/include/color_wheel.hpp similarity index 100% rename from src/third-party/Qt-Color-Widgets/include/color_wheel.hpp rename to external/Qt-Color-Widgets/include/color_wheel.hpp diff --git a/src/third-party/Qt-Color-Widgets/src/alphaback.png b/external/Qt-Color-Widgets/src/alphaback.png similarity index 100% rename from src/third-party/Qt-Color-Widgets/src/alphaback.png rename to external/Qt-Color-Widgets/src/alphaback.png diff --git a/src/third-party/Qt-Color-Widgets/src/color_utils.cpp b/external/Qt-Color-Widgets/src/color_utils.cpp similarity index 100% rename from src/third-party/Qt-Color-Widgets/src/color_utils.cpp rename to external/Qt-Color-Widgets/src/color_utils.cpp diff --git a/src/third-party/Qt-Color-Widgets/src/color_utils.hpp b/external/Qt-Color-Widgets/src/color_utils.hpp similarity index 100% rename from src/third-party/Qt-Color-Widgets/src/color_utils.hpp rename to external/Qt-Color-Widgets/src/color_utils.hpp diff --git a/src/third-party/Qt-Color-Widgets/src/color_wheel.cpp b/external/Qt-Color-Widgets/src/color_wheel.cpp similarity index 100% rename from src/third-party/Qt-Color-Widgets/src/color_wheel.cpp rename to external/Qt-Color-Widgets/src/color_wheel.cpp diff --git a/src/third-party/Qt-Color-Widgets/src/color_widgets.qrc b/external/Qt-Color-Widgets/src/color_widgets.qrc similarity index 100% rename from src/third-party/Qt-Color-Widgets/src/color_widgets.qrc rename to external/Qt-Color-Widgets/src/color_widgets.qrc diff --git a/src/third-party/singleapplication/CHANGELOG.md b/external/singleapplication/CHANGELOG.md similarity index 100% rename from src/third-party/singleapplication/CHANGELOG.md rename to external/singleapplication/CHANGELOG.md diff --git a/src/third-party/singleapplication/LICENSE b/external/singleapplication/LICENSE similarity index 100% rename from src/third-party/singleapplication/LICENSE rename to external/singleapplication/LICENSE diff --git a/src/third-party/singleapplication/README.md b/external/singleapplication/README.md similarity index 100% rename from src/third-party/singleapplication/README.md rename to external/singleapplication/README.md diff --git a/src/third-party/singleapplication/Windows.md b/external/singleapplication/Windows.md similarity index 100% rename from src/third-party/singleapplication/Windows.md rename to external/singleapplication/Windows.md diff --git a/src/third-party/singleapplication/singleapplication.cpp b/external/singleapplication/singleapplication.cpp similarity index 100% rename from src/third-party/singleapplication/singleapplication.cpp rename to external/singleapplication/singleapplication.cpp diff --git a/src/third-party/singleapplication/singleapplication.h b/external/singleapplication/singleapplication.h similarity index 100% rename from src/third-party/singleapplication/singleapplication.h rename to external/singleapplication/singleapplication.h diff --git a/src/third-party/singleapplication/singleapplication.pri b/external/singleapplication/singleapplication.pri similarity index 100% rename from src/third-party/singleapplication/singleapplication.pri rename to external/singleapplication/singleapplication.pri diff --git a/src/third-party/singleapplication/singleapplication_p.h b/external/singleapplication/singleapplication_p.h similarity index 100% rename from src/third-party/singleapplication/singleapplication_p.h rename to external/singleapplication/singleapplication_p.h diff --git a/flameshot.pro b/flameshot.pro deleted file mode 100644 index bf3f80af..00000000 --- a/flameshot.pro +++ /dev/null @@ -1,293 +0,0 @@ -#------------------------------------------------- -# -# Project created by Dharkael 2017-04-21T00:42:49 -# -#------------------------------------------------- - -win32:LIBS += -luser32 -lshell32 - -TAG_VERSION = $$system(git --git-dir $$PWD/.git --work-tree $$PWD describe --always --tags) -isEmpty(TAG_VERSION){ - TAG_VERSION = v0.6.0 -} -DEFINES += APP_VERSION=\\\"$$TAG_VERSION\\\" - -QT += core gui widgets network svg - -unix:!macx { - QT += dbus -} - -CONFIG += c++11 link_pkgconfig - -#CONFIG += packaging # Enables "make install" for packaging paths - -TARGET = flameshot -TEMPLATE = app - -win32:RC_ICONS += img/app/flameshot.ico - -#release: DESTDIR = build/release -#debug: DESTDIR = build/debug - -#OBJECTS_DIR = $$DESTDIR/.obj -#MOC_DIR = $$DESTDIR/.moc -#RCC_DIR = $$DESTDIR/.qrc -#UI_DIR = $$DESTDIR/.ui - -TRANSLATIONS = translations/Internationalization_es.ts \ - translations/Internationalization_ca.ts \ - translations/Internationalization_ru.ts \ - translations/Internationalization_zh_CN.ts \ - translations/Internationalization_zh_TW.ts \ - translations/Internationalization_tr.ts \ - translations/Internationalization_ka.ts \ - translations/Internationalization_fr.ts \ - translations/Internationalization_pl.ts \ - translations/Internationalization_ja.ts \ - translations/Internationalization_pt_br.ts \ - translations/Internationalization_sr.ts \ - translations/Internationalization_uk.ts \ - translations/Internationalization_de_DE.ts \ - translations/Internationalization_sk.ts \ - -# Generate translations in build -TRANSLATIONS_FILES = - -qtPrepareTool(LRELEASE, lrelease) -for(tsfile, TRANSLATIONS) { - qmfile = $$shadowed($$tsfile) - qmfile ~= s,.ts$,.qm, - qmdir = $$dirname(qmfile) - !exists($$qmdir) { - mkpath($$qmdir)|error("Aborting.") - } - command = $$LRELEASE -removeidentical $$tsfile -qm $$qmfile - system($$command)|error("Failed to run: $$command") - TRANSLATIONS_FILES += $$qmfile -} - -DEFINES += QT_DEPRECATED_WARNINGS - -include(src/third-party/singleapplication/singleapplication.pri) -include(src/third-party/Qt-Color-Widgets//color_widgets.pri) - -DEFINES += QAPPLICATION_CLASS=QApplication - -SOURCES += src/main.cpp \ - src/tools/circlecount/circlecounttool.cpp \ - src/widgets/capture/buttonhandler.cpp \ - src/widgets/infowindow.cpp \ - src/config/configwindow.cpp \ - src/widgets/capture/capturewidget.cpp \ - src/widgets/capture/colorpicker.cpp \ - src/config/buttonlistview.cpp \ - src/config/uicoloreditor.cpp \ - src/config/geneneralconf.cpp \ - src/core/controller.cpp \ - src/config/clickablelabel.cpp \ - src/config/filenameeditor.cpp \ - src/config/strftimechooserwidget.cpp \ - src/widgets/capture/capturebutton.cpp \ - src/tools/pencil/penciltool.cpp \ - src/tools/undo/undotool.cpp \ - src/tools/redo/redotool.cpp \ - src/tools/arrow/arrowtool.cpp \ - src/tools/circle/circletool.cpp \ - src/tools/copy/copytool.cpp \ - src/tools/exit/exittool.cpp \ - src/tools/imgur/imguruploadertool.cpp \ - src/tools/line/linetool.cpp \ - src/tools/marker/markertool.cpp \ - src/tools/move/movetool.cpp \ - src/tools/rectangle/rectangletool.cpp \ - src/tools/save/savetool.cpp \ - src/tools/selection/selectiontool.cpp \ - src/tools/sizeindicator/sizeindicatortool.cpp \ - src/tools/toolfactory.cpp \ - src/utils/filenamehandler.cpp \ - src/utils/screengrabber.cpp \ - src/utils/confighandler.cpp \ - src/utils/systemnotification.cpp \ - src/cli/commandlineparser.cpp \ - src/cli/commandoption.cpp \ - src/cli/commandargument.cpp \ - src/utils/screenshotsaver.cpp \ - src/tools/imgur/imguruploader.cpp \ - src/widgets/loadspinner.cpp \ - src/widgets/imagelabel.cpp \ - src/widgets/notificationwidget.cpp \ - src/widgets/capture/notifierbox.cpp \ - src/utils/desktopinfo.cpp \ - src/tools/launcher/applauncherwidget.cpp \ - src/utils/desktopfileparse.cpp \ - src/tools/launcher/launcheritemdelegate.cpp \ - src/tools/blur/blurtool.cpp \ - src/tools/pin/pintool.cpp \ - src/tools/launcher/terminallauncher.cpp \ - src/config/visualseditor.cpp \ - src/config/extendedslider.cpp \ - src/tools/launcher/openwithprogram.cpp \ - src/tools/launcher/applaunchertool.cpp \ - src/utils/pathinfo.cpp \ - src/utils/colorutils.cpp \ - src/tools/capturecontext.cpp \ - src/widgets/capture/modificationcommand.cpp \ - src/tools/abstractpathtool.cpp \ - src/tools/abstracttwopointtool.cpp \ - src/tools/abstractactiontool.cpp \ - src/utils/globalvalues.cpp \ - src/widgets/panel/utilitypanel.cpp \ - src/widgets/capture/hovereventfilter.cpp \ - src/widgets/capture/selectionwidget.cpp \ - src/tools/pin/pinwidget.cpp \ - src/widgets/capturelauncher.cpp \ - src/tools/text/texttool.cpp \ - src/tools/text/textwidget.cpp \ - src/core/capturerequest.cpp \ - src/tools/text/textconfig.cpp \ - src/widgets/panel/sidepanelwidget.cpp - -HEADERS += src/widgets/capture/buttonhandler.h \ - src/tools/circlecount/circlecounttool.h \ - src/widgets/infowindow.h \ - src/config/configwindow.h \ - src/widgets/capture/capturewidget.h \ - src/widgets/capture/colorpicker.h \ - src/config/buttonlistview.h \ - src/config/uicoloreditor.h \ - src/config/geneneralconf.h \ - src/config/clickablelabel.h \ - src/config/filenameeditor.h \ - src/utils/filenamehandler.h \ - src/config/strftimechooserwidget.h \ - src/utils/screengrabber.h \ - src/tools/capturetool.h \ - src/widgets/capture/capturebutton.h \ - src/tools/pencil/penciltool.h \ - src/tools/undo/undotool.h \ - src/tools/redo/redotool.h \ - src/tools/arrow/arrowtool.h \ - src/tools/circle/circletool.h \ - src/tools/copy/copytool.h \ - src/tools/exit/exittool.h \ - src/tools/imgur/imguruploadertool.h \ - src/tools/line/linetool.h \ - src/tools/marker/markertool.h \ - src/tools/move/movetool.h \ - src/tools/rectangle/rectangletool.h \ - src/tools/save/savetool.h \ - src/tools/selection/selectiontool.h \ - src/tools/sizeindicator/sizeindicatortool.h \ - src/tools/toolfactory.h \ - src/utils/confighandler.h \ - src/core/controller.h \ - src/utils/systemnotification.h \ - src/cli/commandlineparser.h \ - src/cli/commandoption.h \ - src/cli/commandargument.h \ - src/utils/screenshotsaver.h \ - src/tools/imgur/imguruploader.h \ - src/widgets/loadspinner.h \ - src/widgets/imagelabel.h \ - src/widgets/notificationwidget.h \ - src/widgets/capture/notifierbox.h \ - src/utils/desktopinfo.h \ - src/tools/launcher/applauncherwidget.h \ - src/utils/desktopfileparse.h \ - src/tools/launcher/launcheritemdelegate.h \ - src/tools/blur/blurtool.h \ - src/tools/pin/pintool.h \ - src/tools/launcher/terminallauncher.h \ - src/config/visualseditor.h \ - src/config/extendedslider.h \ - src/tools/launcher/openwithprogram.h \ - src/utils/pathinfo.h \ - src/tools/capturecontext.h \ - src/tools/launcher/applaunchertool.h \ - src/utils/globalvalues.h \ - src/utils/colorutils.h \ - src/widgets/capture/modificationcommand.h \ - src/tools/abstractpathtool.h \ - src/tools/abstracttwopointtool.h \ - src/tools/abstractactiontool.h \ - src/widgets/panel/utilitypanel.h \ - src/widgets/capture/hovereventfilter.h \ - src/widgets/capture/selectionwidget.h \ - src/tools/pin/pinwidget.h \ - src/widgets/capturelauncher.h \ - src/tools/text/texttool.h \ - src/tools/text/textwidget.h \ - src/core/capturerequest.h \ - src/tools/text/textconfig.h \ - src/widgets/panel/sidepanelwidget.h - -unix:!macx { - SOURCES += src/core/flameshotdbusadapter.cpp \ - src/utils/dbusutils.cpp - - HEADERS += src/core/flameshotdbusadapter.h \ - src/utils/dbusutils.h -} - -win32 { - SOURCES += src/core/globalshortcutfilter.cpp - - HEADERS += src/core/globalshortcutfilter.h -} - -RESOURCES += \ - graphics.qrc - -# installs -unix:!macx { - isEmpty(PREFIX) { - packaging { - PREFIX = /usr - } else { - PREFIX = /usr/local - } - } - - DEFINES += APP_PREFIX=\\\"$$PREFIX\\\" - - target.path = $${PREFIX}/bin/ - - qmfile.path = $${PREFIX}/share/flameshot/translations/ - qmfile.files = $${TRANSLATIONS_FILES} - - dbus.path = $${PREFIX}/share/dbus-1/interfaces/ - dbus.files = dbus/org.dharkael.Flameshot.xml - - icon.path = $${PREFIX}/share/icons/hicolor/ - icon.files = img/hicolor/* - - completion.path = $${PREFIX}/share/bash-completion/completions/ - completion.files = docs/bash-completion/flameshot - - appdata.path = $${PREFIX}/share/metainfo/ - appdata.files = docs/appdata/flameshot.appdata.xml - - desktopentry.path = $${PREFIX}/share/applications - desktopentry.files = docs/desktopEntry/package/flameshot.desktop - - servicedbus.path = $${PREFIX}/share/dbus-1/services/ - - packaging { - servicedbus.files = dbus/package/org.dharkael.Flameshot.service - } else { - servicedbus.files = dbus/make/org.dharkael.Flameshot.service - } - - INSTALLS += target \ - icon \ - desktopentry \ - qmfile \ - servicedbus \ - dbus \ - completion \ - appdata -} - -# Imgur API data -include(src/imgur.pri) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 00000000..c00af9a8 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,83 @@ +find_package( + Qt5 + CONFIG + REQUIRED + Core + Gui + Widgets + Network + Svg + DBus) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +add_executable(flameshot) + +add_subdirectory(cli) +add_subdirectory(config) +add_subdirectory(core) +add_subdirectory(utils) +add_subdirectory(widgets) +add_subdirectory(tools) + +target_sources( + flameshot + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../external/singleapplication/singleapplication.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../external/Qt-Color-Widgets/src/color_utils.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../external/Qt-Color-Widgets/src/color_wheel.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../external/Qt-Color-Widgets/include/color_wheel.hpp + ${CMAKE_CURRENT_SOURCE_DIR}/../data/graphics.qrc + main.cpp) + +target_include_directories( + flameshot + PUBLIC $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ + $ # /include/mylib +) + +target_link_libraries( + flameshot + project_warnings + project_options + Qt5::Svg + Qt5::DBus + Qt5::Network + Qt5::Widgets) + +target_compile_definitions(flameshot PRIVATE APP_PREFIX="/usr") +target_compile_definitions(flameshot PRIVATE APP_VERSION="v0.8.0") +target_compile_definitions(flameshot PRIVATE IMGUR_CLIENT_ID="313baf0c7b4d3ff") +target_compile_definitions(flameshot PRIVATE QAPPLICATION_CLASS=QApplication) diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt new file mode 100644 index 00000000..5be613ac --- /dev/null +++ b/src/cli/CMakeLists.txt @@ -0,0 +1 @@ +target_sources(flameshot PRIVATE commandlineparser.cpp commandoption.cpp commandargument.cpp) diff --git a/src/config/CMakeLists.txt b/src/config/CMakeLists.txt new file mode 100644 index 00000000..72360542 --- /dev/null +++ b/src/config/CMakeLists.txt @@ -0,0 +1,11 @@ +target_sources( + flameshot + PRIVATE buttonlistview.cpp + clickablelabel.cpp + configwindow.cpp + extendedslider.cpp + filenameeditor.cpp + geneneralconf.cpp + strftimechooserwidget.cpp + uicoloreditor.cpp + visualseditor.cpp) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt new file mode 100644 index 00000000..7afe8865 --- /dev/null +++ b/src/core/CMakeLists.txt @@ -0,0 +1,5 @@ + +# Required to generate MOC +target_sources(flameshot PRIVATE controller.h flameshotdbusadapter.h) + +target_sources(flameshot PRIVATE capturerequest.cpp controller.cpp flameshotdbusadapter.cpp) diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt new file mode 100644 index 00000000..b42d7c20 --- /dev/null +++ b/src/tools/CMakeLists.txt @@ -0,0 +1,60 @@ +target_sources(flameshot PRIVATE arrow/arrowtool.h arrow/arrowtool.cpp) +target_sources(flameshot PRIVATE blur/blurtool.h blur/blurtool.cpp) +target_sources(flameshot PRIVATE circle/circletool.h circle/circletool.cpp) +target_sources(flameshot PRIVATE circlecount/circlecounttool.h circlecount/circlecounttool.cpp) +target_sources(flameshot PRIVATE copy/copytool.h copy/copytool.cpp) +target_sources(flameshot PRIVATE exit/exittool.h exit/exittool.cpp) +target_sources( + flameshot + PRIVATE imgur/imguruploader.h + imgur/imguruploadertool.h + imgur/imguruploader.cpp + imgur/imguruploadertool.cpp) +target_sources( + flameshot + PRIVATE launcher/applaunchertool.h + launcher/applauncherwidget.h + launcher/launcheritemdelegate.h + launcher/terminallauncher.h + launcher/applaunchertool.cpp + launcher/applauncherwidget.cpp + launcher/launcheritemdelegate.cpp + launcher/openwithprogram.cpp + launcher/terminallauncher.cpp) +target_sources(flameshot PRIVATE line/linetool.h line/linetool.cpp) +target_sources(flameshot PRIVATE marker/markertool.h marker/markertool.cpp) +target_sources(flameshot PRIVATE move/movetool.h move/movetool.cpp) +target_sources(flameshot PRIVATE pencil/penciltool.h pencil/penciltool.cpp) +target_sources( + flameshot + PRIVATE pin/pintool.h + pin/pinwidget.h + pin/pintool.cpp + pin/pinwidget.cpp) +target_sources(flameshot PRIVATE rectangle/rectangletool.h rectangle/rectangletool.cpp) +target_sources(flameshot PRIVATE redo/redotool.h redo/redotool.cpp) +target_sources(flameshot PRIVATE save/savetool.h save/savetool.cpp) +target_sources(flameshot PRIVATE selection/selectiontool.h selection/selectiontool.cpp) +target_sources(flameshot PRIVATE sizeindicator/sizeindicatortool.h sizeindicator/sizeindicatortool.cpp) +target_sources( + flameshot + PRIVATE text/textconfig.h + text/texttool.h + text/textwidget.h + text/textconfig.cpp + text/texttool.cpp + text/textwidget.cpp) +target_sources(flameshot PRIVATE undo/undotool.h undo/undotool.cpp) + +target_sources( + flameshot + PRIVATE abstractactiontool.cpp + abstractpathtool.cpp + abstracttwopointtool.cpp + capturecontext.cpp + toolfactory.cpp + abstractactiontool.h + abstractpathtool.h + abstracttwopointtool.h + capturetool.h + toolfactory.h) diff --git a/src/utils/CMakeLists.txt b/src/utils/CMakeLists.txt new file mode 100644 index 00000000..048d09ab --- /dev/null +++ b/src/utils/CMakeLists.txt @@ -0,0 +1,21 @@ +# Required to generate MOC +target_sources( + flameshot + PRIVATE dbusutils.h + filenamehandler.h + screengrabber.h + systemnotification.h) + +target_sources( + flameshot + PRIVATE filenamehandler.cpp + screengrabber.cpp + confighandler.cpp + systemnotification.cpp + screenshotsaver.cpp + dbusutils.cpp + globalvalues.cpp + desktopfileparse.cpp + desktopinfo.cpp + pathinfo.cpp + colorutils.cpp) diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt new file mode 100644 index 00000000..3226b2ee --- /dev/null +++ b/src/widgets/CMakeLists.txt @@ -0,0 +1,19 @@ +add_subdirectory(panel) +add_subdirectory(capture) + +# Required to generate MOC +target_sources( + flameshot + PRIVATE capturelauncher.h + imagelabel.h + infowindow.h + loadspinner.h + notificationwidget.h) + +target_sources( + flameshot + PRIVATE capturelauncher.cpp + imagelabel.cpp + infowindow.cpp + loadspinner.cpp + notificationwidget.cpp) diff --git a/src/widgets/capture/CMakeLists.txt b/src/widgets/capture/CMakeLists.txt new file mode 100644 index 00000000..24945708 --- /dev/null +++ b/src/widgets/capture/CMakeLists.txt @@ -0,0 +1,21 @@ +# Required to generate MOC +target_sources( + flameshot + PRIVATE buttonhandler.h + capturebutton.h + capturewidget.h + colorpicker.h + hovereventfilter.h + selectionwidget.h + notifierbox.h) + +target_sources( + flameshot + PRIVATE buttonhandler.cpp + capturebutton.cpp + capturewidget.cpp + colorpicker.cpp + hovereventfilter.cpp + modificationcommand.cpp + notifierbox.cpp + selectionwidget.cpp) diff --git a/src/widgets/infowindow.cpp b/src/widgets/infowindow.cpp index fe3517d0..c3698624 100644 --- a/src/widgets/infowindow.cpp +++ b/src/widgets/infowindow.cpp @@ -131,6 +131,7 @@ void InfoWindow::initLabels() { QLabel *versionTitleLabel = new QLabel(tr("Version"), this); versionTitleLabel->setAlignment(Qt::AlignHCenter); m_layout->addWidget(versionTitleLabel); + QString versionMsg = "Flameshot " + QStringLiteral(APP_VERSION) + "\nCompiled with Qt " + QT_VERSION_STR; QLabel *versionLabel = new QLabel(versionMsg, this); diff --git a/src/widgets/panel/CMakeLists.txt b/src/widgets/panel/CMakeLists.txt new file mode 100644 index 00000000..eeb4de27 --- /dev/null +++ b/src/widgets/panel/CMakeLists.txt @@ -0,0 +1,4 @@ +# Required to generate MOC +target_sources(flameshot PRIVATE sidepanelwidget.h utilitypanel.h) + +target_sources(flameshot PRIVATE sidepanelwidget.cpp utilitypanel.cpp)