diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..558f9be5
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+data/screenshots/*.png filter=lfs diff=lfs merge=lfs -text
diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
deleted file mode 100644
index bc158d33..00000000
--- a/.github/ISSUE_TEMPLATE/bug-report.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-name: Bug Report
-about: Did you find a bug in Collision? Create a report to get it fixed!
-title: ''
-labels: bug
-assignees: GeopJr
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots**
-If applicable, add screenshots to help explain your problem.
-
-**Environment (please complete the following information):**
- - OS: [e.g. Debian]
- - Install method: [e.g. Flathub, AUR, manually...]
-
-**Additional context**
-Add any other context about the problem here.
-
-
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
new file mode 100644
index 00000000..c290a88b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -0,0 +1,63 @@
+name: Bug Report
+description: Report a problem you encountered while using the app
+title: "[Bug]: "
+labels: bug
+body:
+- type: textarea
+ attributes:
+ label: Describe the bug
+ description: A clear and concise description of what the bug is.
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: Steps To Reproduce
+ description: Steps to reproduce the behavior.
+ placeholder: |
+ 1. Go to '...'
+ 2. Click on '...'
+ 3. Scroll down to '...'
+ 4. See error
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: Logs and/or Screenshots
+ description: Terminal logs are often invaluable. If you can, launch the app from terminal and paste the output here. Run `flatpak run dev.geopjr.Collision --debug` for a verbose output. Please remove any filenames before creating this issue for privacy reasons (if you copy the logs from About > Troubleshooting > Debugging Information, they will be redacted).
+ value: |
+ ```
+
+ ```
+ validations:
+ required: false
+- type: input
+ attributes:
+ label: Operating System
+ description: Please include its version if available.
+ validations:
+ required: true
+- type: dropdown
+ attributes:
+ label: Package
+ description: How did you install the app?
+ multiple: false
+ options:
+ - Flatpak
+ - Snap
+ - OS repositories
+ - Compiled manually
+ - I'm not sure
+ validations:
+ required: true
+- type: textarea
+ attributes:
+ label: Troubleshooting information
+ description: You can find this info under About > Troubleshooting > Debugging Information.
+ validations:
+ required: false
+- type: textarea
+ attributes:
+ label: Additional Context
+ description: Add any other relevant information about the problem here.
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md
deleted file mode 100644
index b44b3985..00000000
--- a/.github/ISSUE_TEMPLATE/feature-request.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-name: Feature Request
-about: Do you think Collision can improve? Create an issue!
-title: ''
-labels: enhancement
-assignees: GeopJr
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Is it related to GNOME Human Interface Guidelines? Please add links.**
-
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml
new file mode 100644
index 00000000..0c6f3147
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -0,0 +1,18 @@
+name: Feature Request
+description: Suggest an idea for this app
+title: "[Request]: "
+labels: enhancement
+body:
+- type: textarea
+ attributes:
+ label: Describe the request
+ description: A clear and concise description of what the request is.
+ validations:
+ required: true
+- type: checkboxes
+ attributes:
+ label: Implementation Details
+ description: How should this feature be implemented?
+ options:
+ - label: This follows the [GNOME HIG](https://developer.gnome.org/hig/).
+ required: true
\ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9cd73a99..c42264f4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -6,7 +6,7 @@ jobs:
runs-on: ubuntu-latest
container: ghcr.io/geopjr/crystal-gtk:latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Shards install & Generate bindings
run: make bindings
- name: Spec
diff --git a/.gitignore b/.gitignore
index 582bc2d6..ee2c7420 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,4 @@ po/mo/
*.mo
data/*.desktop
data/*.metainfo.xml
+build/
diff --git a/.tool-versions b/.tool-versions
deleted file mode 100644
index a669ba32..00000000
--- a/.tool-versions
+++ /dev/null
@@ -1 +0,0 @@
-crystal 1.7.3
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 8c5dc913..01bb5bf8 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -1,132 +1,136 @@
-# Contributor Covenant Code of Conduct
+# Code of Conduct
-## Our Pledge
+Thank you for being a part of the GNOME project. We value your participation and want everyone to have an enjoyable and fulfilling experience. Accordingly, all participants are expected to follow this Code of Conduct, and to show respect, understanding, and consideration to one another. Thank you for helping make this a welcoming, friendly community for everyone.
-We as members, contributors, and leaders pledge to make participation in our
-community a harassment-free experience for everyone, regardless of age, body
-size, visible or invisible disability, ethnicity, sex characteristics, gender
-identity and expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, caste, color, religion, or sexual identity
-and orientation.
+## Scope
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
+This Code of Conduct applies to all GNOME community spaces, including, but not limited to:
-## Our Standards
+ * Issue tracking systems - bugzilla.gnome.org
+ * Documentation and tutorials - developer.gnome.org
+ * Code repositories - git.gnome.org and gitlab.gnome.org
+ * Mailing lists - mail.gnome.org
+ * Wikis - wiki.gnome.org
+ * Chat and forums - irc.gnome.org, discourse.gnome.org, GNOME Telegram channels, and GNOME groups and channels on Matrix.org (including bridges to GNOME IRC channels)
+ * Community spaces hosted on gnome.org infrastructure
+ * Any other channels or groups which exist in order to discuss GNOME project activities
+ * All event venues and associated spaces, including conferences, hackfests, release parties, workshops and other small events
+ * All areas related to event venues: vendor exhibit halls, staff and meal areas, connecting infrastructure like walkways, hallways, elevators, and stairs
+ * Sponsor events, either on-site or off-site
+ * Private events off-site that involve one or more attendees
+ * Social events around the main event
+ * Private conversations taking place in official conference hotels
-Examples of behavior that contributes to a positive environment for our
-community include:
+Communication channels and private conversations that are normally out of scope may be considered in scope if a GNOME participant is being stalked or harassed. Social media conversations may be considered in-scope if the incident occurred under a GNOME event hashtag, or when an official GNOME account on social media is tagged, or within any other discussion about GNOME. The GNOME Foundation reserves the right to take actions against behaviors that happen in any context, if they are deemed to be relevant to the GNOME project and its participants.
-* Demonstrating empathy and kindness toward other people
-* Being respectful of differing opinions, viewpoints, and experiences
-* Giving and gracefully accepting constructive feedback
-* Accepting responsibility and apologizing to those affected by our mistakes,
- and learning from the experience
-* Focusing on what is best not just for us as individuals, but for the
- overall community
+All participants in GNOME community spaces are subject to the Code of Conduct. This includes GNOME Foundation board members, corporate sponsors, and paid employees. This also includes volunteers, maintainers, leaders, contributors, contribution reviewers, issue reporters, GNOME users, and anyone participating in discussion in GNOME community spaces. For in-person events, this also includes all attendees, exhibitors, vendors, speakers, panelists, organizers, staff, and volunteers.
-Examples of unacceptable behavior include:
+## Reporting an Incident
-* The use of sexualized language or imagery, and sexual attention or
- advances of any kind
-* Trolling, insulting or derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or email
- address, without their explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
+If you believe that someone is violating the Code of Conduct, or have any other concerns, please [contact the Code of Conduct committee](https://wiki.gnome.org/Foundation/CodeOfConduct/ReporterGuide).
-## Enforcement Responsibilities
+## Our Standards
-Community leaders are responsible for clarifying and enforcing our standards of
-acceptable behavior and will take appropriate and fair corrective action in
-response to any behavior that they deem inappropriate, threatening, offensive,
-or harmful.
+The GNOME community is dedicated to providing a positive experience for everyone, regardless of:
-Community leaders have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions that are
-not aligned to this Code of Conduct, and will communicate reasons for moderation
-decisions when appropriate.
+ * age
+ * body size
+ * caste
+ * citizenship
+ * disability
+ * education
+ * ethnicity
+ * familial status
+ * gender expression
+ * gender identity
+ * genetic information
+ * immigration status
+ * level of experience
+ * nationality
+ * personal appearance
+ * pregnancy
+ * race
+ * religion
+ * sex characteristics
+ * sexual orientation
+ * sexual identity
+ * socio-economic status
+ * tribe
+ * veteran status
-## Scope
+### Community Guidelines
-This Code of Conduct applies within all community spaces, and also applies when
-an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed
-representative at an online or offline event.
+Examples of behavior that contributes to creating a positive environment include:
-## Enforcement
+ * **Be friendly.** Use welcoming and inclusive language.
+ * **Be empathetic.** Be respectful of differing viewpoints and experiences.
+ * **Be respectful.** When we disagree, we do so in a polite and constructive manner.
+ * **Be considerate.** Remember that decisions are often a difficult choice between competing priorities. Focus on what is best for the community. Keep discussions around technology choices constructive and respectful.
+ * **Be patient and generous.** If someone asks for help it is because they need it. When documentation is available that answers the question, politely point them to it. If the question is off-topic, suggest a more appropriate online space to seek help.
+ * **Try to be concise.** Read the discussion before commenting in order to not repeat a point that has been made.
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to the community leaders responsible for enforcement at
-coc@geopjr.dev.
-All complaints will be reviewed and investigated promptly and fairly.
+### Inappropriate Behavior
-All community leaders are obligated to respect the privacy and security of the
-reporter of any incident.
+Community members asked to stop any inappropriate behavior are expected to comply immediately.
-## Enforcement Guidelines
+We want all participants in the GNOME community have the best possible experience they can. In order to be clear what that means, we've provided a list of examples of behaviors that are inappropriate for GNOME community spaces:
-Community leaders will follow these Community Impact Guidelines in determining
-the consequences for any action they deem in violation of this Code of Conduct:
+ * **Deliberate intimidation, stalking, or following.**
+ * **Sustained disruption of online discussion, talks, or other events.** Sustained disruption of events, online discussions, or meetings, including talks and presentations, will not be tolerated. This includes 'Talking over' or 'heckling' event speakers or influencing crowd actions that cause hostility in event sessions. Sustained disruption also includes drinking alcohol to excess or using recreational drugs to excess, or pushing others to do so.
+ * **Harassment of people who don't drink alcohol or other legal substances.** We do not tolerate derogatory comments about those who abstain from alcohol or other legal substances. We do not tolerate pushing people to drink, talking about their abstinence or preferences to others, or pressuring them to drink - physically or through jeering.
+ * **Sexist, racist, homophobic, transphobic, ableist language or otherwise exclusionary language.** This includes deliberately referring to someone by a gender that they do not identify with, and/or questioning the legitimacy of an individual's gender identity. If you're unsure if a word is derogatory, don't use it. This also includes repeated subtle and/or indirect discrimination.
+ * **Unwelcome sexual attention or behavior that contributes to a sexualized environment.** This includes sexualized comments, jokes or imagery in interactions, communications or presentation materials, as well as inappropriate touching, groping, or sexual advances. Sponsors should not use sexualized images, activities, or other material. Meetup organizing staff and other volunteer organizers should not use sexualized clothing/uniforms/costumes, or otherwise create a sexualized environment.
+ * **Unwelcome physical contact.** This includes touching a person without permission, including sensitive areas such as their hair, pregnant stomach, mobility device (wheelchair, scooter, etc) or tattoos. This also includes physically blocking or intimidating another person. Physical contact or simulated physical contact (such as emojis like "kiss") without affirmative consent is not acceptable. This includes sharing or distribution of sexualized images or text.
+ * **Violence or threats of violence.** Violence and threats of violence are not acceptable - online or offline. This includes incitement of violence toward any individual, including encouraging a person to commit self-harm. This also includes posting or threatening to post other people's personally identifying information ("doxxing") online.
+ * **Influencing or encouraging inappropriate behavior.** If you influence or encourage another person to violate the Code of Conduct, you may face the same consequences as if you had violated the Code of Conduct.
+ * **Possession of an offensive weapon at a GNOME event.** This includes anything deemed to be a weapon by the event organizers.
-### 1. Correction
+### Safety versus Comfort
-**Community Impact**: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
+The GNOME community prioritizes marginalized people's safety over privileged people's comfort, for example in situations involving:
-**Consequence**: A private, written warning from community leaders, providing
-clarity around the nature of the violation and an explanation of why the
-behavior was inappropriate. A public apology may be requested.
+ * "Reverse"-isms, including "reverse racism," "reverse sexism," and "cisphobia"
+ * Reasonable communication of boundaries, such as "leave me alone," "go away," or "I'm not discussing this with you."
+ * Criticizing racist, sexist, cissexist, or otherwise oppressive behavior or assumptions
+ * Communicating boundaries or criticizing oppressive behavior in a "tone" you don't find congenial
-### 2. Warning
+The examples listed above are not against the Code of Conduct. If you have questions about the above statements, please [read our document on Supporting Diversity](https://wiki.gnome.org/Foundation/CodeOfConduct/SupportingDiversity).
-**Community Impact**: A violation through a single incident or series
-of actions.
+Outreach and diversity efforts directed at under-represented groups are permitted under the code of conduct. For example, a social event for women would not be classified as being outside the Code of Conduct under this provision.
-**Consequence**: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction with
-those enforcing the Code of Conduct, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external channels
-like social media. Violating these terms may lead to a temporary or
-permanent ban.
+Basic expectations for conduct are not covered by the "reverse-ism clause" and would be enforced irrespective of the demographics of those involved. For example, racial discrimination will not be tolerated, irrespective of the race of those involved. Nor would unwanted sexual attention be tolerated, whatever someone's gender or sexual orientation. Members of our community have the right to expect that participants in the project will uphold these standards.
-### 3. Temporary Ban
+If a participant engages in behavior that violates this code of conduct, the GNOME Code of Conduct committee may take any action they deem appropriate. Examples of consequences are outlined in the [Committee Procedures Guide](https://wiki.gnome.org/Foundation/CodeOfConduct/CommitteeProcedures).
-**Community Impact**: A serious violation of community standards, including
-sustained inappropriate behavior.
+## Procedure for Handling Incidents
-**Consequence**: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No public or
-private interaction with the people involved, including unsolicited interaction
-with those enforcing the Code of Conduct, is allowed during this period.
-Violating these terms may lead to a permanent ban.
+ * [Reporter Guide](https://wiki.gnome.org/Foundation/CodeOfConduct/ReporterGuide)
-### 4. Permanent Ban
+ * [Moderator Procedures](https://wiki.gnome.org/Foundation/CodeOfConduct/ModeratorProcedures)
-**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
-individual, or aggression toward or disparagement of classes of individuals.
+ * [Committee Procedures Guide](https://wiki.gnome.org/Foundation/CodeOfConduct/CommitteeProcedures)
-**Consequence**: A permanent ban from any sort of public interaction within
-the community.
+## License
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 2.1, available at
-[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
+The GNOME Code of Conduct is licensed under a [Creative Commons Attribution Share-Alike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/)
-Community Impact Guidelines were inspired by
-[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
+[](http://creativecommons.org/licenses/by-sa/3.0/)
-For answers to common questions about this code of conduct, see the FAQ at
-[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
-at [https://www.contributor-covenant.org/translations][translations].
+## Attribution
-[homepage]: https://www.contributor-covenant.org
-[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
-[Mozilla CoC]: https://github.com/mozilla/diversity
-[FAQ]: https://www.contributor-covenant.org/faq
-[translations]: https://www.contributor-covenant.org/translations
+The GNOME Code of Conduct was forked from the example policy from the [Geek Feminism wiki, created by the Ada Initiative and other volunteers](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy), which is under a Creative Commons Zero license.
+
+Additional language was incorporated and modified from the following Codes of Conduct:
+
+ * [Citizen Code of Conduct](http://citizencodeofconduct.org/) is licensed [Creative Commons Attribution-ShareAlike 3.0 Unported License](https://creativecommons.org/licenses/by-sa/3.0/).
+ * [Code of Conduct template](https://github.com/sagesharp/code-of-conduct-template/) is licensed [Creative Commons Attribution 3.0 Unported License](http://creativecommons.org/licenses/by/3.0/) by [Otter Tech](https://otter.technology/code-of-conduct-training)
+ * [Contributor Covenant version 1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct) (licensed [CC BY 4.0](https://github.com/ContributorCovenant/contributor_covenant/blob/master/LICENSE.md))
+ * [Data Carpentry Code of Conduct](https://docs.carpentries.org/topic_folders/policies/index_coc.html) is licensed [Creative Commons Attribution 4.0 License](https://creativecommons.org/licenses/by/4.0/)
+ * [Django Project Code of Conduct](https://www.djangoproject.com/conduct/) is licensed under a [Creative Commons Attribution 3.0 Unported License](http://creativecommons.org/licenses/by/3.0/)
+ * [Fedora Code of Conduct](http://fedoraproject.org/code-of-conduct)
+ * [Geek Feminism Anti-harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy) which is under a [Creative Commons Zero license](https://creativecommons.org/publicdomain/zero/1.0/)
+ * [GNOME Foundation Code of Conduct](https://wiki.gnome.org/action/recall/Foundation/CodeOfConduct?action=recall&rev=48)
+ * [LGBTQ in Technology Slack Code of Conduct](https://lgbtq.technology/coc.html) licensed [Creative Commons Zero](https://creativecommons.org/publicdomain/zero/1.0/)
+ * [Mozilla Community Participation Guidelines](https://www.mozilla.org/en-US/about/governance/policies/participation/) is licensed [Creative Commons Attribution-ShareAlike 3.0 Unported License](https://creativecommons.org/licenses/by-sa/3.0/).
+ * [Python Mentors Code of Conduct](http://pythonmentors.com/)
+ * [Speak Up! Community Code of Conduct](http://web.archive.org/web/20141109123859/http://speakup.io/coc.html), licensed under a [Creative Commons Attribution 3.0 Unported License](http://creativecommons.org/licenses/by/3.0/)
\ No newline at end of file
diff --git a/README.md b/README.md
index c50406ec..a45c28af 100644
--- a/README.md
+++ b/README.md
@@ -5,8 +5,8 @@
Check hashes for your files
-
-
+
+
@@ -14,55 +14,45 @@
-
-
-
-#
+# Building
-## Building
+## Dependencies
-### Dependencies
-
-- `Crystal` - `~1.7.1`
+- `Crystal` - `~1.9.2`
- `GTK`
- `libadwaita`
- `gettext`
-#### Makefile
+### Makefile
1. `$ make`
2. `# make install` # To install it
-#
-
-## Nautilus Extension
+# Nautilus Extension
Collision offers a nautilus / GNOME Files extension that adds a "Check Hashes" context menu item.
-### Dependencies
+## Dependencies
- `nautilus`
- [`nautilus-python`](https://repology.org/project/nautilus-python/versions)
-### Makefile
+## Makefile
`$ make install_nautilus_extension`
-#
+# Sponsors
-## Contributing
+
-1. Read the [Code of Conduct](https://github.com/GeopJr/Collision/blob/main/CODE_OF_CONDUCT.md)
-2. Fork it ( https://github.com/GeopJr/Collision/fork )
-3. Create your feature branch (git checkout -b my-new-feature)
-4. Commit your changes (git commit -am 'Add some feature')
-5. Push to the branch (git push origin my-new-feature)
-6. Create a new Pull Request
+[](https://github.com/sponsors/GeopJr)
-#
+
+
+
@@ -77,22 +67,11 @@ Collision offers a nautilus / GNOME Files extension that adds a "Check Hashes" c
-#
-
-## Sponsors
+# Contributing
-
-
-[](https://github.com/sponsors/GeopJr)
-
-
-
-#
-
-## Contributors
-
-
-
-
-
-Made with [contributors-img](https://contrib.rocks).
+1. Read the [Code of Conduct](https://github.com/GeopJr/Collision/blob/main/CODE_OF_CONDUCT.md)
+2. Fork it ( https://github.com/GeopJr/Collision/fork )
+3. Create your feature branch (git checkout -b my-new-feature)
+4. Commit your changes (git commit -am 'Add some feature')
+5. Push to the branch (git push origin my-new-feature)
+6. Create a new Pull Request
diff --git a/data/dev.geopjr.Collision.gresource.xml b/data/dev.geopjr.Collision.gresource.xml
index 95b70cdf..1a2212dd 100644
--- a/data/dev.geopjr.Collision.gresource.xml
+++ b/data/dev.geopjr.Collision.gresource.xml
@@ -7,13 +7,7 @@
icons/test-pass-symbolic.svg
icons/octothorp-symbolic.svg
icons/paper-symbolic.svg
- ui/file_info.ui
- ui/hash_list.ui
- ui/header_left.ui
- ui/header_right.ui
- ui/switcher.ui
- ui/tools.ui
- ui/welcomer.ui
+ ui/application.ui
ui/shortcuts_window.ui
diff --git a/data/dev.geopjr.Collision.json b/data/dev.geopjr.Collision.json
index 618121e4..b30aae38 100644
--- a/data/dev.geopjr.Collision.json
+++ b/data/dev.geopjr.Collision.json
@@ -1,7 +1,7 @@
{
"app-id": "dev.geopjr.Collision",
"runtime": "org.gnome.Platform",
- "runtime-version": "master",
+ "runtime-version": "45",
"sdk": "org.gnome.Sdk",
"command": "collision",
"finish-args": [
@@ -81,8 +81,8 @@
{
"type": "archive",
"dest": "crystal/",
- "url": "https://github.com/crystal-lang/crystal/releases/download/1.8.0/crystal-1.8.0-1-linux-x86_64.tar.gz",
- "sha256": "000b1b301fc81fc706a67758204c201cb620c108fa0b32d97eb1265dd7f94177",
+ "url": "https://github.com/crystal-lang/crystal/releases/download/1.9.2/crystal-1.9.2-1-linux-x86_64.tar.gz",
+ "sha256": "2dcfa020763998550904d6d8ea3eb178a1d93e8d7fea0f61d8c80c2b8fce9e24",
"only_arches": [
"x86_64"
]
@@ -90,8 +90,8 @@
{
"type": "archive",
"dest": "crystal/",
- "url": "https://github.com/geopjr-forks/crystal-aarch64/releases/download/v1.8.0/crystal-1.8.0-1-linux-aarch64.tar.xz",
- "sha256": "a9088c9a7c93a0a3e95d530ebe95fb15b089a1cf06e4ff6bff0eecf804cdf42d",
+ "url": "https://github.com/geopjr-forks/crystal-aarch64/releases/download/v1.9.2/crystal-1.9.2-1-linux-aarch64.tar.xz",
+ "sha256": "b27042a5b421174dfe14ab4295b3ac90ebc0b915ce8e04b4c435228c31a4624a",
"only_arches": [
"aarch64"
]
@@ -105,7 +105,7 @@
{
"type": "git",
"url": "https://github.com/hugopl/gi-crystal.git",
- "tag": "v0.15.2",
+ "tag": "v0.18.0",
"dest": "lib/gi-crystal"
},
{
@@ -117,19 +117,19 @@
{
"type": "git",
"url": "https://github.com/hugopl/gtk4.cr.git",
- "tag": "v0.13.0",
+ "tag": "v0.15.0",
"dest": "lib/gtk4"
},
{
"type": "git",
"url": "https://github.com/hugopl/harfbuzz.cr.git",
- "tag": "v0.1.0",
+ "tag": "v0.2.0",
"dest": "lib/harfbuzz"
},
{
"type": "git",
"url": "https://github.com/geopjr/libadwaita.cr.git",
- "commit": "203737fc96bb48e1a710cb68e896d2c5b9c1a6e5",
+ "commit": "cffabb56e911d2a90c53c2fd14d6bd08bf5ac446",
"dest": "lib/libadwaita"
},
{
@@ -143,12 +143,6 @@
"url": "https://github.com/hugopl/pango.cr.git",
"tag": "v0.2.0",
"dest": "lib/pango"
- },
- {
- "type": "git",
- "url": "https://github.com/hugopl/version_from_shard.git",
- "tag": "v1.2.5",
- "dest": "lib/version_from_shard"
}
]
},
diff --git a/data/dev.geopjr.Collision.metainfo.xml.in b/data/dev.geopjr.Collision.metainfo.xml.in
index dfdf33ce..74aaf5fe 100644
--- a/data/dev.geopjr.Collision.metainfo.xml.in
+++ b/data/dev.geopjr.Collision.metainfo.xml.in
@@ -10,7 +10,7 @@
https://github.com/GeopJr/Collision/issues
https://hosted.weblate.org/engage/collision/
https://geopjr.dev/donate
-
+
Verifying that a file you downloaded or received is actually the one you were
expecting is often overlooked or too time-consuming to do. At the same time, it
@@ -25,21 +25,31 @@
- https://i.imgur.com/TMwCOWY.png
+ https://media.githubusercontent.com/media/GeopJr/Collision/main/data/screenshots/screenshot-1.png
- https://i.imgur.com/pmIdbwf.png
+ https://media.githubusercontent.com/media/GeopJr/Collision/main/data/screenshots/screenshot-2.png
- https://i.imgur.com/n9HNuEp.png
+ https://media.githubusercontent.com/media/GeopJr/Collision/main/data/screenshots/screenshot-3.png
- https://i.imgur.com/21com71.png
+ https://media.githubusercontent.com/media/GeopJr/Collision/main/data/screenshots/screenshot-4.png
+
+
+
+ Visual refinements to match the state of the art of GNOME apps
+ Major codebase rewrite
+ Added support for multiple open windows
+ Updated translations
+
+
+
-
+
Added drag and drop support for files
Improved keyboard navigation
@@ -49,7 +59,7 @@
-
+
Added keyboard shortcuts
Added ability to search for hashes in file content
@@ -60,7 +70,7 @@
-
+
Added aarch64 support
Added nautilus / GNOME Files extension by DodoLeDev
@@ -70,7 +80,7 @@
-
+
Added open signal handling (you can now open files with Collision)
Minor bug fixes
@@ -81,7 +91,7 @@
-
+
Switched to AdwAboutWindow
Minor bug fixes
@@ -91,7 +101,7 @@
-
+
Added gschema support so Collision remembers window size and maximized state
Updated dependencies
@@ -101,7 +111,7 @@
-
+
Optimized performance and memory usage of CSS class toggling
Minor bug fixes
@@ -112,7 +122,7 @@
-
+
Updated dependencies
Added Estonian, Czech and Berber translations
@@ -121,7 +131,7 @@
-
+
Handle feedback on buttons when spammed
Hash comparison is now case-insensitive
@@ -132,7 +142,7 @@
-
+
Feedback on copy
Updated translations
@@ -140,7 +150,7 @@
-
+
Bug fixes
Hide filepath on flatpak
diff --git a/data/icons/cross-large-symbolic.svg b/data/icons/cross-large-symbolic.svg
index eb54fa30..e4b09d62 100644
--- a/data/icons/cross-large-symbolic.svg
+++ b/data/icons/cross-large-symbolic.svg
@@ -1,2 +1,2 @@
-
+
diff --git a/data/icons/paper-symbolic.svg b/data/icons/paper-symbolic.svg
index d0f6f203..201457c4 100644
--- a/data/icons/paper-symbolic.svg
+++ b/data/icons/paper-symbolic.svg
@@ -1,2 +1,2 @@
-
+
diff --git a/data/icons/test-pass-symbolic.svg b/data/icons/test-pass-symbolic.svg
index bbd078fa..9102ed64 100644
--- a/data/icons/test-pass-symbolic.svg
+++ b/data/icons/test-pass-symbolic.svg
@@ -1,2 +1,2 @@
-
\ No newline at end of file
+
diff --git a/data/screenshots/screenshot-1.png b/data/screenshots/screenshot-1.png
new file mode 100644
index 00000000..cc6a2af1
--- /dev/null
+++ b/data/screenshots/screenshot-1.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7aa8a7020d54aaf11f846adb6a7929953b724a3a06957afd7952646564bb0f20
+size 21622
diff --git a/data/screenshots/screenshot-2.png b/data/screenshots/screenshot-2.png
new file mode 100644
index 00000000..7a676572
--- /dev/null
+++ b/data/screenshots/screenshot-2.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:75d9d3ce11058902442616e4c8b61b035bd46ee437b043211072a00eca0fa301
+size 46916
diff --git a/data/screenshots/screenshot-3.png b/data/screenshots/screenshot-3.png
new file mode 100644
index 00000000..7e3ef206
--- /dev/null
+++ b/data/screenshots/screenshot-3.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a3937ff9335e4cc2891261f865953a3a7a227875810066e727c5cc135eb4b780
+size 29588
diff --git a/data/screenshots/screenshot-4.png b/data/screenshots/screenshot-4.png
new file mode 100644
index 00000000..c06f25c3
--- /dev/null
+++ b/data/screenshots/screenshot-4.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:077eb97381b97ff2cf2d12a7c2370da54f6681f6c3f931fb852f9cc56a47d946
+size 36362
diff --git a/data/ui/application.ui b/data/ui/application.ui
new file mode 100644
index 00000000..b2345c0e
--- /dev/null
+++ b/data/ui/application.ui
@@ -0,0 +1,442 @@
+
+
+
+
+
+ Choose a File
+ 1
+
+
+ Choose a File
+ 1
+
+
+ 360
+ 360
+ Collision
+
+
+ max-width: 400sp
+
+ True
+ vertical
+ 32
+
+
+
+
+
+
+ resultsStack
+ False
+
+
+
+
+
+
+
+
+
+ welcomer
+
+
+ 1
+ dev.geopjr.Collision
+ Collision
+ Check hashes for your files
+
+
+ center
+ _Open a File
+ 1
+
+
+
+
+
+
+
+
+
+
+ spinner
+
+
+ center
+ center
+ 1
+ 1
+ 1
+ 32
+ 32
+
+
+
+
+
+
+ results
+
+
+ 1
+
+
+ 100
+
+
+ False
+ False
+
+
+ hashes
+ Hash
+ octothorp-symbolic
+
+
+ center
+ center
+
+
+ MD5
+ 0
+ 100
+
+
+ Copy
+ edit-copy-symbolic
+ center
+
+
+
+
+
+
+
+
+ SHA-1
+ 0
+ 100
+
+
+ Copy
+ edit-copy-symbolic
+ center
+
+
+
+
+
+
+
+
+ SHA-256
+ 0
+ 100
+
+
+ Copy
+ edit-copy-symbolic
+ center
+
+
+
+
+
+
+
+
+ SHA-512
+ 0
+ 100
+
+
+ Copy
+ edit-copy-symbolic
+ center
+
+
+
+
+
+
+
+
+
+
+
+
+
+ verify
+ Verify
+ test-pass-symbolic
+
+
+ horizontal
+ 1
+ 45
+
+
+ vertical
+ 20
+
+
+ Checksum
+ 1
+ word-char
+ center
+ center
+ 1
+
+
+
+
+
+
+
+ 16
+ test-pass-symbolic
+ end
+ end
+ 5
+ 5
+ 0
+ 0
+
+
+
+
+ MD5,SHA-1,SHA-256 or SHA-512 Hash
+ start
+ start
+ fill
+ 22
+ 14
+ 11
+ char
+ 1
+ 0
+
+
+
+
+
+ 125
+
+
+ 11
+ 11
+ 5
+ 5
+ 0
+ 125
+ char
+ 0
+ entry
+ Insert a MD5/SHA-1/SHA-256/SHA-512 Hash
+
+ card-like
+ monospace
+
+
+
+
+
+
+
+
+
+
+
+ vertical
+ 20
+
+
+ File
+ 1
+ word-char
+ center
+ center
+ 1
+
+
+
+
+
+ Select Another File to Check Against
+ 125
+ 1
+
+
+ vertical
+ center
+ 12
+ center
+
+
+
+
+ image
+
+
+ 36
+ paper-symbolic
+
+
+
+
+
+
+ spinner
+
+
+ center
+ center
+ 1
+ 1
+ 1
+ 32
+ 32
+
+
+
+
+
+
+
+
+ Choose File…
+ 15
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/ui/file_info.ui b/data/ui/file_info.ui
deleted file mode 100644
index 0c082aea..00000000
--- a/data/ui/file_info.ui
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
- 1
-
-
- 100
-
-
-
-
diff --git a/data/ui/hash_list.ui b/data/ui/hash_list.ui
deleted file mode 100644
index 9b8f84b5..00000000
--- a/data/ui/hash_list.ui
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
- center
- center
-
-
- MD5
- 0
- 100
-
-
- Copy
- edit-copy-symbolic
- center
-
-
-
-
-
-
-
-
- SHA-1
- 0
- 100
-
-
- Copy
- edit-copy-symbolic
- center
-
-
-
-
-
-
-
-
- SHA-256
- 0
- 100
-
-
- Copy
- edit-copy-symbolic
- center
-
-
-
-
-
-
-
-
- SHA-512
- 0
- 100
-
-
- Copy
- edit-copy-symbolic
- center
-
-
-
-
-
-
-
-
-
diff --git a/data/ui/header_left.ui b/data/ui/header_left.ui
deleted file mode 100644
index 3ba38118..00000000
--- a/data/ui/header_left.ui
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
- document-open-symbolic
- _Open
- Open...
- True
-
-
-
-
-
- Choose a File
- 1
-
-
diff --git a/data/ui/header_right.ui b/data/ui/header_right.ui
deleted file mode 100644
index 2da65888..00000000
--- a/data/ui/header_right.ui
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
diff --git a/data/ui/shortcuts_window.ui b/data/ui/shortcuts_window.ui
index 38709bf2..c7311efe 100644
--- a/data/ui/shortcuts_window.ui
+++ b/data/ui/shortcuts_window.ui
@@ -21,6 +21,18 @@
win.show-help-overlay
+
+
+ New Window
+ app.new-window
+
+
+
+
+ Close Window
+ window.close
+
+
Quit
diff --git a/data/ui/switcher.ui b/data/ui/switcher.ui
deleted file mode 100644
index 9f45d7d0..00000000
--- a/data/ui/switcher.ui
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
- stack
- Collision
-
-
- False
- False
-
-
- stack
-
-
-
diff --git a/data/ui/tools.ui b/data/ui/tools.ui
deleted file mode 100644
index 11a0b0ea..00000000
--- a/data/ui/tools.ui
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- 1
- 32
- 1
- 45
-
-
- vertical
- 20
-
-
- Checksum
- 1
- word-char
- center
- center
- 1
-
-
-
-
-
-
-
- 16
- test-pass-symbolic
- end
- end
- 5
- 5
- 0
- 0
-
-
-
-
-
-
- MD5,SHA-1,SHA-256 or SHA-512 Hash
- start
- start
- fill
- 22
- 14
- 11
- char
- 1
- 0
-
-
-
-
-
-
-
-
-
-
-
- vertical
- 20
-
-
- File
- 1
- word-char
- center
- center
- 1
-
-
-
-
-
- Select Another File to Check Against
- 125
- 1
-
-
- vertical
- center
- 12
- center
-
-
- 36
- paper-symbolic
-
-
-
-
- Choose File...
- 15
- end
-
-
-
-
-
-
-
-
-
-
-
- Choose a File
- 1
-
-
diff --git a/data/ui/welcomer.ui b/data/ui/welcomer.ui
deleted file mode 100644
index bf53f1e1..00000000
--- a/data/ui/welcomer.ui
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
- 1
- dev.geopjr.Collision
- Collision
- Check hashes for your files
-
-
- center
- _Open a File
- 1
-
-
-
-
-
-
- Choose a File
- 1
-
-
diff --git a/nautilus-extension/collision-extension.py b/nautilus-extension/collision-extension.py
index 9fc6437c..ef0767dc 100644
--- a/nautilus-extension/collision-extension.py
+++ b/nautilus-extension/collision-extension.py
@@ -35,17 +35,18 @@ def __init__(self):
# Executed method when the right-click entry is clicked
def openWithCollision(self, menu, files):
- file_path = repr(unquote(urlparse(files[0].get_uri()).path))
- if self.collision != "collision":
- file_path = "@@ " + file_path + " @@"
- Popen(self.collision + " " + file_path, shell=True) # Collision need to be in your PATH
+ for file in files:
+ file_path = repr(unquote(urlparse(file.get_uri()).path))
+ if self.collision != "collision":
+ file_path = "@@ " + file_path + " @@"
+ Popen(self.collision + " " + file_path, shell=True) # Collision need to be in your PATH
def get_background_items(self, files):
return
def get_file_items(self, files):
- # The option doesn't appear when there is more than 1 file selected or when a folder is selected
- if len(files) > 1 or (len(files) == 1 and files[0].is_directory()) or self.collision == False:
+ # The option doesn't appear when a folder is selected
+ if any(x.is_directory() for x in files) or self.collision == False:
return ()
menu_item = Nautilus.MenuItem(
diff --git a/po/LINGUAS b/po/LINGUAS
index 982e835f..11bd4a43 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -26,3 +26,5 @@ ta
tr
uk
pt
+be
+ro
diff --git a/po/POTFILES b/po/POTFILES
index e70e6579..d507cc5d 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -1,9 +1,4 @@
data/dev.geopjr.Collision.desktop.in
data/dev.geopjr.Collision.metainfo.xml.in
-data/ui/welcomer.ui
-data/ui/tools.ui
-data/ui/header_right.ui
-data/ui/header_left.ui
-data/ui/hash_list.ui
+data/ui/application.ui
data/ui/shortcuts_window.ui
-data/ui/switcher.ui
diff --git a/po/ar.po b/po/ar.po
index 2303f8a1..d66fd321 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
-"PO-Revision-Date: 2023-04-13 19:48+0000\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
+"PO-Revision-Date: 2023-05-11 16:50+0000\n"
"Last-Translator: Ali Aljishi \n"
"Language-Team: Arabic \n"
@@ -19,26 +19,27 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 4.17-dev\n"
+"X-Generator: Weblate 4.18-dev\n"
#: data/dev.geopjr.Collision.desktop.in:6
-#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/switcher.ui:6
-#: data/ui/welcomer.ui:7 src/modules/functions/about_action.cr:11
-#: src/modules/views/main.cr:10
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
msgid "Collision"
-msgstr "كولجن"
+msgstr "تصادم"
#: data/dev.geopjr.Collision.desktop.in:7
msgid "Hash Generator"
msgstr "مولِّد هاش"
-#. Note: If it's difficult to translate, the meaning can be changed to "Check your files' hashes"
-#. or "Check the hashes of your files".
#: data/dev.geopjr.Collision.desktop.in:8
-#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/welcomer.ui:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
msgid "Check hashes for your files"
msgstr "تحقَّق من هاش ملفَّاتك"
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
+
#: data/dev.geopjr.Collision.metainfo.xml.in:14
msgid ""
"Verifying that a file you downloaded or received is actually the one you "
@@ -47,9 +48,9 @@ msgid ""
"tampered with, due to the mass increase of malicious webpages and other "
"actors."
msgstr ""
-"يشيع التغافل عن التحقُّق من أن الملفَّات التي نزَّلتها هي حقًّا ما تريد، "
-"ولعلَّ سبب ذلك هو استغراقه وقتًا كثيرًا، ويتزامن هذا مع سهولة الحصول على "
-"ملفَّات معدَّلة، وذلك لأن أعداد الصفحات الخبيثة وغيرهم من جهات يزداد تزايدًا."
+"يشيع التغافل عن التحقُّق من أن الملفَّات التي نزَّلتها هي حقًّا ما تريد، ولعلَّ سبب "
+"ذلك هو استغراقه وقتًا كثيرًا، ويتزامن هذا مع سهولة الحصول على ملفَّات معدَّلة، "
+"وذلك لأن أعداد الصفحات الخبيثة وغيرهم من جهات يزداد تزايدًا."
#: data/dev.geopjr.Collision.metainfo.xml.in:20
msgid ""
@@ -57,98 +58,82 @@ msgid ""
"allowing anyone, from any age and experience group, to generate, compare and "
"verify MD5, SHA-256, SHA-512 and SHA-1 hashes."
msgstr ""
-"هدف هذه الأداة حلُّ ذلك. واجهة كولجن سهلة ومرتَّبة، وهذا يتيح لأيِّ أحد أكان "
-"خبيرًا أم مبتدئًا، كبيرًا أم صغيرًا، بأن يولِّد ويقارن هاشات إمدي٥ "
-"وإسإتشأي-٢٥٦ وإسإتشأي-٥١٢ وإسإتشأي-١."
-
-#: data/ui/welcomer.ui:12
-msgid "_Open a File"
-msgstr "ا_فتح ملفًّا"
+"هدف هذه الأداة حلُّ ذلك. واجهة «تصادم» سهلة ومرتَّبة، وهذا يتيح لأيِّ أحد أكان "
+"خبيرًا أم مبتدئًا، كبيرًا أم صغيرًا، بأن يولِّد ويقارن هاشات إمدي٥ وإسإتشأي-٢٥٦ "
+"وإسإتشأي-٥١٢ وإسإتشأي-١."
-#: data/ui/welcomer.ui:25 data/ui/tools.ui:117 data/ui/header_left.ui:18
-msgid "Choose a File"
-msgstr "اختر ملفًّا"
-
-#: data/ui/tools.ui:13
-msgid "Checksum"
-msgstr "المجموع الاختباري"
+#: data/ui/application.ui:6
+msgid "_New Window"
+msgstr ""
-#. Don't translate the hash names if possible.
-#: data/ui/tools.ui:43
-msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
-msgstr "هاش إمدي٥ أو إسإتشأي-٢٥٦ أو إسإتشأي-٥١٢ أو إسإتشأي-١"
+#: data/ui/application.ui:10
+msgid "_Compare Hash Functions"
+msgstr "_قارن وظائف هاش"
-#: data/ui/tools.ui:70
-msgid "File"
-msgstr "ملف"
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
+msgstr "ا_ختصارات لوح المفاتيح"
-#: data/ui/tools.ui:84
-msgid "Select Another File to Check Against"
-msgstr "اختر ملفًّا آخر لتقارنه"
+#: data/ui/application.ui:18
+msgid "_About Collision"
+msgstr "_عن «تصادم»"
-#: data/ui/tools.ui:101 src/modules/functions/feedback.cr:12
-msgid "Choose File..."
-msgstr "اختر ملفًّا..."
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "اختر ملفًّا"
-#: data/ui/header_right.ui:7
-msgid "_Compare Hash Functions"
-msgstr "_قارن وظائف هاش"
+#: data/ui/application.ui:59
+msgid "_Open"
+msgstr "ا_فتح"
-#: data/ui/header_right.ui:11
-msgid "_About Collision"
-msgstr "_عن كولجن"
+#: data/ui/application.ui:60
+msgid "Open…"
+msgstr "افتح…"
-#: data/ui/header_right.ui:19
+#: data/ui/application.ui:97
msgid "Menu"
msgstr "القائمة"
-#: data/ui/header_left.ui:8
-msgid "_Open"
-msgstr "ا_فتح"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "ا_فتح ملفًّا"
-#: data/ui/header_left.ui:9
-msgid "Open..."
-msgstr "افتح..."
+#: data/ui/application.ui:165
+msgid "Hash"
+msgstr "الهاش"
-#: data/ui/hash_list.ui:14 data/ui/hash_list.ui:34 data/ui/hash_list.ui:54
-#: data/ui/hash_list.ui:74
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
msgid "Copy"
msgstr "انسخ"
-#. Don't translate the hash names if possible.
-#: src/collision.cr:69
-msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
-msgstr "أدرج هاش إمدي٥\\إسإتشأي-٢٥٦\\إسإتشأي-٥١٢\\إسإتشأي-١"
+#: data/ui/application.ui:261
+msgid "Verify"
+msgstr "تحقَّق"
-#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
-#: src/modules/prerequisites.cr:14
-msgid ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
-msgstr ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "المجموع الاختباري"
-#. Name or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr ""
-"Ibrahim Muhammad \n"
-"Ali Aljishi "
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "هاش إمدي٥ أو إسإتشأي-٢٥٦ أو إسإتشأي-٥١٢ أو إسإتشأي-١"
-#: src/modules/functions/file_set.cr:7
-msgid "Hash"
-msgstr "الهاش"
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "أدرج هاش إمدي٥\\إسإتشأي-٢٥٦\\إسإتشأي-٥١٢\\إسإتشأي-١"
-#: src/modules/functions/file_set.cr:8
-msgid "Verify"
-msgstr "تحقَّق"
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "ملف"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "تحقَّق من الهاشات"
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "اختر ملفًّا آخر لتقارنه"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "ا_ختصارات لوح المفاتيح"
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "اختر ملفًّا…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -163,5 +148,31 @@ msgid "Show Keyboard Shortcuts"
msgstr "أظهر اختصارات لوح المفاتيح"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "أنهِ"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "تحقَّق من الهاشات"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr ""
+"Ibrahim Muhammad \n"
+"Ali Aljishi "
diff --git a/po/be.po b/po/be.po
new file mode 100644
index 00000000..b161a49d
--- /dev/null
+++ b/po/be.po
@@ -0,0 +1,178 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Maksim , 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: dev.geopjr.Collision\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
+"PO-Revision-Date: 2023-06-21 03:04+0000\n"
+"Last-Translator: Maksim \n"
+"Language-Team: Belarusian \n"
+"Language: be\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.18.1\n"
+
+#: data/dev.geopjr.Collision.desktop.in:6
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
+msgid "Collision"
+msgstr "Collision"
+
+#: data/dev.geopjr.Collision.desktop.in:7
+msgid "Hash Generator"
+msgstr "Генератар хэшаў"
+
+#: data/dev.geopjr.Collision.desktop.in:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
+msgid "Check hashes for your files"
+msgstr "Праверце хэшы сваіх файлаў"
+
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
+
+#: data/dev.geopjr.Collision.metainfo.xml.in:14
+msgid ""
+"Verifying that a file you downloaded or received is actually the one you "
+"were expecting is often overlooked or too time-consuming to do. At the same "
+"time, it has become very easy to get your hands on a file that has been "
+"tampered with, due to the mass increase of malicious webpages and other "
+"actors."
+msgstr ""
+"Правяраць тое, што файл, які вы загрузілі ці атрымалі - гэта сапраўды той "
+"файл, які вам патрэбен, займае шмат часу. У той жа час, стала вельмі лёгка "
+"атрымаць файл, які быў падроблены, з-за масавага павелічэння шкоднасных вэб-"
+"старонак і іншага ПЗ."
+
+#: data/dev.geopjr.Collision.metainfo.xml.in:20
+msgid ""
+"This tool aims to solve that. Collision comes with a simple & clean UI, "
+"allowing anyone, from any age and experience group, to generate, compare and "
+"verify MD5, SHA-256, SHA-512 and SHA-1 hashes."
+msgstr ""
+"Гэты інструмент закліканы вырашыць гэтую праблему. Collision пастаўляецца з "
+"простым & чысты UI, які дазваляе любому чалавеку любога ўзросту і "
+"досведу генераваць, параўноўваць і правяраць хэшы MD5, SHA-256, SHA-512 і "
+"SHA-1."
+
+#: data/ui/application.ui:6
+msgid "_New Window"
+msgstr ""
+
+#: data/ui/application.ui:10
+msgid "_Compare Hash Functions"
+msgstr "_Функцыі параўнання хэшаў"
+
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
+msgstr "_Камбінацыі клавіш"
+
+#: data/ui/application.ui:18
+msgid "_About Collision"
+msgstr "_Пра Collision"
+
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "Выбраць файл"
+
+#: data/ui/application.ui:59
+msgid "_Open"
+msgstr "_Адкрыць"
+
+#: data/ui/application.ui:60
+msgid "Open…"
+msgstr "Адкрыць…"
+
+#: data/ui/application.ui:97
+msgid "Menu"
+msgstr "Меню"
+
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Адкрыць файл"
+
+#: data/ui/application.ui:165
+msgid "Hash"
+msgstr "Хэш"
+
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Скапіяваць"
+
+#: data/ui/application.ui:261
+msgid "Verify"
+msgstr "Праверыць"
+
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Кантрольная сума"
+
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5, SHA-1, SHA-256 ці SHA-512 хэш"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Устаўце хэш MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Файл"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Абярыце іншы файл, каб параўноўваць"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Абярыце файл…"
+
+#: data/ui/shortcuts_window.ui:11
+msgid "General"
+msgstr "Агульная"
+
+#: data/ui/shortcuts_window.ui:14
+msgid "Open a File"
+msgstr "Адкрыць файл"
+
+#: data/ui/shortcuts_window.ui:20
+msgid "Show Keyboard Shortcuts"
+msgstr "Паказаць камбінацыі клавіш"
+
+#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
+msgid "Quit"
+msgstr "Выйсці"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Праверыць хешы"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://be.wikipedia.org/wiki/"
+"%D0%9F%D0%B0%D1%80%D0%B0%D1%9E%D0%BD%D0%B0%D0%BD%D0%BD%D0%B5_%D0%BA%D1%80%D1%8B%D0%BF%D1%82%D0%B0%D0%B3%D1%80%D0%B0%D1%84%D1%96%D1%87%D0%BD%D1%8B%D1%85_%D1%85%D1%8D%D1%88-"
+"%D1%84%D1%83%D0%BD%D0%BA%D1%86%D1%8B%D0%B9"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Maks"
diff --git a/po/ber.po b/po/ber.po
index 3ae8b1af..9fbafb94 100644
--- a/po/ber.po
+++ b/po/ber.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-06-19 18:14+0000\n"
"Last-Translator: assemer_layase \n"
"Language-Team: Berber or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr ""
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Checksum"
-#: src/modules/functions/file_set.cr:7
-msgid "Hash"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
msgstr ""
-#: src/modules/functions/file_set.cr:8
-msgid "Verify"
-msgstr ""
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "sekcem yiwen MD5/SHA-1/SHA-256/SHA-512 Hash"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
+#: data/ui/application.ui:354
+msgid "File"
msgstr ""
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr ""
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "dmed a fichier niden iwaken anwali ma kifkif-iten"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "xttired yiwen fichier…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -151,5 +139,28 @@ msgid "Show Keyboard Shortcuts"
msgstr ""
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr ""
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr ""
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr ""
diff --git a/po/ca.po b/po/ca.po
index 8b6a3bcb..7af7192d 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-12-12 20:24+0000\n"
"Last-Translator: Maite Guix \n"
"Language-Team: Catalan or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Maite Guix"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Obrir un fitxer"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Copiar"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Verificar"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Comprovar els hashes"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Suma de control"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Dreceres de teclat"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Hash MD5, SHA-1, SHA-256 o SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Inserir un hash MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Fitxer"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Seleccionar un altre fitxer a comprovar"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Triar el fitxer…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -160,5 +147,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "Mostra les dreceres de teclat"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Sortir"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Comprovar els hashes"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Maite Guix"
diff --git a/po/cs.po b/po/cs.po
index cd9ea50a..c35f4e2f 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-12-20 19:47+0000\n"
"Last-Translator: vikdevelop \n"
"Language-Team: Czech or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "vikdevelop "
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Otevřít soubor"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Kontrolní součet"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Kopírovat"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Ověřit"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Zkontrolovat hashe"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Kontrolní součet"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Klávesové zkratky"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Kontrolní součet MD5, SHA-1, SHA-256 nebo SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Vložte kontrolní součet MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Soubor"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Vyberte jiný soubor ke kontrole"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Vyberte soubor…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -159,5 +147,28 @@ msgid "Show Keyboard Shortcuts"
msgstr "Zobrazit klávesové zkratky"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Ukončit"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Zkontrolovat hashe"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr "https://cs.wikipedia.org/wiki/Kryptografická_hašovací_funkce"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "vikdevelop "
diff --git a/po/de.po b/po/de.po
index 6d38fa67..60d98f4d 100644
--- a/po/de.po
+++ b/po/de.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2023-01-2 12:14+0100\n"
"Last-Translator: gregorni \n"
"Language-Team: German or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr ""
-"Milo Ivir\n"
-"Panagiotis Vasilopoulos\n"
-"Philipp Kiemle\n"
-"Maximilian Salomon\n"
-"gregorni"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Datei öffnen"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Kopieren"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Verifiziere"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Hashes prüfen"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Prüfsumme"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Tastenkürzel"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5,SHA-1,SHA-256 oder SHA-512 Hash"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Fügen Sie einen MD5/SHA-1/SHA-256/SHA-512 Hash ein"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Datei"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Wählen Sie eine Datei zum Prüfen aus"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Datei auswählen…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -170,5 +152,35 @@ msgid "Show Keyboard Shortcuts"
msgstr "Tastenkürzel anzeigen"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Schließen"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Hashes prüfen"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://de.wikipedia.org/wiki/"
+"Kryptographische_Hashfunktion#%C3%9Cbersicht_von_Hashfunktionen"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr ""
+"Milo Ivir\n"
+"Panagiotis Vasilopoulos\n"
+"Philipp Kiemle\n"
+"Maximilian Salomon\n"
+"gregorni"
diff --git a/po/dev.geopjr.Collision.pot b/po/dev.geopjr.Collision.pot
index 8ff607f0..129f9725 100644
--- a/po/dev.geopjr.Collision.pot
+++ b/po/dev.geopjr.Collision.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: dev.geopjr.Collision\n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -17,9 +17,9 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: data/dev.geopjr.Collision.desktop.in:6 data/dev.geopjr.Collision.metainfo.xml.in:4
-#: data/ui/switcher.ui:6 data/ui/welcomer.ui:7
-#: src/modules/functions/about_action.cr:11 src/modules/views/main.cr:10
+#: data/dev.geopjr.Collision.desktop.in:6
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
msgid "Collision"
msgstr ""
@@ -27,13 +27,15 @@ msgstr ""
msgid "Hash Generator"
msgstr ""
-#. Note: If it's difficult to translate, the meaning can be changed to "Check your files' hashes"
-#. or "Check the hashes of your files".
#: data/dev.geopjr.Collision.desktop.in:8
-#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/welcomer.ui:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
msgid "Check hashes for your files"
msgstr ""
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
+
#: data/dev.geopjr.Collision.metainfo.xml.in:14
msgid ""
"Verifying that a file you downloaded or received is actually the one you "
@@ -50,90 +52,77 @@ msgid ""
"verify MD5, SHA-256, SHA-512 and SHA-1 hashes."
msgstr ""
-#: data/ui/welcomer.ui:12
-msgid "_Open a File"
-msgstr ""
-
-#: data/ui/welcomer.ui:25 data/ui/tools.ui:117 data/ui/header_left.ui:18
-msgid "Choose a File"
-msgstr ""
-
-#: data/ui/tools.ui:13
-msgid "Checksum"
+#: data/ui/application.ui:6
+msgid "_New Window"
msgstr ""
-#. Don't translate the hash names if possible.
-#: data/ui/tools.ui:43
-msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+#: data/ui/application.ui:10
+msgid "_Compare Hash Functions"
msgstr ""
-#: data/ui/tools.ui:70
-msgid "File"
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
msgstr ""
-#: data/ui/tools.ui:84
-msgid "Select Another File to Check Against"
+#: data/ui/application.ui:18
+msgid "_About Collision"
msgstr ""
-#: data/ui/tools.ui:101 src/modules/functions/feedback.cr:12
-msgid "Choose File..."
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
msgstr ""
-#: data/ui/header_right.ui:7
-msgid "_Compare Hash Functions"
+#: data/ui/application.ui:59
+msgid "_Open"
msgstr ""
-#: data/ui/header_right.ui:11
-msgid "_About Collision"
+#: data/ui/application.ui:60
+msgid "Open…"
msgstr ""
-#: data/ui/header_right.ui:19
+#: data/ui/application.ui:97
msgid "Menu"
msgstr ""
-#: data/ui/header_left.ui:8
-msgid "_Open"
+#: data/ui/application.ui:118
+msgid "_Open a File"
msgstr ""
-#: data/ui/header_left.ui:9
-msgid "Open..."
+#: data/ui/application.ui:165
+msgid "Hash"
msgstr ""
-#: data/ui/hash_list.ui:14 data/ui/hash_list.ui:34 data/ui/hash_list.ui:54
-#: data/ui/hash_list.ui:74
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
msgid "Copy"
msgstr ""
-#. Don't translate the hash names if possible.
-#: src/collision.cr:69
-msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+#: data/ui/application.ui:261
+msgid "Verify"
msgstr ""
-#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
-#: src/modules/prerequisites.cr:14
-msgid ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+#: data/ui/application.ui:274
+msgid "Checksum"
msgstr ""
-#. Name or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
msgstr ""
-#: src/modules/functions/file_set.cr:7
-msgid "Hash"
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
msgstr ""
-#: src/modules/functions/file_set.cr:8
-msgid "Verify"
+#: data/ui/application.ui:354
+msgid "File"
msgstr ""
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
msgstr ""
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
+#: data/ui/application.ui:411
+msgid "Choose File…"
msgstr ""
#: data/ui/shortcuts_window.ui:11
@@ -149,5 +138,28 @@ msgid "Show Keyboard Shortcuts"
msgstr ""
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr ""
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr ""
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr ""
diff --git a/po/el.po b/po/el.po
index 4c14ad9c..4431c124 100644
--- a/po/el.po
+++ b/po/el.po
@@ -1,14 +1,13 @@
# Greek translation for dev.geopjr.Collision.
# Copyright (C) 2021 THE dev.geopjr.Collision'S COPYRIGHT HOLDER
# This file is distributed under the same license as the dev.geopjr.Collision package.
-# Evangelos Paterakis , 2021.
-#
+# Evangelos Paterakis , 2021, 2023.
msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
-"PO-Revision-Date: 2022-02-18 00:32+0000\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
+"PO-Revision-Date: 2023-09-23 20:23+0000\n"
"Last-Translator: Evangelos Paterakis \n"
"Language-Team: Greek \n"
@@ -17,12 +16,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.11-dev\n"
+"X-Generator: Weblate 5.1-dev\n"
#: data/dev.geopjr.Collision.desktop.in:6
-#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/switcher.ui:6
-#: data/ui/welcomer.ui:7 src/modules/functions/about_action.cr:11
-#: src/modules/views/main.cr:10
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
msgid "Collision"
msgstr "Σύγκρουση"
@@ -30,13 +28,16 @@ msgstr "Σύγκρουση"
msgid "Hash Generator"
msgstr "Γεννήτρια Hash"
-#. Note: If it's difficult to translate, the meaning can be changed to "Check your files' hashes"
-#. or "Check the hashes of your files".
#: data/dev.geopjr.Collision.desktop.in:8
-#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/welcomer.ui:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
msgid "Check hashes for your files"
msgstr "Ελέγξτε hashes για τα αρχεία σας"
+#: data/dev.geopjr.Collision.desktop.in:12
+#, fuzzy
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr "md5;sha1;sha256;sha512;hash;"
+
#: data/dev.geopjr.Collision.metainfo.xml.in:14
msgid ""
"Verifying that a file you downloaded or received is actually the one you "
@@ -62,92 +63,78 @@ msgstr ""
"και ομάδα εμπειρίας, να δημιουργήσει, να συγκρίνει και να επαληθεύσει MD5, "
"SHA-256, SHA-512 και SHA-1 hashes."
-#: data/ui/welcomer.ui:12
-msgid "_Open a File"
-msgstr "_Ανοίξτε ένα Αρχείο"
-
-#: data/ui/welcomer.ui:25 data/ui/tools.ui:117 data/ui/header_left.ui:18
-msgid "Choose a File"
-msgstr "Επιλέξτε ένα Αρχείο"
+#: data/ui/application.ui:6
+msgid "_New Window"
+msgstr "_Νέο Παράθυρο"
-#: data/ui/tools.ui:13
-msgid "Checksum"
-msgstr "Checksum"
-
-#. Don't translate the hash names if possible.
-#: data/ui/tools.ui:43
-msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
-msgstr "MD5,SHA-1,SHA-256 ή SHA-512 Hash"
-
-#: data/ui/tools.ui:70
-msgid "File"
-msgstr "Αρχείο"
-
-#: data/ui/tools.ui:84
-msgid "Select Another File to Check Against"
-msgstr "Επιλέξτε ένα Άλλο Αρχείο για Έλεγχο"
-
-#: data/ui/tools.ui:101 src/modules/functions/feedback.cr:12
-msgid "Choose File..."
-msgstr "Επιλέξτε Αρχείο..."
-
-#: data/ui/header_right.ui:7
+#: data/ui/application.ui:10
msgid "_Compare Hash Functions"
msgstr "_Σύγκριση Συναρτήσεων Hash"
-#: data/ui/header_right.ui:11
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
+msgstr "_Συντομεύσεις Πληκτρολογίου"
+
+#: data/ui/application.ui:18
msgid "_About Collision"
msgstr "Σχετικά με το _Collision"
-#: data/ui/header_right.ui:19
-msgid "Menu"
-msgstr "Μενού"
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "Επιλέξτε ένα Αρχείο"
-#: data/ui/header_left.ui:8
+#: data/ui/application.ui:59
msgid "_Open"
msgstr "_Ανοίξτε"
-#: data/ui/header_left.ui:9
-msgid "Open..."
-msgstr "Ανοίξτε..."
-
-#: data/ui/hash_list.ui:14 data/ui/hash_list.ui:34 data/ui/hash_list.ui:54
-#: data/ui/hash_list.ui:74
-msgid "Copy"
-msgstr "Αντιγραφή"
-
-#. Don't translate the hash names if possible.
-#: src/collision.cr:69
-msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
-msgstr "Εισάγετε ένα MD5/SHA-1/SHA-256/SHA-512 Hash"
+#: data/ui/application.ui:60
+msgid "Open…"
+msgstr "Ανοίξτε…"
-#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
-#: src/modules/prerequisites.cr:14
-msgid ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
-msgstr ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+#: data/ui/application.ui:97
+msgid "Menu"
+msgstr "Μενού"
-#. Name or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Evangelos Paterakis"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Ανοίξτε ένα Αρχείο"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Αντιγραφή"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Επαληθεύστε"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Ελέγξτε Hashes"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Checksum"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Συντομεύσεις Πληκτρολογίου"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5,SHA-1,SHA-256 ή SHA-512 Hash"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Εισάγετε ένα MD5/SHA-1/SHA-256/SHA-512 Hash"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Αρχείο"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Επιλέξτε ένα Άλλο Αρχείο για Έλεγχο"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Επιλέξτε Αρχείο…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -162,5 +149,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "Εμφάνιση Συντομεύσεων Πληκτρολογίου"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr "Νέο Παράθυρο"
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr "Κλείστε το Παράθυρο"
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Έ_ξοδος"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Ελέγξτε Hashes"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Evangelos Paterakis"
diff --git a/po/es.po b/po/es.po
index 83c05e25..53f54cd0 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-12-16 22:09+0000\n"
"Last-Translator: Óscar Fernández Díaz \n"
"Language-Team: Spanish or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Óscar Fernández Díaz "
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Abrir un archivo"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Copiar"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Verificar"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Comprobar hashes"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Suma de verificación"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "Atajos del _teclado"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Hash MD5,SHA-1,SHA-256 o SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Insertar un hash MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Archivo"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Seleccionar otro archivo para comparar"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Elegir archivo…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -161,5 +148,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "Mostrar Atajos del teclado"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Salir"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Comprobar hashes"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Óscar Fernández Díaz "
diff --git a/po/et.po b/po/et.po
index 5a34db2d..7624d676 100644
--- a/po/et.po
+++ b/po/et.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-06-08 15:27+0000\n"
"Last-Translator: Henri \n"
"Language-Team: Estonian or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Henri https://hen.ee"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Ava fail"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Räsiväärtus"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Kopeeri"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Kontrolli"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr ""
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Kontrollsumma"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr ""
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5,SHA-1,SHA-256 või SHA-512 hash"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Sisesta MD5/SHA-1/SHA-256/SHA-512 räsiväärtus"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Fail"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Vali teine fail, millega võrrelda"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Vali fail…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -158,5 +145,29 @@ msgid "Show Keyboard Shortcuts"
msgstr ""
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr ""
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr ""
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Henri https://hen.ee"
diff --git a/po/eu.po b/po/eu.po
index ba2faef1..bed17099 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -1,13 +1,13 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-# Sergio Varela , 2022.
+# Sergio Varela , 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
-"PO-Revision-Date: 2022-04-15 23:37+0000\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
+"PO-Revision-Date: 2023-09-15 11:06+0000\n"
"Last-Translator: Sergio Varela \n"
"Language-Team: Basque \n"
@@ -16,12 +16,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.12-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: data/dev.geopjr.Collision.desktop.in:6
-#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/switcher.ui:6
-#: data/ui/welcomer.ui:7 src/modules/functions/about_action.cr:11
-#: src/modules/views/main.cr:10
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
msgid "Collision"
msgstr "Collision"
@@ -29,13 +28,15 @@ msgstr "Collision"
msgid "Hash Generator"
msgstr "Hashe-sorgailua"
-#. Note: If it's difficult to translate, the meaning can be changed to "Check your files' hashes"
-#. or "Check the hashes of your files".
#: data/dev.geopjr.Collision.desktop.in:8
-#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/welcomer.ui:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
msgid "Check hashes for your files"
msgstr "Egiaztatu zure artxiboetako hasheak"
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
+
#: data/dev.geopjr.Collision.metainfo.xml.in:14
msgid ""
"Verifying that a file you downloaded or received is actually the one you "
@@ -60,96 +61,82 @@ msgstr ""
"taldetako edozein pertsonak MD5, SHA-256, SHA-512 eta SHA-1 hasheak sortu, "
"alderatu eta egiaztatu ahal izango ditu."
-#: data/ui/welcomer.ui:12
-msgid "_Open a File"
-msgstr "_Artxibo bat ireki"
-
-#: data/ui/welcomer.ui:25 data/ui/tools.ui:117 data/ui/header_left.ui:18
-msgid "Choose a File"
-msgstr "Aukeratu fitxategi bat"
-
-#: data/ui/tools.ui:13
-msgid "Checksum"
-msgstr "Egiaztapenaren batura (Checksum)"
-
-#. Don't translate the hash names if possible.
-#: data/ui/tools.ui:43
-msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
-msgstr "MD5,SHA-1,SHA-256 edo SHA-512 Hash"
-
-#: data/ui/tools.ui:70
-msgid "File"
-msgstr "Artxiboa"
-
-#: data/ui/tools.ui:84
-msgid "Select Another File to Check Against"
-msgstr "Aukeratu beste fitxategi bat alderatzeko"
-
-#: data/ui/tools.ui:101 src/modules/functions/feedback.cr:12
-msgid "Choose File..."
-msgstr "Aukeratu fitxategia…"
+#: data/ui/application.ui:6
+msgid "_New Window"
+msgstr ""
-#: data/ui/header_right.ui:7
+#: data/ui/application.ui:10
msgid "_Compare Hash Functions"
msgstr "_Konparatu hash funtzioak"
-#: data/ui/header_right.ui:11
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
+msgstr "_Teklatuaren lasterbideak"
+
+#: data/ui/application.ui:18
msgid "_About Collision"
msgstr "_Kolisioari buruz"
-#: data/ui/header_right.ui:19
-msgid "Menu"
-msgstr "Menua"
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "Aukeratu fitxategi bat"
-#: data/ui/header_left.ui:8
+#: data/ui/application.ui:59
msgid "_Open"
msgstr "_Ireki"
-#: data/ui/header_left.ui:9
-msgid "Open..."
+#: data/ui/application.ui:60
+msgid "Open…"
msgstr "Ireki…"
-#: data/ui/hash_list.ui:14 data/ui/hash_list.ui:34 data/ui/hash_list.ui:54
-#: data/ui/hash_list.ui:74
-msgid "Copy"
-msgstr "Kopiatu"
-
-#. Don't translate the hash names if possible.
-#: src/collision.cr:69
-msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
-msgstr "MD5/SHA-1/SHA-256/SHA-512 hash bat txertatu"
-
-#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
-#: src/modules/prerequisites.cr:14
-msgid ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
-msgstr ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+#: data/ui/application.ui:97
+msgid "Menu"
+msgstr "Menua"
-#. Name or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Sergio Varela "
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Artxibo bat ireki"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Kopiatu"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Egiaztatu"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr ""
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Egiaztapenaren batura (Checksum)"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr ""
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5,SHA-1,SHA-256 edo SHA-512 Hash"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "MD5/SHA-1/SHA-256/SHA-512 hash bat txertatu"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Artxiboa"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Aukeratu beste fitxategi bat alderatzeko"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Aukeratu fitxategia…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
-msgstr ""
+msgstr "Orokorra"
#: data/ui/shortcuts_window.ui:14
msgid "Open a File"
@@ -157,8 +144,32 @@ msgstr "Artxibo bat ireki"
#: data/ui/shortcuts_window.ui:20
msgid "Show Keyboard Shortcuts"
-msgstr ""
+msgstr "Erakutsi teklatuaren lasterbideak"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
+msgstr "Irten"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Hasheak egiaztatu"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Sergio Varela "
diff --git a/po/fa.po b/po/fa.po
index 2d29320d..87f368bb 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2023-03-29 12:41+0000\n"
"Last-Translator: MohammadSaleh Kamyab \n"
"Language-Team: Persian or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "محمدصالح کامیاب "
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "گشودن یک _پرونده"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "هش"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "رونوشت"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "اعتبارسنجی"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "بررسی هشها"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "جمعآزما"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_میانبرهای صفحهکلید"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "هش MD5، SHA-1، SHA-256 یا SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "افزودن یک هش MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "پرونده"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "گزینش یک پروندهٔ دیگر برای بررسی متقابل"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "انتخاب پرونده…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -161,5 +148,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "نمایش میانبرهای صفحهکلید"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "ترک"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "بررسی هشها"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "محمدصالح کامیاب "
diff --git a/po/fi.po b/po/fi.po
index 5bb1edd6..97cef8c6 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -1,13 +1,13 @@
# Finnish translation for dev.geopjr.Collision.
# Copyright (C) 2021 THE dev.geopjjr.Collision'S COPYRIGHT HOLDER
# This file is distributed under the same license as the dev.geopjr.Collision package.
-# Jiri Grönroos , 2021, 2022.
+# Jiri Grönroos , 2021, 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
-"PO-Revision-Date: 2022-12-28 19:48+0000\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
+"PO-Revision-Date: 2023-09-20 07:54+0000\n"
"Last-Translator: Jiri Grönroos \n"
"Language-Team: Finnish \n"
@@ -16,26 +16,27 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.15.1-dev\n"
+"X-Generator: Weblate 5.1-dev\n"
#: data/dev.geopjr.Collision.desktop.in:6
-#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/switcher.ui:6
-#: data/ui/welcomer.ui:7 src/modules/functions/about_action.cr:11
-#: src/modules/views/main.cr:10
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
msgid "Collision"
-msgstr ""
+msgstr "Collision"
#: data/dev.geopjr.Collision.desktop.in:7
msgid "Hash Generator"
msgstr "Tiivisteen muodostaja"
-#. Note: If it's difficult to translate, the meaning can be changed to "Check your files' hashes"
-#. or "Check the hashes of your files".
#: data/dev.geopjr.Collision.desktop.in:8
-#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/welcomer.ui:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
msgid "Check hashes for your files"
msgstr "Tarkista tiedostojesi tiivisteet"
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
+
#: data/dev.geopjr.Collision.metainfo.xml.in:14
msgid ""
"Verifying that a file you downloaded or received is actually the one you "
@@ -44,6 +45,11 @@ msgid ""
"tampered with, due to the mass increase of malicious webpages and other "
"actors."
msgstr ""
+"Lataamasi tai vastaanottamasi tiedoston vahvistaminen, että se todella on "
+"mitä sen oletat olevan, jää usein huomiotta tai vie liian paljon aikaa. "
+"Samanaikaisesti peukaloitujen tiedostojen leviäminen haitallisten "
+"verkkosivustojen ja muiden pahantahtoisten toimijoiden toimesta on aiempaa "
+"yleisempää."
#: data/dev.geopjr.Collision.metainfo.xml.in:20
msgid ""
@@ -51,93 +57,83 @@ msgid ""
"allowing anyone, from any age and experience group, to generate, compare and "
"verify MD5, SHA-256, SHA-512 and SHA-1 hashes."
msgstr ""
+"Tämä työkalu pyrkii vastaamaan haasteeseen. Collisionissa on yksinkertainen "
+"ja helppokäyttöinen käyttöliittymä, joka mahdollista kenen tahansa ikään tai "
+"kokemukseen katsomatta luoda, vertailla ja vahvistaa MD5-, SHA-256-, "
+"SHA-512- ja SHA-1-tiivisteitä."
-#: data/ui/welcomer.ui:12
-msgid "_Open a File"
-msgstr "_Avaa tiedosto"
-
-#: data/ui/welcomer.ui:25 data/ui/tools.ui:117 data/ui/header_left.ui:18
-msgid "Choose a File"
-msgstr "Valitse tiedosto"
-
-#: data/ui/tools.ui:13
-msgid "Checksum"
-msgstr "Tarkistussumma"
-
-#. Don't translate the hash names if possible.
-#: data/ui/tools.ui:43
-msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
-msgstr "MD5- , SHA-1- , SHA-256- tai SHA-512-tiiviste"
-
-#: data/ui/tools.ui:70
-msgid "File"
-msgstr "Tiedosto"
-
-#: data/ui/tools.ui:84
-msgid "Select Another File to Check Against"
-msgstr "Valitse toinen tiedosto vertailtavaksi"
-
-#: data/ui/tools.ui:101 src/modules/functions/feedback.cr:12
-msgid "Choose File..."
-msgstr "Valitse tiedosto..."
+#: data/ui/application.ui:6
+msgid "_New Window"
+msgstr ""
-#: data/ui/header_right.ui:7
+#: data/ui/application.ui:10
msgid "_Compare Hash Functions"
msgstr "_Vertaa tiivistefunktioita"
-#: data/ui/header_right.ui:11
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
+msgstr "_Pikanäppäimet"
+
+#: data/ui/application.ui:18
msgid "_About Collision"
msgstr "_Tietoja - Collision"
-#: data/ui/header_right.ui:19
-msgid "Menu"
-msgstr "Valikko"
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "Valitse tiedosto"
-#: data/ui/header_left.ui:8
+#: data/ui/application.ui:59
msgid "_Open"
msgstr "_Avaa"
-#: data/ui/header_left.ui:9
-msgid "Open..."
-msgstr "Avaa..."
-
-#: data/ui/hash_list.ui:14 data/ui/hash_list.ui:34 data/ui/hash_list.ui:54
-#: data/ui/hash_list.ui:74
-msgid "Copy"
-msgstr "Kopioi"
-
-#. Don't translate the hash names if possible.
-#: src/collision.cr:69
-msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
-msgstr "Syötä MD5/SHA-1/SHA-256/SHA-512-tiiviste"
+#: data/ui/application.ui:60
+msgid "Open…"
+msgstr "Avaa…"
-#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
-#: src/modules/prerequisites.cr:14
-msgid ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
-msgstr ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+#: data/ui/application.ui:97
+msgid "Menu"
+msgstr "Valikko"
-#. Name or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Jiri Grönroos"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Avaa tiedosto"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Tiiviste"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Kopioi"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Vahvista"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Tarkista tiivisteet"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Tarkistussumma"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Pikanäppäimet"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5- , SHA-1- , SHA-256- tai SHA-512-tiiviste"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Syötä MD5/SHA-1/SHA-256/SHA-512-tiiviste"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Tiedosto"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Valitse toinen tiedosto vertailtavaksi"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Valitse tiedosto…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -152,5 +148,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "Näytä pikanäppäimet"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Lopeta"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Tarkista tiivisteet"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Jiri Grönroos"
diff --git a/po/fr.po b/po/fr.po
index e984a64d..c36707b4 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-12-16 22:09+0000\n"
"Last-Translator: rene-coty \n"
"Language-Team: French or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Irénée Thirion"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Ouvrir un fichier"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hachage"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Copier"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Vérifier"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Sommes de contrôle"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Somme de contrôle"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "Raccourcis _clavier"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Hachage MD5, SHA-1, SHA-256 ou SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Insérer un hachage MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Fichier"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Sélectionner un autre fichier pour vérifier la correspondance"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Choisir un fichier…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -162,5 +149,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "Afficher les raccourcis clavier"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Quitter"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Sommes de contrôle"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Irénée Thirion"
diff --git a/po/gl.po b/po/gl.po
index 530d7c6a..faf62148 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -1,16 +1,16 @@
# Galician translations for dev.geopjr.Collision package.
# Copyright (C) 2022 dev.geopjr.Collision'S COPYRIGHT HOLDER
# This file is distributed under the same license as the dev.geopjr.Collision package.
-# Fran Diéguez , 2022.
+# Fran Diéguez , 2022, 2023.
# antonpaidoslalin , 2022.
# Evangelos Paterakis , 2022.
msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
-"PO-Revision-Date: 2022-08-25 02:22+0000\n"
-"Last-Translator: Evangelos Paterakis \n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
+"PO-Revision-Date: 2023-08-30 23:04+0000\n"
+"Last-Translator: Fran Diéguez \n"
"Language-Team: Galician \n"
"Language: gl\n"
@@ -18,25 +18,26 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.14-dev\n"
+"X-Generator: Weblate 5.0.1-dev\n"
#: data/dev.geopjr.Collision.desktop.in:6
-#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/switcher.ui:6
-#: data/ui/welcomer.ui:7 src/modules/functions/about_action.cr:11
-#: src/modules/views/main.cr:10
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
msgid "Collision"
-msgstr "Collision"
+msgstr "Colisión"
#: data/dev.geopjr.Collision.desktop.in:7
msgid "Hash Generator"
-msgstr "Xerador de resumo (hash)"
+msgstr "Xerador de hashes"
-#. Note: If it's difficult to translate, the meaning can be changed to "Check your files' hashes"
-#. or "Check the hashes of your files".
#: data/dev.geopjr.Collision.desktop.in:8
-#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/welcomer.ui:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
msgid "Check hashes for your files"
-msgstr "Comproba os hash dos teus ficheiros"
+msgstr "Comprobe os hash dos seus ficheiros"
+
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
#: data/dev.geopjr.Collision.metainfo.xml.in:14
msgid ""
@@ -46,10 +47,10 @@ msgid ""
"tampered with, due to the mass increase of malicious webpages and other "
"actors."
msgstr ""
-"Adóitase omitir ou levar moito tempo verificar que un arquivo que baixaches "
-"ou recibiches é realmente o único que agardabas. Ao tempo, é doado conseguir "
-"arquivos manipulados debido ao masivo aumento das páxinas web maliciosas e "
-"outras fontes deste tipo de arquivos."
+"Verificar un ficheiro que se descargou ou recibido é realmente é algo que a "
+"miúdo se pasa por alto ou que leva demasiado tempo. Ao mesmo tempo, voltouse "
+"moi fácil facerse con un ficheiro que foi manipulado, debido ao aumento "
+"masivo de páxinas web maliciosas e outros actores."
#: data/dev.geopjr.Collision.metainfo.xml.in:20
msgid ""
@@ -57,100 +58,86 @@ msgid ""
"allowing anyone, from any age and experience group, to generate, compare and "
"verify MD5, SHA-256, SHA-512 and SHA-1 hashes."
msgstr ""
-"Esta ferramenta pretende solucionalo. Collision ven con unha interface "
-"simple e limpa permitindo a calquera, de calquera idade ou grupo de "
-"experiencia, xerar, comparar e verificar resumos SHA-256, SHA-512 e SHA-1."
-
-#: data/ui/welcomer.ui:12
-msgid "_Open a File"
-msgstr "_Abrir un ficheiro"
+"Esta ferramenta pretende solucionalo. Colisión ven con unha interface simple "
+"e limpa permitíndolle a calquera, de calquera idade ou grupo de experiencia, "
+"xerar, comparar e verificar resumos MD5, SHA-256, SHA-512 e SHA-1."
-#: data/ui/welcomer.ui:25 data/ui/tools.ui:117 data/ui/header_left.ui:18
-msgid "Choose a File"
-msgstr "Seleccionar un ficheiro"
-
-#: data/ui/tools.ui:13
-msgid "Checksum"
-msgstr "Suma de verificación"
+#: data/ui/application.ui:6
+msgid "_New Window"
+msgstr ""
-#. Don't translate the hash names if possible.
-#: data/ui/tools.ui:43
-msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
-msgstr "Resumos MD5,SHA-1,SHA-256 ou SHA-512"
+#: data/ui/application.ui:10
+msgid "_Compare Hash Functions"
+msgstr "_Comparar funcións hash"
-#: data/ui/tools.ui:70
-msgid "File"
-msgstr "Ficheiro"
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
+msgstr "Atallos de _teclado"
-#: data/ui/tools.ui:84
-msgid "Select Another File to Check Against"
-msgstr "Seleccione outro ficheiro para comprobar"
+#: data/ui/application.ui:18
+msgid "_About Collision"
+msgstr "_Sobre Colisión"
-#: data/ui/tools.ui:101 src/modules/functions/feedback.cr:12
-msgid "Choose File..."
-msgstr "Escoller Ficheiro..."
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "Seleccionar un ficheiro"
-#: data/ui/header_right.ui:7
-msgid "_Compare Hash Functions"
-msgstr "_Comparar funcións hash"
+#: data/ui/application.ui:59
+msgid "_Open"
+msgstr "_Abrir"
-#: data/ui/header_right.ui:11
-msgid "_About Collision"
-msgstr "_Sobre Collision"
+#: data/ui/application.ui:60
+msgid "Open…"
+msgstr "Abrir…"
-#: data/ui/header_right.ui:19
+#: data/ui/application.ui:97
msgid "Menu"
msgstr "Menú"
-#: data/ui/header_left.ui:8
-msgid "_Open"
-msgstr "_Abrir"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Abrir un ficheiro"
-#: data/ui/header_left.ui:9
-msgid "Open..."
-msgstr "Abrir..."
+#: data/ui/application.ui:165
+msgid "Hash"
+msgstr "Resumo"
-#: data/ui/hash_list.ui:14 data/ui/hash_list.ui:34 data/ui/hash_list.ui:54
-#: data/ui/hash_list.ui:74
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
msgid "Copy"
msgstr "Copiar"
-#. Don't translate the hash names if possible.
-#: src/collision.cr:69
-msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
-msgstr "Insira un hash MD5/SHA-1/SHA-256/SHA-512"
+#: data/ui/application.ui:261
+msgid "Verify"
+msgstr "Verificar"
-#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
-#: src/modules/prerequisites.cr:14
-msgid ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
-msgstr ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Suma de verificación"
-#. Name or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Fran Diéguez"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Resumo MD5,SHA-1,SHA-256 ou SHA-512"
-#: src/modules/functions/file_set.cr:7
-msgid "Hash"
-msgstr "Resumo"
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Insira un hash MD5/SHA-1/SHA-256/SHA-512"
-#: src/modules/functions/file_set.cr:8
-msgid "Verify"
-msgstr "Verificar"
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Ficheiro"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr ""
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Seleccione outro ficheiro contra o que comprobar"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr ""
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Escoller Ficheiro…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
-msgstr ""
+msgstr "Xeral"
#: data/ui/shortcuts_window.ui:14
msgid "Open a File"
@@ -158,8 +145,32 @@ msgstr "Abrir un ficheiro"
#: data/ui/shortcuts_window.ui:20
msgid "Show Keyboard Shortcuts"
-msgstr ""
+msgstr "Mostrar os atallos de teclado"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
+msgstr "Saír"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Comprobar hashes"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Fran Diéguez , 2023"
diff --git a/po/hr.po b/po/hr.po
index b1b76680..52043ecc 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -1,13 +1,13 @@
# Croatian translation for dev.geopjr.Collision.
# Copyright (C) 2021 THE dev.geopjjr.Collision'S COPYRIGHT HOLDER
# This file is distributed under the same license as the dev.geopjr.Collision package.
-# Milo Ivir , 2021, 2022.
+# Milo Ivir , 2021, 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
-"PO-Revision-Date: 2022-12-14 22:49+0000\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
+"PO-Revision-Date: 2023-05-22 09:50+0000\n"
"Last-Translator: Milo Ivir \n"
"Language-Team: Croatian \n"
@@ -17,12 +17,11 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.15-dev\n"
+"X-Generator: Weblate 4.18-dev\n"
#: data/dev.geopjr.Collision.desktop.in:6
-#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/switcher.ui:6
-#: data/ui/welcomer.ui:7 src/modules/functions/about_action.cr:11
-#: src/modules/views/main.cr:10
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
msgid "Collision"
msgstr "Kolizija"
@@ -30,13 +29,15 @@ msgstr "Kolizija"
msgid "Hash Generator"
msgstr "Hash generator"
-#. Note: If it's difficult to translate, the meaning can be changed to "Check your files' hashes"
-#. or "Check the hashes of your files".
#: data/dev.geopjr.Collision.desktop.in:8
-#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/welcomer.ui:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
msgid "Check hashes for your files"
msgstr "Provjeri hasheve tvojih datoteka"
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
+
#: data/dev.geopjr.Collision.metainfo.xml.in:14
msgid ""
"Verifying that a file you downloaded or received is actually the one you "
@@ -56,96 +57,82 @@ msgid ""
"allowing anyone, from any age and experience group, to generate, compare and "
"verify MD5, SHA-256, SHA-512 and SHA-1 hashes."
msgstr ""
-"Cilj ovog alata je riješiti taj problem. Collision sadrźi jednostavno i "
+"Cilj ovog alata je riješiti taj problem. „Kolizija” sadrźi jednostavno i "
"čisto korisničko sučelje koje omogućuje svima, bez obzira na dob i iskustvo, "
"generirati, usporediti i provjeriti MD5, SHA-256, SHA-512 i SHA-1 hasheve."
-#: data/ui/welcomer.ui:12
-msgid "_Open a File"
-msgstr "_Otvori datoteku"
-
-#: data/ui/welcomer.ui:25 data/ui/tools.ui:117 data/ui/header_left.ui:18
-msgid "Choose a File"
-msgstr "Odaberi datoteku"
-
-#: data/ui/tools.ui:13
-msgid "Checksum"
-msgstr "Kontrolni zbroj"
-
-#. Don't translate the hash names if possible.
-#: data/ui/tools.ui:43
-msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
-msgstr "MD5,SHA-1,SHA-256 ili SHA-512 Hash"
-
-#: data/ui/tools.ui:70
-msgid "File"
-msgstr "Datoteka"
-
-#: data/ui/tools.ui:84
-msgid "Select Another File to Check Against"
-msgstr "Odaberi jednu drugu datoteku za usporedbu"
-
-#: data/ui/tools.ui:101 src/modules/functions/feedback.cr:12
-msgid "Choose File..."
-msgstr "Odaberi datoteku …"
+#: data/ui/application.ui:6
+msgid "_New Window"
+msgstr ""
-#: data/ui/header_right.ui:7
+#: data/ui/application.ui:10
msgid "_Compare Hash Functions"
msgstr "_Usporedi hash funkcije"
-#: data/ui/header_right.ui:11
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
+msgstr "_Tipkovni prečaci"
+
+#: data/ui/application.ui:18
msgid "_About Collision"
-msgstr "_Collision informacije"
+msgstr "O _aplikaciji Kolizija"
-#: data/ui/header_right.ui:19
-msgid "Menu"
-msgstr "Izbornik"
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "Odaberi datoteku"
-#: data/ui/header_left.ui:8
+#: data/ui/application.ui:59
msgid "_Open"
msgstr "_Otvori"
-#: data/ui/header_left.ui:9
-msgid "Open..."
+#: data/ui/application.ui:60
+msgid "Open…"
msgstr "Otvori …"
-#: data/ui/hash_list.ui:14 data/ui/hash_list.ui:34 data/ui/hash_list.ui:54
-#: data/ui/hash_list.ui:74
+#: data/ui/application.ui:97
+msgid "Menu"
+msgstr "Izbornik"
+
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Otvori datoteku"
+
+#: data/ui/application.ui:165
+msgid "Hash"
+msgstr "Hash"
+
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
msgid "Copy"
msgstr "Kopiraj"
-#. Don't translate the hash names if possible.
-#: src/collision.cr:69
-msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
-msgstr "Umetni MD5/SHA-1/SHA-256/SHA-512 hash"
+#: data/ui/application.ui:261
+msgid "Verify"
+msgstr "Potvrdi"
-#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
-#: src/modules/prerequisites.cr:14
-msgid ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
-msgstr ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Kontrolni zbroj"
-#. Name or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Milo Ivir"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5,SHA-1,SHA-256 ili SHA-512 Hash"
-#: src/modules/functions/file_set.cr:7
-msgid "Hash"
-msgstr "Hash"
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Umetni MD5/SHA-1/SHA-256/SHA-512 hash"
-#: src/modules/functions/file_set.cr:8
-msgid "Verify"
-msgstr "Provjeri"
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Datoteka"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Potvrdi hasheve"
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Odaberi jednu drugu datoteku za usporedbu"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Tipkovni prečaci"
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Odaberi datoteku …"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -160,5 +147,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "Pokaži tipkovne prečace"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Zatvori program"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Provjeri hasheve"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Milo Ivir"
diff --git a/po/id.po b/po/id.po
index 84c353aa..8288cffe 100644
--- a/po/id.po
+++ b/po/id.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-08-25 02:22+0000\n"
"Last-Translator: Evangelos Paterakis \n"
"Language-Team: Indonesian or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Kukuh Syafaat"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Buka Berkas"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Salin"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Verifikasi"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr ""
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Checksum"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr ""
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5,SHA-1,SHA-256 atau SHA-512 Hash"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Masukkan Hash MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "File"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Pilih Berkas Lain untuk Diperiksa"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Pilih File…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -163,5 +150,29 @@ msgid "Show Keyboard Shortcuts"
msgstr ""
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr ""
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr ""
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Kukuh Syafaat"
diff --git a/po/it.po b/po/it.po
index a6ce2551..ee4a1049 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-12-16 22:09+0000\n"
"Last-Translator: albanobattistella \n"
"Language-Team: Italian or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "musiclover382"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Apri un file"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Copia"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Verifica"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Controlla hash"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Checksum"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_ Scorciatoie da tastiera"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Hash MD5, SHA-1, SHA-256 o SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Inserire una hash MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "File"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Seleziona un altro file da confrontare"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Scegli file…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -161,5 +148,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "Mostra scorciatoie da tastiera"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Esci"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Controlla hash"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "musiclover382"
diff --git a/po/ja.po b/po/ja.po
index 94b9d796..29357a22 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-07-30 12:39+0000\n"
"Last-Translator: Kaz Sibuya \n"
"Language-Team: Japanese or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Sibuya Kaz "
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "ファイルを開く(_O)"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "ハッシュ"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "コピー"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "確認"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr ""
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "チェックサム"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr ""
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5、SHA-1、SHA-256、SHA-512 ハッシュ"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "MD5/SHA-1/SHA-256/SHA-512 のハッシュ値を入力"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "ファイル"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "照合する他のファイルを選択"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "ファイルを選択…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -159,5 +146,29 @@ msgid "Show Keyboard Shortcuts"
msgstr ""
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr ""
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr ""
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Sibuya Kaz "
diff --git a/po/nl.po b/po/nl.po
index c68b9a33..ff5df76b 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2023-04-05 19:52+0000\n"
"Last-Translator: Philip Goto \n"
"Language-Team: Dutch or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr ""
-"Heimen Stoffels\n"
-"Philip Goto https://flipflop97.github.io/"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Bestand openen"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Controlesom"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Kopiëren"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Verifiëren"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Controlesommen controleren"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Controlesom"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Sneltoetsen"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Controlesom in formaat: MD5, SHA-1, SHA-256 of SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Voer hier een md5-, sha-1-, sha-256- of sha-512-controlesom in"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Bestand"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Kies het te vergelijken bestand"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Bestand kiezen…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -163,5 +148,31 @@ msgid "Show Keyboard Shortcuts"
msgstr "Sneltoetsen tonen"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Sluiten"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Controlesommen controleren"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr ""
+"Heimen Stoffels\n"
+"Philip Goto https://flipflop97.github.io/"
diff --git a/po/pl.po b/po/pl.po
index 7c4e9988..c6cc4cc2 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2023-03-25 15:41+0000\n"
"Last-Translator: gnu-ewm \n"
"Language-Team: Polish or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Nikki"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Otwórz plik"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hasz"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Kopiuj"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Zweryfikuj"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Sprawdź hasze"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Suma kontrolna"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "Skróty _klawiszowe"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Hasz MD5,SHA-1,SHA-256 or SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Wklej sumę kontrolną MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Plik"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Wybierz drugi plik do porównania"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Wybierz plik…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -163,5 +150,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "Pokaż skróty klawiszowe"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Wyjdź"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Sprawdź hasze"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Nikki"
diff --git a/po/pt.po b/po/pt.po
index c0696901..4bcc823f 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -2,13 +2,14 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# ssantos , 2023.
+# João Alves , 2023.
msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
-"PO-Revision-Date: 2023-02-19 23:42+0000\n"
-"Last-Translator: ssantos \n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
+"PO-Revision-Date: 2023-06-04 22:50+0000\n"
+"Last-Translator: João Alves \n"
"Language-Team: Portuguese \n"
"Language: pt\n"
@@ -16,11 +17,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.16-dev\n"
+"X-Generator: Weblate 4.18-dev\n"
-#: data/dev.geopjr.Collision.desktop.in:6 data/dev.geopjr.Collision.metainfo.xml.in:4
-#: data/ui/switcher.ui:6 data/ui/welcomer.ui:7
-#: src/modules/functions/about_action.cr:11 src/modules/views/main.cr:10
+#: data/dev.geopjr.Collision.desktop.in:6
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
msgid "Collision"
msgstr "Collision"
@@ -28,13 +29,15 @@ msgstr "Collision"
msgid "Hash Generator"
msgstr "Gerador de hash"
-#. Note: If it's difficult to translate, the meaning can be changed to "Check your files' hashes"
-#. or "Check the hashes of your files".
#: data/dev.geopjr.Collision.desktop.in:8
-#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/welcomer.ui:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
msgid "Check hashes for your files"
msgstr "Verificar os hashes dos seus ficheiros"
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
+
#: data/dev.geopjr.Collision.metainfo.xml.in:14
msgid ""
"Verifying that a file you downloaded or received is actually the one you "
@@ -58,91 +61,78 @@ msgstr ""
"permitindo que qualquer pessoa, de qualquer idade e grupo de experiência, "
"gere, compare e verifique hashes MD5, SHA-256, SHA-512 e SHA-1."
-#: data/ui/welcomer.ui:12
-msgid "_Open a File"
-msgstr "_Abrir um ficheiro"
-
-#: data/ui/welcomer.ui:25 data/ui/tools.ui:117 data/ui/header_left.ui:18
-msgid "Choose a File"
-msgstr "Escolher um ficheiro"
-
-#: data/ui/tools.ui:13
-msgid "Checksum"
-msgstr "Soma de verificação"
-
-#. Don't translate the hash names if possible.
-#: data/ui/tools.ui:43
-msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
-msgstr "Hash de MD5, SHA-1, SHA-256 ou SHA-512"
-
-#: data/ui/tools.ui:70
-msgid "File"
-msgstr "Ficheiro"
-
-#: data/ui/tools.ui:84
-msgid "Select Another File to Check Against"
-msgstr "Selecionar outro ficheiro para verificar"
-
-#: data/ui/tools.ui:101 src/modules/functions/feedback.cr:12
-msgid "Choose File..."
-msgstr "Escolher ficheiro..."
+#: data/ui/application.ui:6
+msgid "_New Window"
+msgstr ""
-#: data/ui/header_right.ui:7
+#: data/ui/application.ui:10
msgid "_Compare Hash Functions"
msgstr "_Comparar funções de hash"
-#: data/ui/header_right.ui:11
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
+msgstr "Atalhos de teclado"
+
+#: data/ui/application.ui:18
msgid "_About Collision"
msgstr "_Sobre o Collision"
-#: data/ui/header_right.ui:19
-msgid "Menu"
-msgstr "Menu"
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "Escolher um ficheiro"
-#: data/ui/header_left.ui:8
+#: data/ui/application.ui:59
msgid "_Open"
msgstr "_Abrir"
-#: data/ui/header_left.ui:9
-msgid "Open..."
-msgstr "Abrir..."
+#: data/ui/application.ui:60
+msgid "Open…"
+msgstr "Abrir…"
-#: data/ui/hash_list.ui:14 data/ui/hash_list.ui:34 data/ui/hash_list.ui:54
-#: data/ui/hash_list.ui:74
-msgid "Copy"
-msgstr "Copiar"
-
-#. Don't translate the hash names if possible.
-#: src/collision.cr:69
-msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
-msgstr "Insire um hash de MD5/SHA-1/SHA-256/SHA-512"
-
-#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
-#: src/modules/prerequisites.cr:14
-msgid ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
-msgstr "https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_hash_criptogr%C3%A1fica"
+#: data/ui/application.ui:97
+msgid "Menu"
+msgstr "Menu"
-#. Name or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr ""
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Abrir um ficheiro"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Copiar"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Verificar"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Verificar hashes"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Soma de verificação"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "Atalhos de teclado"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Hash de MD5, SHA-1, SHA-256 ou SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Insire um hash de MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Ficheiro"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Selecionar outro ficheiro para verificar"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Escolher ficheiro…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -157,5 +147,28 @@ msgid "Show Keyboard Shortcuts"
msgstr "Mostrar atalhos de teclado"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Sair"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Verificar hashes"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr "https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_hash_criptogr%C3%A1fica"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "créditos-tradução"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 49b257bd..9772984f 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-12-23 03:47+0000\n"
"Last-Translator: Fúlvio Alves \n"
"Language-Team: Portuguese (Brazil) or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr ""
-"Gabriel Gian\n"
-"Rafael Fontenelle\n"
-"Gustavo Costa \n"
-"Fúlvio Alves "
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Abrir um arquivo"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Copiar"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Verificar"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Verificar hashes"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Soma de verificação"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "Atalhos de teclado"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Hash MD5, SHA-1, SHA-256 ou SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Inserir um hash MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Arquivo"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Selecionar outro arquivo para verificar"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Escolher arquivo…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -165,5 +149,32 @@ msgid "Show Keyboard Shortcuts"
msgstr "Mostrar atalhos de teclado"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Sair"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Verificar hashes"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr "https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_hash_criptogr%C3%A1fica"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr ""
+"Gabriel Gian\n"
+"Rafael Fontenelle\n"
+"Gustavo Costa \n"
+"Fúlvio Alves "
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 00000000..a7affcb0
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,183 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Gabriel Cozma , 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: dev.geopjr.Collision\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
+"PO-Revision-Date: 2023-08-10 15:46+0000\n"
+"Last-Translator: Gabriel Cozma \n"
+"Language-Team: Romanian \n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2;\n"
+"X-Generator: Weblate 5.0-dev\n"
+
+#: data/dev.geopjr.Collision.desktop.in:6
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
+msgid "Collision"
+msgstr "Coliziune"
+
+#: data/dev.geopjr.Collision.desktop.in:7
+msgid "Hash Generator"
+msgstr "Generator de hash"
+
+#: data/dev.geopjr.Collision.desktop.in:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
+msgid "Check hashes for your files"
+msgstr "Verificați hashurile pentru fișierele dvs"
+
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
+
+#: data/dev.geopjr.Collision.metainfo.xml.in:14
+msgid ""
+"Verifying that a file you downloaded or received is actually the one you "
+"were expecting is often overlooked or too time-consuming to do. At the same "
+"time, it has become very easy to get your hands on a file that has been "
+"tampered with, due to the mass increase of malicious webpages and other "
+"actors."
+msgstr ""
+"Verificarea fișierului pe care l-ați descărcat sau primit este de fapt cel "
+"la care vă așteptați este adesea trecută cu vederea sau necesită prea mult "
+"timp. În același timp, a devenit foarte ușor să puneți mâna pe un fișier "
+"care a fost manipulat, din cauza creșterii în masă a paginilor web rău "
+"intenționate și a altor actori."
+
+#: data/dev.geopjr.Collision.metainfo.xml.in:20
+msgid ""
+"This tool aims to solve that. Collision comes with a simple & clean UI, "
+"allowing anyone, from any age and experience group, to generate, compare and "
+"verify MD5, SHA-256, SHA-512 and SHA-1 hashes."
+msgstr ""
+"Acest instrument are ca scop asta. Coliziunea vine cu un simplu & "
+"interfață de utilizare curată, permițând oricui, de la orice vârstă și grup "
+"de experiență, să genereze, să compare și să verifice hashuri MD5, SHA-256, "
+"SHA-512 și SHA-1."
+
+#: data/ui/application.ui:6
+msgid "_New Window"
+msgstr ""
+
+#: data/ui/application.ui:10
+msgid "_Compare Hash Functions"
+msgstr "_Comparați funcțiile Hash"
+
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
+msgstr "_Comenzi rapide de la tastatură"
+
+#: data/ui/application.ui:18
+msgid "_About Collision"
+msgstr "_Despre coliziune"
+
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "Alege un fișier"
+
+#: data/ui/application.ui:59
+msgid "_Open"
+msgstr "_Deschide"
+
+#: data/ui/application.ui:60
+msgid "Open…"
+msgstr ""
+
+#: data/ui/application.ui:97
+msgid "Menu"
+msgstr "Meniu"
+
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Deschideți un fișier"
+
+#: data/ui/application.ui:165
+msgid "Hash"
+msgstr "Hash"
+
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Copie"
+
+#: data/ui/application.ui:261
+msgid "Verify"
+msgstr "Verifică"
+
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Sumă de control"
+
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Insertă un Hash MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Fișier"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Selectați un alt fișier pentru a verifica"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:11
+msgid "General"
+msgstr "General"
+
+#: data/ui/shortcuts_window.ui:14
+msgid "Open a File"
+msgstr "Deschide un fișier"
+
+#: data/ui/shortcuts_window.ui:20
+msgid "Show Keyboard Shortcuts"
+msgstr "Afișează comenzile rapide de la tastatură"
+
+#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
+msgid "Quit"
+msgstr "Părăsește"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Verifică Hashurile"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Gabriel Cozma https://gabs.eu.org"
+
+#~ msgid "Choose File..."
+#~ msgstr "Alege fișierul..."
+
+#~ msgid "Open..."
+#~ msgstr "Deschide..."
diff --git a/po/ru.po b/po/ru.po
index a684fc21..2633d7a2 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2023-01-19 17:51+0000\n"
"Last-Translator: Vin \n"
"Language-Team: Russian or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr ""
-"BigmenPixel, ViktorOn https://github.com/viktoron, Andrew Nitrogenesis "
-"https://github.com/nitrogenez"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Открыть файл"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Хеш"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Скопировать"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Проверить"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Проверить хеши"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Контрольная сумма"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Горячие клавиши"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "Хеш MD5,SHA-1,SHA-256 или SHA-512"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Вставьте хеш MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Файл"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Выбрать другой файл для проверки"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Выбрать файл…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -167,5 +152,31 @@ msgid "Show Keyboard Shortcuts"
msgstr "Показать горячие клавиши"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Выйти"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Проверить хеши"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr ""
+"BigmenPixel, ViktorOn https://github.com/viktoron, Andrew Nitrogenesis "
+"https://github.com/nitrogenez"
diff --git a/po/sk.po b/po/sk.po
index 8bc7f459..7f0a246b 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-02-14 23:08+0200\n"
"Last-Translator: MartionIIOT <42734508+MartinIIOT@users.noreply.github.com>\n"
"Language-Team: Slovakia\n"
@@ -18,9 +18,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: data/dev.geopjr.Collision.desktop.in:6
-#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/switcher.ui:6
-#: data/ui/welcomer.ui:7 src/modules/functions/about_action.cr:11
-#: src/modules/views/main.cr:10
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
msgid "Collision"
msgstr ""
@@ -28,13 +27,15 @@ msgstr ""
msgid "Hash Generator"
msgstr ""
-#. Note: If it's difficult to translate, the meaning can be changed to "Check your files' hashes"
-#. or "Check the hashes of your files".
#: data/dev.geopjr.Collision.desktop.in:8
-#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/welcomer.ui:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
msgid "Check hashes for your files"
msgstr ""
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
+
#: data/dev.geopjr.Collision.metainfo.xml.in:14
msgid ""
"Verifying that a file you downloaded or received is actually the one you "
@@ -51,91 +52,77 @@ msgid ""
"verify MD5, SHA-256, SHA-512 and SHA-1 hashes."
msgstr ""
-#: data/ui/welcomer.ui:12
-msgid "_Open a File"
+#: data/ui/application.ui:6
+msgid "_New Window"
msgstr ""
-#: data/ui/welcomer.ui:25 data/ui/tools.ui:117 data/ui/header_left.ui:18
-msgid "Choose a File"
-msgstr "Vyberte Súbor"
-
-#: data/ui/tools.ui:13
-msgid "Checksum"
+#: data/ui/application.ui:10
+msgid "_Compare Hash Functions"
msgstr ""
-#. Don't translate the hash names if possible.
-#: data/ui/tools.ui:43
-msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
msgstr ""
-#: data/ui/tools.ui:70
-msgid "File"
-msgstr ""
+#: data/ui/application.ui:18
+msgid "_About Collision"
+msgstr "_O Collision"
-#: data/ui/tools.ui:84
-msgid "Select Another File to Check Against"
-msgstr ""
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "Vyberte Súbor"
-#: data/ui/tools.ui:101 src/modules/functions/feedback.cr:12
-msgid "Choose File..."
+#: data/ui/application.ui:59
+msgid "_Open"
msgstr ""
-#: data/ui/header_right.ui:7
-msgid "_Compare Hash Functions"
+#: data/ui/application.ui:60
+msgid "Open…"
msgstr ""
-#: data/ui/header_right.ui:11
-msgid "_About Collision"
-msgstr "_O Collision"
-
-#: data/ui/header_right.ui:19
+#: data/ui/application.ui:97
msgid "Menu"
msgstr "Menu"
-#: data/ui/header_left.ui:8
-msgid "_Open"
+#: data/ui/application.ui:118
+msgid "_Open a File"
msgstr ""
-#: data/ui/header_left.ui:9
-msgid "Open..."
+#: data/ui/application.ui:165
+msgid "Hash"
msgstr ""
-#: data/ui/hash_list.ui:14 data/ui/hash_list.ui:34 data/ui/hash_list.ui:54
-#: data/ui/hash_list.ui:74
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
msgid "Copy"
msgstr "Kopírovať"
-#. Don't translate the hash names if possible.
-#: src/collision.cr:69
-msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
-msgstr "Vložte hash MD5/SHA-1/SHA-256/SHA-512"
+#: data/ui/application.ui:261
+msgid "Verify"
+msgstr "Overiť"
-#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
-#: src/modules/prerequisites.cr:14
-msgid ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+#: data/ui/application.ui:274
+msgid "Checksum"
msgstr ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
-#. Name or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "MartionIIOT"
-
-#: src/modules/functions/file_set.cr:7
-msgid "Hash"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
msgstr ""
-#: src/modules/functions/file_set.cr:8
-msgid "Verify"
-msgstr "Overiť"
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Vložte hash MD5/SHA-1/SHA-256/SHA-512"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
+#: data/ui/application.ui:354
+msgid "File"
msgstr ""
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr ""
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
msgstr ""
#: data/ui/shortcuts_window.ui:11
@@ -151,5 +138,29 @@ msgid "Show Keyboard Shortcuts"
msgstr ""
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr ""
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr ""
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "MartionIIOT"
diff --git a/po/sv.po b/po/sv.po
index 38f551cb..7cf7880e 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2023-02-11 11:40+0000\n"
"Last-Translator: Luna Jernberg \n"
"Language-Team: Swedish or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Gustav Hagland "
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Öppna en fil"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash-värde"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Kopiera"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Verifiera"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Kontrollera hashar"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Kontrollsumma"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Tangentbordsgenvägar"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5,SHA-1,SHA-256 eller SHA-512 Hash-värde"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Skriv in ett MD5/SHA-1/SHA-256/SHA-512 Hash-värde"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Fil"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Välj En Annan Fil Att Jämföra Mot"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Välj en fil…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -161,5 +148,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "Visa Tangentbordsgenvägar"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Avsluta"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Kontrollera hashar"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Gustav Hagland "
diff --git a/po/ta.po b/po/ta.po
index f76c0e48..4cfc9d9f 100644
--- a/po/ta.po
+++ b/po/ta.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-12-16 22:09+0000\n"
"Last-Translator: K.B.Dharun Krishna \n"
"Language-Team: Tamil or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "K.B.Dharun Krishna "
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_ஒரு கோப்பைத் திறக்கவும்"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "ஹாஷ்"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "நகல்"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "சரிபார்க்கவும்"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "ஹாஷ்களை சரிபார்க்கவும்"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "செக்சம்"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_விசைப்பலகை குறுக்குவழிகள்"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5,SHA-1,SHA-256 அல்லது SHA-512 ஹாஷ்"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "ஒரு MD5/SHA-1/SHA-256/SHA-512 ஹாஷைச் செருகவும்"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "கோப்பு"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "எதிராகச் சரிபார்க்க மற்றொரு கோப்பைத் தேர்ந்தெடுக்கவும்"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "கோப்பை தேர்வு செய்யவும்…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -159,5 +146,29 @@ msgid "Show Keyboard Shortcuts"
msgstr "விசைப்பலகை குறுக்குவழிகளைக் காட்டு"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "வெளியேறு"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "ஹாஷ்களை சரிபார்க்கவும்"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "K.B.Dharun Krishna "
diff --git a/po/tr.po b/po/tr.po
index ef882678..3b577300 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2022-12-13 20:50+0000\n"
"Last-Translator: Oğuz Ersen \n"
"Language-Team: Turkish or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr ""
-"Uğurcan SAYAN \n"
-"Oğuz Ersen "
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "Dosya _Aç"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Hash"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Kopyala"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Doğrula"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Hash'leri Denetle"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Sağlama Toplamı"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Klavye Kısayolları"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5, SHA-1, SHA-256 veya SHA-512 Değeri"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Bir MD5/SHA-1/SHA-256/SHA-512 Değeri Girin"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Dosya"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Denetlenecek Başka Bir Dosya Seç"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Dosya Seç…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -165,5 +150,31 @@ msgid "Show Keyboard Shortcuts"
msgstr "Klavye Kısayollarını Göster"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Çıkış"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Hash'leri Denetle"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr ""
+"Uğurcan SAYAN \n"
+"Oğuz Ersen "
diff --git a/po/uk.po b/po/uk.po
index e0e86a01..0113d343 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
"PO-Revision-Date: 2023-04-13 19:48+0000\n"
"Last-Translator: CakesTwix \n"
"Language-Team: Ukrainian or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "Andrew Nitrogenesis https://github.com/nitrogenez"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "_Відкрити файл"
-#: src/modules/functions/file_set.cr:7
+#: data/ui/application.ui:165
msgid "Hash"
msgstr "Хеш"
-#: src/modules/functions/file_set.cr:8
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
+msgid "Copy"
+msgstr "Скопіювати"
+
+#: data/ui/application.ui:261
msgid "Verify"
msgstr "Перевірити"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr "Перевірити хеші"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "Контрольна сума"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr "_Комбінації клавіш"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5, SHA-1, SHA-256 або SHA-512 хеш"
+
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "Вставте хеш MD5/SHA-1/SHA-256/SHA-512"
+
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "Файл"
+
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "Виберіть інший файл, щоб порівнювати"
+
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "Оберіть файл…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
@@ -164,5 +149,31 @@ msgid "Show Keyboard Shortcuts"
msgstr "Показати комбінації клавіш"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
msgstr "Вийти"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "Перевірити хеші"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+msgstr ""
+"https://uk.wikipedia.org/wiki/"
+"%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D1%96%D1%87%D0%BD%D0%B0_%D0%B3%D0%B5%D1%88-"
+"%D1%84%D1%83%D0%BD%D0%BA%D1%86%D1%96%D1%8F"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "Andrew Nitrogenesis https://github.com/nitrogenez"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 20a5b1f0..9c95b65a 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -1,13 +1,13 @@
# Simplified Chinese translations for dev.geopjr.Collision package.
# Copyright (C) 2022 dev.geopjr.Collision'S COPYRIGHT HOLDER
# This file is distributed under the same license as the dev.geopjr.Collision package.
-# lumingzh , 2022.
+# lumingzh , 2022, 2023.
msgid ""
msgstr ""
"Project-Id-Version: dev.geopjr.Collision\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-18 21:34+0200\n"
-"PO-Revision-Date: 2022-03-13 22:02+0000\n"
+"POT-Creation-Date: 2023-09-23 21:06+0300\n"
+"PO-Revision-Date: 2023-08-15 07:54+0000\n"
"Last-Translator: lumingzh \n"
"Language-Team: Chinese (Simplified) \n"
@@ -16,12 +16,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.12-dev\n"
+"X-Generator: Weblate 5.0-dev\n"
#: data/dev.geopjr.Collision.desktop.in:6
-#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/switcher.ui:6
-#: data/ui/welcomer.ui:7 src/modules/functions/about_action.cr:11
-#: src/modules/views/main.cr:10
+#: data/dev.geopjr.Collision.metainfo.xml.in:4 data/ui/application.ui:33
+#: data/ui/application.ui:76 data/ui/application.ui:113
msgid "Collision"
msgstr "Collision"
@@ -29,13 +28,15 @@ msgstr "Collision"
msgid "Hash Generator"
msgstr "哈希值生成器"
-#. Note: If it's difficult to translate, the meaning can be changed to "Check your files' hashes"
-#. or "Check the hashes of your files".
#: data/dev.geopjr.Collision.desktop.in:8
-#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/welcomer.ui:8
+#: data/dev.geopjr.Collision.metainfo.xml.in:7 data/ui/application.ui:114
msgid "Check hashes for your files"
msgstr "检查您文件的哈希值"
+#: data/dev.geopjr.Collision.desktop.in:12
+msgid "md5;sha1;sha256;sha512;hash;"
+msgstr ""
+
#: data/dev.geopjr.Collision.metainfo.xml.in:14
msgid ""
"Verifying that a file you downloaded or received is actually the one you "
@@ -57,96 +58,82 @@ msgstr ""
"Collision 具有简单且干净的用户界面,允许任何年龄和经验的任何人用来生成、对比"
"和校验 MD5、SHA-256、SHA-512 和 SHA-1 哈希值。"
-#: data/ui/welcomer.ui:12
-msgid "_Open a File"
-msgstr "_打开文件"
-
-#: data/ui/welcomer.ui:25 data/ui/tools.ui:117 data/ui/header_left.ui:18
-msgid "Choose a File"
-msgstr "选择文件"
-
-#: data/ui/tools.ui:13
-msgid "Checksum"
-msgstr "校验和"
+#: data/ui/application.ui:6
+msgid "_New Window"
+msgstr ""
-#. Don't translate the hash names if possible.
-#: data/ui/tools.ui:43
-msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
-msgstr "MD5、SHA-1、SHA-256 或 SHA-512 哈希"
+#: data/ui/application.ui:10
+msgid "_Compare Hash Functions"
+msgstr "对比哈希函数(_C)"
-#: data/ui/tools.ui:70
-msgid "File"
-msgstr "文件"
+#: data/ui/application.ui:14
+msgid "_Keyboard Shortcuts"
+msgstr "键盘快捷键(_K)"
-#: data/ui/tools.ui:84
-msgid "Select Another File to Check Against"
-msgstr "选择另一个文件来对照检查"
+#: data/ui/application.ui:18
+msgid "_About Collision"
+msgstr "关于 Collision(_A)"
-#: data/ui/tools.ui:101 src/modules/functions/feedback.cr:12
-msgid "Choose File..."
-msgstr "选择文件…"
+#: data/ui/application.ui:23 data/ui/application.ui:27
+msgid "Choose a File"
+msgstr "选择文件"
-#: data/ui/header_right.ui:7
-msgid "_Compare Hash Functions"
-msgstr "_对比哈希函数"
+#: data/ui/application.ui:59
+msgid "_Open"
+msgstr "打开(_O)"
-#: data/ui/header_right.ui:11
-msgid "_About Collision"
-msgstr "_关于 Collision"
+#: data/ui/application.ui:60
+msgid "Open…"
+msgstr "打开…"
-#: data/ui/header_right.ui:19
+#: data/ui/application.ui:97
msgid "Menu"
msgstr "菜单"
-#: data/ui/header_left.ui:8
-msgid "_Open"
-msgstr "_打开"
+#: data/ui/application.ui:118
+msgid "_Open a File"
+msgstr "打开文件(_O)"
-#: data/ui/header_left.ui:9
-msgid "Open..."
-msgstr "打开..."
+#: data/ui/application.ui:165
+msgid "Hash"
+msgstr "哈希"
-#: data/ui/hash_list.ui:14 data/ui/hash_list.ui:34 data/ui/hash_list.ui:54
-#: data/ui/hash_list.ui:74
+#: data/ui/application.ui:178 data/ui/application.ui:198
+#: data/ui/application.ui:218 data/ui/application.ui:238
msgid "Copy"
msgstr "复制"
-#. Don't translate the hash names if possible.
-#: src/collision.cr:69
-msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
-msgstr "插入 MD5/SHA-1/SHA-256/SHA-512 哈希值"
+#: data/ui/application.ui:261
+msgid "Verify"
+msgstr "校验"
-#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
-#: src/modules/prerequisites.cr:14
-msgid ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
-msgstr ""
-"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+#: data/ui/application.ui:274
+msgid "Checksum"
+msgstr "校验和"
-#. Name or Name https://website.example
-#: src/modules/functions/about_action.cr:18
-msgid "translator-credits"
-msgstr "lumingzh"
+#: data/ui/application.ui:303
+msgid "MD5,SHA-1,SHA-256 or SHA-512 Hash"
+msgstr "MD5、SHA-1、SHA-256 或 SHA-512 哈希"
-#: src/modules/functions/file_set.cr:7
-msgid "Hash"
-msgstr "哈希"
+#: data/ui/application.ui:332
+msgid "Insert a MD5/SHA-1/SHA-256/SHA-512 Hash"
+msgstr "插入 MD5/SHA-1/SHA-256/SHA-512 哈希值"
-#: src/modules/functions/file_set.cr:8
-msgid "Verify"
-msgstr "校验"
+#: data/ui/application.ui:354
+msgid "File"
+msgstr "文件"
-#: nautilus-extension/collision-extension.py:54
-msgid "Check Hashes"
-msgstr ""
+#: data/ui/application.ui:369
+msgid "Select Another File to Check Against"
+msgstr "选择另一个文件来对照检查"
-#: data/ui/header_right.ui:7
-msgid "_Keyboard Shortcuts"
-msgstr ""
+#: data/ui/application.ui:411
+msgid "Choose File…"
+msgstr "选择文件…"
#: data/ui/shortcuts_window.ui:11
msgid "General"
-msgstr ""
+msgstr "常规"
#: data/ui/shortcuts_window.ui:14
msgid "Open a File"
@@ -154,8 +141,32 @@ msgstr "打开文件"
#: data/ui/shortcuts_window.ui:20
msgid "Show Keyboard Shortcuts"
-msgstr ""
+msgstr "显示键盘快捷键"
#: data/ui/shortcuts_window.ui:26
+msgid "New Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:32
+msgid "Close Window"
+msgstr ""
+
+#: data/ui/shortcuts_window.ui:38
msgid "Quit"
+msgstr "退出"
+
+#: nautilus-extension/collision-extension.py:54
+msgid "Check Hashes"
+msgstr "检查哈希"
+
+#. Wikipedia article. If available, set it to the LANGUAGE's version, else leave it as is.
+#: src/collision.cr:64
+msgid ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
msgstr ""
+"https://en.wikipedia.org/wiki/Comparison_of_cryptographic_hash_functions"
+
+#. Name or Name https://website.example
+#: src/collision/actions/about.cr:22
+msgid "translator-credits"
+msgstr "lumingzh "
diff --git a/shard.lock b/shard.lock
index d04cad97..d837973e 100644
--- a/shard.lock
+++ b/shard.lock
@@ -6,7 +6,7 @@ shards:
gi-crystal:
git: https://github.com/hugopl/gi-crystal.git
- version: 0.15.2
+ version: 0.18.0
gio:
git: https://github.com/hugopl/gio.cr.git
@@ -14,15 +14,15 @@ shards:
gtk4:
git: https://github.com/hugopl/gtk4.cr.git
- version: 0.13.0
+ version: 0.15.0
harfbuzz:
git: https://github.com/hugopl/harfbuzz.cr.git
- version: 0.1.0
+ version: 0.2.0
libadwaita:
git: https://github.com/geopjr/libadwaita.cr.git
- version: 1.0.0+git.commit.203737fc96bb48e1a710cb68e896d2c5b9c1a6e5
+ version: 1.0.0+git.commit.cffabb56e911d2a90c53c2fd14d6bd08bf5ac446
non-blocking-spawn:
git: https://github.com/geopjr/non-blocking-spawn.git
@@ -32,7 +32,3 @@ shards:
git: https://github.com/hugopl/pango.cr.git
version: 0.2.0
- version_from_shard:
- git: https://github.com/hugopl/version_from_shard.git
- version: 1.2.5
-
diff --git a/shard.yml b/shard.yml
index e6cd8076..57a4e662 100644
--- a/shard.yml
+++ b/shard.yml
@@ -1,5 +1,5 @@
name: collision
-version: 3.5.0
+version: 3.6.0
authors:
- GeopJr
@@ -11,7 +11,7 @@ targets:
dependencies:
libadwaita:
github: GeopJr/libadwaita.cr
- commit: 203737fc96bb48e1a710cb68e896d2c5b9c1a6e5
+ commit: cffabb56e911d2a90c53c2fd14d6bd08bf5ac446
non-blocking-spawn:
github: GeopJr/non-blocking-spawn
version: ~> 1.0.5
@@ -19,6 +19,6 @@ dependencies:
github: GeopJr/gettext.cr
version: ~> 1.0.0
-crystal: 1.7.3
+crystal: 1.9.2
license: BSD-2-Clause
diff --git a/spec/compare_spec.cr b/spec/compare_spec.cr
index f168cec9..11ed11c9 100644
--- a/spec/compare_spec.cr
+++ b/spec/compare_spec.cr
@@ -1,8 +1,8 @@
require "./spec_helper"
-require "../src/collision/views/tools/compare.cr"
+require "../src/collision/functions/file_utils.cr"
-describe Collision::Compare do
+describe Collision::FileUtils do
it "returns whether the file contains one of the hashes" do
- Collision::Compare.compare_content(Path[__DIR__] / "test_content.txt").should be_true
+ Collision::FileUtils.compare_content(Path[__DIR__] / "test_content.txt", Collision::CLIPBOARD_HASH.values).should be_true
end
end
diff --git a/src/collision.cr b/src/collision.cr
index f386787d..73d13f73 100644
--- a/src/collision.cr
+++ b/src/collision.cr
@@ -2,6 +2,7 @@ require "./license.cr"
require "libadwaita"
require "gettext"
require "log"
+require "non-blocking-spawn"
if Non::Blocking.threads.size == 0
STDERR.puts "App is running in single-threaded mode. Exiting."
@@ -65,85 +66,72 @@ module Collision
Gio.register_resource("data/dev.geopjr.Collision.gresource.xml", "data")
end
-require "./collision/actions/*"
-require "./collision/functions/*"
-require "./collision/views/*"
-require "./collision/views/tools/*"
+require "./collision/*"
-macro gen_hash(buttons)
- {
- {% for hash, index in Collision::HASH_FUNCTIONS %}
- {{hash.upcase}} => {% if buttons %} Gtk::Button.cast(B_HS["copyBtn{{index + 1}}"]) {% else %} Adw::ActionRow.cast(B_HS["hashRow{{index + 1}}"]) {% end %},
+# Creates and setups a window. If a file is passed it will attempt to open it.
+def activate_with_file(app : Adw::Application, file : Gio::File? = nil)
+ window = CollisionWindow.new
+ window.application = app
+
+ # Save settings on close
+ window.close_request_signal.connect(->Collision::Settings.save(Gtk::Window))
+ # Load settings
+ window_settings = Collision.settings
+ window.set_default_size(window_settings[:window_width], window_settings[:window_height])
+ window.maximize if window_settings[:window_maximized]
+
+ # Devel styling
+ {% if flag?(:debug) || !flag?(:release) %}
+ window.add_css_class("devel")
{% end %}
- }
+
+ window.present
+
+ # Setup actions
+ Collision::Action::HashInfo.new(app)
+ Collision::Action::About.new(app)
+ Collision::Action::NewWindow.new(app)
+ Collision::Action::Quit.new(app)
+ Collision::Action::OpenFile.new(app).cb = ->window.on_open_btn_clicked
+ app.set_accels_for_action("window.close", {"W"})
+
+ Collision::LOGGER.debug { "Window activated" }
+ Collision::LOGGER.debug { "Settings: #{window_settings}" }
+
+ unless file.nil?
+ Collision::LOGGER.debug { "Activating with file" }
+
+ window.file = file
+ end
end
-module Collision
- B_UI = Gtk::Builder.new_from_resource("/dev/geopjr/Collision/ui/welcomer.ui")
- B_HL = Gtk::Builder.new_from_resource("/dev/geopjr/Collision/ui/header_left.ui")
- B_HR = Gtk::Builder.new_from_resource("/dev/geopjr/Collision/ui/header_right.ui")
- B_HS = Gtk::Builder.new_from_resource("/dev/geopjr/Collision/ui/hash_list.ui")
- B_TL = Gtk::Builder.new_from_resource("/dev/geopjr/Collision/ui/tools.ui")
- B_HT = Gtk::Builder.new_from_resource("/dev/geopjr/Collision/ui/switcher.ui")
- B_SP = Gtk::Builder.new_from_resource("/dev/geopjr/Collision/ui/spinner.ui")
- B_FI = Gtk::Builder.new_from_resource("/dev/geopjr/Collision/ui/file_info.ui")
-
- WINDOW_BOX = Gtk::Box.new(Gtk::Orientation::Vertical, 0)
-
- WELCOME_BUTTON = Gtk::Button.cast(B_UI["welcomeBtn"])
- OPEN_FILE_BUTTON = Gtk::Button.cast(B_HL["openFileBtn"])
- MENU_BUTTON = Gtk::MenuButton.cast(B_HR["menuBtn"])
- MAIN_FILE_CHOOSER_NATIVE = Gtk::FileChooserNative.cast(B_HL["mainFileChooserNative"])
- WELCOMER_FILE_CHOOSER_NATIVE = Gtk::FileChooserNative.cast(B_UI["welcomerFileChooserNative"])
- HEADER_TITLE = Adw::ViewSwitcherTitle.cast(B_HT["switcher_title"])
- BOTTOM_TABS = Adw::ViewSwitcherBar.cast(B_HT["switcher_bar"])
- STACK = Adw::ViewStack.cast(B_HT["stack"])
-
- SPINNER = Gtk::Spinner.new(
- spinning: true,
- halign: Gtk::Align::Center,
- vexpand: true,
- hexpand: true,
- width_request: 32,
- height_request: 32
- )
- TOOL_COMPARE_BUTTON_SPINNER = Gtk::Spinner.new(
- spinning: true,
- halign: Gtk::Align::Center,
- width_request: 36,
- height_request: 36,
- visible: false
- )
- TOOL_VERIFY_INPUT = Gtk::TextView.new(
- pixels_above_lines: 11,
- pixels_below_lines: 11,
- left_margin: 5,
- right_margin: 5,
- cursor_visible: false,
- height_request: 125,
- wrap_mode: Gtk::WrapMode::Char,
- accepts_tab: false,
- css_name: "entry",
- css_classes: ["card-like", "monospace"],
- tooltip_text: Gettext.gettext("Insert a MD5/SHA-1/SHA-256/SHA-512 Hash")
- )
-
- TOOLS_GRID = Gtk::Grid.cast(B_TL["tools"])
- TOOL_VERIFY_OVERLAY = Gtk::Overlay.cast(B_TL["verifyOverlay"])
- TOOL_VERIFY_OVERLAY_LABEL = Gtk::Label.cast(B_TL["verifyOverlayLabel"])
- TOOL_VERIFY_FEEDBACK = Gtk::Image.cast(B_TL["verifyFeedback"])
- TOOL_COMPARE_BUTTON = Gtk::Button.cast(B_TL["compareBtn"])
- TOOL_COMPARE_BUTTON_IMAGE = Gtk::Image.cast(B_TL["compareBtnImage"])
- TOOL_COMPARE_BUTTON_LABEL = Gtk::Label.cast(B_TL["compareBtnLabel"])
- TOOL_COMPARE_BUTTON_FEEDBACK = Gtk::Box.cast(B_TL["compareBtnFeedback"])
- TOOL_COMPARE_FILE_CHOOSER_NATIVE = Gtk::FileChooserNative.cast(B_TL["compareFileChooserNative"])
-
- COPY_BUTTONS = gen_hash(true)
- CLIPBOARD_HASH = Hash(String, String).new
- ACTION_ROWS = gen_hash(false)
-
- FILE_INFO = Adw::StatusPage.cast(B_FI["fileInfo"])
- HASH_LIST = Gtk::ListBox.cast(B_HS["hashList"])
-
- APP = Adw::Application.new("dev.geopjr.Collision", Gio::ApplicationFlags::HandlesOpen)
+# Wrapper around activate_with_file
+# but without a file
+def activate(app : Adw::Application)
+ activate_with_file(app)
end
+
+# Handles the open signal.
+# If there are no files passed, it calls activate,
+# else it calls activate_with_file for each file
+def open_with(app : Adw::Application, files : Enumerable(Gio::File), hint : String)
+ if files.size == 0
+ activate(app)
+ else
+ files.each do |file|
+ next unless !(file_path = file.path).nil? && Collision::FileUtils.file?(file_path)
+ activate_with_file(app, file)
+ end
+ end
+
+ nil
+end
+
+app = Adw::Application.new("dev.geopjr.Collision", Gio::ApplicationFlags::HandlesOpen)
+
+app.activate_signal.connect(->activate(Adw::Application))
+app.open_signal.connect(->open_with(Adw::Application, Enumerable(Gio::File), String))
+
+# ARGV but without flags, passed to Application.
+clean_argv = [PROGRAM_NAME].concat(ARGV.reject { |x| x.starts_with?('-') })
+exit(app.run(clean_argv))
diff --git a/src/collision/actions.cr b/src/collision/actions.cr
new file mode 100644
index 00000000..0e088981
--- /dev/null
+++ b/src/collision/actions.cr
@@ -0,0 +1,19 @@
+abstract class Collision::Action
+ def initialize(app : Adw::Application, name : String, accels : Enumerable(String)? = nil)
+ action = Gio::SimpleAction.new(name, nil)
+ action.activate_signal.connect do
+ on_activate
+ end
+
+ unless accels.nil? || accels.size == 0
+ app.set_accels_for_action("app.#{name}", accels)
+ end
+
+ app.add_action(action)
+ end
+
+ abstract def initialize(app : Adw::Application)
+ abstract def on_activate
+end
+
+require "./actions/*"
diff --git a/src/collision/actions/about.cr b/src/collision/actions/about.cr
index bf3d9517..57480c9b 100644
--- a/src/collision/actions/about.cr
+++ b/src/collision/actions/about.cr
@@ -1,32 +1,28 @@
-module Collision::Action
- class About
- getter action : Gio::SimpleAction
+class Collision::Action::About < Collision::Action
+ @app : Adw::Application
- def initialize(app : Adw::Application)
- @action = Gio::SimpleAction.new("about", nil)
-
- @action.activate_signal.connect do
- Adw.show_about_window(
- APP.active_window,
- # name: "About Collision",
- application: APP,
- application_name: Gettext.gettext("Collision"),
- application_icon: "dev.geopjr.Collision",
- version: VERSION,
- copyright: "© 2021 Evangelos Paterakis",
- # website: "https://github.com/GeopJr/Collision",
- issue_url: "https://github.com/GeopJr/Collision/issues",
- developer_name: "Evangelos \"GeopJr\" Paterakis",
- artists: {"Tobias Bernard"},
- designers: {"Tobias Bernard", "Evangelos \"GeopJr\" Paterakis"},
- translator_credits: Gettext.gettext("translator-credits"),
- license_type: Gtk::License::Bsd,
- debug_info: TROUBLESHOOTING.to_s.gsub(/File set: .+\n/, "File set: REDACTED\n"), # Attempt to redact file paths.
- debug_info_filename: "Collision-#{Time.utc.to_unix_ms}.txt"
- )
- end
+ def initialize(app : Adw::Application)
+ @app = app
+ super(app, "about", {"F1"})
+ end
- app.add_action(@action)
- end
+ def on_activate
+ Adw.show_about_window(
+ @app.active_window,
+ application: @app,
+ application_name: Gettext.gettext("Collision"),
+ application_icon: "dev.geopjr.Collision",
+ version: VERSION,
+ copyright: "© 2021 Evangelos Paterakis",
+ # website: "https://github.com/GeopJr/Collision",
+ issue_url: "https://github.com/GeopJr/Collision/issues",
+ developer_name: "Evangelos \"GeopJr\" Paterakis",
+ artists: {"Tobias Bernard"},
+ designers: {"Tobias Bernard"},
+ translator_credits: Gettext.gettext("translator-credits"),
+ license_type: Gtk::License::Bsd,
+ debug_info: TROUBLESHOOTING.to_s.gsub(/File set: .+\n/, "File set: REDACTED\n"), # Attempt to redact file paths.
+ debug_info_filename: "Collision-#{Time.utc.to_unix_ms}.txt"
+ )
end
end
diff --git a/src/collision/actions/hashinfo.cr b/src/collision/actions/hashinfo.cr
index 834e04bf..e7fbebc8 100644
--- a/src/collision/actions/hashinfo.cr
+++ b/src/collision/actions/hashinfo.cr
@@ -1,18 +1,13 @@
-# Opens url in default browser
-
-module Collision::Action
- class HashInfo
- getter action : Gio::SimpleAction
-
- def initialize(app : Adw::Application, window_id : UInt32)
- @action = Gio::SimpleAction.new("hashinfo", nil)
-
- @action.activate_signal.connect do
- parent = APP.active_window.nil? ? APP.window_by_id(window_id) : APP.active_window
- LibGtk.gtk_show_uri(parent.not_nil!, ARTICLE, Gdk::CURRENT_TIME)
- end
+class Collision::Action::HashInfo < Collision::Action
+ def initialize(app : Adw::Application)
+ super(app, "hashinfo")
+ end
- app.add_action(action)
+ def on_activate
+ begin
+ Gio.app_info_launch_default_for_uri(ARTICLE, nil)
+ rescue ex
+ LOGGER.debug { ex }
end
end
end
diff --git a/src/collision/actions/new_window.cr b/src/collision/actions/new_window.cr
new file mode 100644
index 00000000..f17ec825
--- /dev/null
+++ b/src/collision/actions/new_window.cr
@@ -0,0 +1,12 @@
+class Collision::Action::NewWindow < Collision::Action
+ @app : Adw::Application
+
+ def initialize(app : Adw::Application)
+ @app = app
+ super(app, "new-window", {"N"})
+ end
+
+ def on_activate
+ @app.activate
+ end
+end
diff --git a/src/collision/actions/open.cr b/src/collision/actions/open.cr
deleted file mode 100644
index 82f35058..00000000
--- a/src/collision/actions/open.cr
+++ /dev/null
@@ -1,17 +0,0 @@
-# Opens a new main file
-
-module Collision::Action
- class Open
- getter action : Gio::SimpleAction
-
- def initialize(app : Adw::Application)
- @action = Gio::SimpleAction.new("open-file", nil)
-
- @action.activate_signal.connect do
- (Collision::Welcomer.passed? ? MAIN_FILE_CHOOSER_NATIVE : WELCOMER_FILE_CHOOSER_NATIVE).show
- end
-
- app.add_action(action)
- end
- end
-end
diff --git a/src/collision/actions/open_file.cr b/src/collision/actions/open_file.cr
new file mode 100644
index 00000000..5ffb5231
--- /dev/null
+++ b/src/collision/actions/open_file.cr
@@ -0,0 +1,11 @@
+class Collision::Action::OpenFile < Collision::Action
+ setter cb : Proc(Nil)?
+
+ def initialize(app : Adw::Application)
+ super(app, "open-file", {"O"})
+ end
+
+ def on_activate
+ @cb.try &.call
+ end
+end
diff --git a/src/collision/actions/quit.cr b/src/collision/actions/quit.cr
index 7e14c033..6334257b 100644
--- a/src/collision/actions/quit.cr
+++ b/src/collision/actions/quit.cr
@@ -1,19 +1,12 @@
-# Exits the app
+class Collision::Action::Quit < Collision::Action
+ @app : Adw::Application
-module Collision::Action
- class Quit
- getter action : Gio::SimpleAction
-
- def initialize(app : Adw::Application, window_id : UInt32)
- @action = Gio::SimpleAction.new("quit", nil)
-
- @action.activate_signal.connect do
- main_window = APP.active_window.nil? ? APP.window_by_id(window_id) : APP.active_window
- main_window.close if main_window
- APP.quit
- end
+ def initialize(app : Adw::Application)
+ @app = app
+ super(app, "quit", {"Q"})
+ end
- app.add_action(action)
- end
+ def on_activate
+ @app.quit
end
end
diff --git a/src/collision/functions/checksum.cr b/src/collision/functions/checksum.cr
index 97bf1462..4c277089 100644
--- a/src/collision/functions/checksum.cr
+++ b/src/collision/functions/checksum.cr
@@ -13,7 +13,7 @@ module Collision::Checksum
extend self
@@digest = gen_digest
- @@channel = Channel(Nil).new
+ @@channel = Channel(Tuple(String, String)).new
def split_by_4(hash_str : String)
i = 0
@@ -39,34 +39,34 @@ module Collision::Checksum
Non::Blocking.spawn(same_thread: false, &block)
end
- def on_finished(&block)
- yield
+ def on_finished(res : Hash(String, String), &block)
+ yield res
end
- def generate(filename : String, &block)
- hash_amount = ACTION_ROWS.keys.size
- ACTION_ROWS.keys.each_with_index do |hash_type, i|
+ def generate(filename : String, &block : Hash(String, String) ->)
+ hash_amount = Collision::HASH_FUNCTIONS.size
+ Collision::HASH_FUNCTIONS.each_with_index do |hash_type, i|
proc = ->(fiber_no : Int32) do
Collision::Checksum.spawn do
LOGGER.debug { "Spawned fiber #{hash_type}" }
hash_value = calculate(hash_type, filename)
- ACTION_ROWS[hash_type].subtitle = split_by_4(hash_value)
- CLIPBOARD_HASH[hash_type] = hash_value
LOGGER.debug { "Finished fiber #{fiber_no + 1}/#{hash_amount}" }
- @@channel.send(nil)
+ @@channel.send({hash_type, hash_value})
end
end
proc.call(i)
end
Collision::Checksum.spawn do
+ res = Hash(String, String).new
hash_amount.times do |i|
- @@channel.receive
+ t_res = @@channel.receive
+ res[t_res[0]] = t_res[1]
end
- on_finished(&block)
+ on_finished(res, &block)
end
end
end
diff --git a/src/collision/functions/clipboard.cr b/src/collision/functions/clipboard.cr
deleted file mode 100644
index 33956fb3..00000000
--- a/src/collision/functions/clipboard.cr
+++ /dev/null
@@ -1,48 +0,0 @@
-module Collision
- class Clipboard
- getter clipboard : Gdk::Clipboard
-
- def initialize(window : Adw::ApplicationWindow, copy_buttons : Hash(String, Gtk::Button))
- @clipboard = window.clipboard
- @copy_buttons = copy_buttons
-
- setup_copy_buttons
- end
-
- private def setup_copy_buttons
- @copy_buttons.each do |hash_type, btn|
- # Soft lock is being used to avoid
- # spamming the copy buttons until
- # the button feedback resets.
- soft_locked = false
-
- btn.clicked_signal.connect do
- LOGGER.debug { "Copied #{hash_type} hash" }
-
- hash = CLIPBOARD_HASH[hash_type]
- success = true
- begin
- @clipboard.set(hash)
- rescue
- success = false
- end
-
- next if soft_locked
- soft_locked = true
-
- btn.icon_name = Collision::Feedback.icon(success)
- feedback_class = success ? "success" : "error"
- btn.add_css_class(feedback_class)
- Non::Blocking.spawn do
- sleep 1.1.seconds # 1 feels fast, 1.5 feels slow
- btn.icon_name = "edit-copy-symbolic"
- btn.remove_css_class(feedback_class)
- soft_locked = false
-
- LOGGER.debug { "Copy button feedback reset" }
- end
- end
- end
- end
- end
-end
diff --git a/src/collision/functions/dnd.cr b/src/collision/functions/dnd.cr
index 5d2ef641..ce42a2cd 100644
--- a/src/collision/functions/dnd.cr
+++ b/src/collision/functions/dnd.cr
@@ -2,29 +2,25 @@
module Collision
class DragNDrop
- alias DropClasses = Collision | Collision::Welcomer | Collision::Compare
-
- getter parent : DropClasses
+ @on_dropped : Proc(Gio::File, Nil)
getter controller : Gtk::DropTarget = Gtk::DropTarget.new(Gdk::FileList.g_type, Gdk::DragAction::Copy)
- def initialize(parent : DropClasses)
- @parent = parent
-
+ def initialize(@on_dropped)
connect_dnd_signals
end
private def dnd_enter(x, y)
- LOGGER.debug { "DnD Entered #{@parent}" }
+ LOGGER.debug { "DnD Entered" }
Gdk::DragAction::Copy
end
private def dnd_leave
- LOGGER.debug { "DnD Left #{@parent}" }
+ LOGGER.debug { "DnD Left" }
end
private def dnd_drop(value, x, y)
- LOGGER.debug { "DnD Dropped #{@parent}" }
+ LOGGER.debug { "DnD Dropped" }
begin
object_ptr = LibGObject.g_value_get_boxed(value.to_unsafe)
@@ -36,7 +32,7 @@ module Collision
end
raise "No files starting with 'file://' given" if file.nil?
- @parent.file = file
+ @on_dropped.call(file)
true
rescue ex
diff --git a/src/collision/functions/feedback.cr b/src/collision/functions/feedback.cr
index 235034ab..1ea54763 100644
--- a/src/collision/functions/feedback.cr
+++ b/src/collision/functions/feedback.cr
@@ -2,21 +2,7 @@
module Collision::Feedback
extend self
-
- DEFAULT_FEEDBACK_ICON = "dialog-password-symbolic"
- CLASSES = {"success", "error"}
-
- def reset
- TOOL_VERIFY_INPUT.buffer.text = ""
- TOOL_VERIFY_FEEDBACK.visible = false
-
- TOOL_COMPARE_BUTTON_LABEL.label = Gettext.gettext("Choose File...")
- TOOL_COMPARE_BUTTON.remove_css_class("success")
- TOOL_COMPARE_BUTTON.remove_css_class("error")
- TOOL_COMPARE_BUTTON_IMAGE.icon_name = "paper-symbolic"
-
- LOGGER.debug { "Feedback reset" }
- end
+ CLASSES = {"success", "error"}
def icon(success : Bool? = false)
success ? "test-pass-symbolic" : "cross-large-symbolic"
diff --git a/src/collision/functions/file.cr b/src/collision/functions/file.cr
deleted file mode 100644
index 4d2d6514..00000000
--- a/src/collision/functions/file.cr
+++ /dev/null
@@ -1,84 +0,0 @@
-# Resets the window after a main file set
-# Updates the filename in the StatusPage & calls generate_hashes
-
-module Collision
- extend self
-
- HASH_LIST_TITLE = Gettext.gettext("Hash")
- TOOLS_TITLE = Gettext.gettext("Verify")
-
- def reset
- OPEN_FILE_BUTTON.visible = true
- HEADER_TITLE.visible = true
- BOTTOM_TABS.visible = true
-
- hash_list_page = STACK.add_titled(HASH_LIST, "hashes", HASH_LIST_TITLE)
- hash_list_page.icon_name = "octothorp-symbolic"
- tools_page = STACK.add_titled(TOOLS_GRID, "verify", TOOLS_TITLE)
- tools_page.icon_name = "test-pass-symbolic"
-
- clamp = Adw::Clamp.cast(FILE_INFO.child.not_nil!)
- clamp.child = STACK
-
- WINDOW_BOX.append(FILE_INFO)
- WINDOW_BOX.append(BOTTOM_TABS)
- WINDOW_BOX.append(SPINNER)
- end
-
- def real_path(filepath : Path) : String | Nil
- {% if !env("FLATPAK_ID").nil? || file_exists?("/.flatpak-info") %}
- return nil if filepath.parents.includes?(Path["/", "run", "user"])
- {% end %}
- filepath.dirname.to_s
- end
-
- def file=(filepath : Path)
- LOGGER.debug { "File set: \"#{filepath}\"" }
-
- FILE_INFO.title = filepath.basename.to_s
- FILE_INFO.description = real_path(filepath)
-
- OPEN_FILE_BUTTON.visible = false
- FILE_INFO.visible = false
- BOTTOM_TABS.visible = false
- SPINNER.visible = true
- HEADER_TITLE.view_switcher_enabled = false
-
- LOGGER.debug { "Begin generating hashes" }
- Collision::Checksum.generate(filepath.to_s) do
- sleep 500.milliseconds
- OPEN_FILE_BUTTON.visible = true
- FILE_INFO.visible = true
- BOTTOM_TABS.visible = true
- SPINNER.visible = false
- HEADER_TITLE.view_switcher_enabled = true
- end
- end
-
- # For Gio::File.
- # Should be used instead of Collision#file=(filepath : Path)
- # unless path is a File and exists.
- def file=(file : Gio::File)
- Collision.file?(file.path.not_nil!)
-
- Collision::Feedback.reset
-
- Collision.file = file.path.not_nil!
- end
-
- # Checks if path is a File and exists.
- # If it doesn't, it will either raise an exception
- # or just log an error based on the `exception` param.
- def file?(file : Path | String, exception : Bool = true) : Bool
- return true if File.file?(file)
-
- msg = "\"#{file}\" does not exist or is not a File"
- if exception
- raise msg
- else
- LOGGER.debug { msg }
- end
-
- false
- end
-end
diff --git a/src/collision/functions/file_utils.cr b/src/collision/functions/file_utils.cr
new file mode 100644
index 00000000..8958863c
--- /dev/null
+++ b/src/collision/functions/file_utils.cr
@@ -0,0 +1,44 @@
+# Resets the window after a main file set
+# Updates the filename in the StatusPage & calls generate_hashes
+
+module Collision::FileUtils
+ extend self
+
+ def real_path(filepath : Path) : String | Nil
+ {% if !env("FLATPAK_ID").nil? || file_exists?("/.flatpak-info") %}
+ return nil if filepath.parents.includes?(Path["/", "run", "user"])
+ {% end %}
+ filepath.dirname.to_s
+ end
+
+ # Checks if path is a File and exists.
+ # If it doesn't, it will either raise an exception
+ # or just log an error based on the `exception` param.
+ def file?(file : Path | String, exception : Bool = true) : Bool
+ return true if File.file?(file)
+
+ msg = "\"#{file}\" does not exist or is not a File"
+ if exception
+ raise msg
+ else
+ Collision::LOGGER.debug { msg }
+ end
+
+ false
+ end
+
+ # Checks if any of the `needles` are in the `file_path` file
+ def compare_content(file_path : Path | String, needles : Array(String)) : Bool
+ Collision::LOGGER.debug { "Begin comparing content" }
+ res = false
+
+ File.open(file_path) do |file_io|
+ file_io.each_line do |line|
+ break res = true if line.split(' ').any? { |word| needles.includes?(word.downcase) }
+ end
+ end
+
+ Collision::LOGGER.debug { "Finished comparing content" }
+ res
+ end
+end
diff --git a/src/collision/functions/headbar.cr b/src/collision/functions/headbar.cr
deleted file mode 100644
index d8dbec26..00000000
--- a/src/collision/functions/headbar.cr
+++ /dev/null
@@ -1,24 +0,0 @@
-module Collision
- class Headerbar
- getter widget : Adw::HeaderBar
-
- def initialize(
- headerbar : Adw::HeaderBar = Adw::HeaderBar.new,
- open_file_button : Gtk::Button = OPEN_FILE_BUTTON,
- menu_button : Gtk::MenuButton = MENU_BUTTON,
- title : Adw::ViewSwitcherTitle = HEADER_TITLE
- )
- open_file_button.visible = false
-
- headerbar.pack_start(open_file_button)
- headerbar.pack_end(menu_button)
- headerbar.title_widget = title
-
- @widget = headerbar
- end
-
- def title=(title : Adw::ViewSwitcherTitle)
- @widget.title_widget = title
- end
- end
-end
diff --git a/src/collision/views/main.cr b/src/collision/views/main.cr
deleted file mode 100644
index c975a3f0..00000000
--- a/src/collision/views/main.cr
+++ /dev/null
@@ -1,134 +0,0 @@
-module Collision
- @@main_window_id = 0_u32
- @@activated = false
-
- def activate(app : Adw::Application)
- # Put window on focus if already exists.
- main_window = APP.window_by_id(@@main_window_id)
- return main_window.present if main_window
-
- # Setup window.
- window = Adw::ApplicationWindow.new(app)
- window_settings = Collision.settings
-
- window.name = "mainWindow"
- window.title = Gettext.gettext("Collision")
- window.close_request_signal.connect(->Collision::Settings.save(Gtk::Window))
- window.width_request = 360
- window.height_request = 360
- window.set_default_size(window_settings[:window_width], window_settings[:window_height])
- window.maximize if window_settings[:window_maximized]
-
- @@main_window_id = window.id
-
- # Initial layout.
- root = Adw::StatusPage.cast(B_UI["welcomer"])
- headerbar = Collision::Headerbar.new
-
- WINDOW_BOX.append(headerbar.widget)
- WINDOW_BOX.append(root)
-
- # Setup file choosers.
- WELCOMER_FILE_CHOOSER_NATIVE.transient_for = window
- TOOL_COMPARE_FILE_CHOOSER_NATIVE.transient_for = window
- MAIN_FILE_CHOOSER_NATIVE.transient_for = window
-
- MAIN_FILE_CHOOSER_NATIVE.response_signal.connect do |response|
- next unless response == -3
-
- Collision.file = MAIN_FILE_CHOOSER_NATIVE.file.not_nil!
- rescue ex
- LOGGER.debug { ex }
- end
-
- OPEN_FILE_BUTTON.clicked_signal.connect do
- MAIN_FILE_CHOOSER_NATIVE.show
- end
-
- # Setup actions.
- Collision::Action::About.new(app)
- Collision::Action::HashInfo.new(app, window.id)
- Collision::Action::Quit.new(app, window.id)
- Collision::Action::Open.new(app)
-
- # Setup accelerators.
- app.set_accels_for_action("app.quit", {"q", "w"})
- app.set_accels_for_action("app.open-file", {"o"})
-
- # Setup clipboard.
- Collision::Clipboard.new(window, COPY_BUTTONS)
-
- # Setup views.
- Collision::Welcomer.init
- Collision::Compare.init
- Collision::Verify.init
-
- {% if flag?(:debug) || !flag?(:release) %}
- window.add_css_class("devel")
- {% end %}
-
- # Setup DnD controllers.
- root.add_controller(Collision::DragNDrop.new(Collision::Welcomer).controller)
- FILE_INFO.add_controller(Collision::DragNDrop.new(Collision).controller)
-
- window.content = WINDOW_BOX
- window.present
- @@activated = true
-
- LOGGER.debug { "Window activated" }
- LOGGER.debug { "Settings: #{window_settings}" }
- end
-
- # Sets up the verify tab so it's responsive
- # on window size change as well as its initial
- # state.
- def startup(app : Adw::Application)
- tools_grid_first_child = TOOLS_GRID.first_child
- tools_grid_last_child = TOOLS_GRID.last_child
- BOTTOM_TABS.notify_signal["reveal"].connect do
- next if tools_grid_last_child.nil? || tools_grid_first_child.nil?
- row = 0
- column = 1
- if BOTTOM_TABS.reveal
- row = 1
- column = 0
- end
-
- TOOLS_GRID.remove(tools_grid_last_child)
- TOOLS_GRID.attach(tools_grid_last_child, column, row, 1, 1)
- end
-
- TOOL_COMPARE_BUTTON_SPINNER.visible = false
- TOOL_COMPARE_BUTTON_FEEDBACK.prepend(TOOL_COMPARE_BUTTON_SPINNER)
- TOOL_VERIFY_INPUT.remove_css_class("view")
- TOOL_VERIFY_INPUT.cursor_visible = false
- TOOL_VERIFY_INPUT.accepts_tab = false
-
- scrolled_window = Gtk::ScrolledWindow.new(height_request: 125)
- scrolled_window.child = TOOL_VERIFY_INPUT
-
- TOOL_VERIFY_OVERLAY.child = scrolled_window
- end
-
- # Handles the open signal. It first calls activate and then
- # if there are files passed (that exist and are not dirs)
- # it sets the first one (since multiple can be passed)
- # as the Collision::Welcomer's file.
- def open_with(app : Adw::Application, files : Enumerable(Gio::File), hint : String)
- activate(app) unless @@activated
-
- if files.size > 0 && Collision.file?(files[0].path.not_nil!, false)
- (Collision::Welcomer.passed? ? Collision : Collision::Welcomer).file = files[0]
- end
-
- nil
- end
-
- APP.startup_signal.connect(->startup(Adw::Application))
- APP.activate_signal.connect(->activate(Adw::Application))
- APP.open_signal.connect(->open_with(Adw::Application, Enumerable(Gio::File), String))
-
- # ARGV but without flags, passed to Application.
- clean_argv = [PROGRAM_NAME].concat(ARGV.reject { |x| x.starts_with?('-') })
- exit(APP.run(clean_argv))
-end
diff --git a/src/collision/views/tools/compare.cr b/src/collision/views/tools/compare.cr
deleted file mode 100644
index 8928578b..00000000
--- a/src/collision/views/tools/compare.cr
+++ /dev/null
@@ -1,67 +0,0 @@
-module Collision::Compare
- extend self
-
- # We want to only check the file contents
- # IF the file is smaller than the size below.
- # We want to avoid loading a huge file in
- # memory but also avoid false-positives.
- MAX_COMPARE_READ_SIZE = 10000 # in bytes
-
- def init
- TOOL_COMPARE_BUTTON.add_controller(Collision::DragNDrop.new(Collision::Compare).controller)
-
- TOOL_COMPARE_BUTTON.clicked_signal.connect do
- TOOL_COMPARE_FILE_CHOOSER_NATIVE.show
- end
-
- TOOL_COMPARE_FILE_CHOOSER_NATIVE.response_signal.connect do |response|
- next unless response == -3
-
- Collision::Compare.file = TOOL_COMPARE_FILE_CHOOSER_NATIVE.file.not_nil!
- rescue ex
- LOGGER.debug { ex }
- end
- end
-
- def file=(file : Gio::File)
- LOGGER.debug { "Begin comparing tool" }
- file_path = file.path.not_nil!
- Collision.file?(file_path)
-
- TOOL_COMPARE_BUTTON_SPINNER.visible = true
- TOOL_COMPARE_BUTTON_IMAGE.visible = false
- TOOL_COMPARE_BUTTON.remove_css_class("success")
- TOOL_COMPARE_BUTTON.remove_css_class("error")
-
- TOOL_COMPARE_BUTTON_LABEL.label = file_path.basename.to_s
- Collision::Checksum.spawn do
- compareFileSHA256 = Collision::Checksum.calculate("sha256", file.path.to_s)
- result = CLIPBOARD_HASH["SHA256"] == compareFileSHA256
- result = compare_content(file_path) if !result && File.size(file_path) < MAX_COMPARE_READ_SIZE
- classes = Collision::Feedback.class(result)
-
- sleep 500.milliseconds
- TOOL_COMPARE_BUTTON_SPINNER.visible = false
- TOOL_COMPARE_BUTTON_IMAGE.visible = true
- TOOL_COMPARE_BUTTON_IMAGE.icon_name = Collision::Feedback.icon(result)
- TOOL_COMPARE_BUTTON.add_css_class(classes[:add])
- TOOL_COMPARE_BUTTON.remove_css_class(classes[:remove])
-
- LOGGER.debug { "Finished comparing tool" }
- end
- end
-
- def compare_content(file_path : Path | String) : Bool
- LOGGER.debug { "Begin comparing content" }
- res = false
-
- File.open(file_path) do |file_io|
- file_io.each_line do |line|
- break res = true if line.split(' ').any? { |word| CLIPBOARD_HASH.values.includes?(word.downcase) }
- end
- end
-
- LOGGER.debug { "Finished comparing content" }
- res
- end
-end
diff --git a/src/collision/views/tools/verify.cr b/src/collision/views/tools/verify.cr
deleted file mode 100644
index 65a17669..00000000
--- a/src/collision/views/tools/verify.cr
+++ /dev/null
@@ -1,33 +0,0 @@
-module Collision::Verify
- extend self
-
- def handle_input_change(text : String)
- result = CLIPBOARD_HASH.values.includes?(text.downcase)
- if text.size == 0
- TOOL_VERIFY_OVERLAY_LABEL.visible = true
- TOOL_VERIFY_FEEDBACK.visible = false
- TOOL_VERIFY_INPUT.remove_css_class("success")
- TOOL_VERIFY_INPUT.remove_css_class("error")
- return
- end
- TOOL_VERIFY_OVERLAY_LABEL.visible = false
- TOOL_VERIFY_FEEDBACK.visible = true
-
- classes = Collision::Feedback.class(result)
-
- TOOL_VERIFY_INPUT.add_css_class(classes[:add])
- TOOL_VERIFY_INPUT.remove_css_class(classes[:remove])
-
- TOOL_VERIFY_FEEDBACK.icon_name = Collision::Feedback.icon(result)
- TOOL_VERIFY_FEEDBACK.add_css_class(classes[:add])
- TOOL_VERIFY_FEEDBACK.remove_css_class(classes[:remove])
- end
-
- def init
- TOOL_VERIFY_INPUT.buffer.notify_signal["text"].connect do
- LOGGER.debug { "Verify tool notify event" }
-
- handle_input_change(TOOL_VERIFY_INPUT.buffer.text)
- end
- end
-end
diff --git a/src/collision/views/welcomer.cr b/src/collision/views/welcomer.cr
deleted file mode 100644
index d6cde5c3..00000000
--- a/src/collision/views/welcomer.cr
+++ /dev/null
@@ -1,34 +0,0 @@
-module Collision::Welcomer
- extend self
- @@passed = false
-
- def init
- WELCOME_BUTTON.clicked_signal.connect do
- WELCOMER_FILE_CHOOSER_NATIVE.show
- end
-
- WELCOMER_FILE_CHOOSER_NATIVE.response_signal.connect do |response|
- next unless response == -3
-
- Collision::Welcomer.file = WELCOMER_FILE_CHOOSER_NATIVE.file.not_nil!
- rescue ex
- LOGGER.debug { ex }
- end
- end
-
- def file=(file : Gio::File)
- Collision.file?(file.path.not_nil!)
-
- WINDOW_BOX.remove(Gtk::Widget.cast(B_UI["welcomer"]))
- Collision.reset
-
- Collision.file = file.path.not_nil!
- @@passed = true
-
- LOGGER.debug { "Passed welcomer" }
- end
-
- def passed? : Bool
- @@passed
- end
-end
diff --git a/src/collision/window.cr b/src/collision/window.cr
new file mode 100644
index 00000000..01989632
--- /dev/null
+++ b/src/collision/window.cr
@@ -0,0 +1,291 @@
+require "./functions/*"
+
+@[Gtk::UiTemplate(
+ resource: "/dev/geopjr/Collision/ui/application.ui",
+ children: {
+ "welcomeBtn",
+ "mainFileChooserNative",
+ "compareBtnFileChooserNative",
+ "mainStack",
+ "fileInfo",
+ "headerbarStack",
+ "openFileBtn",
+ "compareBtn",
+ "verifyOverlayLabel",
+ "verifyTextView",
+ "verifyFeedback",
+ "compareBtnImage",
+ "compareBtnLabel",
+ "compareBtnStack",
+ "switcher_bar",
+
+ "MD5_row",
+ "MD5_btn",
+ "SHA1_row",
+ "SHA1_btn",
+ "SHA256_row",
+ "SHA256_btn",
+ "SHA512_row",
+ "SHA512_btn",
+ }
+)]
+class CollisionWindow < Adw::ApplicationWindow
+ include Gtk::WidgetTemplate
+
+ @MD5_row : Adw::ActionRow
+ @SHA1_row : Adw::ActionRow
+ @SHA256_row : Adw::ActionRow
+ @SHA512_row : Adw::ActionRow
+
+ @MD5_btn : Gtk::Button
+ @SHA1_btn : Gtk::Button
+ @SHA256_btn : Gtk::Button
+ @SHA512_btn : Gtk::Button
+
+ @headerbarStack : Gtk::Stack
+ @welcomeBtn : Gtk::Button
+ @compareBtn : Gtk::Button
+ @compareBtnImage : Gtk::Image
+ @compareBtnLabel : Gtk::Label
+ @compareBtnStack : Gtk::Stack
+ @openFileBtn : Gtk::Button
+ @mainFileChooserNative : Gtk::FileChooserNative
+ @compareBtnFileChooserNative : Gtk::FileChooserNative
+ @mainStack : Gtk::Stack
+ @fileInfo : Adw::StatusPage
+ @switcher_bar : Adw::ViewSwitcherBar
+
+ @verifyOverlayLabel : Gtk::Label
+ @verifyTextView : Gtk::TextView
+ @verifyFeedback : Gtk::Image
+
+ @hash_results = Hash(String, String).new
+
+ def file=(filepath : Path)
+ Collision::LOGGER.debug { "File set: \"#{filepath}\"" }
+
+ @fileInfo.title = filepath.basename.to_s
+ @fileInfo.description = Collision::FileUtils.real_path(filepath)
+
+ Collision::LOGGER.debug { "Begin generating hashes" }
+ Collision::Checksum.generate(filepath.to_s) do |res|
+ sleep 500.milliseconds
+ GLib.idle_add do
+ res.each do |hash_type, hash_value|
+ @hash_results[hash_type] = hash_value
+ {% begin %}
+ case hash_type
+ {% for hash_function in Collision::HASH_FUNCTIONS %}
+ when {{hash_function}}
+ @{{hash_function.id}}_row.subtitle = Collision::Checksum.split_by_4(hash_value)
+ {% end %}
+ end
+ {% end %}
+ end
+
+ @mainStack.visible_child_name = "results"
+ @headerbarStack.visible_child_name = "switcher"
+ @openFileBtn.visible = true
+ @switcher_bar.visible = true
+
+ false
+ end
+ end
+ end
+
+ # For Gio::File.
+ # Should be used instead of Collision#file=(filepath : Path)
+ # unless path is a File and exists.
+ def file=(file : Gio::File)
+ Collision::FileUtils.file?(file.path.not_nil!)
+ self.file = file.path.not_nil!
+ end
+
+ def on_open_btn_clicked
+ @mainFileChooserNative.show
+ end
+
+ def on_drop(file : Gio::File)
+ loading
+ self.file = file
+ end
+
+ def loading
+ @mainStack.visible_child_name = "spinner"
+ @headerbarStack.visible_child_name = "empty"
+ @openFileBtn.visible = false
+ @switcher_bar.visible = false
+ reset_feedback
+ end
+
+ def reset_feedback
+ @verifyTextView.buffer.text = ""
+ @compareBtnStack.visible_child_name = "image"
+ @compareBtnLabel.label = Gettext.gettext("Choose File…")
+ @compareBtn.remove_css_class("success")
+ @compareBtn.remove_css_class("error")
+ @compareBtnImage.icon_name = "paper-symbolic"
+ end
+
+ def handle_input_change(text : String)
+ result = @hash_results.values.includes?(text.downcase.gsub(' ', ""))
+ if text.size == 0
+ @verifyOverlayLabel.visible = true
+ @verifyFeedback.visible = false
+ @verifyTextView.remove_css_class("success")
+ @verifyTextView.remove_css_class("error")
+ return
+ end
+
+ @verifyOverlayLabel.visible = false
+ @verifyFeedback.visible = true
+
+ classes = Collision::Feedback.class(result)
+
+ @verifyTextView.add_css_class(classes[:add])
+ @verifyTextView.remove_css_class(classes[:remove])
+
+ @verifyFeedback.icon_name = Collision::Feedback.icon(result)
+ @verifyFeedback.add_css_class(classes[:add])
+ @verifyFeedback.remove_css_class(classes[:remove])
+ end
+
+ # We want to only check the file contents
+ # IF the file is smaller than the size below.
+ # We want to avoid loading a huge file in
+ # memory but also avoid false-positives.
+ MAX_COMPARE_READ_SIZE = 10000 # in bytes
+
+ def comparefile=(file : Gio::File)
+ Collision::LOGGER.debug { "Begin comparing tool" }
+ file_path = file.path.not_nil!
+ Collision::FileUtils.file?(file_path)
+
+ @compareBtnStack.visible_child_name = "spinner"
+ @compareBtn.remove_css_class("success")
+ @compareBtn.remove_css_class("error")
+
+ @compareBtnLabel.label = file_path.basename.to_s
+ Collision::Checksum.spawn do
+ compareFileSHA256 = Collision::Checksum.calculate("sha256", file.path.to_s)
+ result = @hash_results["SHA256"] == compareFileSHA256
+ result = Collision::FileUtils.compare_content(file_path, @hash_results.values) if !result && File.size(file_path) < MAX_COMPARE_READ_SIZE
+ classes = Collision::Feedback.class(result)
+
+ sleep 500.milliseconds
+
+ GLib.idle_add do
+ @compareBtnStack.visible_child_name = "image"
+
+ @compareBtnImage.icon_name = Collision::Feedback.icon(result)
+ @compareBtn.add_css_class(classes[:add])
+ @compareBtn.remove_css_class(classes[:remove])
+
+ false
+ end
+
+ Collision::LOGGER.debug { "Finished comparing tool" }
+ end
+ end
+
+ def initialize
+ super()
+
+ @MD5_row = Adw::ActionRow.cast(template_child("MD5_row"))
+ @SHA1_row = Adw::ActionRow.cast(template_child("SHA1_row"))
+ @SHA256_row = Adw::ActionRow.cast(template_child("SHA256_row"))
+ @SHA512_row = Adw::ActionRow.cast(template_child("SHA512_row"))
+
+ @MD5_btn = Gtk::Button.cast(template_child("MD5_btn"))
+ @SHA1_btn = Gtk::Button.cast(template_child("SHA1_btn"))
+ @SHA256_btn = Gtk::Button.cast(template_child("SHA256_btn"))
+ @SHA512_btn = Gtk::Button.cast(template_child("SHA512_btn"))
+
+ @verifyOverlayLabel = Gtk::Label.cast(template_child("verifyOverlayLabel"))
+ @verifyTextView = Gtk::TextView.cast(template_child("verifyTextView"))
+ @verifyFeedback = Gtk::Image.cast(template_child("verifyFeedback"))
+
+ @mainStack = Gtk::Stack.cast(template_child("mainStack"))
+ @headerbarStack = Gtk::Stack.cast(template_child("headerbarStack"))
+ @switcher_bar = Adw::ViewSwitcherBar.cast(template_child("switcher_bar"))
+
+ @welcomeBtn = Gtk::Button.cast(template_child("welcomeBtn"))
+ @fileInfo = Adw::StatusPage.cast(template_child("fileInfo"))
+ @openFileBtn = Gtk::Button.cast(template_child("openFileBtn"))
+
+ @compareBtn = Gtk::Button.cast(template_child("compareBtn"))
+ @compareBtnImage = Gtk::Image.cast(template_child("compareBtnImage"))
+ @compareBtnLabel = Gtk::Label.cast(template_child("compareBtnLabel"))
+ @compareBtnStack = Gtk::Stack.cast(template_child("compareBtnStack"))
+
+ @mainFileChooserNative = Gtk::FileChooserNative.cast(template_child("mainFileChooserNative"))
+ @compareBtnFileChooserNative = Gtk::FileChooserNative.cast(template_child("compareBtnFileChooserNative"))
+ @mainFileChooserNative.transient_for = self
+ @compareBtnFileChooserNative.transient_for = self
+
+ @verifyTextView.buffer.notify_signal["text"].connect do
+ Collision::LOGGER.debug { "Verify tool notify event" }
+
+ handle_input_change(@verifyTextView.buffer.text)
+ end
+
+ @mainFileChooserNative.response_signal.connect do |response|
+ next unless response == -3
+
+ self.file = @mainFileChooserNative.file.not_nil!
+ loading
+ rescue ex
+ Collision::LOGGER.debug { ex }
+ end
+
+ @compareBtnFileChooserNative.response_signal.connect do |response|
+ next unless response == -3
+
+ self.comparefile = @compareBtnFileChooserNative.file.not_nil!
+ rescue ex
+ Collision::LOGGER.debug { ex }
+ end
+
+ @welcomeBtn.clicked_signal.connect(->on_open_btn_clicked)
+ @openFileBtn.clicked_signal.connect(->on_open_btn_clicked)
+
+ @mainStack.add_controller(Collision::DragNDrop.new(->on_drop(Gio::File)).controller)
+ @compareBtn.add_controller(Collision::DragNDrop.new(->comparefile=(Gio::File)).controller)
+
+ @compareBtn.clicked_signal.connect do
+ @compareBtnFileChooserNative.show
+ end
+
+ {% for hash in Collision::HASH_FUNCTIONS %}
+ {{hash.downcase.id}}_soft_locked = false
+ @{{hash.id}}_btn.clicked_signal.connect do
+ next if {{hash.downcase.id}}_soft_locked
+ {{hash.downcase.id}}_soft_locked = true
+
+ Collision::LOGGER.debug { {{"Copied #{hash.id} hash"}} }
+
+ success = true
+ begin
+ self.clipboard.set(@hash_results[{{hash}}])
+ rescue
+ success = false
+ end
+
+ @{{hash.id}}_btn.icon_name = Collision::Feedback.icon(success)
+ feedback_class = success ? "success" : "error"
+ @{{hash.id}}_btn.add_css_class(feedback_class)
+ Non::Blocking.spawn do
+ sleep 1.1.seconds # 1 feels fast, 1.5 feels slow
+ GLib.idle_add do
+ @{{hash.id}}_btn.icon_name = "edit-copy-symbolic"
+ @{{hash.id}}_btn.remove_css_class(feedback_class)
+ {{hash.downcase.id}}_soft_locked = false
+ false
+ end
+
+ Collision::LOGGER.debug { "Copy button feedback reset" }
+ end
+ end
+ {% end %}
+ end
+end