1
0
mirror of https://github.com/arsenetar/dupeguru.git synced 2026-03-12 19:41:38 +00:00

Compare commits

...

13 Commits

Author SHA1 Message Date
0f845ee67a Update min python version in Makefile 2022-03-20 01:23:01 -05:00
d40e32a143 Update transifex config & pull latest updates
- Update transifex configuration to new format
- Pull translation updates
2022-03-19 20:21:14 -05:00
1bc206e62d Bump version to 4.2.1 2022-03-19 19:02:41 -05:00
106a0feaba Add sponsor information 2022-03-19 17:46:12 -05:00
984e0c4094 Fix help path for local files and some help doc updates 2022-03-19 17:43:11 -05:00
9321e811d7 Enforce minimum Windows version ref #983 2022-03-19 17:01:54 -05:00
a64fcbfb5c Fix deprecation warning from sqlite 2022-03-19 17:01:53 -05:00
cff07a12d6 Black formatter changes 2022-03-19 17:01:53 -05:00
Alfonso Montero
b9c7832c4a Apply @arsenetar's proposed change to fix for errors on window change event. Solves #937. (#980) 2022-03-15 20:47:48 -05:00
b9dfeac2f3 Drop Python 3.6 Support 2022-03-15 05:10:41 -05:00
efc99eee96 Merge pull request #978 from glubsy/fix_zoom_scrollbar
Fix image viewer scrollbar zoom
2022-03-14 20:43:40 -05:00
glubsy
ff7733bb73 Fix image viewer
When zooming in or out, the value computed might be a float instead
of an int, which is what the QScrollBar expect for its setValue method.
Simply casting to int should be enough here.
2022-03-12 22:36:17 +01:00
4b2fbe87ea Default to English on unsupported system language Fix #976
- Add check for supported language to system locale detection
- Fall-back to English when not a supported locale
2022-03-12 04:36:13 -06:00
23 changed files with 139 additions and 76 deletions

13
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,13 @@
# These are supported funding model platforms
github: arsenetar
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@@ -45,20 +45,20 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: [3.6, 3.7, 3.8, 3.9, '3.10']
python-version: [3.7, 3.8, 3.9, '3.10']
exclude:
- os: macos-latest
python-version: 3.6
- os: macos-latest
python-version: 3.7
- os: macos-latest
python-version: 3.8
- os: windows-latest
python-version: 3.6
- os: macos-latest
python-version: 3.9
- os: windows-latest
python-version: 3.7
- os: windows-latest
python-version: 3.8
- os: windows-latest
python-version: 3.9
steps:
- uses: actions/checkout@v2

View File

@@ -1 +1 @@
sonar.python.version=3.6, 3.7, 3.8, 3.9, 3.10
sonar.python.version=3.7, 3.8, 3.9, 3.10

View File

@@ -1,26 +1,27 @@
[main]
host = https://www.transifex.com
[dupeguru-1.core]
file_filter = locale/<lang>/LC_MESSAGES/core.po
source_file = locale/core.pot
source_lang = en
type = PO
[dupeguru-1.columns]
[o:voltaicideas:p:dupeguru-1:r:columns]
file_filter = locale/<lang>/LC_MESSAGES/columns.po
source_file = locale/columns.pot
source_lang = en
type = PO
[dupeguru-1.ui]
[o:voltaicideas:p:dupeguru-1:r:core]
file_filter = locale/<lang>/LC_MESSAGES/core.po
source_file = locale/core.pot
source_lang = en
type = PO
[o:voltaicideas:p:dupeguru-1:r:qtlib]
file_filter = qtlib/locale/<lang>/LC_MESSAGES/qtlib.po
source_file = qtlib/locale/qtlib.pot
source_lang = en
type = PO
[o:voltaicideas:p:dupeguru-1:r:ui]
file_filter = locale/<lang>/LC_MESSAGES/ui.po
source_file = locale/ui.pot
source_lang = en
type = PO
[dupeguru-1.qtlib]
file_filter = qtlib/locale/<lang>/LC_MESSAGES/qtlib.po
source_file = qtlib/locale/qtlib.pot
source_lang = en
type = PO

View File

@@ -1,7 +1,7 @@
PYTHON ?= python3
PYTHON_VERSION_MINOR := $(shell ${PYTHON} -c "import sys; print(sys.version_info.minor)")
PYRCC5 ?= pyrcc5
REQ_MINOR_VERSION = 6
REQ_MINOR_VERSION = 7
PREFIX ?= /usr/local
# Window compatability via Msys2

View File

@@ -36,7 +36,7 @@ For windows instructions see the [Windows Instructions](Windows.md).
For macos instructions (qt version) see the [macOS Instructions](macos.md).
### Prerequisites
* [Python 3.6+][python]
* [Python 3.7+][python]
* PyQt5
### System Setup

View File

@@ -2,7 +2,7 @@
### Prerequisites
- [Python 3.6+][python]
- [Python 3.7+][python]
- [Visual Studio 2019][vs] or [Visual Studio Build Tools 2019][vsBuildTools] with the Windows 10 SDK
- [nsis][nsis] (for installer creation)
- [msys2][msys2] (for using makefile method)
@@ -16,7 +16,7 @@ After installing python it is recommended to update setuptools before compiling
More details on setting up python for compiling packages on windows can be found on the [python wiki][pythonWindowsCompilers] Take note of the required vc++ versions.
### With build.py (preferred)
To build with a different python version 3.6 vs 3.8 or 32 bit vs 64 bit specify that version instead of -3.8 to the `py` command below. If you want to build additional versions while keeping all virtual environments setup use a different location for each virtual environment.
To build with a different python version 3.7 vs 3.8 or 32 bit vs 64 bit specify that version instead of -3.8 to the `py` command below. If you want to build additional versions while keeping all virtual environments setup use a different location for each virtual environment.
$ cd <dupeGuru directory>
$ py -3.8 -m venv .\env

View File

@@ -150,8 +150,8 @@ def build_normal():
def main():
if sys.version_info < (3, 6):
sys.exit("Python < 3.6 is unsupported.")
if sys.version_info < (3, 7):
sys.exit("Python < 3.7 is unsupported.")
options = parse_args()
if options.clean and Path("build").exists():
shutil.rmtree("build")

View File

@@ -1,2 +1,2 @@
__version__ = "4.2.0"
__version__ = "4.2.1"
__appname__ = "dupeGuru"

View File

@@ -12,7 +12,7 @@ a community around this project.
So, whatever your skills, if you're interested in contributing to dupeGuru, please do so. Normally,
this documentation should be enough to get you started, but if it isn't, then **please**,
`let me know`_ because it's a problem that I'm committed to fix. If there's any situation where you'd
open a discussion at https://github.com/arsenetar/dupeguru/discussions. If there's any situation where you'd
wish to contribute but some doubt you're having prevent you from going forward, please contact me.
I'd much prefer to spend the time figuring out with you whether (and how) you can contribute than
taking the chance of missing that opportunity.
@@ -82,10 +82,9 @@ agree on what should be added to the documentation.
dupeGuru. For more information about how to do that, you can refer to the `translator guide`_.
.. _been open source: https://www.hardcoded.net/articles/free-as-in-speech-fair-as-in-trade
.. _let me know: mailto:hsoft@hardcoded.net
.. _Source code repository: https://github.com/arsenetar/dupeguru
.. _Issue Tracker: https://github.com/hsoft/arsenetar/issues
.. _Issue labels meaning: https://github.com/hsoft/arsenetar/wiki/issue-labels
.. _Issue Tracker: https://github.com/arsenetar/issues
.. _Issue labels meaning: https://github.com/arsenetar/wiki/issue-labels
.. _Sphinx: http://sphinx-doc.org/
.. _reST: http://en.wikipedia.org/wiki/ReStructuredText
.. _translator guide: https://github.com/hsoft/arsenetar/wiki/Translator-Guide
.. _translator guide: https://github.com/arsenetar/wiki/Translator-Guide

View File

@@ -45,7 +45,7 @@ class _ActualThread(threading.Thread):
self._lock = threading.Lock()
self._run = True
self.lastrowid = -1
self.setDaemon(True)
self.daemon = True
self.start()
def _query(self, query):

View File

@@ -150,7 +150,9 @@ def install_gettext_trans_under_qt(base_folder, lang=None):
if not lang:
lang = str(QLocale.system().name())[:2]
localename = get_locale_name(lang)
if localename is not None:
if localename is None:
lang = "en"
localename = get_locale_name(lang)
try:
locale.setlocale(locale.LC_ALL, localename)
except locale.Error:

View File

@@ -1,9 +1,9 @@
# Translators:
# Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48) <admin@mnh48.moe>, 2021
# Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48) <admin@mnh48.moe>, 2022
#
msgid ""
msgstr ""
"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48) <admin@mnh48.moe>, 2021\n"
"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat Yasuyoshi (MNH48) <admin@mnh48.moe>, 2022\n"
"Language-Team: Malay (https://www.transifex.com/voltaicideas/teams/116153/ms/)\n"
"Language: ms\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -987,4 +987,4 @@ msgstr "Cache dikosongkan."
#: qt\preferences_dialog.py:173
msgid "Use dark style"
msgstr ""
msgstr "Guna gaya gelap"

View File

@@ -1,10 +1,10 @@
# Translators:
# Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2021
# Emin Tufan Çetin <etcetin@gmail.com>, 2021
# Emin Tufan Çetin <etcetin@gmail.com>, 2022
#
msgid ""
msgstr ""
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>, 2021\n"
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>, 2022\n"
"Language-Team: Turkish (https://www.transifex.com/voltaicideas/teams/116153/tr/)\n"
"Language: tr\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -983,4 +983,4 @@ msgstr "Önbellek temizlendi."
#: qt\preferences_dialog.py:173
msgid "Use dark style"
msgstr ""
msgstr "Karanlık biçem kullan"

View File

@@ -1,6 +1,9 @@
# Translators:
# 太子 VC <taiziccf@gmail.com>, 2021
#
msgid ""
msgstr ""
"Last-Translator: 太子 VC <taiziccf@gmail.com>, 2021\n"
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/voltaicideas/teams/116153/zh_TW/)\n"
"Language: zh_TW\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -9,53 +12,53 @@ msgstr ""
#: qt/app.py:81
msgid "Quit"
msgstr ""
msgstr "退出"
#: qt/app.py:82 qt/preferences_dialog.py:116
#: cocoa/en.lproj/Localizable.strings:0
msgid "Options"
msgstr ""
msgstr "选项"
#: qt/app.py:83 qt/ignore_list_dialog.py:32
#: cocoa/en.lproj/Localizable.strings:0
msgid "Ignore List"
msgstr ""
msgstr "忽略列表"
#: qt/app.py:84 qt/app.py:179 cocoa/en.lproj/Localizable.strings:0
msgid "Clear Picture Cache"
msgstr ""
msgstr "清空图片缓存"
#: qt/app.py:85 cocoa/en.lproj/Localizable.strings:0
msgid "dupeGuru Help"
msgstr ""
msgstr "dupeGuru 帮助"
#: qt/app.py:86 cocoa/en.lproj/Localizable.strings:0
msgid "About dupeGuru"
msgstr ""
msgstr "关于 dupeGuru"
#: qt/app.py:87
msgid "Open Debug Log"
msgstr ""
msgstr "打开调试记录"
#: qt/app.py:180 cocoa/en.lproj/Localizable.strings:0
msgid "Do you really want to remove all your cached picture analysis?"
msgstr ""
msgstr "确定要移除所有缓存分析图片?"
#: qt/app.py:184
msgid "Picture cache cleared."
msgstr ""
msgstr "图片缓存已清空。"
#: qt/app.py:251
msgid "{} file (*.{})"
msgstr ""
msgstr "{} 文件 (*.{})"
#: qt/deletion_options.py:30 cocoa/en.lproj/Localizable.strings:0
msgid "Deletion Options"
msgstr ""
msgstr "删除选项"
#: qt/deletion_options.py:35 cocoa/en.lproj/Localizable.strings:0
msgid "Link deleted files"
msgstr ""
msgstr "链接已删除的文件"
#: qt/deletion_options.py:37 cocoa/en.lproj/Localizable.strings:0
msgid ""
@@ -91,20 +94,20 @@ msgstr ""
#: qt/deletion_options.py:60 cocoa/en.lproj/Localizable.strings:0
msgid "Cancel"
msgstr ""
msgstr "取消"
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Attribute"
msgstr ""
msgstr "属性"
#: qt/details_table.py:16 cocoa/en.lproj/Localizable.strings:0
msgid "Selected"
msgstr ""
msgstr "已选择"
#: qt/details_table.py:16 qt/directories_model.py:24
#: cocoa/en.lproj/Localizable.strings:0
msgid "Reference"
msgstr ""
msgstr "源文件"
#: qt/directories_dialog.py:64 cocoa/en.lproj/Localizable.strings:0
msgid "Load Results..."
@@ -908,3 +911,43 @@ msgstr ""
#: qt\preferences_dialog.py:286
msgid "Display"
msgstr ""
#: qt\se\preferences_dialog.py:70
msgid "Partially hash files bigger than"
msgstr ""
#: qt\se\preferences_dialog.py:80
msgid "MB"
msgstr ""
#: qt\preferences_dialog.py:163
msgid "Use native OS dialogs"
msgstr ""
#: qt\preferences_dialog.py:166
msgid ""
"For actions such as file/folder selection use the OS native dialogs.\n"
"Some native dialogs have limited functionality."
msgstr ""
#: qt\se\preferences_dialog.py:68
msgid "Ignore files larger than"
msgstr ""
#: qt\app.py:135 qt\app.py:293
msgid "Clear Cache"
msgstr ""
#: qt\app.py:294
msgid ""
"Do you really want to clear the cache? This will remove all cached file "
"hashes and picture analysis."
msgstr ""
#: qt\app.py:299
msgid "Cache cleared."
msgstr ""
#: qt\preferences_dialog.py:173
msgid "Use dark style"
msgstr ""

View File

@@ -2,7 +2,7 @@
### Prerequisites
- [Python 3.6+][python]
- [Python 3.7+][python]
- [Xcode 12.3][xcode] or just Xcode command line tools (older versions can be used if not interested in arm macs)
- [Homebrew][homebrew]
- [qt5](https://www.qt.io/)
@@ -12,7 +12,7 @@
2. Install [Homebrew][homebrew], if not on the path after install (arm based Macs) create `~/.zshrc`
with `export PATH="/opt/homebrew/bin:$PATH"`. Will need to reload terminal or source the file to take
effect.
3. Install qt5 with `brew`. If you are using a version of macos without system python 3.6+ then you will
3. Install qt5 with `brew`. If you are using a version of macos without system python 3.7+ then you will
also need to install that via brew or with pyenv.
$ brew install qt5

View File

@@ -10,7 +10,7 @@ Vcs-Git: https://github.com/arsenetar/dupeguru.git
Package: {pkgname}
Architecture: {arch}
Depends: ${shlibs:Depends}, python3 (>=3.6), python3-pyqt5, python3-mutagen
Depends: ${shlibs:Depends}, python3 (>=3.7), python3-pyqt5, python3-mutagen
Provides: dupeguru-se, dupeguru-me, dupeguru-pe
Replaces: dupeguru-se, dupeguru-me, dupeguru-pe
Conflicts: dupeguru-se, dupeguru-me, dupeguru-pe

View File

@@ -1049,13 +1049,13 @@ class ScrollAreaImageViewer(QScrollArea):
def adjustScrollBarsScaled(self, delta):
"""After scaling with the mouse, update relative to mouse position."""
self._horizontalScrollBar.setValue(self._horizontalScrollBar.value() + delta.x())
self._verticalScrollBar.setValue(self._verticalScrollBar.value() + delta.y())
self._horizontalScrollBar.setValue(int(self._horizontalScrollBar.value() + delta.x()))
self._verticalScrollBar.setValue(int(self._verticalScrollBar.value() + delta.y()))
def adjustScrollBarsAuto(self):
"""After panning, update accordingly."""
self.horizontalScrollBar().setValue(self.horizontalScrollBar().value() - self._mousePanningDelta.x())
self.verticalScrollBar().setValue(self.verticalScrollBar().value() - self._mousePanningDelta.y())
self.horizontalScrollBar().setValue(int(self.horizontalScrollBar().value() - self._mousePanningDelta.x()))
self.verticalScrollBar().setValue(int(self.verticalScrollBar().value() - self._mousePanningDelta.y()))
def adjustScrollBarCentered(self):
"""Just center in the middle."""

View File

@@ -14,11 +14,11 @@ if op.exists(__file__):
else:
# Should be a frozen environment
if ISOSX:
BASE_PATH = op.abspath(op.join(op.dirname(__file__), '..', '..', 'Resources'))
BASE_PATH = op.abspath(op.join(op.dirname(__file__), "..", "..", "Resources"))
else:
# For others our base path is ''.
BASE_PATH = ""
HELP_PATH = op.join(BASE_PATH, "help")
HELP_PATH = op.join(BASE_PATH, "help", "en")
if ISWINDOWS:
INITIAL_FOLDER_IN_DIALOGS = "C:\\"

View File

@@ -221,7 +221,7 @@ class TabWindow(QMainWindow):
super().showEvent(event)
def changeEvent(self, event):
if event.type() == QEvent.Type.WindowStateChange and not self.isMaximized():
if event.type() == QEvent.WindowStateChange and not self.isMaximized():
move_to_screen_center(self)
super().changeEvent(event)

View File

@@ -1,11 +1,10 @@
# Translators:
# Ahmet Haydar Işık <itsahmthydr@gmail.com>, 2021
# Emin Tufan Çetin <etcetin@gmail.com>, 2021
# Andrew Senetar <arsenetar@gmail.com>, 2022
# Emin Tufan Çetin <etcetin@gmail.com>, 2022
#
msgid ""
msgstr ""
"Last-Translator: Andrew Senetar <arsenetar@gmail.com>, 2022\n"
"Last-Translator: Emin Tufan Çetin <etcetin@gmail.com>, 2022\n"
"Language-Team: Turkish (https://www.transifex.com/voltaicideas/teams/116153/tr/)\n"
"Language: tr\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -100,7 +99,7 @@ msgstr "Korece"
#: qtlib\preferences.py:34
msgid "Malay"
msgstr "Malay dili"
msgstr "Malayca"
#: qtlib\preferences.py:35
msgid "Dutch"

View File

@@ -18,16 +18,16 @@ classifiers =
Operating System :: MacOS :: MacOS X
Operating System :: Microsoft :: Windows
Operating System :: POSIX
Programming Language :: Python :: 3.6
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3 :: Only
Topic :: Desktop Environment :: File Managers
[options]
packages = find:
python_requires = >=3.6
python_requires = >=3.7
install_requires =
Send2Trash>=1.3.0
polib>=1.1.0

View File

@@ -12,6 +12,8 @@ Unicode true
SetCompressor /SOLID lzma
; General Headers
!include "FileFunc.nsh"
!include "WinVer.nsh"
!include "LogicLib.nsh"
;==============================================================================
; Configuration Defines
@@ -279,6 +281,10 @@ SectionEnd
;==============================================================================
Function .onInit
${IfNot} ${AtLeastWin7}
MessageBox MB_OK "Windows 7 and above required"
Quit
${EndIf}
!if ${BITS} == "64"
SetRegView 64
!else