rummage 4.25__tar.gz → 4.26__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {rummage-4.25 → rummage-4.26}/PKG-INFO +1 -1
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/about/changelog.md +7 -0
- {rummage-4.25 → rummage-4.26}/gui.fbp +10 -7
- {rummage-4.25 → rummage-4.26}/pyproject.toml +1 -1
- {rummage-4.25 → rummage-4.26}/rummage/lib/__meta__.py +1 -1
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/result_lists.py +13 -4
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/about/changelog.html +7 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/about/contributing.html +2 -2
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/usage.html +2 -2
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/rummage_dialog.py +31 -5
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/gui.py +4 -4
- {rummage-4.25 → rummage-4.26}/rummage/lib/rumcore/__init__.py +15 -28
- {rummage-4.25 → rummage-4.26}/.coveragerc +0 -0
- {rummage-4.25 → rummage-4.26}/.gitignore +0 -0
- {rummage-4.25 → rummage-4.26}/LICENSE.md +0 -0
- {rummage-4.25 → rummage-4.26}/README.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/.snippets/abbr.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/.snippets/links.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/.snippets/refs.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/about/contributing.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/about/license.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/extras.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/chain_button.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/chain_mode.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/chains.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/content_tab.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/file_pattern.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/files_tab.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/html_export.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/limit_search_panel.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/load_search.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/logo.svg +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/plugin_input.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/plugin_toggle.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/preview.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/regex_buttons.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/regex_tester.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/rummage.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/rummage.svg +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/save_search.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/search_replace_inputs.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/search_replace_panel.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/search_tab.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/settings_backup.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/settings_editor.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/settings_encoding.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/settings_export.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/settings_general.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/settings_history.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/settings_import.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/settings_notify.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/settings_search.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/thunar-basic.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/thunar-conditions.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/images/thunar-custom.png +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/index.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/installation.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/preferences.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/search.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/sitemap.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/src/markdown/usage.md +0 -0
- {rummage-4.25 → rummage-4.26}/docs/theme/announce.html +0 -0
- {rummage-4.25 → rummage-4.26}/docs/theme/assets/pymdownx-extras/extra-95634471d6.css +0 -0
- {rummage-4.25 → rummage-4.26}/docs/theme/assets/pymdownx-extras/extra-loader-Ccztcqfq.js +0 -0
- {rummage-4.25 → rummage-4.26}/docs/theme/main.html +0 -0
- {rummage-4.25 → rummage-4.26}/docs/theme/nav.html +0 -0
- {rummage-4.25 → rummage-4.26}/docs/theme/sitemap.html +0 -0
- {rummage-4.25 → rummage-4.26}/hatch_build.py +0 -0
- {rummage-4.25 → rummage-4.26}/requirements/docs.txt +0 -0
- {rummage-4.25 → rummage-4.26}/requirements/extras.txt +0 -0
- {rummage-4.25 → rummage-4.26}/requirements/lint.txt +0 -0
- {rummage-4.25 → rummage-4.26}/requirements/project.txt +0 -0
- {rummage-4.25 → rummage-4.26}/requirements/setup.txt +0 -0
- {rummage-4.25 → rummage-4.26}/requirements/test-project.txt +0 -0
- {rummage-4.25 → rummage-4.26}/requirements/test.txt +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/__main__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/actions/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/actions/checksum/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/actions/checksum/sum_hashes.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/actions/checksum/tiger.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/actions/checksum/whirlpool.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/actions/export_csv.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/actions/export_html.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/actions/fileops.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/actions/sanitize_json.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/actions/updates.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/app/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/app/custom_app.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/app/platform_window_focus.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/app/rummage_app.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/autocomplete_combo.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/collapsible_pane.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/custom_statusbar.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/date_picker.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/dock_icon.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/dynamic_lists.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/encoding_list.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/file_picker.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/load_search_list.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/pick_button.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/search_chain_list.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/search_error_list.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/time_picker.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/controls/webview.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/arrow_down.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/arrow_left.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/arrow_right.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/arrow_up.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/binary.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/doc.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/404.html +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/about/license.html +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/css/theme.css +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/extras.html +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/chain_button.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/chain_mode.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/chains.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/content_tab.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/file_pattern.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/files_tab.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/html_export.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/limit_search_panel.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/load_search.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/logo.svg +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/plugin_input.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/plugin_toggle.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/preview.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/regex_buttons.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/regex_tester.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/rummage.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/rummage.svg +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/save_search.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/search_replace_inputs.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/search_replace_panel.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/search_tab.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_backup.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_editor.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_encoding.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_export.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_general.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_history.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_import.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_notify.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/settings_search.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/thunar-basic.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/thunar-conditions.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/images/thunar-custom.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/index.html +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/installation.html +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/js/theme.js +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/preferences.html +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/search.html +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/docs/sitemap.html +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/error.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/glass.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/results.css +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage.icns +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage.ico +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage_1024.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage_128.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage_16.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage_256.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage_32.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage_40.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage_48.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage_512.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/rummage_mac.png +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/data/sorttable.js +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/checksum_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/column_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/delete_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/edit_search_chain_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/error_text_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/export_settings_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/file_ext_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/generic_dialogs.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/html_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/import_settings_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/load_search_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/msg_dialogs.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/overwrite_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/regex_test_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/save_search_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/search_chain_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/search_error_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/settings_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/dialogs/support_info_dialog.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/localization/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/localization/locale/en_US/LC_MESSAGES/rummage.po +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/localization/locale/ru_RU/LC_MESSAGES/rummage.po +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/notify/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/notify/notify_linux.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/notify/notify_osx.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/notify/notify_windows.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/notify/util.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/settings/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/util/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/util/colors.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/util/images.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/gui/util/png.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/rumcore/text_decode.py +0 -0
- {rummage-4.25 → rummage-4.26}/rummage/lib/rumcore/util.py +0 -0
- {rummage-4.25 → rummage-4.26}/tests/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/tests/test_rumcore.py +0 -0
- {rummage-4.25 → rummage-4.26}/tests/test_text_decode.py +0 -0
- {rummage-4.25 → rummage-4.26}/tests/test_versions.py +0 -0
- {rummage-4.25 → rummage-4.26}/tests/util.py +0 -0
- {rummage-4.25 → rummage-4.26}/tools/__init__.py +0 -0
- {rummage-4.25 → rummage-4.26}/tools/gen_docs.py +0 -0
- {rummage-4.25 → rummage-4.26}/tools/gui_patch.py +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.26
|
|
4
|
+
|
|
5
|
+
- **NEW**: Show file sizes in proper, various increments: bytes, KB, MB, and GB.
|
|
6
|
+
- **NEW**: Add control to select file size unit types in limiter panel.
|
|
7
|
+
- **FIX**: Fix issue where directory picker for target folder to search would not start with the current, specified
|
|
8
|
+
directory, even when it is valid.
|
|
9
|
+
|
|
3
10
|
## 4.25
|
|
4
11
|
|
|
5
12
|
- **NEW**: Require `wcmatch` 11.0+.
|
|
@@ -3106,9 +3106,9 @@
|
|
|
3106
3106
|
</object>
|
|
3107
3107
|
<object class="sizeritem" expanded="false">
|
|
3108
3108
|
<property name="border">5</property>
|
|
3109
|
-
<property name="flag">
|
|
3109
|
+
<property name="flag">wxALL</property>
|
|
3110
3110
|
<property name="proportion">0</property>
|
|
3111
|
-
<object class="
|
|
3111
|
+
<object class="wxChoice" expanded="false">
|
|
3112
3112
|
<property name="BottomDockable">1</property>
|
|
3113
3113
|
<property name="LeftDockable">1</property>
|
|
3114
3114
|
<property name="RightDockable">1</property>
|
|
@@ -3122,6 +3122,7 @@
|
|
|
3122
3122
|
<property name="caption"></property>
|
|
3123
3123
|
<property name="caption_visible">1</property>
|
|
3124
3124
|
<property name="center_pane">0</property>
|
|
3125
|
+
<property name="choices">"bytes" "KB" "MB" "GB" "TB"</property>
|
|
3125
3126
|
<property name="close_button">1</property>
|
|
3126
3127
|
<property name="context_help"></property>
|
|
3127
3128
|
<property name="context_menu">1</property>
|
|
@@ -3137,8 +3138,6 @@
|
|
|
3137
3138
|
<property name="gripper">0</property>
|
|
3138
3139
|
<property name="hidden">0</property>
|
|
3139
3140
|
<property name="id">wxID_ANY</property>
|
|
3140
|
-
<property name="label">KB</property>
|
|
3141
|
-
<property name="markup">0</property>
|
|
3142
3141
|
<property name="max_size"></property>
|
|
3143
3142
|
<property name="maximize_button">0</property>
|
|
3144
3143
|
<property name="maximum_size"></property>
|
|
@@ -3146,7 +3145,7 @@
|
|
|
3146
3145
|
<property name="minimize_button">0</property>
|
|
3147
3146
|
<property name="minimum_size"></property>
|
|
3148
3147
|
<property name="moveable">1</property>
|
|
3149
|
-
<property name="name">
|
|
3148
|
+
<property name="name">m_size_type_choice</property>
|
|
3150
3149
|
<property name="pane_border">1</property>
|
|
3151
3150
|
<property name="pane_position"></property>
|
|
3152
3151
|
<property name="pane_size"></property>
|
|
@@ -3154,16 +3153,20 @@
|
|
|
3154
3153
|
<property name="pin_button">1</property>
|
|
3155
3154
|
<property name="pos"></property>
|
|
3156
3155
|
<property name="resize">Resizable</property>
|
|
3156
|
+
<property name="selection">1</property>
|
|
3157
3157
|
<property name="show">1</property>
|
|
3158
3158
|
<property name="size"></property>
|
|
3159
3159
|
<property name="style"></property>
|
|
3160
|
-
<property name="subclass"
|
|
3160
|
+
<property name="subclass">; ; forward_declare</property>
|
|
3161
3161
|
<property name="toolbar_pane">0</property>
|
|
3162
3162
|
<property name="tooltip"></property>
|
|
3163
|
+
<property name="validator_data_type"></property>
|
|
3164
|
+
<property name="validator_style">wxFILTER_NONE</property>
|
|
3165
|
+
<property name="validator_type">wxDefaultValidator</property>
|
|
3166
|
+
<property name="validator_variable"></property>
|
|
3163
3167
|
<property name="window_extra_style"></property>
|
|
3164
3168
|
<property name="window_name"></property>
|
|
3165
3169
|
<property name="window_style"></property>
|
|
3166
|
-
<property name="wrap">-1</property>
|
|
3167
3170
|
</object>
|
|
3168
3171
|
</object>
|
|
3169
3172
|
</object>
|
|
@@ -189,7 +189,7 @@ def parse_version(ver):
|
|
|
189
189
|
|
|
190
190
|
|
|
191
191
|
# (major, minor, micro, release type, pre-release build, post-release build, development-release)
|
|
192
|
-
__version_info__ = Version(4,
|
|
192
|
+
__version_info__ = Version(4, 26, 0, 'final')
|
|
193
193
|
__version__ = __version_info__._get_canonical()
|
|
194
194
|
__app__ = "Rummage"
|
|
195
195
|
__status__ = __version_info__[3]
|
|
@@ -20,7 +20,6 @@ IN THE SOFTWARE.
|
|
|
20
20
|
"""
|
|
21
21
|
import time
|
|
22
22
|
import wx
|
|
23
|
-
import decimal
|
|
24
23
|
import os
|
|
25
24
|
import functools
|
|
26
25
|
from .dynamic_lists import DynamicList, USE_SAMPLE_SIZE
|
|
@@ -324,7 +323,7 @@ class ResultFileList(CommonOperationsMixin, DynamicList):
|
|
|
324
323
|
os.path.basename(obj.name),
|
|
325
324
|
0,
|
|
326
325
|
obj.ext,
|
|
327
|
-
|
|
326
|
+
obj.size,
|
|
328
327
|
os.path.dirname(obj.name),
|
|
329
328
|
'',
|
|
330
329
|
obj.modified,
|
|
@@ -342,7 +341,7 @@ class ResultFileList(CommonOperationsMixin, DynamicList):
|
|
|
342
341
|
os.path.basename(obj.info.name),
|
|
343
342
|
1,
|
|
344
343
|
obj.info.ext,
|
|
345
|
-
|
|
344
|
+
obj.info.size,
|
|
346
345
|
os.path.dirname(obj.info.name),
|
|
347
346
|
obj.info.encoding,
|
|
348
347
|
obj.info.modified,
|
|
@@ -374,7 +373,17 @@ class ResultFileList(CommonOperationsMixin, DynamicList):
|
|
|
374
373
|
if not absolute:
|
|
375
374
|
item = self.itemIndexMap[item]
|
|
376
375
|
if real == FILE_SIZE:
|
|
377
|
-
|
|
376
|
+
s = self.itemDataMap[item][FILE_SIZE]
|
|
377
|
+
if s < 1e3:
|
|
378
|
+
return f"{s:d} bytes"
|
|
379
|
+
elif s < 1e6:
|
|
380
|
+
return f'{s / 1e3:.2f} KB'
|
|
381
|
+
elif s < 1e9:
|
|
382
|
+
return f'{s / 1e6:.2f} MB'
|
|
383
|
+
elif s < 1e12:
|
|
384
|
+
return f'{s / 1e9:.2f} GB'
|
|
385
|
+
else:
|
|
386
|
+
return f'{s / 1e12:.2f} TB'
|
|
378
387
|
elif real in (FILE_MOD, FILE_CRE):
|
|
379
388
|
if self.international:
|
|
380
389
|
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(self.itemDataMap[item][real]))
|
|
@@ -25,6 +25,13 @@
|
|
|
25
25
|
|
|
26
26
|
<!-- Table of Content (Don't show for static sites) -->
|
|
27
27
|
<h1 id="changelog">Changelog</h1>
|
|
28
|
+
<h2 id="426">4.26</h2>
|
|
29
|
+
<ul>
|
|
30
|
+
<li><strong>NEW</strong>: Show file sizes in proper, various increments: bytes, KB, MB, and GB.</li>
|
|
31
|
+
<li><strong>NEW</strong>: Add control to select file size unit types in limiter panel.</li>
|
|
32
|
+
<li><strong>FIX</strong>: Fix issue where directory picker for target folder to search would not start with the current, specified
|
|
33
|
+
directory, even when it is valid.</li>
|
|
34
|
+
</ul>
|
|
28
35
|
<h2 id="425">4.25</h2>
|
|
29
36
|
<ul>
|
|
30
37
|
<li><strong>NEW</strong>: Require <code>wcmatch</code> 11.0+.</li>
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
<div class="__toc_wrapper"><span class="__toc_icon"></span>
|
|
32
32
|
<div class="__toc_content">
|
|
33
33
|
<ul class="__toc_list">
|
|
34
|
-
<li class="__toc_level_2"><a href="#contributing
|
|
34
|
+
<li class="__toc_level_2"><a href="#contributing-support">Contributing & Support</a></li>
|
|
35
35
|
<ul class="__toc_list_2">
|
|
36
36
|
|
|
37
37
|
<li class="__toc_level_3"><a href="#overview">Overview</a></li>
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
</ul>
|
|
71
71
|
</div>
|
|
72
72
|
</div>
|
|
73
|
-
<h1 id="contributing
|
|
73
|
+
<h1 id="contributing-support">Contributing & Support</h1>
|
|
74
74
|
<h2 id="overview">Overview</h2>
|
|
75
75
|
<p>Contribution from the community is encouraged and can be done in a variety of ways:</p>
|
|
76
76
|
<ul>
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
<ul class="__toc_list_3">
|
|
43
43
|
|
|
44
44
|
</ul>
|
|
45
|
-
<li class="__toc_level_3"><a href="#searching
|
|
45
|
+
<li class="__toc_level_3"><a href="#searching-replacing">Searching & Replacing</a></li>
|
|
46
46
|
<ul class="__toc_list_3">
|
|
47
47
|
|
|
48
48
|
<li class="__toc_level_4"><a href="#configuring-text-search">Configuring Text Search</a></li>
|
|
@@ -114,7 +114,7 @@ major and minor Python version to the end:</p>
|
|
|
114
114
|
<a href="./installation.html#running-in-anaconda">Running in Anaconda</a>).</p>
|
|
115
115
|
<div class="highlight"><pre><span></span><code>pythonw<span class="w"> </span>-m<span class="w"> </span>rummage
|
|
116
116
|
</code></pre></div>
|
|
117
|
-
<h2 id="searching
|
|
117
|
+
<h2 id="searching-replacing">Searching & Replacing</h2>
|
|
118
118
|
<p><img alt="Search Tab" src="images/search_tab.png" /></p>
|
|
119
119
|
<p>Search and replaces are configured in the <strong>Search</strong> tab. The search tab can essentially be broken up into two sections:
|
|
120
120
|
text search configuration and file search configuration.</p>
|
|
@@ -68,7 +68,6 @@ from ... import __meta__
|
|
|
68
68
|
from ... import rumcore
|
|
69
69
|
from .. import util
|
|
70
70
|
from ..util.colors import Color
|
|
71
|
-
import decimal
|
|
72
71
|
if rumcore.REGEX_SUPPORT:
|
|
73
72
|
from backrefs import bregex
|
|
74
73
|
else:
|
|
@@ -818,6 +817,9 @@ class RummageFrame(gui.RummageFrame):
|
|
|
818
817
|
)
|
|
819
818
|
)
|
|
820
819
|
self.m_size_text.SetValue(Settings.get_search_setting("size_limit_string", "1000"))
|
|
820
|
+
self.m_size_type_choice.SetStringSelection(
|
|
821
|
+
Settings.get_search_setting("size_compare_type", "KB")
|
|
822
|
+
)
|
|
821
823
|
|
|
822
824
|
self.m_case_checkbox.SetValue(not Settings.get_search_setting("ignore_case_toggle", False))
|
|
823
825
|
self.m_dotmatch_checkbox.SetValue(Settings.get_search_setting("dotall_toggle", False))
|
|
@@ -1418,8 +1420,17 @@ class RummageFrame(gui.RummageFrame):
|
|
|
1418
1420
|
|
|
1419
1421
|
cmp_size = self.m_logic_choice.GetSelection()
|
|
1420
1422
|
if cmp_size:
|
|
1421
|
-
size =
|
|
1422
|
-
|
|
1423
|
+
size = int(self.m_size_text.GetValue())
|
|
1424
|
+
size_type = self.m_size_type_choice.GetStringSelection()
|
|
1425
|
+
if size_type == "KB":
|
|
1426
|
+
size *= 1e3
|
|
1427
|
+
elif size_type == "MB":
|
|
1428
|
+
size *= 1e6
|
|
1429
|
+
elif size_type == "GB":
|
|
1430
|
+
size *= 1e9
|
|
1431
|
+
elif size_type == "TB":
|
|
1432
|
+
size *= 1e12
|
|
1433
|
+
args.size_compare = (LIMIT_COMPARE[cmp_size], size)
|
|
1423
1434
|
else:
|
|
1424
1435
|
args.size_compare = None
|
|
1425
1436
|
cmp_modified = self.m_modified_choice.GetSelection()
|
|
@@ -1573,7 +1584,20 @@ class RummageFrame(gui.RummageFrame):
|
|
|
1573
1584
|
strings.append(("force_encode", self.m_force_encode_choice.GetStringSelection()))
|
|
1574
1585
|
|
|
1575
1586
|
if eng_size != "any":
|
|
1576
|
-
|
|
1587
|
+
size_limit = int(self.m_size_text.GetValue())
|
|
1588
|
+
size_type = self.m_size_type_choice.GetStringSelection()
|
|
1589
|
+
if size_type == 'KB':
|
|
1590
|
+
size_limit *= 1e3
|
|
1591
|
+
elif size_type == "MB":
|
|
1592
|
+
size_limit *= 1e6
|
|
1593
|
+
elif size_type == "GB":
|
|
1594
|
+
size_limit *= 1e9
|
|
1595
|
+
elif size_type == "TB":
|
|
1596
|
+
size_limit *= 1e12
|
|
1597
|
+
strings += [
|
|
1598
|
+
("size_limit_string", str(size_limit)),
|
|
1599
|
+
("size_compare_type", size_type)
|
|
1600
|
+
]
|
|
1577
1601
|
if eng_mod != "on any":
|
|
1578
1602
|
strings += [
|
|
1579
1603
|
("modified_date_string", self.m_modified_date_picker.GetValue().Format("%m/%d/%Y")),
|
|
@@ -2159,7 +2183,9 @@ class RummageFrame(gui.RummageFrame):
|
|
|
2159
2183
|
def on_searchin_changed(self):
|
|
2160
2184
|
"""Callback for when a directory changes via the `m_searchin_text` control."""
|
|
2161
2185
|
|
|
2162
|
-
self.
|
|
2186
|
+
target = self.m_searchin_text.GetValue()
|
|
2187
|
+
self.SetTitle(target)
|
|
2188
|
+
self.m_searchin_dir_picker.target = target
|
|
2163
2189
|
|
|
2164
2190
|
def on_save_search(self, event):
|
|
2165
2191
|
"""Open a dialog to save a search for later use."""
|
|
@@ -259,10 +259,10 @@ class RummageFrame ( wx.Frame ):
|
|
|
259
259
|
self.m_size_text = wx.TextCtrl( self.m_limit_panel, wx.ID_ANY, u"1000", wx.DefaultPosition, wx.Size( -1,-1 ), 0 )
|
|
260
260
|
fgSizer37.Add( self.m_size_text, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 )
|
|
261
261
|
|
|
262
|
-
|
|
263
|
-
self.
|
|
264
|
-
|
|
265
|
-
fgSizer37.Add( self.
|
|
262
|
+
m_size_type_choiceChoices = [ u"bytes", u"KB", u"MB", u"GB", u"TB" ]
|
|
263
|
+
self.m_size_type_choice = wx.Choice( self.m_limit_panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_size_type_choiceChoices, 0 )
|
|
264
|
+
self.m_size_type_choice.SetSelection( 1 )
|
|
265
|
+
fgSizer37.Add( self.m_size_type_choice, 0, wx.ALL, 5 )
|
|
266
266
|
|
|
267
267
|
|
|
268
268
|
gbSizer3.Add( fgSizer37, wx.GBPosition( 0, 2 ), wx.GBSpan( 1, 3 ), wx.EXPAND, 5 )
|
|
@@ -431,37 +431,27 @@ class _RummageFileContent:
|
|
|
431
431
|
enc = 'utf-32'
|
|
432
432
|
return enc
|
|
433
433
|
|
|
434
|
-
def
|
|
435
|
-
"""
|
|
434
|
+
def _read_file(self):
|
|
435
|
+
"""Read the file in."""
|
|
436
|
+
|
|
437
|
+
if self.encoding.encode != "bin":
|
|
438
|
+
try:
|
|
439
|
+
self.file_obj = open(self.name, 'r', encoding=self._get_encoding(), errors='strict')
|
|
440
|
+
return self.file_obj.read()
|
|
441
|
+
except Exception:
|
|
442
|
+
self.encoding = text_decode.Encoding("bin", None)
|
|
443
|
+
|
|
444
|
+
if self.file_obj is not None:
|
|
445
|
+
self.file_obj.close()
|
|
446
|
+
|
|
436
447
|
try:
|
|
437
448
|
self.file_obj = open(self.name, "rb")
|
|
438
449
|
if self.size != 0:
|
|
439
450
|
self.file_map = mmap.mmap(self.file_obj.fileno(), 0, access=mmap.ACCESS_READ)
|
|
451
|
+
return self.file_obj.read() if self.file_map is None else self.file_map
|
|
440
452
|
except Exception as e:
|
|
441
|
-
# _read_bin has no other fallbacks, so we issue this if it fails.
|
|
442
453
|
raise RummageException("Could not access or read file.") from e
|
|
443
454
|
|
|
444
|
-
def _read_file(self):
|
|
445
|
-
"""Read the file in."""
|
|
446
|
-
|
|
447
|
-
try:
|
|
448
|
-
if self.encoding.encode == "bin":
|
|
449
|
-
self._read_bin()
|
|
450
|
-
else:
|
|
451
|
-
enc = self._get_encoding()
|
|
452
|
-
self.file_obj = open(self.name, 'r', encoding=enc, errors='strict')
|
|
453
|
-
return self.file_obj.read() if self.file_map is None else self.file_map
|
|
454
|
-
except RummageException:
|
|
455
|
-
# Bubble up `RummageExceptions`
|
|
456
|
-
raise
|
|
457
|
-
except Exception:
|
|
458
|
-
if self.encoding.encode != "bin":
|
|
459
|
-
if self.file_obj is not None:
|
|
460
|
-
self.file_obj.close()
|
|
461
|
-
self.encoding = text_decode.Encoding("bin", None)
|
|
462
|
-
self._read_bin()
|
|
463
|
-
return self.file_map
|
|
464
|
-
|
|
465
455
|
|
|
466
456
|
class _FileSearch:
|
|
467
457
|
"""Search for files."""
|
|
@@ -1083,10 +1073,7 @@ class _FileSearch:
|
|
|
1083
1073
|
if not file_record_sent:
|
|
1084
1074
|
yield FileRecord(file_info, None, None)
|
|
1085
1075
|
except Exception:
|
|
1086
|
-
yield FileRecord(
|
|
1087
|
-
file_info, None,
|
|
1088
|
-
get_exception()
|
|
1089
|
-
)
|
|
1076
|
+
yield FileRecord(file_info, None, get_exception())
|
|
1090
1077
|
|
|
1091
1078
|
def run(self):
|
|
1092
1079
|
"""Start the file search."""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|