Compare commits

...

224 Commits

Author SHA1 Message Date
Jonathan White
44c58a66d1 Release 2.1.1 2017-02-06 19:04:48 -05:00
Janek Bevendorff
8fc11c0791 Update translations 2017-02-07 00:49:32 +01:00
Jonathan White
db75d94961 Added release version and changelist 2017-02-06 18:43:11 -05:00
Janek Bevendorff
26ff528a85 Merge branch 'meta/release-preparation' into release/2.1.1 2017-02-06 23:27:05 +01:00
Janek Bevendorff
f7e9f85668 Install Qt 5.8 inside Docker container 2017-02-06 21:13:24 +01:00
Janek Bevendorff
75eb0c6951 Properly HTML-escape strings with user-defined contents in message boxes (#247)
* Properly HTML-escape strings with user-defined contents in message boxes, resolves #236

* Also escape group names in EditWidget title
2017-02-06 14:23:51 -05:00
Janek Bevendorff
e31638d3dd Fix formatting and coding style 2017-02-01 01:03:30 +01:00
Janek Bevendorff
e12cd83b80 Check for existence of realpath instead of operating system 2017-02-01 00:53:58 +01:00
Janek Bevendorff
040b476359 Manually implement realpath for OS X 2017-01-31 19:25:15 +01:00
Janek Bevendorff
d7633f40ba Add Windows installer branding bitmaps 2017-01-30 21:28:59 +01:00
Janek Bevendorff
80fc8d4da9 Replace /bin/bash with /usr/bin/env bash 2017-01-30 18:36:11 +01:00
Janek Bevendorff
9a92d20001 Revert icon patch, because upstream patched fast
See 69bf4718be
2017-01-29 22:19:44 +01:00
Janek Bevendorff
2b18089641 Patch desktop integration script so that it finds the keepassxc.png icons 2017-01-29 21:58:54 +01:00
Janek Bevendorff
1da87d1d19 Only create bin-release dir on Linux 2017-01-29 20:58:09 +01:00
Janek Bevendorff
0c54276fe2 Support building on OS X (untested) 2017-01-29 20:46:57 +01:00
Janek Bevendorff
dda9a95163 Move packages to main release folder instead of bin-release on Windows 2017-01-29 12:53:52 +01:00
Janek Bevendorff
34fa456106 Add summary line to individual help pages 2017-01-29 12:52:05 +01:00
Janek Bevendorff
9fe4504623 Fix heredoc 2017-01-29 02:50:44 +01:00
Janek Bevendorff
08d68300bd Disable GTK2 style again for now, since it seems to cause trouble with the tray icon 2017-01-29 02:46:02 +01:00
Janek Bevendorff
e326e2c6b3 Bundle GTK2 platform style 2017-01-29 02:24:12 +01:00
Janek Bevendorff
e94dc226b5 Downgrade to Ubuntu 14.04 2017-01-29 02:23:55 +01:00
Janek Bevendorff
bd2edea1c9 Ignore .github folder in exports 2017-01-28 23:40:57 +01:00
Janek Bevendorff
00cd0e1ae3 Use correct AppImage-Recipe.sh 2017-01-28 23:24:12 +01:00
Janek Bevendorff
05aefc6489 Show error when invalid command specified 2017-01-28 23:17:48 +01:00
Janek Bevendorff
5652018cde Merge branch 'develop' into meta/release-preparation 2017-01-28 23:02:57 +01:00
Janek Bevendorff
a63ba6bc4f Update translations before merging branches 2017-01-28 23:02:26 +01:00
Janek Bevendorff
c043be3aa4 Copy windows binaries to release-bin directory 2017-01-28 22:45:07 +01:00
Janek Bevendorff
b7180893c6 Fix check for Msys 2017-01-28 22:23:51 +01:00
Janek Bevendorff
96ca7a8cbc Fix CMake options on Windows 2017-01-28 22:19:23 +01:00
Janek Bevendorff
c87c811719 Make release script more modular and useful on other platforms 2017-01-28 22:12:38 +01:00
Janek Bevendorff
a3fd3205a9 KeePassX PR Migration: #190 Search for Group Names (#168)
* Search Group details in addition to entry details; feature parity with KeePass
* Remove assertions to prevent crashes in Debug mode when search result is empty
2017-01-28 11:27:20 -05:00
Janek Bevendorff
55084499ac Merge pull request #237 from keepassxreboot/feature/51-remember-cmd-exec-decision
Add 'Remember my choice' checkbox, resolves #51
2017-01-28 18:08:58 +02:00
Janek Bevendorff
3e6f76826b Don't show cmd:// prefix in confirmation dialog 2017-01-28 14:24:33 +01:00
Janek Bevendorff
01e9d39b63 Add 'Remember my choice' checkbox
Allow user to store preference when asked whether to execute command, resolves #51
2017-01-28 14:18:43 +01:00
Janek Bevendorff
0116d4176a Merge pull request #235 from Throne3d/fix/51-prompt-before-cmd
Prompt the user before executing a command in a cmd:// URL
2017-01-28 02:11:17 +02:00
Edward Jones
7ea306a61a Prompt the user before executing a command in a cmd:// URL
Fixes #51.
(Does not have a "don't ask me anymore" option.)
2017-01-28 00:05:14 +00:00
Janek Bevendorff
cdaab550e9 Merge pull request #234 from Throne3d/improve-contributingmd
Update CONTRIBUTING.md
2017-01-28 01:50:16 +02:00
Edward Jones
aa6f617715 Update CONTRIBUTING.md
* Replace instances of 'KeePassX Reboot' with 'KeePassXC'
* Lowercase headers to be consistent with README
* Add more headers to the table of contents
* Make the link to the issue tracker more prominent (preferred over
Google Groups, apparently)
* Add information about the #keepassxc-dev IRC channel on Freenode
* Add 'hotfix' to the branch strategy (seems in the standard and
is also used)
* Rephrase some paragraphs to make them clearer, fix a few typos
2017-01-27 23:32:13 +00:00
Janek Bevendorff
7e4592c1e7 Merge pull request #233 from louib/fix/downloadIconCrash
Fixes #225 : downloading favicon crash
2017-01-27 21:57:35 +02:00
Janek Bevendorff
b97024c8f6 Add more KeePassXC branding to the Windows installer 2017-01-27 20:42:27 +01:00
thez3ro
0f44f6752e Fix entropy_meter script 2017-01-27 20:39:32 +01:00
Louis-Bertrand Varin
3c9054c36f Fixes #225 : downloading favicon crash 2017-01-27 13:49:33 -05:00
Janek Bevendorff
61379d4e05 Merge pull request #229 from keepassxreboot/hotfix/192-password-generator-button-padding
Use consistent button min-heights, resolves #192
2017-01-27 19:48:42 +02:00
Janek Bevendorff
fd2b779bb8 Use consistent button min-heights, resolves #192 2017-01-27 18:48:12 +01:00
Janek Bevendorff
202e8ac3a1 Merge pull request #230 from keepassxreboot/hotfix/228-password-generator-text-size
Don't make font size of password strength labels smaller than 8pt, resolves #228
2017-01-27 19:47:03 +02:00
Janek Bevendorff
6796f20683 Remove hardcoded font size from UI file 2017-01-27 18:11:17 +01:00
Janek Bevendorff
cdc9fddc44 Don't make font size of password strength labels smaller than 8pt, resolves #228 2017-01-27 17:59:03 +01:00
Janek Bevendorff
6409661a9f Merge pull request #227 from louib/feature/generateButton
Reuse password generator icon.
2017-01-27 18:27:21 +02:00
Louis-Bertrand Varin
4ed03c2db2 Reuse password generator icon. 2017-01-26 21:00:52 -05:00
Janek Bevendorff
7b2a9f7ea8 Merge pull request #226 from louib/fix/generatorCrash
Fixes #199 : Disable buttonGenerate when no classes.
2017-01-27 03:40:09 +02:00
Louis-Bertrand Varin
0d222e138f else on the same line. 2017-01-26 20:35:24 -05:00
Louis-Bertrand Varin
a80c415fc0 Disable buttonGenerate when no classes. 2017-01-26 20:35:17 -05:00
Janek Bevendorff
3f1a75f40a Merge pull request #222 from rockihack/fix-global-autotype
MacOS: Fix Global Autotype in Google Chrome, resolves #212
2017-01-26 21:50:35 +01:00
Janek Bevendorff
ad4bf1ac84 Merge pull request #222 from rockihack/fix-global-autotype
MacOS: Fix Global Autotype in Google Chrome, resolves #212
2017-01-26 22:37:27 +02:00
rockihack
11dec27dd1 MacOS: Fix Global Autotype when frontmost window title is empty. 2017-01-26 21:09:57 +01:00
Janek Bevendorff
66253e142b Install qwindows platform abstraction plugin on Windows 2017-01-26 20:08:53 +01:00
Jonathan White
b22b67c7d9 Merge remote-tracking branch 'origin/hotfix/195-qt5.8-compilation' into develop 2017-01-25 21:25:26 -05:00
Jonathan White
d8662b709a Merge remote-tracking branch 'origin/hotfix/195-qt5.8-compilation' into release/2.1.1 2017-01-25 21:23:58 -05:00
Janek Bevendorff
e826309d59 Merge pull request #219 from keepassxreboot/feature/search-clone-entry
Clone an entry when in search mode
2017-01-26 04:21:52 +02:00
Janek Bevendorff
1554722a83 Add missing find_package call 2017-01-26 02:58:46 +01:00
Jonathan White
16ed89c471 Implement ability to clone an entry when in search mode.
* Cloned entries have "- Clone" appended to their name
2017-01-25 20:02:32 -05:00
Akinori MUSHA
6ccae6cc37 Pressing escape quits search 2017-01-25 19:37:53 -05:00
Janek Bevendorff
292ed892c1 Fix Windows linker and runtime errors when building against static Qt 2017-01-26 01:15:12 +01:00
Aleix Pol
bb8b91a100 Fix build with newer Qt5 2017-01-25 13:28:33 +01:00
Jonathan White
1310b34e9c Added NSIS installer to CPack packager for Windows 2017-01-25 13:22:28 +01:00
Janek Bevendorff
86cdb64b1d Re-enable checks 2017-01-25 13:22:26 +01:00
Janek Bevendorff
0456815bd5 Fix AppImage not launching on all platforms 2017-01-25 13:22:23 +01:00
Janek Bevendorff
1c12cd6b9e Add wget, file, fuse and python for building AppImages inside the container 2017-01-25 13:22:21 +01:00
Janek Bevendorff
3c687d29d8 Make regexp less strict 2017-01-25 13:22:18 +01:00
Jonathan White
bb70edfdb3 Merge remote-tracking branch 'origin/hotfix/147-keepasshttp' into develop 2017-01-25 07:19:45 -05:00
Jonathan White
a3f189f452 Merge pull request #170 from keepassxreboot/feature/169-signal-handlers
Implement clean shutdown after receiving Unix signals, resolves #169
2017-01-24 22:33:23 -05:00
Jonathan White
70727895f7 Added ifdef guard 2017-01-24 22:24:34 -05:00
louib
cdbf58b2c1 Preserve group/entry focus when replacing db. (#176) 2017-01-24 22:17:16 -05:00
Jonathan White
fe9bcc254a Merge pull request #196 from keepassxreboot/hotfix/147-keepasshttp
KeePassHTTP hotfix, resolves #147 and slightly increases security.
2017-01-24 19:12:04 -05:00
Janek Bevendorff
b0270550c5 Update README 2017-01-25 00:03:00 +01:00
Janek Bevendorff
597faee248 Replace localhost with 127.0.0.1 in the description 2017-01-24 22:39:43 +01:00
Janek Bevendorff
42c0815cda Merge pull request #193 from ryanrolds/context-menu-order
Adjusted order of entry's context menu
2017-01-24 21:27:06 +02:00
Ryan Olds
a5f12db6ba Moved autotype after copyattribute 2017-01-24 10:31:49 -08:00
Ryan Olds
62808f8342 Adjusted order of entry's context menu 2017-01-23 19:23:21 -08:00
Janek Bevendorff
c6e89f938d Do not enable KeePassHTTP by default 2017-01-24 03:19:27 +01:00
Janek Bevendorff
1edc116532 Only require libmicrohttpd when building with -DWITH_XC_HTTP=On, resolves #179 2017-01-24 00:26:16 +01:00
Janek Bevendorff
40aa92c5f7 Only listen to local loopback instead of user-configured host as discussed in issue #147
Also issue warning when trying to bind to a port below 1024 and use default port in that case
2017-01-24 00:08:48 +01:00
Janek Bevendorff
4eb39dc5ff Remove obsolete forward-declaration and disable QSocketNotifier after firing 2017-01-23 22:33:43 +01:00
Janek Bevendorff
b5cf6c7161 Add missing #ifdef around slot 2017-01-23 22:33:39 +01:00
Janek Bevendorff
198691182b Implement clean shutdown after receiving Unix signals, resolves #169
The database wasn't saved properly and lockfiles were not removed when receiving the signals SIGINT, SIGTERM, SIGQUIT or SIGHUP. This patch implements signal handling and performs a clean shutdown after receiving SIGINT SIGTERM or SIGQUIT and ignores SIGHUP.

Since this uses POSIX syscalls for signal and socket handling, there is no Windows implementation at the moment.
2017-01-23 22:33:36 +01:00
Jonathan White
72b81bf403 Merge remote-tracking branch 'origin/release/2.1.0' into develop 2017-01-22 14:25:40 -05:00
Janek Bevendorff
8a3ac7a26e Release 2.1.0 2017-01-22 20:16:34 +01:00
Janek Bevendorff
8878d7c5dc Formatting 2017-01-22 20:15:58 +01:00
Jonathan White
9a7b8da279 Merge remote-tracking branch 'origin/meta/release-preparation' into release/2.1.0 2017-01-22 14:08:52 -05:00
Janek Bevendorff
1f9ab7ca5d Fix path to CHANGELOG 2017-01-22 20:02:27 +01:00
Janek Bevendorff
2c00cb555c Add missing pull request reference 2017-01-22 19:58:22 +01:00
Janek Bevendorff
dcbc7ff217 Merge branch 'meta/release-preparation' into release/2.1.0 2017-01-22 19:52:26 +01:00
Janek Bevendorff
20f42aa2cc Update CHANGELOG 2017-01-22 19:49:23 +01:00
Jonathan White
19fef019ed Updated snapcraft file for release 2017-01-22 10:40:24 -08:00
Janek Bevendorff
ea02de0cc9 Add hint about merging back into develop and pushing changes 2017-01-22 19:14:56 +01:00
Janek Bevendorff
1525ffc225 Add release preparation script and AppImage recipe 2017-01-22 18:42:56 +01:00
Janek Bevendorff
5458d77980 Merge pull request #165 from keepassxreboot/test/newtravis
Travis builds release and debug using clang and gcc
2017-01-15 06:06:35 +02:00
Jonathan White
a545dc9264 Removed snapcraft and unspecified unique gcc build 2017-01-14 22:53:35 -05:00
Jonathan White
b7c658e8f8 Travis now performs Debug and Release builds 2017-01-14 22:53:31 -05:00
Janek Bevendorff
de69ecc35f Merge pull request #141 from keepassxreboot/feature/searchui-enhance
Enhanced search ui keypress actions

Also resolves #163: icons gone when running release-compiled binary from the build directory
2017-01-15 05:41:35 +02:00
Jonathan White
b6f754c29a Changed built-in clear search button with custom one to fix pixelation 2017-01-14 22:29:16 -05:00
Jonathan White
39e0708b3b Correcting missing icons when running release from build directory 2017-01-14 21:41:18 -05:00
Jonathan White
01464a7860 Added clear text button, accurate down arrow behavior, and fixed sizing 2017-01-14 20:27:34 -05:00
Louis-Bertrand Varin
fd3fefd6f1 Use placeholder for search widget. 2017-01-14 20:07:05 -05:00
Jonathan White
36df21d823 Enhanced search ui keypress actions
* Pressing down arrow will always focus on entry view
* Pressing enter opens currently selected entry
* Pressing CTRL+F focuses and selects search text
* Rewrote test cases to cover the new functionality
2017-01-14 19:47:35 -05:00
Janek Bevendorff
9dadafe20a Merge pull request #160 from louib/feature/updateKdbxExtract
Fixes #156 : update kdbx-extract
2017-01-14 22:26:23 +02:00
Janek Bevendorff
6fd7427cae Merge branch 'develop' into feature/updateKdbxExtract 2017-01-14 22:21:41 +02:00
Louis-Bertrand Varin
9065588a76 Remove unused dependencies. 2017-01-14 15:11:00 -05:00
Janek Bevendorff
b4b47ec8fd Merge pull request #161 from keepassxreboot/migrate/191-spelling
KeePassX PR Migration: #191 Spelling (missing commits)
2017-01-14 21:41:25 +02:00
Janek Bevendorff
ea9f313416 Fix GUI test 2017-01-14 20:33:27 +01:00
Josh Soref
af8e770106 spelling: successfully 2017-01-14 20:13:42 +01:00
Josh Soref
10f03795f9 spelling: transform 2017-01-14 20:13:34 +01:00
Josh Soref
2ad7c5c675 spelling: toggle 2017-01-14 20:13:25 +01:00
Josh Soref
084a1dd7d2 spelling: whose 2017-01-14 20:12:32 +01:00
Janek Bevendorff
d1793d9bcf Ask PR authors to remove lines that don't apply instead of changing emoji (#159)
* Ask user to remove lines that don't apply instead of changing emoji
* Replace KeePassXR with KeePassXC
* Add help text how to find KeePassXC version [skip ci]
* Combine documentation requirements into one [skip ci]
2017-01-14 14:09:59 -05:00
Louis-Bertrand Varin
d7ed33809f Use QCommandLineParser 2017-01-14 14:08:10 -05:00
Louis-Bertrand Varin
798041fe11 Extract readKeyFromLine. 2017-01-14 13:25:30 -05:00
Janek Bevendorff
995420ee87 Merge pull request #158 from keepassxreboot/migrate/191-spelling
KeePassX PR Migration: #191 Spelling
2017-01-14 20:09:51 +02:00
Josh Soref
341ff3de37 spelling: recycle 2017-01-14 17:32:03 +01:00
Josh Soref
ce06fcdbe0 spelling: occurred 2017-01-14 17:32:03 +01:00
Josh Soref
b8c93b3572 spelling: finish 2017-01-14 17:32:03 +01:00
Josh Soref
4ea6faae81 spelling: executor 2017-01-14 17:32:03 +01:00
Josh Soref
ca8ddd5f39 spelling: decrypt 2017-01-14 17:31:38 +01:00
Josh Soref
3924f628b4 spelling: full 2017-01-14 17:31:38 +01:00
Josh Soref
53e0893b51 spelling: correct 2017-01-14 17:31:38 +01:00
Josh Soref
d988b9e6d2 spelling: characters 2017-01-14 17:31:38 +01:00
Josh Soref
6060f41458 spelling: available 2017-01-14 17:31:38 +01:00
Josh Soref
569ea3ebdd spelling: attachments 2017-01-14 17:31:38 +01:00
Josh Soref
40eafa8adc spelling: associations 2017-01-14 17:31:38 +01:00
Janek Bevendorff
1ca5b72073 Merge pull request #143 from louib/feature/merge_databases_script
Feature : merge databases program
2017-01-14 15:09:47 +02:00
Janek Bevendorff
d7c308c688 Merge branch 'develop' into feature/merge_databases_script 2017-01-14 14:49:03 +02:00
Louis-Bertrand Varin
1e0191a37c Remove unused dependencies. 2017-01-13 19:45:33 -05:00
TheZ3ro
a8d9e8ba7c Merge pull request #153 from louib/fix/databaseLockTypo
Add missing space in messages.
2017-01-12 10:20:14 +01:00
Louis-Bertrand Varin
1a5c18c9bd Add missing space in messages. 2017-01-11 21:12:43 -05:00
Louis-Bertrand Varin
421e6303ae Rename merge-databases -> kdbx-merge 2017-01-11 21:05:16 -05:00
Louis-Bertrand Varin
a79366f105 Use QCommandLineParser
* Switch to using QCommandLineParser
* Implement the --same-password option
* extract `getKeyFromLine` function
2017-01-11 21:00:11 -05:00
Tarquin Winot
f85198c60f Replace old-style C conversions in entropy estimator (#150) 2017-01-10 17:37:58 -05:00
Louis-Bertrand Varin
2afa1f0dc8 Use 2 passwords for merging. 2017-01-08 22:46:30 -05:00
Louis-Bertrand Varin
a40f84d519 Read the password from stdin. 2017-01-07 15:14:54 -05:00
Louis-Bertrand Varin
bdb49a36bf Reverting .gitignore 2017-01-07 13:12:30 -05:00
Louis-Bertrand Varin
1458ba6f6f qInfo -> qDebug and missing imports. 2017-01-06 20:24:50 -05:00
Louis-Bertrand Varin
007073354f Revert cmake in .gitignore. 2017-01-06 20:19:26 -05:00
Louis-Bertrand Varin
be827211d2 Removing unused imports. 2017-01-06 16:32:18 -05:00
Louis-Bertrand Varin
5bc3924756 Merge databases script. 2017-01-06 16:29:07 -05:00
louib
ff6d78244b Updated INSTALL documentation. (#140)
* KeePassCR -> KeePassXC in INSTALL
* Added .md extension to INSTALL.
2017-01-04 18:47:29 -05:00
Jonathan White
5f1b9a17ca Fix testgui for Windows (PR #137)
Introduces TemporaryFile class to act as a proxy to fix autoreload test cases failing on windows due to the behavior of QTemporaryFile.
2017-01-03 22:27:41 -05:00
Jonathan White
534364454d Merge branch 'feature/cmake-fix-#50-#123' into develop
* Fixes #50 and #123
2017-01-02 22:27:20 -05:00
Jonathan White
0e65b9b9f8 Corrected autotype lib building for Windows 2017-01-02 22:25:37 -05:00
thez3ro
07a41f58d7 Add autotype library linking
Added Autotype switch + updated Travis to always test all extension
2017-01-02 22:25:36 -05:00
Jonathan White
5b04e195b0 Merge pull request #132 from keepassxreboot/improve_search_ui
Improve UI of the search edit widget
2017-01-02 20:04:21 -05:00
Jonathan White
9fa2dae68c Merge branch 'develop' into improve_search_ui 2017-01-02 17:51:42 -05:00
Danny Su
9000bc138f Update Website URL in About Dialog (#136) 2017-01-02 17:50:42 -05:00
Jonathan White
9660510cc7 Cleaned up SearchWidget code 2016-12-23 23:14:50 -05:00
thez3ro
298665e32a Improve UI of the search edit #131 2016-12-23 18:13:08 +01:00
Akinori MUSHA
d0a3c08840 Improve UI of the search edit (resurrecting 5c7c7f54)
- The copy action (Control+C) when no text is selected copies the
  password of the current entry.  This should be reasonable when
  Control+B copies the username.

- Down at EOL moves the focus to the entry view.  Enter and Tab should
  do that, but it would be handy for user to be able to get to the third
  entry by hitting Down three times.
2016-12-22 17:16:59 +09:00
Danny Su
63a1b49745 Fix build for 64-bit Windows (#130)
Building on 64-bit Windows gets to 99% and fails on this particular file due to the `stdafx.h` inclusion.
The macro in `entropy-meter.cpp` is different than `src/zxcvbn/zxcvbn.cpp`.
After copying the macro from `zxcvbn.cpp` and rebuilding, the Windows build succeeded.
2016-12-20 18:41:15 -05:00
greenbasilisk
9547ac0afd Fix build issue for openSuse (#126)
* Corrects missing symbols when linking
2016-12-11 21:50:17 -05:00
Jonathan White
fa891edb7c Added extensions section in about dialog; fixed url as well 2016-12-07 22:40:09 -05:00
thez3ro
65992ba6ae Option to select extension compile-time. Fix #50 #123 2016-12-04 19:57:24 +01:00
Jonathan White
791a749c2f Search scopes to currently selected group (and children) (#118)
* Added test cases for case sensitive and group search
2016-11-28 19:02:21 -05:00
Janek Bevendorff
9261d8ae9d Force focus on password field, resolves #116 (#117)
Also remove redudant code for minimizing to tray
2016-11-26 09:37:25 -05:00
TheZ3ro
405b82588b Add Autotype Entry-Attributes, Fix Group default sequence (#107) 2016-11-25 12:26:59 -05:00
Jonathan White
0dfd2003f9 Implement autoreload of database file (#93) 2016-11-25 12:13:28 -05:00
Jonathan White
3d249365c2 Merge remote-tracking branch 'origin/feature/autoreload-db' into develop 2016-11-25 12:04:44 -05:00
Jonathan White
7fb33653ad Implemented major autoreload functionality
* Ignore autoreload on save / save-as
* Consolidated db save code
* Corrected bug (crash) in merge entry code due to not cloning the entry
* Enhanced known modified status of database
* Implemented test cases for autoreload
2016-11-25 12:03:36 -05:00
Jonathan White
3cccfd97d2 Set travis to only create snapcraft after gcc build 2016-11-25 10:12:45 -05:00
Andreas Nüßlein
0c40cdc990 XR -> XC (#114) 2016-11-24 13:15:34 -05:00
Jonathan White
81392a71dd Only perform snapcraft build on develop or master, re-enabled clang 2016-11-23 22:28:08 -05:00
TheZ3ro
b2f3cc6903 Add some password-related feature (#92)
* Add Standalone Password Generator. Closes #18 
* Add an entropy meter for passwords. Closes #84
* Don't require password repeat when it is visible. Fixes #27
2016-11-23 21:59:24 -05:00
Janek Bevendorff
19a960856c Fix minimize at startup and decouple various tray and minimization options (#109)
* Hide window on startup when configured to start minimized, fixes #105
* Decouple different systray and minimization options, fixes #64
* Commit missing changes in main.cpp to minimize at startup

* Remove obsolete code
2016-11-23 18:15:51 -05:00
Devinsuit
02d2ac904d Update broken link #112 (#113) 2016-11-23 18:08:11 -05:00
Jonathan White
29f93597f2 Updated English translation file and fixed typos in HTTP language 2016-11-14 21:54:56 -05:00
Jonathan White
20c3ca7d37 Merge remote-tracking branch 'origin/develop' into feature/autoreload-db
# Conflicts:
#	src/gui/DatabaseWidget.cpp
#	src/gui/DatabaseWidget.h
2016-11-11 16:47:01 -05:00
Jonathan White
9bb2cfcd51 Moved transifex to new url
Signed-off-by: Jonathan White <support@dmapps.us>
2016-11-11 16:30:57 -05:00
TheZ3ro
6927158daa Add unlock dialog on Autotype and show default Autotype sequence (#89)
* Add unlockdialog on autotype. Fix #10
* Show default autotype sequence for existing entries
* NOTE: New entries/groups do not show the default autotype sequence
2016-11-11 16:26:07 -05:00
Leo Arias
0657d343bf Add icon and desktop file to snapcraft build (#91) 2016-11-11 11:34:32 -05:00
Jonathan White
37aedc8b03 Cleaned up code and added spots for todo work. Fully Working! 2016-11-09 07:38:14 -05:00
Leo Arias
3c89ce97c2 Build the snap in travis (#87) 2016-11-08 19:49:48 -05:00
TheZ3ro
753b9c9e67 Add Autotype on Windows and MacOS (#63)
* Add Autotype on Windows, including Windows 10
* Add MacOS autotype, fix macdeployqt build
* Make QT_BINARY_DIR overwritable at compile time
2016-11-08 16:13:57 -05:00
Jonathan White
06b1baa454 Automatic reload the database when the file is externally modified 2016-11-07 23:03:01 -05:00
Jonathan White
e25cd9ba48 Add Merge database utility function (#47)
Thank you to @TheZ3ro and @monomon for there major contributions to this PR!
2016-11-07 22:37:42 -05:00
Leo Arias
e00c6f9c77 Add the packaging metadata to build the keepassxc snap (#83) 2016-11-07 14:57:06 -05:00
Leo Arias
68cc06dc1f Fix the call to cmake (#82) 2016-11-05 17:37:28 -04:00
Leo Arias
1901655669 Update the links to the new repository location (#81) 2016-11-05 16:17:30 -04:00
Jonathan White
753d1d50d0 Add delay feature to autotype (#77)
* Implement {DELAY=X} in autotype
2016-11-04 18:05:47 -04:00
Jonathan White
ac108cd708 Added guard to prevent missing prereqs for coverage.. 2016-11-04 00:52:00 -04:00
Jonathan White
29be837b97 Updated README badges and added code coverage 2016-11-04 00:47:04 -04:00
Jonathan White
682eac3dbc Updated name to KeePassXC in README 2016-11-03 00:17:51 -04:00
Jonathan White
ccec84aef2 Rename application to KeePassXC and change icon (#70) 2016-11-03 00:05:30 -04:00
Jonathan White
13983d0e51 Make search always visible (PR #67)
* Moved search bar to toolbar and consolidated search options into dropdown list
* Updated GUI tests to be atomic and rewrote search tests
* Searches are saved between databases
* Search is cleared when all databases are closed
* Implemented global search shortcut (CTRL+F) and a notification bar when in search mode
2016-11-02 21:01:02 -04:00
Jonathan White
3f80134f07 Merge pull request #66 from JosefVitu/fix-tests
Fix memory leaks and typos in various tests
2016-10-29 09:18:05 -04:00
Josef Vitu
ad36ec4dfd Fix tests 2016-10-28 18:51:09 +02:00
Jonathan White
82ace81974 Merge pull request #57 from JosefVitu/lock-on-minimize
Implement automatic locking when minimizing
2016-10-28 10:31:25 -04:00
Jonathan White
13c3743ff5 Merge branch 'develop' into lock-on-minimize 2016-10-28 10:24:21 -04:00
Jonathan White
46904fb110 Merge pull request #65 from JosefVitu/fix-#34
Fix advanced HTTP settings (close #34)
2016-10-28 10:22:51 -04:00
Josef Vitu
8f3ffdcc2a Fix advanced HTTP settings (close #34) 2016-10-28 15:25:57 +02:00
Josef Vitu
6c3c0087dd 🔒 Implement automatic locking when minimizing 2016-10-28 13:22:17 +02:00
Jonathan White
2e9b42688f Merge pull request #62 from keepassxreboot/feature/docs-#24
Update CONTRIBUTING.md with Branch Strategy
2016-10-27 15:07:47 -04:00
thez3ro
589b6465f8 📝 Update CONTRIBUTING.md with Branch Strategy. close #24 [ci skip] 2016-10-27 19:28:39 +02:00
TheZ3ro
6c7c5443d4 Updated Pull Request Template and Contribute documents
* 📝 Update Installation instruction from the Wiki
* 📝 Update PR template with emojis 🎉
* 📝 Update CONTRIBUTING.md with CodeStyle
2016-10-26 08:19:28 -04:00
Jonathan White
fdad028e73 Merge pull request #59 from jkt628/develop
search directory configured via environment
2016-10-26 08:10:30 -04:00
Jack Thomasson
3ec29d3b52 search directory configured via environment
use absolute path to database file
2016-10-25 10:18:23 -06:00
Jonathan White
e97add0c46 Merge pull request #55 from jkt628/develop
utility to launch keepassx with database passwords fetched from kdewa…
2016-10-24 21:14:41 -04:00
Jack Thomasson
0138209004 utility to launch keepassx with database passwords fetched from kdewallet 2016-10-24 18:20:17 -06:00
Jonathan White
f7fd78d715 Merge pull request #53 from keepassxreboot/feature/fix-win-build
Fix winsock and autotype error when compiling on Windows
2016-10-24 19:09:39 -04:00
Jonathan White
bbd8447afa Merge branch 'develop' into feature/fix-win-build 2016-10-24 19:04:16 -04:00
Jonathan White
cf2bbbfef1 Merge pull request #54 from jkt628/develop
add command line option --pw-stdin to accept password from stdin
2016-10-24 18:15:41 -04:00
Jack Thomasson
7000e80465 add command line option --pw-stdin to accept password from stdin 2016-10-24 12:22:02 -06:00
thez3ro
24a17c05ab 🏁 Fix winsock and autotype error when compiling on Windows 2016-10-24 19:45:35 +02:00
Jonathan White
7c4129033a Merge pull request #52 from pugaoffitlh/develop
Added issues link to Readme
2016-10-21 11:16:18 -04:00
David Puga
83e3267f0e 📝 added issues link to issues
[ci skip]
2016-10-20 20:08:01 -07:00
Jonathan White
62cfbf73e1 Merge pull request #46 from keepassxreboot/feature/trayicon-#37
Show locked tray icon when database is locked
2016-10-19 22:45:56 -04:00
TheZ3ro
f539d69984 Add PNG tray-icons for locked db [ci skip] 2016-10-18 11:44:37 +02:00
TheZ3ro
ba86c1e1da Institute CONTRIBUTING, ISSUE template, and PR template
* DOC: Add ISSUE and PR template, add CONTRIBUTING
* DOC: incorporated feedback from @samrocketman, @Manko10, and @droidmonkey
* README now points to CONTRIBUTING instead of repeating it
* Added code style link and minor tweaks to CONTRIBUTING
2016-10-17 22:16:37 -04:00
Jonathan White
cfb7de0fe9 Updated transifex configuration and translation files (#35) 2016-10-13 18:32:13 -04:00
Jonathan White
334859726c Updated readme 2016-10-11 20:06:28 -04:00
Manolis Agkopian
119af3d760 Fetch favicon from the root of the website and use Google as a fallback (#36)
* Replace favicon fetching using Google with fetching from the root of the website
* Follow up to 3 http redirects for the favicon
* Add download favicon from Google as fallback
* Move code responsible for fetching the favicon from Google on its own function to reduce repetitiveness.
2016-10-11 18:04:44 -04:00
thez3ro
3bbf11e26f Unlocked tray icon #37 2016-10-10 00:02:28 -04:00
Jonathan White
5bb27b2989 Fixed Travis image link 2016-10-05 23:15:58 -04:00
Jonathan White
c4b3f08618 Download favorite icon of entry url and add to the custom icon registry (#30)
* Favicon download button.
* Simplified icon grabbing code
2016-10-05 23:10:06 -04:00
Jonathan White
6ac773d5ae Updated readme file 2016-10-05 23:03:13 -04:00
Sebastien Fricker
06e08557ac New setting: enablin/disabling the automatic reload on changes 2014-06-09 10:51:24 +02:00
Sebastien Fricker
95fdefdcc7 Merge github.com:keepassx/keepassx
Conflicts:
	src/gui/DatabaseWidget.cpp
2014-06-09 09:54:29 +02:00
Sebastien Fricker
7a8d4577f1 Automatic reload of a database when it get modified
When the database if modified by an other instance of KeePassX, KeePassX
detect it and reload automatically the database.
2014-05-03 16:59:41 +02:00
227 changed files with 38878 additions and 2722 deletions

8
.gitattributes vendored
View File

@@ -1 +1,9 @@
src/version.h.cmake export-subst
.gitattributes export-ignore
.gitignore export-ignore
.github export-ignore
.travis.yml export-ignore
.tx export-ignore
snapcraft.yaml export-ignore
make_release.sh export-ignore
AppImage-Recipe.sh export-ignore

180
.github/CONTRIBUTING.md vendored Normal file
View File

@@ -0,0 +1,180 @@
# Contributing to KeePassXC
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
The following is a set of guidelines for contributing to KeePassXC on GitHub.
These are just guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request.
#### Table of contents
[What should I know before I get started?](#what-should-i-know-before-i-get-started)
* [Open Source Contribution Policy](#open-source-contribution-policy)
[How can I contribute?](#how-can-i-contribute)
* [Feature requests](#feature-requests)
* [Bug reports](#bug-reports)
* [Discuss with the team](#discuss-with-the-team)
* [Your first code contribution](#your-first-code-contribution)
* [Pull requests](#pull-requests)
* [Translations](#translations)
[Styleguides](#styleguides)
* [Git branch strategy](#git-branch-strategy)
* [Git commit messages](#git-commit-messages)
* [Coding styleguide](#coding-styleguide)
## What should I know before I get started?
### Open Source Contribution Policy
**Source**: [Version 0.3, 20151118](https://medium.com/@jmaynard/a-contribution-policy-for-open-source-that-works-bfc4600c9d83#.i9ntbhmad)
#### Policy
We will accept contributions of good code that we can use from anyone.
#### What this means
- “We will accept”: This means that we will incorporate your contribution into the projects codebase, adapt it as needed, and give you full credit for your work.
- “contributions”: This means just about anything you wish to contribute to the project, as long as it is good code we can use. The easier you make it for us to accept your contribution, the happier we are, but if its good enough, we will do a reasonable amount of work to use it.
- “of good code”: This means that we will accept contributions that work well and efficiently, that fit in with the goals of the project, that match the projects coding style, and that do not impose an undue maintenance workload on us going forward. This does not mean just program code, either, but documentation and artistic works as appropriate to the project.
- “that we can use”: This means that your contribution must be given freely and irrevocably, that you must have the right to contribute it for our unrestricted use, and that your contribution is made under a license that is compatible with the license the project has chosen and that permits us to include, distribute, and modify your work without restriction.
- “from anyone”: This means exactly that. We dont care about anything but your code. We dont care about your race, religion, national origin, biological gender, perceived gender, sexual orientation, lifestyle, political viewpoint, or anything extraneous like that. We will neither reject your contribution nor grant it preferential treatment on any basis except the code itself. We do, however, reserve the right to tell you to go away if you behave too obnoxiously toward us.
#### If Your Contribution Is Rejected
If we reject your contribution, it means only that we do not consider it suitable for our project in the form it was submitted. It is not personal. If you ask civilly, we will be happy to discuss it with you and help you understand why it was rejected, and if possible improve it so we can accept it.
#### Revision History
* 0.1, 20111118: Initial draft.
* 0.2, 20111118: Added “If Your Contribution Is Rejected” section.
* 0.3, 20111119: Added “irrevocably” to “we can use” and changed “it” to “your contribution” in the “if rejected” section. Thanks to Patrick Maupin.
## How can I contribute?
### Feature requests
We're always looking for suggestions to improve our application. If you have a suggestion to improve an existing feature, or would like to suggest a completely new feature for KeePassXC, please use the [issue tracker on GitHub][issues-section]. For more general discussion, try using our [Google Groups][google-groups] forum.
### Bug reports
Our software isn't always perfect, but we strive to always improve our work. You may file bug reports in the issue tracker.
Before submitting a bug report, check if the problem has already been reported. Please refrain from opening a duplicate issue. If you want to add further information to an existing issue, simply add a comment on that issue.
### Discuss with the team
As with feature requests, you can talk to the KeePassXC team about bugs, new features, other issues and pull requests on the dedicated issue tracker, using the [Google Groups][google-groups] forum, or in the IRC channel on Freenode (`#keepassxc-dev` on `irc.freenode.net`, or use a [webchat link](https://webchat.freenode.net/?channels=%23keepassxc-dev)).
### Your first code contribution
Unsure where to begin contributing to KeePassXC? You can start by looking through these `beginner` and `help-wanted` issues:
* [Beginner issues][beginner] issues which should only require a few lines of code, and a test or two.
* ['Help wanted' issues][help-wanted] issues which should be a bit more involved than `beginner` issues.
Both issue lists are sorted by total number of comments. While not perfect, looking at the number of comments on an issue can give a general idea of how much an impact a given change will have.
### Pull requests
Along with our desire to hear your feedback and suggestions, we're also interested in accepting direct assistance in the form of code.
All pull requests must comply with the above requirements and with the [styleguides](#styleguides).
### Translations
Translations are managed on [Transifex](https://www.transifex.com/keepassxc/keepassxc/) which offers a web interface.
Please join an existing language team or request a new one if there is none.
## Styleguides
### Git branch strategy
The Branch Strategy is based on [git-flow-lite](http://nvie.com/posts/a-successful-git-branching-model/).
* **master** points to the latest public release
* **develop** points to the development of the next release, contains tested and reviewed code
* **feature/**[name] points to a branch with a new feature, one which is candidate for merge into develop (subject to rebase)
* **hotfix/**[id]-[description] points to a branch with a fix for a particular issue ID
### Git commit messages
* Use the present tense ("Add feature" not "Added feature")
* Use the imperative mood ("Move cursor to…" not "Moves cursor to…")
* Limit the first line to 72 characters or less
* Reference issues and pull requests liberally
* When only changing documentation, include `[ci skip]` in the commit description
* Consider starting the commit message with an applicable emoji:
* :memo: `:memo:` when writing docs
* :penguin: `:penguin:` when fixing something on Linux
* :apple: `:apple:` when fixing something on macOS
* :checkered_flag: `:checkered_flag:` when fixing something on Windows
* :bug: `:bug:` when fixing a bug
* :fire: `:fire:` when removing code or files
* :green_heart: `:green_heart:` when fixing the CI build
* :white_check_mark: `:white_check_mark:` when adding tests
* :lock: `:lock:` when dealing with security
### Coding styleguide
This project follows the [Qt Coding Style](https://wiki.qt.io/Qt_Coding_Style). All submissions are expected to follow this style.
In particular, code must stick to the following rules:
#### Naming convention
`lowerCamelCase`
For names made of only one word, the first letter should be lowercase.
For names made of multiple concatenated words, the first letter of the whole is lowercase, and the first letter of each subsequent word is capitalized.
#### Indention
For **C++ files** (*.cpp .h*): 4 spaces
For **Qt-UI files** (*.ui*): 2 spaces
#### Pointers
```c
int* count;
```
#### Braces
```c
if (condition) {
doSomething();
}
void ExampleClass::exampleFunction()
{
doSomething();
}
```
#### Switch statement
```c
switch (a) {
case 1:
doSomething();
break;
default:
doSomethingElse();
break;
}
```
#### Member variables
Use prefix: `m_*`
Example: `m_variable`
#### GUI widget names
Widget names must be related to the desired program behavior, and preferably end with the widget's classname.
Example: `<widget class="QCheckBox" name="rememberCheckBox">`
[beginner]:https://github.com/keepassxreboot/keepassx/issues?q=is%3Aopen+is%3Aissue+label%3Abeginner+label%3A%22help+wanted%22+sort%3Acomments-desc
[help-wanted]:https://github.com/keepassxreboot/keepassx/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+sort%3Acomments-desc
[issues-section]:https://github.com/keepassxreboot/keepassxc/issues
[google-groups]:https://groups.google.com/forum/#!forum/keepassx-reboot

32
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,32 @@
<!--- Provide a general summary of the issue in the title above -->
## Expected Behavior
<!--- If you're describing a bug, tell us what should happen -->
<!--- If you're suggesting a change/improvement, tell us how it should work -->
## Current Behavior
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
<!--- If suggesting a change/improvement, explain the difference from the current behavior -->
## Possible Solution
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
<!--- or ideas how to implement the addition or change -->
## Steps to Reproduce (for bugs)
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.
## Context
<!--- How has this issue affected you? What are you trying to accomplish? -->
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
## Your Environment
<!--- Include relevant details about the environment you experienced the bug in -->
* KeePassXC version/commit used: (can be found under Help -> About)
* Qt version (e.g. Qt 5.3):
* Compiler (e.g. Clang++3.6.0):
* Operating System and version:

33
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,33 @@
<!--- Provide a general summary of your changes in the title above -->
## Description
<!--- Describe your changes in detail -->
## Motivation and Context
<!--- Why is this change required? What problem does it solve? -->
<!--- If it fixes an open issue, please link to the issue here. -->
## How Has This Been Tested?
<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran to -->
<!--- see how your change affects other areas of the code, etc. -->
## Screenshots (if appropriate):
## Types of changes
<!--- What types of changes does your code introduce? -->
<!--- Please remove all lines which don't apply. -->
- ✅ Bug fix (non-breaking change which fixes an issue)
- ✅ New feature (non-breaking change which adds functionality)
- ✅ Breaking change (fix or feature that would cause existing functionality to change)
## Checklist:
<!--- Please go over all the following points. -->
<!--- Again, remove any lines which don't apply. -->
<!--- Pull Requests that don't fulfill all [REQUIRED] requisites are likely -->
<!--- to be sent back to you for correction or will be rejected. -->
- ✅ I have read the **CONTRIBUTING** document. **[REQUIRED]**
- ✅ My code follows the code style of this project. **[REQUIRED]**
- ✅ All new and existing tests passed. **[REQUIRED]**
- ✅ My change requires a change to the documentation and I have updated it accordingly.
- ✅ I have added tests to cover my changes.

2
.gitignore vendored
View File

@@ -1,2 +1,2 @@
CMakeLists.txt.*
build/
build*/

View File

@@ -1,18 +1,24 @@
language: cpp
sudo: required
dist: trusty
services: [docker]
os:
- linux
# - osx
# Define clang compiler without any frills
compiler:
- clang
- gcc
# - clang
env:
- CONFIG=Release
- CONFIG=Debug
git:
depth: 3
before_install:
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq update; fi
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq install cmake libmicrohttpd10 libmicrohttpd-dev libxi-dev qtbase5-dev libqt5x11extras5-dev qttools5-dev qttools5-dev-tools libgcrypt20-dev zlib1g-dev libxtst-dev xvfb; fi
@@ -20,14 +26,20 @@ before_install:
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq cmake || brew install cmake; fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq qt5 || brew install qt5; fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq libgcrypt || brew install libgcrypt; fi
before_script:
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then CMAKE_ARGS="-DCMAKE_PREFIX_PATH=/usr/local/opt/qt5"; fi
- mkdir build && pushd build
script:
- cmake -DCMAKE_BUILD_TYPE=Release -DWITH_GUI_TESTS=ON $CMAKE_ARGS ..
- make
- cmake -DCMAKE_BUILD_TYPE=${CONFIG} -DWITH_GUI_TESTS=ON -DWITH_XC_HTTP=ON -DWITH_XC_AUTOTYPE=ON -DWITH_XC_YUBIKEY=ON $CMAKE_ARGS ..
- make -j2
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then make test ARGS+="-E testgui --output-on-failure"; fi
- if [ "$TRAVIS_OS_NAME" = "linux" ]; then xvfb-run -a --server-args="-screen 0 800x600x24" make test ARGS+="-R testgui --output-on-failure"; fi
- if [ "$TRAVIS_OS_NAME" = "osx" ]; then make test ARGS+="--output-on-failure"; fi
# Generate snapcraft build when merging into master/develop branches
#after_success:
# - popd
# - "[[ $DEPLOY = 1 ]] && [[ $CONFIG = Release ]] && [[ $TRAVIS_BRANCH =~ (master|develop) ]] && [[ $TRAVIS_PULL_REQUEST = false ]] \
# && docker run -v $(pwd):/cwd snapcore/snapcraft sh -c 'cd /cwd && apt update && snapcraft'"

View File

@@ -1,7 +1,7 @@
[main]
host = https://www.transifex.com
[keepassx.keepassx_ents]
[keepassxc.keepassx_ents]
source_file = share/translations/keepassx_en.ts
file_filter = share/translations/keepassx_<lang>.ts
source_lang = en

92
AppImage-Recipe.sh Executable file
View File

@@ -0,0 +1,92 @@
#!/usr/bin/env bash
#
# KeePassXC AppImage Recipe
# Copyright (C) 2017 KeePassXC team <https://keepassxc.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 or (at your option)
# version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
if [ "$1" == "" ] || [ "$2" == "" ]; then
echo "Usage: $(basename $0) APP_NAME RELEASE_VERSION" >&2
exit 1
fi
if [ -f CHANGELOG ]; then
echo "This recipe must not be run from the sources root." >&2
exit 1
fi
if [ ! -d ../bin-release ]; then
echo "../bin-release does not exist." >&2
exit 1
fi
APP="$1"
LOWERAPP="$(echo "$APP" | tr '[:upper:]' '[:lower:]')"
VERSION="$2"
mkdir -p $APP.AppDir
wget -q https://github.com/probonopd/AppImages/raw/master/functions.sh -O ./functions.sh
. ./functions.sh
LIB_DIR=./usr/lib
if [ -d ./usr/lib/x86_64-linux-gnu ]; then
LIB_DIR=./usr/lib/x86_64-linux-gnu
fi
cd $APP.AppDir
cp -a ../../bin-release/* .
cp -a ./usr/local/* ./usr
rm -R ./usr/local
rmdir ./opt 2> /dev/null
patch_strings_in_file /usr/local ././
patch_strings_in_file /usr ./
# bundle Qt platform plugins and themes
QXCB_PLUGIN="$(find /usr/lib -name 'libqxcb.so' 2> /dev/null)"
if [ "$QXCB_PLUGIN" == "" ]; then
QXCB_PLUGIN="$(find /opt/qt*/plugins -name 'libqxcb.so' 2> /dev/null)"
fi
QT_PLUGIN_PATH="$(dirname $(dirname $QXCB_PLUGIN))"
mkdir -p ".${QT_PLUGIN_PATH}/platforms"
cp "$QXCB_PLUGIN" ".${QT_PLUGIN_PATH}/platforms/"
get_apprun
copy_deps
delete_blacklisted
# remove dbus and systemd libs as they are not blacklisted
find . -name libdbus-1.so.3 -exec rm {} \;
find . -name libsystemd.so.0 -exec rm {} \;
get_desktop
get_icon
cat << EOF > ./usr/bin/keepassxc_env
#!/usr/bin/env bash
#export QT_QPA_PLATFORMTHEME=gtk2
export LD_LIBRARY_PATH="../opt/qt58/lib:\${LD_LIBRARY_PATH}"
export QT_PLUGIN_PATH="..${QT_PLUGIN_PATH}"
exec keepassxc "\$@"
EOF
chmod +x ./usr/bin/keepassxc_env
sed -i 's/Exec=keepassxc/Exec=keepassxc_env/' keepassxc.desktop
get_desktopintegration $LOWERAPP
GLIBC_NEEDED=$(glibc_needed)
cd ..
generate_type2_appimage
mv ../out/*.AppImage ..
rmdir ../out > /dev/null 2>&1

View File

@@ -1,3 +1,41 @@
2.1.1 (2017-02-06)
=========================
- Enabled HTTP plugin build; plugin is disabled by default and limited to localhost [#147]
- Escape HTML in dialog boxes [#247]
- Corrected crashes in favicon download and password generator [#233, #226]
- Increase font size of password meter [#228]
- Fixed compatibility with Qt 5.8 [#211]
- Use consistent button heights in password generator [#229]
2.1.0 (2017-01-22)
=========================
- Show unlock dialog when using autotype on a closed database [#10, #89]
- Show different tray icon when database is locked [#37, #46]
- Support autotype on Windows and OS X [#42, #60, #63]
- Add delay feature to autotype [#76, #77]
- Add password strength meter [#84, #92]
- Add option for automatically locking the database when minimizing
the window [#57]
- Add feature to download favicons and use them as entry icons [#30]
- Automatically reload and merge database when the file changed on
disk [#22, #33, #93]
- Add tool for merging two databases [#22, #47, #143]
- Add --pw-stdin commandline option to unlock the database by providing
a password on STDIN [#54]
- Add utility script for reading the database password from KWallet [#55]
- Fix some KeePassHTTP settings not being remembered [#34, #65]
- Make search box persistent [#15, #67, #157]
- Enhance search feature by scoping the search to selected group [#16, #118]
- Improve interaction between search field and entry list [#131, #141]
- Add stand-alone password-generator [#18, #92]
- Don't require password repetition when password is visible [#27, #92]
- Add support for entry attributes in autotype sequences [#107]
- Always focus password field when opening the database unlock widget [#116, #117]
- Fix compilation errors on various platforms [#53, #126, #130]
- Restructure and improve kdbx-extract utility [#160]
2.0.3 (2016-09-04)
=========================

View File

@@ -15,11 +15,11 @@
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
"Choose the type of build, options are: None Debug Release RelWithDebInfo Debug Debugfull Profile MinSizeRel."
"Choose the type of build, options are: None Debug Release RelWithDebInfo Debug DebugFull Profile MinSizeRel."
FORCE)
endif()
project(KeePassX)
project(KeePassXC)
cmake_minimum_required(VERSION 2.8.12)
@@ -32,9 +32,14 @@ include(CheckCXXSourceCompiles)
option(WITH_TESTS "Enable building of unit tests" ON)
option(WITH_GUI_TESTS "Enable building of GUI tests" OFF)
option(WITH_DEV_BUILD "Use only for development. Disables/warns about deprecated methods." OFF)
option(WITH_COVERAGE "Use to build with coverage tests. (GCC ONLY)." OFF)
set(KEEPASSX_VERSION "2.0.3")
set(KEEPASSX_VERSION_NUM "2.0.3")
option(WITH_XC_AUTOTYPE "Include Autotype." OFF)
option(WITH_XC_HTTP "Include KeePassHTTP." OFF)
option(WITH_XC_YUBIKEY "Include Yubikey support." OFF)
set(KEEPASSXC_VERSION "2.1.1")
set(KEEPASSXC_VERSION_NUM "2.1.1")
if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANG 1)
@@ -61,7 +66,7 @@ macro(add_gcc_compiler_flags FLAGS)
add_gcc_compiler_cflags("${FLAGS}")
endmacro(add_gcc_compiler_flags)
add_definitions(-DQT_NO_KEYWORDS -DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII)
add_definitions(-DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII)
add_gcc_compiler_flags("-fno-common -fstack-protector --param=ssp-buffer-size=4")
add_gcc_compiler_flags("-Wall -Wextra -Wundef -Wpointer-arith -Wno-long-long")
@@ -87,6 +92,12 @@ endif()
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-align")
if(WITH_COVERAGE)
# Include code coverage, use with -DCMAKE_BUILD_TYPE=Coverage
include(CodeCoverage)
setup_target_for_coverage(kp_coverage "make test" coverage)
endif()
endif()
if(CMAKE_COMPILER_IS_GNUCC)
@@ -116,12 +127,13 @@ if(MINGW)
set(CMAKE_RC_COMPILER_INIT windres)
enable_language(RC)
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
link_libraries(ws2_32 wsock32)
endif()
if(APPLE OR MINGW)
set(PROGNAME KeePassX)
set(PROGNAME KeePassXC)
else()
set(PROGNAME keepassx)
set(PROGNAME keepassxc)
endif()
if(APPLE AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local")
@@ -134,14 +146,14 @@ if(MINGW)
set(DATA_INSTALL_DIR "share")
elseif(APPLE)
set(BIN_INSTALL_DIR ".")
set(PLUGIN_INSTALL_DIR ".")
set(PLUGIN_INSTALL_DIR "${PROGNAME}.app/Contents/PlugIns")
set(DATA_INSTALL_DIR "${PROGNAME}.app/Contents/Resources")
else()
include(GNUInstallDirs)
set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}")
set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassx")
set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassx")
set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassxc")
set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassxc")
endif()
if(WITH_TESTS)
@@ -160,9 +172,13 @@ set(CMAKE_AUTOMOC ON)
# Make sure we don't enable asserts there.
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG)
find_package(LibGPGError REQUIRED)
find_package(Gcrypt 1.6.0 REQUIRED)
find_package(LibMicroHTTPD REQUIRED)
if (WITH_XC_HTTP)
find_package(LibMicroHTTPD REQUIRED)
endif(WITH_XC_HTTP)
find_package(ZLIB REQUIRED)
@@ -201,7 +217,7 @@ if(UNIX)
endif()
endif()
include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${MHD_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
include(FeatureSummary)
@@ -213,5 +229,10 @@ if(WITH_TESTS)
endif(WITH_TESTS)
if(PRINT_SUMMARY)
# This will print ENABLED, REQUIRED and DISABLED
feature_summary(WHAT ALL)
else()
# This will only print ENABLED and DISABLED feature
print_enabled_features()
print_disabled_features()
endif()

25
COPYING
View File

@@ -27,6 +27,7 @@ Copyright: 2010-2012, Felix Geyer <debfx@fobos.de>
2000-2008, Tom Sato <VEF00200@nifty.ne.jp>
2013, Laszlo Papp <lpapp@kde.org>
2013, David Faure <faure@kde.org>
2016, KeePassXC Team
License: GPL-2 or GPL-3
Files: cmake/GNUInstallDirs.cmake
@@ -34,13 +35,16 @@ Copyright: 2011 Nikita Krupen'ko <krnekit@gmail.com>
2011 Kitware, Inc.
License: BSD-3-clause
Files: share/icons/application/*/apps/keepassx.png
share/icons/application/scalable/apps/keepassx.svgz
Copyright: 2006, Otto Salminen
2009, Miguelito Vieira
2011-2013, Felix Geyer <debfx@fobos.de>
2012, Tobias Tangemann <tobiastangemann@gmail.com>
License: GPL-2
Files: share/icons/application/*/apps/keepassxc.png
share/icons/application/scalable/apps/keepassxc.svgz
share/icons/application/*/apps/keepassxc-dark.png
share/icons/application/scalable/apps/keepassxc-dark.svgz
share/icons/application/*/apps/keepassxc-locked.png
share/icons/application/scalable/apps/keepassxc-locked.svgz
share/icons/application/*/mimetypes/application-x-keepassxc.png
share/icons/application/scalable/mimetypes/application-x-keepassxc.svgz
Copyright: 2016, Lorenzo Stella <lorenzo.stl@gmail.com>
License: LGPL-2
Files: share/icons/application/*/actions/auto-type.png
share/icons/application/*/actions/database-change-key.png
@@ -136,6 +140,7 @@ Files: share/icons/application/*/actions/application-exit.png
share/icons/application/*/actions/document-save-as.png
share/icons/application/*/actions/edit-clear-locationbar-ltr.png
share/icons/application/*/actions/edit-clear-locationbar-rtl.png
share/icons/application/*/actions/password-generator.png
share/icons/application/*/actions/password-copy.png
share/icons/application/*/actions/password-show-*.png
share/icons/application/*/actions/system-search.png
@@ -187,3 +192,9 @@ License: LGPL-2.1 or GPL-3
Files: cmake/GetGitRevisionDescription.cmake*
Copyright: 2009-2010, Iowa State University
License: Boost-1.0
Files: src/zxcvbn/zxcvbn.*
src/utils/entropy-meter.cpp
Copyright: 2015, Tony Evans
2016, KeePassXC Team
License: BSD 3-clause

54
Dockerfile Normal file
View File

@@ -0,0 +1,54 @@
# KeePassXC Linux Release Build Dockerfile
# Copyright (C) 2017 KeePassXC team <https://keepassxc.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 or (at your option)
# version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
FROM ubuntu:14.04
RUN set -x \
&& apt-get update \
&& apt-get install --yes software-properties-common
RUN set -x \
&& add-apt-repository --yes ppa:beineri/opt-qt58-trusty
RUN set -x \
&& apt-get update \
&& apt-get install --yes \
g++ \
cmake \
libgcrypt20-dev \
qt58base \
qt58tools \
qt58x11extras \
libmicrohttpd-dev \
libxi-dev \
libxtst-dev \
zlib1g-dev \
wget \
file \
fuse \
python
RUN set -x \
&& apt-get install --yes mesa-common-dev
VOLUME /keepassxc/src
VOLUME /keepassxc/out
WORKDIR /keepassxc
ENV CMAKE_PREFIX_PATH=/opt/qt58/lib/cmake
ENV LD_LIBRARY_PATH=/opt/qt58/lib
RUN set -x \
&& echo /opt/qt58/lib > /etc/ld.so.conf.d/qt58.conf

28
INSTALL
View File

@@ -1,28 +0,0 @@
Building:
=========
mkdir build
cd build
cmake [CMAKE PARAMETERS] ..
make [-jX]
Common cmake parameters:
========================
-DCMAKE_INSTALL_PREFIX=/usr/local
-DCMAKE_VERBOSE_MAKEFILE=ON
-DCMAKE_BUILD_TYPE=<RelWithDebInfo/Debug/Release>
-DWITH_GUI_TESTS=ON
Installing:
===========
make install [DESTDIR=X]
Create a bundle on Mac:
make package
Run tests:
==========
make test [CTEST_OUTPUT_ON_FAILURE=1] [ARGS+=-jX] [ARGS+="-E testgui"]
OS specific instructions:
=========================
https://www.keepassx.org/dev/projects/keepassx/wiki/Install_instructions

101
INSTALL.md Normal file
View File

@@ -0,0 +1,101 @@
Install KeePassXC
=================
This document will guide you across the steps to install KeePassXC.
You can visit the online version of this document a the following link
https://github.com/keepassxreboot/keepassx/wiki/Install-Instruction-from-Source
Build Dependencies
==================
The following tools must exist within your PATH:
* make
* cmake (>= 2.8.12)
* g++ (>= 4.7) or clang++ (>= 3.0)
The following libraries are required:
* Qt 5 (>= 5.2): qtbase and qttools5
* libgcrypt (>= 1.6)
* zlib
* libmicrohttpd
* libxi, libxtst, qtx11extras (optional for auto-type on X11)
Prepare the Building Environment
================================
Building Environment on Linux ==> https://github.com/keepassxreboot/keepassx/wiki/Building-Environment-on-Linux
Building Environment on Windows ==> https://github.com/keepassxreboot/keepassx/wiki/Building-Environment-on-Windows
Building Environment on MacOS ==> https://github.com/keepassxreboot/keepassx/wiki/Building-Environment-on-MacOS
Build Steps
===========
To compile from source, open a **Terminal (on Linux/MacOS)** or a **MSYS2-MinGW shell (on Windows)**<br/>
**Note:** on Windows make sure you are using a **MINGW shell** by checking the label before the current path
Navigate to the path you have downloaded KeePassXC and type these commands:
```
mkdir build
cd build
cmake -DWITH_TESTS=OFF
make
```
**Note:** If you are on MacOS you must add this parameter to **Cmake**, with the Qt version you have installed<br/> `-DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.6.2/lib/cmake/`
You will have the compiled KeePassXC binary inside the `./build/src/` directory.
Common cmake parameters
```
-DCMAKE_INSTALL_PREFIX=/usr/local
-DCMAKE_VERBOSE_MAKEFILE=ON
-DCMAKE_BUILD_TYPE=<RelWithDebInfo/Debug/Release>
-DWITH_GUI_TESTS=ON
```
Installation
============
To install this binary execute the following:
```bash
sudo make install
```
You can specify the destination dir with
```
DESTDIR=X
```
Packaging
=========
You can create a package to redistribute KeePassXC (zip, deb, rpm, dmg, etc..)
```
make package
```
Testing
=======
You can perform test on the executable
```
make test
```
Common parameters:
```
CTEST_OUTPUT_ON_FAILURE=1
ARGS+=-jX
ARGS+="-E testgui"
```

103
README.md
View File

@@ -1,96 +1,65 @@
# KeePassX v2.0.2 + keepasshttp
# KeePassXC - KeePass Cross-platform Community Edition
![alt text](https://travis-ci.org/keepassxreboot/keepassx.svg?branch=master "Travis-CI Badge")
[![Travis Build Status](https://travis-ci.org/keepassxreboot/keepassxc.svg?branch=develop)](https://travis-ci.org/keepassxreboot/keepassxc) [![Coverage Status](https://coveralls.io/repos/github/keepassxreboot/keepassxc/badge.svg)](https://coveralls.io/github/keepassxreboot/keepassxc)
## About
KeePassXC is a fork of [KeePassX](https://www.keepassx.org/) that [aims to incorporate stalled pull requests, features, and bug fixes that have never made it into the main KeePassX repository](https://github.com/keepassxreboot/keepassx/issues/43).
Fork of [KeePassX](https://www.keepassx.org/) with keepasshttp support for use with [PassIFox](https://addons.mozilla.org/en-us/firefox/addon/passifox/) for Mozilla Firefox and [chromeIPass](https://chrome.google.com/webstore/detail/chromeipass/ompiailgknfdndiefoaoiligalphfdae) for Google Chrome.
KeePassHttp implementation has been forked from jdachtera's repository, which in turn was based on code from code with Francois Ferrand's [keepassx-http](https://gitorious.org/keepassx/keepassx-http/source/master:) repository.
## Additional features compared to KeePassX
- Autotype on all three major platforms (Linux, Windows, OS X)
- Stand-alone password generator
- Password strength meter
- Use website's favicons as entry icons
- Merging of databases
- Automatic reload when the database changed on disk
- KeePassHTTP support for use with [PassIFox](https://addons.mozilla.org/en-us/firefox/addon/passifox/) in Mozilla Firefox and [chromeIPass](https://chrome.google.com/webstore/detail/chromeipass/ompiailgknfdndiefoaoiligalphfdae) in Google Chrome or Chromium.
This is a rebuild from [denk-mal's keepasshttp](https://github.com/denk-mal/keepassx.git) that brings it forward to Qt5 and KeePassX v2.0.2.
For a full list of features and changes, read the [CHANGELOG](CHANGELOG) document.
#### Build Dependencies
### Note about KeePassHTTP
KeePassHTTP is not a highly secure protocol and has certain flaw which allow an attacker to decrypt your passwords when they manage to intercept communication between a KeePassHTTP server and PassIFox/chromeIPass over a network connection (see [here](https://github.com/pfn/keepasshttp/issues/258) and [here](https://github.com/keepassxreboot/keepassxc/issues/147)). KeePassXC therefore strictly limits communication between itself and the browser plugin to your local computer. As long as your computer is not compromised, your passwords are fairly safe that way, but still use it at your own risk!
The following tools must exist within your PATH:
### Installation
Pre-compiled binaries can be found on the [downloads page](https://keepassxc.org/download). Additionally, individual Linux distributions may ship their own versions, so please check out your distribution's package list to see if KeePassXC is available.
* make
* cmake (>= 2.8.12)
* g++ (>= 4.7) or clang++ (>= 3.0)
### Building KeePassXC yourself
The following libraries are required:
*More detailed instructions are available in the INSTALL file or on the [Wiki page](https://github.com/keepassxreboot/keepassx/wiki/Install-Instruction-from-Source).*
* Qt 5 (>= 5.2): qtbase and qttools5
* libgcrypt (>= 1.6)
* zlib
* libmicrohttpd
* libxi, libxtst, qtx11extras (optional for auto-type on X11)
First, you must download the KeePassXC [source tarball](https://keepassxc.org/download#source) or check out the latest version from our [Git repository](https://github.com/keepassxreboot/keepassxc).
On Debian you can install them with:
To clone the project from Git, `cd` to a suitable location and run
```bash
sudo apt-get install build-essential cmake libmicrohttpd-dev libxi-dev qtbase5-dev libqt5x11extras5-dev qttools5-dev qttools5-dev-tools libgcrypt20-dev zlib1g-dev
git clone https://github.com/keepassxreboot/keepassxc.git
```
#### Build Steps
This will clone the entire contents of the repository and check out the current `develop` branch.
To compile from source:
```bash
mkdir build
cd build
cmake -DWITH_TESTS=OFF ..
make [-jX]
```
You will have the compiled KeePassX binary inside the `./build/src/` directory.
To install this binary execute the following:
```bash
sudo make install
```
More detailed instructions available in the INSTALL file.
## Contribute
Coordination of work between developers is handled through the [KeePassX development](https://www.keepassx.org/dev/) site.
Requests for enhancements, or reports of bugs encountered, can also be reported through the KeePassX development site.
However, members of the open-source community are encouraged to submit pull requests directly through GitHub.
### Clone Repository
Clone the repository to a suitable location where you can extend and build this project.
```bash
git clone https://github.com/keepassx/keepassx.git
```
**Note:** This will clone the entire contents of the repository at the HEAD revision.
To update the project from within the project's folder you can run the following command:
To update the project from within the project's folder, you can run the following command:
```bash
git pull
```
### Feature Requests
Once you have downloaded the source code, you can `cd` into the source code directory and build and install KeePassXC with
We're always looking for suggestions to improve our application. If you have a suggestion for improving an existing feature,
or would like to suggest a completely new feature for KeePassX, please file a ticket on the [KeePassX development](https://www.keepassx.org/dev/) site.
```
mkdir build
cd build
cmake -DWITH_TESTS=OFF ..
make -j8
sudo make install
```
### Bug Reports
To enable autotype, add `-DWITH_XC_AUTOTYPE=ON` to the `cmake` command. KeePassHTTP support is compiled in by adding `-DWITH_XC_HTTP=ON`. If these options are not specified, KeePassXC will be built without these plugins.
Our software isn't always perfect, but we strive to always improve our work. You may file bug reports on the [KeePassX development](https://www.keepassx.org/dev/) site.
### Pull Requests
### Contributing
Along with our desire to hear your feedback and suggestions, we're also interested in accepting direct assistance in the form of code.
We are always looking for suggestions how to improve our application. If you find any bugs or have an idea for a new feature, please let us know by opening a report in our [issue tracker](https://github.com/keepassxreboot/keepassxc/issues) on GitHub or write to our [Google Groups](https://groups.google.com/forum/#!forum/keepassx-reboot) forum.
Issue merge requests against our [GitHub repository](https://github.com/keepassxreboot/keepassx).
You can of course also directly contribute your own code. We are happy to accept your pull requests.
### Translations
Translations are managed on [Transifex](https://www.transifex.com/projects/p/keepassx/) which offers a web interface.
Please join an existing language team or request a new one if there is none.
Please read the [CONTRIBUTING](.github/CONTRIBUTING.md) document for further information.

197
cmake/CodeCoverage.cmake Normal file
View File

@@ -0,0 +1,197 @@
# Copyright (c) 2012 - 2015, Lars Bilke
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#
#
# 2012-01-31, Lars Bilke
# - Enable Code Coverage
#
# 2013-09-17, Joakim Söderberg
# - Added support for Clang.
# - Some additional usage instructions.
#
# USAGE:
# 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here:
# http://stackoverflow.com/a/22404544/80480
#
# 1. Copy this file into your cmake modules path.
#
# 2. Add the following line to your CMakeLists.txt:
# INCLUDE(CodeCoverage)
#
# 3. Set compiler flags to turn off optimization and enable coverage:
# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
#
# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target
# which runs your test executable and produces a lcov code coverage report:
# Example:
# SETUP_TARGET_FOR_COVERAGE(
# my_coverage_target # Name for custom target.
# test_driver # Name of the test driver executable that runs the tests.
# # NOTE! This should always have a ZERO as exit code
# # otherwise the coverage generation will not complete.
# coverage # Name of output directory.
# )
#
# 4. Build a Debug build:
# cmake -DCMAKE_BUILD_TYPE=Debug ..
# make
# make my_coverage_target
#
#
# Check prereqs
FIND_PROGRAM( GCOV_PATH gcov )
FIND_PROGRAM( LCOV_PATH lcov )
FIND_PROGRAM( GENHTML_PATH genhtml )
FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests)
IF(NOT GCOV_PATH)
MESSAGE(FATAL_ERROR "gcov not found! Aborting...")
ENDIF() # NOT GCOV_PATH
IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
IF("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3)
MESSAGE(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...")
ENDIF()
ELSEIF(NOT CMAKE_COMPILER_IS_GNUCXX)
MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
ENDIF() # CHECK VALID COMPILER
SET(CMAKE_CXX_FLAGS_COVERAGE
"-g -O0 --coverage -fprofile-arcs -ftest-coverage"
CACHE STRING "Flags used by the C++ compiler during coverage builds."
FORCE )
SET(CMAKE_C_FLAGS_COVERAGE
"-g -O0 --coverage -fprofile-arcs -ftest-coverage"
CACHE STRING "Flags used by the C compiler during coverage builds."
FORCE )
SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE
""
CACHE STRING "Flags used for linking binaries during coverage builds."
FORCE )
SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
""
CACHE STRING "Flags used by the shared libraries linker during coverage builds."
FORCE )
MARK_AS_ADVANCED(
CMAKE_CXX_FLAGS_COVERAGE
CMAKE_C_FLAGS_COVERAGE
CMAKE_EXE_LINKER_FLAGS_COVERAGE
CMAKE_SHARED_LINKER_FLAGS_COVERAGE )
IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage"))
MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" )
ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug"
# Param _targetname The name of new the custom make target
# Param _testrunner The name of the target which runs the tests.
# MUST return ZERO always, even on errors.
# If not, no coverage report will be created!
# Param _outputname lcov output is generated as _outputname.info
# HTML report is generated in _outputname/index.html
# Optional fourth parameter is passed as arguments to _testrunner
# Pass them in list form, e.g.: "-j;2" for -j 2
FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname)
IF(NOT LCOV_PATH)
MESSAGE(FATAL_ERROR "lcov not found! Aborting...")
ENDIF() # NOT LCOV_PATH
IF(NOT GENHTML_PATH)
MESSAGE(FATAL_ERROR "genhtml not found! Aborting...")
ENDIF() # NOT GENHTML_PATH
SET(coverage_info "${CMAKE_BINARY_DIR}/${_outputname}.info")
SET(coverage_cleaned "${coverage_info}.cleaned")
SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}")
# Setup target
ADD_CUSTOM_TARGET(${_targetname}
# Cleanup lcov
${LCOV_PATH} --directory . --zerocounters
# Run tests
COMMAND ${test_command} ${ARGV3}
# Capturing lcov counters and generating report
COMMAND ${LCOV_PATH} --directory . --capture --output-file ${coverage_info}
COMMAND ${LCOV_PATH} --remove ${coverage_info} 'tests/*' '/usr/*' --output-file ${coverage_cleaned}
COMMAND ${GENHTML_PATH} -o ${_outputname} ${coverage_cleaned}
COMMAND ${CMAKE_COMMAND} -E remove ${coverage_info} ${coverage_cleaned}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
)
# Show info where to find the report
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD
COMMAND ;
COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report."
)
ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE
# Param _targetname The name of new the custom make target
# Param _testrunner The name of the target which runs the tests
# Param _outputname cobertura output is generated as _outputname.xml
# Optional fourth parameter is passed as arguments to _testrunner
# Pass them in list form, e.g.: "-j;2" for -j 2
FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname)
IF(NOT PYTHON_EXECUTABLE)
MESSAGE(FATAL_ERROR "Python not found! Aborting...")
ENDIF() # NOT PYTHON_EXECUTABLE
IF(NOT GCOVR_PATH)
MESSAGE(FATAL_ERROR "gcovr not found! Aborting...")
ENDIF() # NOT GCOVR_PATH
ADD_CUSTOM_TARGET(${_targetname}
# Run tests
${_testrunner} ${ARGV3}
# Running gcovr
COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Running gcovr to produce Cobertura code coverage report."
)
# Show info where to find the report
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD
COMMAND ;
COMMENT "Cobertura code coverage report saved in ${_outputname}.xml."
)
ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA

View File

@@ -0,0 +1,9 @@
find_path(GPGERROR_INCLUDE_DIR gpg-error.h)
find_library(GPGERROR_LIBRARIES gpg-error)
mark_as_advanced(GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LibGPGError DEFAULT_MSG GPGERROR_LIBRARIES GPGERROR_INCLUDE_DIR)

682
release-tool Executable file
View File

@@ -0,0 +1,682 @@
#!/usr/bin/env bash
#
# KeePassXC Release Preparation Helper
# Copyright (C) 2017 KeePassXC team <https://keepassxc.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 or (at your option)
# version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
echo -e "\e[1m\e[32mKeePassXC\e[0m Release Preparation Helper"
echo -e "Copyright (C) 2017 KeePassXC Team <https://keepassxc.org/>\n"
# -----------------------------------------------------------------------
# global default values
# -----------------------------------------------------------------------
RELEASE_NAME=""
APP_NAME="KeePassXC"
SRC_DIR="."
GPG_KEY="CFB4C2166397D0D2"
GPG_GIT_KEY=""
OUTPUT_DIR="release"
SOURCE_BRANCH=""
TARGET_BRANCH="master"
TAG_NAME=""
DOCKER_IMAGE=""
DOCKER_CONTAINER_NAME="keepassxc-build-container"
CMAKE_OPTIONS=""
COMPILER="g++"
MAKE_OPTIONS="-j8"
BUILD_PLUGINS="autotype"
INSTALL_PREFIX="/usr/local"
BUILD_SOURCE_TARBALL=true
ORIG_BRANCH=""
ORIG_CWD="$(pwd)"
# -----------------------------------------------------------------------
# helper functions
# -----------------------------------------------------------------------
printUsage() {
local cmd
if [ "" == "$1" ] || [ "help" == "$1" ]; then
cmd="COMMAND"
elif [ "merge" == "$1" ] || [ "build" == "$1" ] || [ "sign" == "$1" ]; then
cmd="$1"
else
logError "Unknown command: '$1'\n"
cmd="COMMAND"
fi
echo -e "\e[1mUsage:\e[0m $(basename $0) $cmd [options]"
if [ "COMMAND" == "$cmd" ]; then
cat << EOF
Commands:
merge Merge release branch into main branch and create release tags
build Build and package binary release from sources
sign Sign previously compiled release packages
help Show help for the given command
EOF
elif [ "merge" == "$cmd" ]; then
cat << EOF
Merge release branch into main branch and create release tags
Options:
-v, --version Release version number or name (required)
-a, --app-name Application name (default: '${APP_NAME}')
-s, --source-dir Source directory (default: '${SRC_DIR}')
-g, --gpg-key GPG key used to sign the merge commit and release tag,
leave empty to let Git choose your default key
(default: '${GPG_GIT_KEY}')
-r, --release-branch Source release branch to merge from (default: 'release/VERSION')
--target-branch Target branch to merge to (default: '${TARGET_BRANCH}')
-t, --tag-name Override release tag name (defaults to version number)
-h, --help Show this help
EOF
elif [ "build" == "$cmd" ]; then
cat << EOF
Build and package binary release from sources
Options:
-v, --version Release version number or name (required)
-a, --app-name Application name (default: '${APP_NAME}')
-s, --source-dir Source directory (default: '${SRC_DIR}')
-o, --output-dir Output directory where to build the release
(default: '${OUTPUT_DIR}')
-t, --tag-name Release tag to check out (defaults to version number)
-b, --build Build sources after exporting release
-d, --docker-image Use the specified Docker image to compile the application.
The image must have all required build dependencies installed.
This option has no effect if --build is not set.
--container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}')
The container must not exist already
-c, --cmake-options Additional CMake options for compiling the sources
--compiler Compiler to use (default: '${COMPILER}')
-m, --make-options Make options for compiling sources (default: '${MAKE_OPTIONS}')
-i, --install-prefix Install prefix (default: '${INSTALL_PREFIX}')
-p, --plugins Space-separated list of plugins to build
(default: ${BUILD_PLUGINS})
-n, --no-source-tarball Don't build source tarball
-h, --help Show this help
EOF
elif [ "sign" == "$cmd" ]; then
cat << EOF
Sign previously compiled release packages
Options:
-f, --files Files to sign (required)
-g, --gpg-key GPG key used to sign the files (default: '${GPG_KEY}')
-h, --help Show this help
EOF
fi
}
logInfo() {
echo -e "\e[1m[ \e[34mINFO\e[39m ]\e[0m $1"
}
logError() {
echo -e "\e[1m[ \e[31mERROR\e[39m ]\e[0m $1" >&2
}
init() {
ORIG_CWD="$(pwd)"
cd "$SRC_DIR" > /dev/null 2>&1
ORIG_BRANCH="$(git rev-parse --abbrev-ref HEAD 2> /dev/null)"
cd "$ORIG_CWD"
}
cleanup() {
logInfo "Checking out original branch..."
if [ "" != "$ORIG_BRANCH" ]; then
git checkout "$ORIG_BRANCH" > /dev/null 2>&1
fi
logInfo "Leaving source directory..."
cd "$ORIG_CWD"
}
exitError() {
logError "$1"
cleanup
exit 1
}
exitTrap() {
exitError "Existing upon user request..."
}
checkSourceDirExists() {
if [ ! -d "$SRC_DIR" ]; then
exitError "Source directory '${SRC_DIR}' does not exist!"
fi
}
checkOutputDirDoesNotExist() {
if [ -e "$OUTPUT_DIR" ]; then
exitError "Output directory '$OUTPUT_DIR' already exists. Please choose a different location!"
fi
}
checkGitRepository() {
if [ ! -d .git ] || [ ! -f CHANGELOG ]; then
exitError "Source directory is not a valid Git repository!"
fi
}
checkTagExists() {
git tag | grep -q "$TAG_NAME"
if [ $? -ne 0 ]; then
exitError "Tag '${TAG_NAME}' does not exist!"
fi
}
checkReleaseDoesNotExist() {
git tag | grep -q "$TAG_NAME"
if [ $? -eq 0 ]; then
exitError "Release '$RELEASE_NAME' (tag: '$TAG_NAME') already exists!"
fi
}
checkWorkingTreeClean() {
git diff-index --quiet HEAD --
if [ $? -ne 0 ]; then
exitError "Current working tree is not clean! Please commit or unstage any changes."
fi
}
checkSourceBranchExists() {
git rev-parse "$SOURCE_BRANCH" > /dev/null 2>&1
if [ $? -ne 0 ]; then
exitError "Source branch '$SOURCE_BRANCH' does not exist!"
fi
}
checkTargetBranchExists() {
git rev-parse "$TARGET_BRANCH" > /dev/null 2>&1
if [ $? -ne 0 ]; then
exitError "Target branch '$TARGET_BRANCH' does not exist!"
fi
}
checkVersionInCMake() {
local app_name_upper="$(echo "$APP_NAME" | tr '[:lower:]' '[:upper:]')"
grep -q "${app_name_upper}_VERSION \"${RELEASE_NAME}\"" CMakeLists.txt
if [ $? -ne 0 ]; then
exitError "${app_name_upper}_VERSION version not updated to '${RELEASE_NAME}' in CMakeLists.txt!"
fi
grep -q "${app_name_upper}_VERSION_NUM \"${RELEASE_NAME}\"" CMakeLists.txt
if [ $? -ne 0 ]; then
exitError "${app_name_upper}_VERSION_NUM version not updated to '${RELEASE_NAME}' in CMakeLists.txt!"
fi
}
checkChangeLog() {
if [ ! -f CHANGELOG ]; then
exitError "No CHANGELOG file found!"
fi
grep -qPzo "${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n=+\n" CHANGELOG
if [ $? -ne 0 ]; then
exitError "CHANGELOG does not contain any information about the '${RELEASE_NAME}' release!"
fi
}
checkTransifexCommandExists() {
command -v tx > /dev/null
if [ 0 -ne $? ]; then
exitError "Transifex tool 'tx' not installed! Please install it using 'pip install transifex-client'"
fi
}
# re-implement realpath for OS X (thanks mschrag)
# https://superuser.com/questions/205127/
if $(command -v realpath > /dev/null); then
realpath() {
pushd . > /dev/null
if [ -d "$1" ]; then
cd "$1"
dirs -l +0
else
cd "$(dirname "$1")"
cur_dir=$(dirs -l +0)
if [ "$cur_dir" == "/" ]; then
echo "$cur_dir$(basename "$1")"
else
echo "$cur_dir/$(basename "$1")"
fi
fi
popd > /dev/null
}
fi
trap exitTrap SIGINT SIGTERM
# -----------------------------------------------------------------------
# merge command
# -----------------------------------------------------------------------
merge() {
while [ $# -ge 1 ]; do
local arg="$1"
case "$arg" in
-v|--version)
RELEASE_NAME="$2"
shift ;;
-a|--app-name)
APP_NAME="$2"
shift ;;
-s|--source-dir)
SRC_DIR="$2"
shift ;;
-g|--gpg-key)
GPG_GIT_KEY="$2"
shift ;;
-r|--release-branch)
SOURCE_BRANCH="$2"
shift ;;
--target-branch)
TARGET_BRANCH="$2"
shift ;;
-t|--tag-name)
TAG_NAME="$2"
shift ;;
-h|--help)
printUsage "merge"
exit ;;
*)
logError "Unknown option '$arg'\n"
printUsage "merge"
exit 1 ;;
esac
shift
done
if [ "" == "$RELEASE_NAME" ]; then
logError "Missing arguments, --version is required!\n"
printUsage "merge"
exit 1
fi
if [ "" == "$TAG_NAME" ]; then
TAG_NAME="$RELEASE_NAME"
fi
if [ "" == "$SOURCE_BRANCH" ]; then
SOURCE_BRANCH="release/${RELEASE_NAME}"
fi
init
SRC_DIR="$(realpath "$SRC_DIR")"
logInfo "Performing basic checks..."
checkSourceDirExists
logInfo "Changing to source directory..."
cd "${SRC_DIR}"
checkTransifexCommandExists
checkGitRepository
checkReleaseDoesNotExist
checkWorkingTreeClean
checkSourceBranchExists
checkTargetBranchExists
checkVersionInCMake
checkChangeLog
logInfo "All checks pass, getting our hands dirty now!"
logInfo "Checking out source branch..."
git checkout "$SOURCE_BRANCH"
logInfo "Updating language files..."
./share/translations/update.sh
if [ 0 -ne $? ]; then
exitError "Updating translations failed!"
fi
git diff-index --quiet HEAD --
if [ $? -ne 0 ]; then
git add ./share/translations/*
logInfo "Committing changes..."
if [ "" == "$GPG_GIT_KEY" ]; then
git commit -m "Update translations"
else
git commit -m "Update translations" -S"$GPG_GIT_KEY"
fi
fi
logInfo "Checking out target branch '${TARGET_BRANCH}'..."
git checkout "$TARGET_BRANCH"
logInfo "Merging '${SOURCE_BRANCH}' into '${TARGET_BRANCH}'..."
CHANGELOG=$(grep -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n)=+\n\n?(?:.|\n)+?\n(?=\n)" \
CHANGELOG | grep -Pzo '(?<=\n\n)(.|\n)+' | tr -d \\0)
COMMIT_MSG="Release ${RELEASE_NAME}"
git merge "$SOURCE_BRANCH" --no-ff -m "$COMMIT_MSG" -m "${CHANGELOG}" "$SOURCE_BRANCH" -S"$GPG_GIT_KEY"
logInfo "Creating tag '${TAG_NAME}'..."
if [ "" == "$GPG_GIT_KEY" ]; then
git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s
else
git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s -u "$GPG_GIT_KEY"
fi
cleanup
logInfo "All done!"
logInfo "Please merge the release branch back into the develop branch now and then push your changes."
logInfo "Don't forget to also push the tags using \e[1mgit push --tags\e[0m."
}
# -----------------------------------------------------------------------
# build command
# -----------------------------------------------------------------------
build() {
while [ $# -ge 1 ]; do
local arg="$1"
case "$arg" in
-v|--version)
RELEASE_NAME="$2"
shift ;;
-a|--app-name)
APP_NAME="$2"
shift ;;
-s|--source-dir)
SRC_DIR="$2"
shift ;;
-o|--output-dir)
OUTPUT_DIR="$2"
shift ;;
-t|--tag-name)
TAG_NAME="$2"
shift ;;
-d|--docker-image)
DOCKER_IMAGE="$2"
shift ;;
--container-name)
DOCKER_CONTAINER_NAME="$2"
shift ;;
-c|--cmake-options)
CMAKE_OPTIONS="$2"
shift ;;
--compiler)
COMPILER="$2"
shift ;;
-m|--make-options)
MAKE_OPTIONS="$2"
shift ;;
-i|--install-prefix)
INSTALL_PREFIX="$2"
shift ;;
-p|--plugins)
BUILD_PLUGINS="$2"
shift ;;
-n|--no-source-tarball)
BUILD_SOURCE_TARBALL=false ;;
-h|--help)
printUsage "build"
exit ;;
*)
logError "Unknown option '$arg'\n"
printUsage "build"
exit 1 ;;
esac
shift
done
if [ "" == "$RELEASE_NAME" ]; then
logError "Missing arguments, --version is required!\n"
printUsage "build"
exit 1
fi
if [ "" == "$TAG_NAME" ]; then
TAG_NAME="$RELEASE_NAME"
fi
init
SRC_DIR="$(realpath "$SRC_DIR")"
OUTPUT_DIR="$(realpath "$OUTPUT_DIR")"
logInfo "Performing basic checks..."
checkSourceDirExists
logInfo "Changing to source directory..."
cd "${SRC_DIR}"
checkTagExists
checkGitRepository
checkWorkingTreeClean
checkOutputDirDoesNotExist
logInfo "All checks pass, getting our hands dirty now!"
logInfo "Checking out release tag '${TAG_NAME}'..."
git checkout "$TAG_NAME"
logInfo "Creating output directory..."
mkdir -p "$OUTPUT_DIR"
if [ $? -ne 0 ]; then
exitError "Failed to create output directory!"
fi
if $BUILD_SOURCE_TARBALL; then
logInfo "Creating source tarball..."
local app_name_lower="$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]')"
TARBALL_NAME="${app_name_lower}-${RELEASE_NAME}-src.tar.xz"
git archive --format=tar "$TAG_NAME" --prefix="${app_name_lower}-${RELEASE_NAME}/" \
| xz -6 > "${OUTPUT_DIR}/${TARBALL_NAME}"
fi
logInfo "Creating build directory..."
mkdir -p "${OUTPUT_DIR}/build-release"
cd "${OUTPUT_DIR}/build-release"
logInfo "Configuring sources..."
for p in $BUILD_PLUGINS; do
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On"
done
if [ "$COMPILER" == "g++" ]; then
export CC=gcc
elif [ "$COMPILER" == "clang++" ]; then
export CC=clang
fi
export CXX="$COMPILER"
if [ "" == "$DOCKER_IMAGE" ]; then
if [ "$(uname -s)" == "Darwin" ]; then
# Building on OS X
local qt_vers="$(ls /usr/local/Cellar/qt5 2> /dev/null | sort -r | head -n1)"
if [ "" == "$qt_vers" ]; then
exitError "Couldn't find Qt5! Please make sure it is available in '/usr/local/Cellar/qt5'."
fi
export MACOSX_DEPLOYMENT_TARGET=10.7
logInfo "Configuring build..."
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
-DCMAKE_OSX_ARCHITECTURES=x86_64 -DWITH_CXX11=OFF \
-DCMAKE_PREFIX_PATH="/usr/local/Cellar/qt5/${qt_vers}/lib/cmake" \
-DQT_BINARY_DIR="/usr/local/Cellar/qt5/${qt_vers}/bin" $CMAKE_OPTIONS "$SRC_DIR"
logInfo "Compiling and packaging sources..."
make $MAKE_OPTIONS package
mv "./${APP_NAME}-${RELEASE_NAME}.dmg" ../
elif [ "$(uname -o)" == "Msys" ]; then
# Building on Windows with Msys
logInfo "Configuring build..."
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off -G"MSYS Makefiles" \
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" $CMAKE_OPTIONS "$SRC_DIR"
logInfo "Compiling and packaging sources..."
make $MAKE_OPTIONS package
mv "./${APP_NAME}-${RELEASE_NAME}-"*.{exe,zip} ../
else
mkdir -p "${OUTPUT_DIR}/bin-release"
# Building on Linux without Docker container
logInfo "Configuring build..."
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off $CMAKE_OPTIONS \
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" "$SRC_DIR"
logInfo "Compiling sources..."
make $MAKE_OPTIONS
logInfo "Installing to bin dir..."
make DESTDIR="${OUTPUT_DIR}/bin-release" install/strip
logInfo "Creating AppImage..."
${SRC_DIR}/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME"
fi
else
mkdir -p "${OUTPUT_DIR}/bin-release"
logInfo "Launching Docker container to compile sources..."
docker run --name "$DOCKER_CONTAINER_NAME" --rm \
--cap-add SYS_ADMIN --device /dev/fuse \
-e "CC=${CC}" -e "CXX=${CXX}" \
-v "$(realpath "$SRC_DIR"):/keepassxc/src:ro" \
-v "$(realpath "$OUTPUT_DIR"):/keepassxc/out:rw" \
"$DOCKER_IMAGE" \
bash -c "cd /keepassxc/out/build-release && \
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off $CMAKE_OPTIONS \
-DCMAKE_INSTALL_PREFIX=\"${INSTALL_PREFIX}\" /keepassxc/src && \
make $MAKE_OPTIONS && make DESTDIR=/keepassxc/out/bin-release install/strip && \
/keepassxc/src/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME""
if [ 0 -ne $? ]; then
exitError "Docker build failed!"
fi
logInfo "Build finished, Docker container terminated."
fi
cleanup
logInfo "All done!"
}
# -----------------------------------------------------------------------
# sign command
# -----------------------------------------------------------------------
sign() {
SIGN_FILES=()
while [ $# -ge 1 ]; do
local arg="$1"
case "$arg" in
-f|--files)
while [ "${2:0:1}" != "-" ] && [ $# -ge 2 ]; do
SIGN_FILES+=("$2")
shift
done ;;
-g|--gpg-key)
GPG_KEY="$2"
shift ;;
-h|--help)
printUsage "sign"
exit ;;
*)
logError "Unknown option '$arg'\n"
printUsage "sign"
exit 1 ;;
esac
shift
done
if [ -z "$SIGN_FILES" ]; then
logError "Missing arguments, --files is required!\n"
printUsage "sign"
exit 1
fi
for f in "${SIGN_FILES[@]}"; do
if [ ! -f "$f" ]; then
exitError "File '${f}' does not exist!"
fi
logInfo "Signing file '${f}'..."
gpg --output "${f}.sig" --armor --local-user "$GPG_KEY" --detach-sig "$f"
if [ 0 -ne $? ]; then
exitError "Signing failed!"
fi
logInfo "Creating digest for file '${f}'..."
sha256sum "$f" > "${f}.DIGEST"
done
logInfo "All done!"
}
# -----------------------------------------------------------------------
# parse global command line
# -----------------------------------------------------------------------
MODE="$1"
shift
if [ "" == "$MODE" ]; then
logError "Missing arguments!\n"
printUsage
exit 1
elif [ "help" == "$MODE" ]; then
printUsage "$1"
exit
elif [ "merge" == "$MODE" ] || [ "build" == "$MODE" ] || [ "sign" == "$MODE" ]; then
$MODE "$@"
else
printUsage "$MODE"
fi

View File

@@ -0,0 +1,13 @@
[Desktop Entry]
Name=KeePassXC
GenericName=Community Password Manager
GenericName[de]=Passwortverwaltung
GenericName[es]=Gestor de contraseñas
GenericName[fr]=Gestionnaire de mot de passe
GenericName[ru]=менеджер паролей
Exec=keepassxc %f
Icon=${SNAP}/share/icons/hicolor/256x256/apps/keepassxc.png
Terminal=false
Type=Application
Categories=Qt;Utility;
MimeType=application/x-keepass2;

View File

@@ -21,34 +21,97 @@ install(FILES ${DATABASE_ICONS} DESTINATION ${DATA_INSTALL_DIR}/icons/database)
if(UNIX AND NOT APPLE)
install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor
FILES_MATCHING PATTERN "keepassx.png" PATTERN "keepassx.svgz")
FILES_MATCHING PATTERN "keepassx*.png" PATTERN "keepassx*.svgz")
install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor
FILES_MATCHING PATTERN "application-x-keepassx.png" PATTERN "application-x-keepassx.svgz")
install(FILES linux/keepassx.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(FILES linux/keepassx.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)
FILES_MATCHING PATTERN "application-x-keepassxc.png" PATTERN "application-x-keepassxc.svgz")
install(FILES linux/keepassxc.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(FILES linux/keepassxc.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages)
endif(UNIX AND NOT APPLE)
if(APPLE)
install(FILES macosx/keepassx.icns DESTINATION ${DATA_INSTALL_DIR})
install(FILES macosx/keepassxc.icns DESTINATION ${DATA_INSTALL_DIR})
endif()
install(DIRECTORY icons/application/ DESTINATION ${DATA_INSTALL_DIR}/icons/application
FILES_MATCHING PATTERN "*.png" PATTERN "*.svgz")
add_custom_target(icons
COMMAND png2icns macosx/keepassx.icns
icons/application/16x16/apps/keepassx.png
icons/application/32x32/apps/keepassx.png
icons/application/48x48/apps/keepassx.png
icons/application/128x128/apps/keepassx.png
icons/application/256x256/apps/keepassx.png
COMMAND icotool -c -o windows/keepassx.ico
icons/application/16x16/apps/keepassx.png
icons/application/24x24/apps/keepassx.png
icons/application/32x32/apps/keepassx.png
icons/application/48x48/apps/keepassx.png
icons/application/64x64/apps/keepassx.png
icons/application/128x128/apps/keepassx.png
icons/application/256x256/apps/keepassx.png
# SVGZ to PNGs for KeePassXC
COMMAND inkscape -z -w 16 -h 16
icons/application/scalable/apps/keepassxc.svgz -e icons/application/16x16/apps/keepassxc.png
COMMAND inkscape -z -w 24 -h 24
icons/application/scalable/apps/keepassxc.svgz -e icons/application/24x24/apps/keepassxc.png
COMMAND inkscape -z -w 32 -h 32
icons/application/scalable/apps/keepassxc.svgz -e icons/application/32x32/apps/keepassxc.png
COMMAND inkscape -z -w 48 -h 48
icons/application/scalable/apps/keepassxc.svgz -e icons/application/48x48/apps/keepassxc.png
COMMAND inkscape -z -w 64 -h 64
icons/application/scalable/apps/keepassxc.svgz -e icons/application/64x64/apps/keepassxc.png
COMMAND inkscape -z -w 128 -h 128
icons/application/scalable/apps/keepassxc.svgz -e icons/application/128x128/apps/keepassxc.png
COMMAND inkscape -z -w 256 -h 256
icons/application/scalable/apps/keepassxc.svgz -e icons/application/256x256/apps/keepassxc.png
# SVGZ to PNGs for KeePassXC
COMMAND inkscape -z -w 16 -h 16
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/16x16/apps/keepassxc-dark.png
COMMAND inkscape -z -w 24 -h 24
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/24x24/apps/keepassxc-dark.png
COMMAND inkscape -z -w 32 -h 32
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/32x32/apps/keepassxc-dark.png
COMMAND inkscape -z -w 48 -h 48
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/48x48/apps/keepassxc-dark.png
COMMAND inkscape -z -w 64 -h 64
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/64x64/apps/keepassxc-dark.png
COMMAND inkscape -z -w 128 -h 128
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/128x128/apps/keepassxc-dark.png
COMMAND inkscape -z -w 256 -h 256
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/256x256/apps/keepassxc-dark.png
# SVGZ to PNGs for KeePassXC
COMMAND inkscape -z -w 16 -h 16
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/16x16/apps/keepassxc-locked.png
COMMAND inkscape -z -w 24 -h 24
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/24x24/apps/keepassxc-locked.png
COMMAND inkscape -z -w 32 -h 32
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/32x32/apps/keepassxc-locked.png
COMMAND inkscape -z -w 48 -h 48
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/48x48/apps/keepassxc-locked.png
COMMAND inkscape -z -w 64 -h 64
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/64x64/apps/keepassxc-locked.png
COMMAND inkscape -z -w 128 -h 128
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/128x128/apps/keepassxc-locked.png
COMMAND inkscape -z -w 256 -h 256
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/256x256/apps/keepassxc-locked.png
# SVGZ to PNGs for KeePassXC MIME-Type
COMMAND inkscape -z -w 16 -h 16
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/16x16/mimetypes/application-x-keepassxc.png
COMMAND inkscape -z -w 22 -h 22
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/22x22/mimetypes/application-x-keepassxc.png
COMMAND inkscape -z -w 32 -h 32
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/32x32/mimetypes/application-x-keepassxc.png
COMMAND inkscape -z -w 64 -h 64
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/64x64/mimetypes/application-x-keepassxc.png
COMMAND inkscape -z -w 128 -h 128
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/128x128/mimetypes/application-x-keepassxc.png
# ICNS for MacOS
COMMAND png2icns macosx/keepassxc.icns
icons/application/16x16/apps/keepassxc.png
icons/application/32x32/apps/keepassxc.png
icons/application/48x48/apps/keepassxc.png
icons/application/128x128/apps/keepassxc.png
icons/application/256x256/apps/keepassxc.png
# ICO for Windows
COMMAND icotool -c -o windows/keepassxc.ico
icons/application/16x16/apps/keepassxc.png
icons/application/24x24/apps/keepassxc.png
icons/application/32x32/apps/keepassxc.png
icons/application/48x48/apps/keepassxc.png
icons/application/64x64/apps/keepassxc.png
icons/application/128x128/apps/keepassxc.png
icons/application/256x256/apps/keepassxc.png
VERBATIM
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 838 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 863 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 711 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 715 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,865 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128"
height="128"
id="svg1307"
sodipodi:version="0.32"
inkscape:version="0.46+devel"
version="1.0"
sodipodi:docname="roll.svgz"
inkscape:output_extension="org.inkscape.output.svgz.inkscape"
inkscape:export-filename="/home/pinheiro/pics/oxygen-icons/scalable/actions/roll.png"
inkscape:export-xdpi="180"
inkscape:export-ydpi="180">
<defs
id="defs1309">
<linearGradient
id="linearGradient3718"
inkscape:collect="always">
<stop
id="stop3720"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3722"
offset="1"
style="stop-color:#ffffff;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient3680">
<stop
id="stop3682"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
style="stop-color:#ffffff;stop-opacity:0.49803922;"
offset="0.22032471"
id="stop3684" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="0.5"
id="stop3686" />
<stop
id="stop3688"
offset="0.5"
style="stop-color:#ffffff;stop-opacity:0;" />
<stop
id="stop3690"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient3291">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3293" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3295" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 64 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="128 : 64 : 1"
inkscape:persp3d-origin="64 : 42.666667 : 1"
id="perspective87" />
<linearGradient
inkscape:collect="always"
id="linearGradient2381">
<stop
style="stop-color:#393939;stop-opacity:1;"
offset="0"
id="stop2383" />
<stop
style="stop-color:#393939;stop-opacity:0;"
offset="1"
id="stop2385" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2518">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2520" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2522" />
</linearGradient>
<linearGradient
id="linearGradient2496">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2498" />
<stop
id="stop2508"
offset="0.04228718"
style="stop-color:#ffffff;stop-opacity:0.49803922;" />
<stop
id="stop2504"
offset="0.5"
style="stop-color:#ffffff;stop-opacity:0;" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="0.5"
id="stop2506" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2500" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2488">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2490" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2492" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2453">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2455" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2457" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2419">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2421" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2423" />
</linearGradient>
<linearGradient
id="linearGradient3225">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3227" />
<stop
id="stop2347"
offset="0.5"
style="stop-color:#e9e9e9;stop-opacity:1;" />
<stop
style="stop-color:#d3d3d3;stop-opacity:1;"
offset="1"
id="stop3229" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2419"
id="radialGradient2425"
cx="96.433075"
cy="57.087173"
fx="96.433075"
fy="57.087173"
r="59.198612"
gradientTransform="matrix(0.32911414,-0.18426278,0.00344988,0.00676072,59.169639,65.342464)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2419"
id="radialGradient2429"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.31464719,0.16663594,-0.00390006,0.0070264,6.1939502,29.102501)"
cx="96.433075"
cy="57.087173"
fx="96.433075"
fy="57.087173"
r="59.198612" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2419"
id="radialGradient2433"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-6.5370771e-4,0.36915148,-0.01148035,8.9888928e-4,66.206754,56.948367)"
cx="96.433075"
cy="57.087173"
fx="96.433075"
fy="57.087173"
r="59.198612" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2419"
id="radialGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30975608,-0.17225438,0.00324696,0.00631933,7.1075276,35.761713)"
cx="96.433075"
cy="57.087173"
fx="96.433075"
fy="57.087173"
r="59.198612" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2419"
id="radialGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.30528058,0.15922188,-0.00378396,0.00671573,60.709321,2.5331232)"
cx="96.433075"
cy="57.087173"
fx="96.433075"
fy="57.087173"
r="59.198612" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2496"
id="linearGradient1432"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.814691,-0.4513534,-0.01142073,0.9309698,-11.541647,47.221462)"
x1="116.81535"
y1="186.85913"
x2="154.86906"
y2="30.208342" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3718"
id="radialGradient1435"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.4096939,-0.05084026,0.0016784,0.495142,37.98752,30.25767)"
cx="68.964005"
cy="63.915367"
fx="68.964005"
fy="63.915367"
r="20.153163" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2518"
id="radialGradient1438"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.68188455,-0.10453237,0.03601738,0.43439777,16.732111,38.459404)"
cx="68.964005"
cy="63.915367"
fx="68.964005"
fy="63.915367"
r="20.153163" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2488"
id="linearGradient1441"
gradientUnits="userSpaceOnUse"
x1="94.021759"
y1="3.2521791"
x2="92.337082"
y2="6.8190994"
gradientTransform="matrix(0.77496397,-0.47736424,0.41995021,0.75244601,-11.810014,48.172506)" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient1456"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.80824314,-0.45051001,-0.01677524,0.96571805,-10.092238,38.234456)"
cx="113.60279"
cy="117.94415"
fx="113.60279"
fy="117.94415"
r="6.6403217" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient1459"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.80824314,-0.45051001,-0.01677524,0.96571805,-12.747064,45.293861)"
cx="148.67097"
cy="79.114578"
fx="148.67097"
fy="79.114578"
r="6.2969127" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient1463"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.76906443,0.41392843,-0.01330547,0.86085475,-11.512513,48.253962)"
cx="59.905712"
cy="5.9431438"
fx="59.905712"
fy="5.9431438"
r="7.4961972" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient1467"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.81000807,-0.44693085,0.84280642,0.45175053,-16.121677,46.553274)"
cx="84.408051"
cy="50.798088"
fx="84.408051"
fy="50.798088"
r="6.9240074" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient1471"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.81000807,-0.44693085,0.84280642,0.45175053,-13.240155,47.67091)"
cx="67.268486"
cy="30.446516"
fx="67.268486"
fy="30.446516"
r="6.8208823" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient1474"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.81000807,-0.44693085,0.84280642,0.45175053,-11.409803,49.062709)"
cx="49.933464"
cy="9.8521395"
fx="49.933464"
fy="9.8521395"
r="6.9496646" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2453"
id="radialGradient1480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.5645257,-0.34773821,0.28363904,0.50821111,10.679939,54.077116)"
cx="67.876709"
cy="60.201225"
fx="67.876709"
fy="60.201225"
r="60.815896" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2381"
id="linearGradient2387"
x1="-90.709442"
y1="153.80435"
x2="78.643684"
y2="12.660598"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.75854865,0.40826863,-0.0137637,0.89050228,-5.4092216,29.668461)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3291"
id="linearGradient3297"
x1="57.296326"
y1="-20.721647"
x2="67.490227"
y2="55.915768"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3291"
id="linearGradient3301"
gradientUnits="userSpaceOnUse"
x1="57.296326"
y1="-16.490377"
x2="57.296326"
y2="45.567513" />
<filter
inkscape:collect="always"
id="filter3429"
x="-0.090069178"
width="1.1801384"
y="-0.16560408"
height="1.3312082">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.68605903"
id="feGaussianBlur3431" />
</filter>
<filter
inkscape:collect="always"
id="filter3433"
x="-0.091769746"
width="1.1835395"
y="-0.1687308"
height="1.3374616">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.68605903"
id="feGaussianBlur3435" />
</filter>
<filter
inkscape:collect="always"
id="filter3437"
x="-0.090402938"
width="1.1808059"
y="-0.16621775"
height="1.3324355">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.68605903"
id="feGaussianBlur3439" />
</filter>
<filter
inkscape:collect="always"
id="filter3482"
x="-0.039611745"
width="1.0792235"
y="-0.29708207"
height="1.5941641">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.3721181"
id="feGaussianBlur3484" />
</filter>
<filter
inkscape:collect="always"
id="filter3518">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.45785798"
id="feGaussianBlur3520" />
</filter>
<filter
inkscape:collect="always"
id="filter3574">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.0125102"
id="feGaussianBlur3576" />
</filter>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2453"
id="radialGradient3638"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.634595,-0.3859285,-0.3188445,0.5737883,277.62315,52.360143)"
cx="67.876709"
cy="60.201225"
fx="67.876709"
fy="60.201225"
r="60.815896" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient3640"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.8645212,0.4720778,1.4956952e-2,0.9675874,302.57014,45.61879)"
cx="59.905712"
cy="5.9431438"
fx="59.905712"
fy="5.9431438"
r="7.4961972" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient3642"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.9085628,-0.4993103,1.8857387e-2,1.0854359,303.95792,42.280409)"
cx="148.67097"
cy="79.114578"
fx="148.67097"
fy="79.114578"
r="6.2969127" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient3644"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.9085628,-0.4993103,1.8857387e-2,1.0854359,300.97358,34.368164)"
cx="113.60279"
cy="117.94415"
fx="113.60279"
fy="117.94415"
r="6.6403217" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2419"
id="radialGradient3646"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.369964,-0.2042355,-3.878083e-3,7.6302398e-3,223.11488,65.450748)"
cx="96.433075"
cy="57.087173"
fx="96.433075"
fy="57.087173"
r="59.198612" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2419"
id="radialGradient3648"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.3537014,0.1900896,4.3841428e-3,7.864176e-3,282.66594,24.246158)"
cx="96.433075"
cy="57.087173"
fx="96.433075"
fy="57.087173"
r="59.198612" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2419"
id="radialGradient3650"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(7.3484633e-4,0.414965,1.2905298e-2,9.0936266e-4,214.00431,56.076739)"
cx="96.433075"
cy="57.087173"
fx="96.433075"
fy="57.087173"
r="59.198612" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2419"
id="radialGradient3652"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.369964,-0.2042355,-3.878083e-3,7.6302398e-3,282.46217,32.207255)"
cx="96.433075"
cy="57.087173"
fx="96.433075"
fy="57.087173"
r="59.198612" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2419"
id="radialGradient3654"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.3537014,0.1900896,4.3841428e-3,7.864176e-3,223.01536,-6.4711824)"
cx="96.433075"
cy="57.087173"
fx="96.433075"
fy="57.087173"
r="59.198612" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2488"
id="linearGradient3656"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.871153,-0.5297908,-0.4720747,0.8495381,302.90457,45.524605)"
x1="94.021759"
y1="3.2521791"
x2="92.337082"
y2="6.8190994" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2518"
id="radialGradient3658"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.7665205,-0.1115024,-4.0487885e-2,0.4886327,270.81978,34.857245)"
cx="68.964005"
cy="63.915367"
fx="68.964005"
fy="63.915367"
r="20.153163" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient2518"
id="radialGradient3660"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.2230559,-1.7307682e-2,7.7435003e-3,0.4922829,50.471168,28.127869)"
cx="68.964005"
cy="63.915367"
fx="68.964005"
fy="63.915367"
r="20.153163" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2496"
id="linearGradient3662"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.814691,-0.4513534,-1.1420728e-2,0.9309698,-11.541647,47.22146)"
x1="116.81535"
y1="186.85913"
x2="154.86906"
y2="30.208342" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2381"
id="linearGradient3664"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.8527002,0.4656229,1.5472064e-2,1.0009108,295.7093,24.780188)"
x1="-90.709442"
y1="153.80435"
x2="78.643684"
y2="12.660598" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3291"
id="linearGradient3666"
gradientUnits="userSpaceOnUse"
x1="57.296326"
y1="-16.490377"
x2="57.296326"
y2="45.567513" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient3668"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.9105468,-0.4952714,-0.9474161,0.5152438,302.45468,46.528825)"
cx="49.933464"
cy="9.8521395"
fx="49.933464"
fy="9.8521395"
r="6.9496646" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient3670"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.9105468,-0.4952714,-0.9474161,0.5152438,304.51222,44.948156)"
cx="67.268486"
cy="30.446516"
fx="67.268486"
fy="30.446516"
r="6.8208823" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3225"
id="radialGradient3672"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.9105468,-0.4952714,-0.9474161,0.5152438,307.7514,43.666425)"
cx="84.408051"
cy="50.798088"
fx="84.408051"
fy="50.798088"
r="6.9240074" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3680"
id="linearGradient3678"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.814691,-0.4513534,-0.01142073,0.9309698,-11.541647,47.221462)"
x1="274.36163"
y1="186.47618"
x2="42.380108"
y2="13.043629" />
<filter
inkscape:collect="always"
id="filter3714">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.42187368"
id="feGaussianBlur3716" />
</filter>
<filter
inkscape:collect="always"
id="filter3753">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="0.76746435"
id="feGaussianBlur3755" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.0078888"
inkscape:cx="119.14631"
inkscape:cy="77.382382"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:document-units="px"
inkscape:grid-bbox="true"
guidetolerance="0.1px"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1106"
inkscape:window-height="958"
inkscape:window-x="376"
inkscape:window-y="25" />
<metadata
id="metadata1312">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
<dc:contributor>
<cc:Agent>
<dc:title>Oxygen team</dc:title>
</cc:Agent>
</dc:contributor>
<dc:title></dc:title>
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/LGPL/2.1/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
<cc:requires
rdf:resource="http://web.resource.org/cc/SourceCode" />
</cc:License>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<path
style="fill:#181818;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3753)"
d="m 63.6875,11.34375 c -0.307888,0.01157 -0.622049,0.03822 -0.9375,0.0625 -0.124077,0.0093 -0.251114,0.0201 -0.375,0.03125 -0.05233,0.0049 -0.103739,0.02601 -0.15625,0.03125 -0.712,0.06846 -1.428165,0.153454 -2.125,0.28125 -0.155698,0.02997 -0.311968,0.06025 -0.46875,0.09375 -1.997959,0.408268 -3.903345,1.039509 -5.53125,1.9375 -0.566172,0.280908 -1.121148,0.597939 -1.6875,0.9375 l -2.0625,1.125 c -3.384614,1.788314 -7.092461,4.343647 -12.375,7.28125 -3.43228,1.90868 -6.456933,3.625939 -9.1875,5.1875 l -4.96875,2.75 c -0.498481,0.274974 -0.961001,0.544756 -1.375,0.84375 l -0.3125,0.1875 c -0.268281,0.175855 -0.545708,0.372427 -0.8125,0.5625 -0.966273,0.596455 -1.527441,1.009092 -1.5,1.0625 0.0068,0.0132 0.146679,-0.07019 0.21875,-0.09375 -3.962556,3.207756 -7.410412,7.880262 -8,12.96875 L 12.0625,46.75 c -0.07009,0.509421 -0.116296,1.030587 -0.125,1.59375 L 10.34375,83.3125 c -0.105144,6.80274 4.445942,14.767952 10.21875,17.875 L 53.8125,119 c 0.416106,0.22396 0.814802,0.4009 1.21875,0.5625 6.179168,2.49704 14.387189,2.03917 19.03125,-0.53125 0.38938,-0.16551 0.784222,-0.33772 1.1875,-0.5625 l 31.125,-17.75 c 5.44542,-3.035234 9.8947,-10.375507 10,-16.4375 l -0.34375,-35.625 c 0.006,-0.33561 -0.0106,-0.655677 -0.0313,-0.96875 l 0.125,-0.21875 C 115.17195,41.889964 112.94649,34.769399 108.25,32.1875 l -1.375,-0.59375 C 106.25301,31.004608 98.645471,26.824191 89.15625,21.875 85.474411,19.954703 82.224469,18.29233 79.34375,16.84375 l -6.53125,-3.5 c -2.121537,-1.139951 -3.811692,-1.796844 -6.625,-1.96875 -0.253862,-0.01693 -0.519547,-0.02233 -0.78125,-0.03125 -0.147499,-0.0043 -0.289561,0.0017 -0.4375,0 -0.414575,-0.0064 -0.85006,-0.0162 -1.28125,0 z"
id="path2913"
sodipodi:nodetypes="cssssscccscccccscccccccccccccccccsccsssc" />
<path
style="fill:#181818;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 21.128502,28.09122 c -4.766214,3.124206 -9.405072,8.541154 -10.096359,14.50736 l 8.629169,48.78787 35.366196,27.16282 c 5.06326,2.14656 14.524273,2.44687 19.76131,-0.92915 L 117.12128,43.463792 c -0.95305,-5.578786 -3.1596,-12.685613 -7.85609,-15.267512 L 76.187417,14.016615 27.411339,24.642694 21.128502,28.09122 z"
id="path2415"
sodipodi:nodetypes="cccccccccc" />
<path
style="opacity:0;fill:url(#radialGradient1480);fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 21.128502,28.09122 c -4.766214,3.124206 -9.405072,8.541154 -10.096359,14.50736 l 8.629169,48.78787 37.487054,27.87435 c 4.487477,0.90002 9.451421,1.77535 17.640452,-2.89762 L 117.12128,43.463792 c -0.95305,-5.578786 -3.1596,-12.685613 -7.85609,-15.267512 L 76.187417,14.016615 27.411339,24.642694 21.128502,28.09122 z"
id="path2435"
sodipodi:nodetypes="cccccccccc" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 21.534884,37.678074 33.235279,17.969949 c 5.772809,3.10706 10.335586,11.084985 10.230441,17.887724 l -0.586755,37.784793 c -0.105145,6.80273 -4.837214,9.77795 -10.610022,6.67089 L 20.568547,100.1994 C 14.795739,97.092352 10.232963,89.114423 10.338107,82.311683 l 0.586756,-37.96271 c 0.105144,-6.802738 4.837213,-9.777959 10.610021,-6.670899 z"
id="rect1412"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:#1a1a1a;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 22.804196,27.057004 54.101765,9.7925263 C 59.722729,6.6918703 68.514472,6.488197 73.814194,9.3358593 L 108.41349,27.926853 c 5.29972,2.847662 5.0411,7.636379 -0.57986,10.737037 L 76.536061,55.928366 c -5.620963,3.100656 -14.412707,3.304329 -19.712429,0.456667 L 22.224339,37.79404 c -5.299722,-2.847662 -5.041106,-7.636381 0.579857,-10.737036 z"
id="rect1414" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 76.279616,56.950767 107.40321,39.201951 c 5.44542,-3.03524 9.7445,-0.598541 9.6392,5.463458 l -0.65538,38.618606 c -0.1053,6.061993 -4.57393,13.385785 -10.01935,16.421019 L 75.244086,117.45385 c -5.445414,3.03523 -9.744496,0.59853 -9.639194,-5.46346 l 0.65538,-38.61861 c 0.105301,-6.062 4.57393,-13.385772 10.019344,-16.421013 z"
id="rect1416"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:url(#radialGradient1463);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 34.579473,71.713674 c 3.193841,1.719 5.720571,5.980985 5.665315,9.556022 -0.05526,3.575036 -2.670955,5.069246 -5.864796,3.350246 -3.19384,-1.719 -5.720571,-5.980986 -5.665314,-9.556022 0.05526,-3.575036 2.670954,-5.069247 5.864795,-3.350246 z"
id="rect2299" />
<path
style="fill:url(#radialGradient1459);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 106.19386,48.637332 c 2.81955,-1.571604 5.04233,-0.124684 4.98382,3.244214 -0.0585,3.368899 -2.37553,7.346262 -5.19509,8.917866 -2.81954,1.571599 -5.04232,0.124685 -4.9838,-3.244214 0.0585,-3.368897 2.37552,-7.346266 5.19507,-8.917866 z"
id="rect2301" />
<path
style="fill:url(#radialGradient1456);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 79.85942,94.543208 c 2.973317,-1.657309 5.317323,-0.131486 5.255611,3.421141 -0.06171,3.552621 -2.505079,7.746891 -5.478396,9.404201 -2.973318,1.65731 -5.317324,0.13148 -5.255611,-3.42112 0.06171,-3.55264 2.505079,-7.746904 5.478396,-9.404222 z"
id="rect2303" />
<path
style="fill:url(#radialGradient2425);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 110.58717,37.051279 c 0.11274,0.220925 -8.5242,5.287057 -19.278872,11.30833 -10.754671,6.021272 -19.574594,10.728803 -19.687327,10.507878 -0.112734,-0.220924 8.5242,-5.287055 19.278871,-11.308329 10.754678,-6.021273 19.574588,-10.728803 19.687328,-10.507879 z"
id="path2417" />
<path
style="fill:url(#radialGradient2429);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 54.940385,55.437448 C 54.81294,55.667054 46.364754,51.434053 36.082827,45.988786 25.8009,40.543518 17.559582,35.937824 17.687026,35.708218 c 0.127446,-0.229607 8.575631,4.003395 18.857558,9.448661 10.281927,5.445267 18.523246,10.050963 18.395801,10.280569 z"
id="path2427" />
<path
style="opacity:0.352459;fill:url(#radialGradient2433);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 65.449635,114.45135 c -0.375151,0.0294 -0.662284,-9.73704 -0.640922,-21.800043 0.02136,-12.062997 0.343169,-21.877093 0.71832,-21.906467 0.37515,-0.02937 0.662284,9.737046 0.640922,21.800043 -0.02136,12.062997 -0.343169,21.877087 -0.71832,21.906467 z"
id="path2431" />
<path
style="fill:url(#radialGradient2480);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 55.500752,9.3142325 C 55.606855,9.5207335 47.477933,14.256682 37.355837,19.885546 27.23374,25.514411 18.932593,29.915169 18.826489,29.708669 18.720387,29.502168 26.849309,24.76622 36.971404,19.137356 47.093501,13.508491 55.394649,9.1077316 55.500752,9.3142325 z"
id="path2478" />
<path
style="fill:url(#radialGradient2484);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 108.00464,27.696488 C 107.88099,27.915941 99.6843,23.871327 89.70845,18.668329 79.732601,13.465333 71.736615,9.0645036 71.860266,8.8450494 c 0.123651,-0.2194542 8.320347,3.8251596 18.296196,9.0281566 9.975848,5.202996 17.971838,9.603826 17.848178,9.823282 z"
id="path2482" />
<path
style="fill:url(#linearGradient1441);fill-opacity:1;fill-rule:evenodd;stroke:none"
d="M 52.391314,10.725421 C 60.218637,6.0324839 68.182969,7.1388117 72.02313,8.5821097 66.243539,7.7850786 57.513187,8.4568441 52.391314,10.725421 z"
id="path2486" />
<path
style="fill:url(#linearGradient1432);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3574)"
d="m 77.08844,56.915281 34.08864,-19.331703 c 5.59118,-3.097618 10.02975,-0.486059 9.95196,5.855507 l -0.50832,41.436025 c -0.0778,6.341565 -4.64162,13.940612 -10.23281,17.03823 l -34.088639,20.3317 c -5.591181,3.09763 -10.029752,0.48606 -9.951956,-5.8555 l 0.508319,-42.43603 c 0.0778,-6.341566 4.641626,-13.940614 10.232806,-17.038229 z"
id="rect2556"
sodipodi:nodetypes="ccccccccc"
transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)" />
<path
style="fill:url(#radialGradient1438);fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 50.216546,53.06469 7.857374,4.162351 c 3.644704,1.96934 11.80512,2.303829 17.092856,-0.409972 l 14.63311,-8.036739 -14.617571,7.67824 c -6.819372,2.782435 -12.100091,1.948265 -17.117359,0.49485 l -7.84841,-3.88873 z"
id="path2514" />
<path
style="opacity:0.54455447;fill:url(#radialGradient1435);fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter3714)"
d="m 48.539396,51.570209 8.832636,4.748176 c 4.097087,4.930516 13.270379,5.877301 19.214433,-0.31034 l 16.449381,-8.905407 -16.309189,8.078374 c -7.351304,3.398287 -14.788017,2.426427 -19.241976,0.405541 l -8.945285,-4.016344 z"
id="path2526"
sodipodi:nodetypes="ccccccc"
transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)" />
<path
id="path1506"
d="m 21.534884,37.678074 34.124863,18.407772 c 5.772809,3.10706 9.004709,10.947536 8.899565,17.750275 l -0.291005,39.175029 c -0.105145,6.80274 -6.773179,6.84305 -12.545987,3.73599 L 20.568547,100.1994 C 14.795739,97.092352 10.232963,89.114423 10.338107,82.311683 l 0.586756,-37.96271 c 0.105144,-6.802738 4.837213,-9.777959 10.610021,-6.670899 z"
style="fill:url(#linearGradient2387);fill-opacity:1;fill-rule:nonzero;stroke:none"
sodipodi:nodetypes="ccccccccc" />
<path
sodipodi:type="inkscape:offset"
inkscape:radius="-1.1669018"
inkscape:original="M 64.125 0.28125 C 60.119734 0.34266221 56.06557 1.2507431 52.90625 2.96875 L 17.71875 22.09375 C 11.40011 25.529764 11.104972 30.908467 17.0625 34.15625 L 29.03125 40.6875 C 29.041477 40.689095 29.05227 40.685908 29.0625 40.6875 C 34.361479 41.512149 40.004261 41.96875 45.84375 41.96875 C 74.648901 41.96875 98.402523 31.131908 101.8125 17.1875 L 75.0625 2.625 C 72.083736 1.0011076 68.130266 0.21983779 64.125 0.28125 z "
style="fill:url(#linearGradient3301);fill-opacity:1;stroke:none;filter:url(#filter3518)"
id="path3299"
d="M 64.15625,1.4375 C 60.315227,1.4963939 56.411613,2.3997005 53.46875,4 l -35.1875,19.125 c -2.941524,1.599572 -4.254537,3.489516 -4.34375,5.125 -0.08921,1.635484 0.953539,3.384565 3.6875,4.875 l 11.78125,6.4375 c 5.194852,0.80039 10.715154,1.25 16.4375,1.25 14.256241,0 27.253781,-2.694155 37.03125,-7.0625 9.353803,-4.17906 15.530816,-9.912929 17.4375,-16.03125 L 74.5,3.65625 C 71.764111,2.1647623 67.998056,1.3785941 64.15625,1.4375 z"
transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)" />
<g
id="g3441"
style="filter:url(#filter3482)"
transform="matrix(0.88958423,-0.00696863,0,0.88958423,7.0366649,7.5268987)">
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3429)"
d="m 27.480576,23.293682 c 3.505712,-1.906853 9.264565,-1.844946 12.912228,0.138803 3.647663,1.983749 3.761942,5.115894 0.256231,7.022747 -3.505711,1.906852 -9.264564,1.844946 -12.912227,-0.138803 -3.647663,-1.98375 -3.761943,-5.115894 -0.256232,-7.022747 z"
id="path3327" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3433)"
d="m 60.840861,23.804955 c 3.440747,-1.871518 9.092885,-1.810759 12.672954,0.13623 3.580069,1.946988 3.692229,5.021092 0.251482,6.89261 -3.440747,1.871516 -9.092884,1.810758 -12.672954,-0.13623 -3.580068,-1.946989 -3.692229,-5.021094 -0.251482,-6.89261 z"
id="path3329" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3437)"
d="m 92.391788,24.467376 c 3.492768,-1.899812 9.230362,-1.838135 12.864552,0.13829 3.6342,1.976426 3.74806,5.097007 0.25529,6.99682 -3.49277,1.899812 -9.230362,1.838135 -12.864558,-0.13829 -3.634195,-1.976426 -3.748052,-5.097006 -0.255284,-6.99682 z"
id="path3331" />
</g>
<path
style="fill:url(#radialGradient1474);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 31.482952,28.057089 c 3.118626,-1.720736 8.241611,-1.705796 11.486514,0.0335 3.244904,1.739293 3.346565,4.524804 0.227939,6.24554 -3.118625,1.720735 -8.24161,1.705796 -11.486513,-0.0335 -3.244904,-1.739293 -3.346565,-4.524802 -0.22794,-6.245539 z"
id="rect2291" />
<path
style="fill:url(#radialGradient1471);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 61.159735,28.279434 c 3.060835,-1.68885 8.088887,-1.674188 11.27366,0.03288 3.184773,1.707062 3.284549,4.440954 0.223715,6.129804 -3.060834,1.688849 -8.088886,1.674187 -11.27366,-0.03287 -3.184772,-1.707063 -3.284549,-4.440957 -0.223715,-6.129805 z"
id="rect2293" />
<path
style="fill:url(#radialGradient1467);fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 89.226942,28.648846 c 3.107112,-1.714382 8.211185,-1.699499 11.444108,0.03337 3.23292,1.732872 3.33421,4.508098 0.2271,6.222482 -3.107116,1.714382 -8.211187,1.699499 -11.444111,-0.03337 -3.232922,-1.732872 -3.334208,-4.508097 -0.227097,-6.222482 z"
id="rect2295" />
<path
style="opacity:0.20081967;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 32.745512,27.50858 c -0.444882,0.160874 -0.863106,0.357774 -1.252933,0.572866 -1.973505,1.088903 -2.658724,2.61258 -2.072615,4.019316 -0.110112,-1.174485 0.658612,-2.360809 2.281271,-3.256129 3.118627,-1.720737 8.247246,-1.702176 11.49215,0.03712 1.133181,0.607393 1.886843,1.33499 2.250084,2.107659 -0.152505,-1.039536 -0.963043,-2.069142 -2.45874,-2.870847 -2.83929,-1.521881 -7.125046,-1.736102 -10.239217,-0.609982 z"
id="path1381" />
<path
id="path2263"
d="m 62.328392,27.787252 c -0.444881,0.160873 -0.863105,0.357773 -1.252933,0.572865 -1.973505,1.088904 -2.658724,2.61258 -2.072615,4.019316 -0.110113,-1.174485 0.658612,-2.360808 2.281271,-3.256128 3.118626,-1.720738 8.247247,-1.702177 11.49215,0.03712 1.133182,0.607393 1.886843,1.33499 2.250083,2.107659 -0.152505,-1.039536 -0.963042,-2.069141 -2.458739,-2.870847 -2.839291,-1.52188 -7.125046,-1.736101 -10.239217,-0.609981 z"
style="opacity:0.20081967;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
<path
style="opacity:0.20081967;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 90.312362,28.060759 c -0.444879,0.160875 -0.863106,0.357775 -1.252933,0.572866 -1.973503,1.088903 -2.658722,2.61258 -2.072613,4.019316 -0.110112,-1.174485 0.658612,-2.360808 2.28127,-3.256128 3.118624,-1.720737 8.247248,-1.702176 11.492144,0.03712 1.13319,0.607392 1.88685,1.33499 2.25009,2.107659 -0.1525,-1.039538 -0.96304,-2.069141 -2.45874,-2.870847 -2.839292,-1.52188 -7.125047,-1.736101 -10.239218,-0.609982 z"
id="path2265" />
<path
sodipodi:nodetypes="ccccccccc"
id="path3674"
d="m 77.08844,56.915281 37.08864,-22.331703 c 5.59118,-3.097618 10.02975,-0.486059 9.95196,5.855507 l -0.50832,41.436025 c -0.0778,6.341565 -4.64162,13.940612 -10.23281,17.03823 l -37.088639,23.3317 c -5.591181,3.09763 -10.029752,0.48606 -9.951956,-5.8555 l 0.508319,-42.43603 c 0.0778,-6.341566 4.641626,-13.940614 10.232806,-17.038229 z"
style="fill:url(#linearGradient3678);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3574)"
transform="matrix(-0.88958423,0.00696863,0,0.88958423,123.04786,8.3972843)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 38 KiB

View File

@@ -1,12 +1,12 @@
[Desktop Entry]
Name=KeePassX
GenericName=Password Manager
Name=KeePassXC
GenericName=Community Password Manager
GenericName[de]=Passwortverwaltung
GenericName[es]=Gestor de contraseñas
GenericName[fr]=Gestionnaire de mot de passe
GenericName[ru]=менеджер паролей
Exec=keepassx %f
Icon=keepassx
Exec=keepassxc %f
Icon=keepassxc
Terminal=false
Type=Application
Categories=Qt;Utility;

View File

@@ -3,6 +3,6 @@
<mime-type type="application/x-keepass2">
<comment>KeePass 2 database</comment>
<glob pattern="*.kdbx"/>
<icon name="application-x-keepassx"/>
<icon name="application-x-keepassxc"/>
</mime-type>
</mime-info>

View File

@@ -11,9 +11,9 @@
<key>CFBundleExecutable</key>
<string>${PROGNAME}</string>
<key>CFBundleIconFile</key>
<string>keepassx.icns</string>
<string>keepassxc.icns</string>
<key>CFBundleIdentifier</key>
<string>org.keepassx.keepassx</string>
<string>org.keepassx.keepassxc</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
@@ -21,13 +21,13 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>${KEEPASSX_VERSION}</string>
<string>${KEEPASSXC_VERSION}</string>
<key>CFBundleSignature</key>
<string>KEPX</string>
<key>CFBundleVersion</key>
<string>${KEEPASSX_VERSION_NUM}</string>
<string>${KEEPASSXC_VERSION_NUM}</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright 2010-2012 KeePassX Development Team</string>
<string>Copyright 2016 KeePassXC Development Team</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
@@ -36,9 +36,9 @@
<string>kdbx</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>keepassx.icns</string>
<string>keepassxc.icns</string>
<key>CFBundleTypeName</key>
<string>KeePassX Password Database</string>
<string>KeePassXC Password Database</string>
<key>CFBundleTypeOSTypes</key>
<array>
<string>kdbx</string>

Binary file not shown.

BIN
share/macosx/keepassxc.icns Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -373,6 +373,10 @@ Do you want to save it anyway?</source>
<translation>Databasen som du prøver at gemme er låst af en anden instans af KeePassX.
Vil du alligevel gemme?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -424,6 +428,14 @@ Vil du alligevel gemme?</translation>
<source>Unable to calculate master key</source>
<translation>Kan ikke beregne hovednøgle</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -737,6 +749,14 @@ Vil du alligevel gemme?</translation>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Kan ikke slette ikonet. Det anvendes stadig af %n element.</numerusform><numerusform>Kan ikke slette ikonet. Det anvendes stadig af %n elementer.</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -850,6 +870,10 @@ Vil du alligevel gemme?</translation>
<source>Unable to calculate master key</source>
<translation>Kan ikke beregne hovednøgle</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1301,6 +1325,14 @@ Dette er en envejs konvertering. Du vil ikke være i stand til at åbne den impo
<source>Remember last key files</source>
<translation>Husk de sidste nøglefiler</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

File diff suppressed because it is too large Load Diff

View File

@@ -7,12 +7,16 @@
</message>
<message>
<source>KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3.</source>
<translation type="unfinished"/>
<translation>KeePassX διανέμεται υπό τον όρο από το GNU γενικής δημόσιας άδειας (GPL) έκδοση 2 ή (κατ &apos; επιλογή σας) έκδοση 3.</translation>
</message>
<message>
<source>Revision</source>
<translation>Αναθεώρηση</translation>
</message>
<message>
<source>Using:</source>
<translation>Χρήση:</translation>
</message>
</context>
<context>
<name>AutoType</name>
@@ -127,7 +131,7 @@
<name>DatabaseOpenWidget</name>
<message>
<source>Enter master key</source>
<translation type="unfinished"/>
<translation>Εισαγάγετε το πρωτεύον κλειδί</translation>
</message>
<message>
<source>Key File:</source>
@@ -166,6 +170,42 @@
<translation>Επιλέξτε αρχείο κλειδί</translation>
</message>
</context>
<context>
<name>DatabaseRepairWidget</name>
<message>
<source>Repair database</source>
<translation>Επισκευή βάσης δεδομένων</translation>
</message>
<message>
<source>Error</source>
<translation>Σφάλμα</translation>
</message>
<message>
<source>Can&apos;t open key file</source>
<translation>Δεν είναι δυνατό να ανοίξει αρχείο κλειδιού</translation>
</message>
<message>
<source>Database opened fine. Nothing to do.</source>
<translation>Μια χαρά το άνοιγμα βάσης δεδομένων. Τίποτα να κάνει.</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Δεν είναι δυνατό να ανοίξει τη βάση δεδομένων.</translation>
</message>
<message>
<source>Success</source>
<translation>Επιτυχία</translation>
</message>
<message>
<source>The database has been successfully repaired
You can now save it.</source>
<translation>Η βάση δεδομένων έχει επιδιορθωθεί με επιτυχία μπορείτε να το αποθηκεύσετε τώρα.</translation>
</message>
<message>
<source>Unable to repair the database.</source>
<translation>Δεν είναι δυνατή η επιδιόρθωση της βάσης δεδομένων.</translation>
</message>
</context>
<context>
<name>DatabaseSettingsWidget</name>
<message>
@@ -194,7 +234,7 @@
</message>
<message>
<source>Benchmark</source>
<translation type="unfinished"/>
<translation>Σημείο αναφοράς</translation>
</message>
<message>
<source>Max. history items:</source>
@@ -209,7 +249,7 @@
<name>DatabaseTabWidget</name>
<message>
<source>Root</source>
<translation type="unfinished"/>
<translation>Ρίζα</translation>
</message>
<message>
<source>KeePass 2 Database</source>
@@ -263,7 +303,7 @@ Save changes?</source>
</message>
<message>
<source>Writing the database failed.</source>
<translation type="unfinished"/>
<translation>Εγγραφή της βάσης δεδομένων απέτυχε.</translation>
</message>
<message>
<source>Save database as</source>
@@ -331,12 +371,16 @@ Do you want to save it anyway?</source>
<translation>Η βάση δεδομένων που πρασπαθείται να αποθηκεύσετε είναι κλειδωμένη από μία άλλη διεργασία KeePassX.
Θέλετε να την αποθηκεύσετε ούτως η άλλως;</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation>Δεν είναι δυνατό να ανοίξει τη βάση δεδομένων.</translation>
</message>
</context>
<context>
<name>DatabaseWidget</name>
<message>
<source>Change master key</source>
<translation type="unfinished"/>
<translation>Αλλαγή πρωτεύοντος κλειδιού</translation>
</message>
<message>
<source>Delete entry?</source>
@@ -380,7 +424,15 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Unable to calculate master key</source>
<translation type="unfinished"/>
<translation>Σε θέση να υπολογίσει το κύριο κλειδί</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation>Κίνηση εισόδου στον κάδο ανακύκλωσης;</translation>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation>Θέλετε πραγματικά να κινηθεί εισόδου &quot;%1&quot; στον κάδο ανακύκλωσης;</translation>
</message>
</context>
<context>
@@ -624,7 +676,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Inherit from parent group (%1)</source>
<translation type="unfinished"/>
<translation>Κληρονομούν από γονική ομάδα (%1)</translation>
</message>
</context>
<context>
@@ -696,6 +748,14 @@ Do you want to save it anyway?</source>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation type="unfinished"><numerusform></numerusform><numerusform></numerusform></translation>
</message>
<message>
<source>Error</source>
<translation>Σφάλμα</translation>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation>Δεν μπορεί να διαβάσει το εικονίδιο:</translation>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -713,7 +773,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Uuid:</source>
<translation type="unfinished"/>
<translation>UUID:</translation>
</message>
</context>
<context>
@@ -803,11 +863,15 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Root</source>
<translation type="unfinished"/>
<translation>Ρίζα</translation>
</message>
<message>
<source>Unable to calculate master key</source>
<translation type="unfinished"/>
<translation>Σε θέση να υπολογίσει το κύριο κλειδί</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation>Λάθος κλειδί ή βάση δεδομένων αρχείο είναι κατεστραμμένο.</translation>
</message>
</context>
<context>
@@ -826,6 +890,13 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Unable to calculate master key</source>
<translation>Σε θέση να υπολογίσει το κύριο κλειδί</translation>
</message>
<message>
<source>The selected file is an old KeePass 1 database (.kdb).
You can import it by clicking on Database &gt; 'Import KeePass 1 database'.
This is a one-way migration. You won&apos;t be able to open the imported database with the old KeePassX 0.4 version.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -833,7 +904,7 @@ Do you want to save it anyway?</source>
<name>Main</name>
<message>
<source>Fatal error while testing the cryptographic functions.</source>
<translation type="unfinished"/>
<translation>Ανεπανόρθωτο σφάλμα κατά τον έλεγχο των κρυπτογραφικών λειτουργιών.</translation>
</message>
<message>
<source>KeePassX - Error</source>
@@ -924,7 +995,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Change master key</source>
<translation type="unfinished"/>
<translation>Αλλαγή πρωτεύοντος κλειδιού</translation>
</message>
<message>
<source>Database settings</source>
@@ -1006,6 +1077,30 @@ Do you want to save it anyway?</source>
<source>Export to CSV file</source>
<translation>Εξαγωγή σε αρχείο CSV</translation>
</message>
<message>
<source>Repair database</source>
<translation>Επισκευή βάσης δεδομένων</translation>
</message>
<message>
<source>KeePass 2 Database</source>
<translation type="unfinished"/>
</message>
<message>
<source>All files</source>
<translation>Όλα τα αρχεία</translation>
</message>
<message>
<source>Save repaired database</source>
<translation>Αποθήκευση επιδιορθωμένη βάση δεδομένων</translation>
</message>
<message>
<source>Error</source>
<translation>Σφάλμα</translation>
</message>
<message>
<source>Writing the database failed.</source>
<translation>Εγγραφή της βάσης δεδομένων απέτυχε.</translation>
</message>
</context>
<context>
<name>PasswordGeneratorWidget</name>
@@ -1062,19 +1157,19 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Unknown option &apos;%1&apos;.</source>
<translation type="unfinished"/>
<translation>Άγνωστη επιλογή &apos;%1&apos;.</translation>
</message>
<message>
<source>Unknown options: %1.</source>
<translation type="unfinished"/>
<translation>Άγνωστο επιλογές: %1.</translation>
</message>
<message>
<source>Missing value after &apos;%1&apos;.</source>
<translation type="unfinished"/>
<translation>Τιμή που λείπει μετά από &apos;%1&apos;.</translation>
</message>
<message>
<source>Unexpected value after &apos;%1&apos;.</source>
<translation type="unfinished"/>
<translation>Μη αναμενόμενη τιμή μετά από &apos;%1&apos;.</translation>
</message>
<message>
<source>[options]</source>
@@ -1097,11 +1192,11 @@ Do you want to save it anyway?</source>
<name>QSaveFile</name>
<message>
<source>Existing file %1 is not writable</source>
<translation type="unfinished"/>
<translation>Υπάρχον αρχείο %1 δεν είναι εγγράψιμο</translation>
</message>
<message>
<source>Writing canceled by application</source>
<translation type="unfinished"/>
<translation>Γράψιμο ακυρώθηκε από την εφαρμογή</translation>
</message>
<message>
<source>Partial write. Partition full?</source>
@@ -1116,15 +1211,15 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Error writing to underlying device: </source>
<translation type="unfinished"/>
<translation>Σφάλμα κατά την εγγραφή για την υποκείμενη συσκευή: </translation>
</message>
<message>
<source>Error opening underlying device: </source>
<translation type="unfinished"/>
<translation>Σφάλμα άνοιγμα υποκείμενη συσκευή: </translation>
</message>
<message>
<source>Error reading data from underlying device: </source>
<translation type="unfinished"/>
<translation>Σφάλμα κατά την ανάγνωση δεδομένων από υποκείμενη συσκευή: </translation>
</message>
<message>
<source>Internal zlib error when decompressing: </source>
@@ -1150,7 +1245,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Case sensitive</source>
<translation type="unfinished"/>
<translation>Διάκριση πεζών-κεφαλαίων</translation>
</message>
<message>
<source>Current group</source>
@@ -1158,7 +1253,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Root group</source>
<translation type="unfinished"/>
<translation>Ομάδα ρίζα</translation>
</message>
</context>
<context>
@@ -1169,7 +1264,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>General</source>
<translation type="unfinished"/>
<translation>Γενικά</translation>
</message>
<message>
<source>Security</source>
@@ -1180,7 +1275,7 @@ Do you want to save it anyway?</source>
<name>SettingsWidgetGeneral</name>
<message>
<source>Remember last databases</source>
<translation type="unfinished"/>
<translation>Θυμηθείτε την τελευταία βάσεις δεδομένων</translation>
</message>
<message>
<source>Open previous databases on startup</source>
@@ -1208,7 +1303,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Use entry title to match windows for global auto-type</source>
<translation type="unfinished"/>
<translation>Χρησιμοποιήστε εγγραφή τίτλου ώστε να ταιριάζει με windows για παγκόσμια αυτόματος-τύπο</translation>
</message>
<message>
<source>Language</source>
@@ -1216,7 +1311,7 @@ Do you want to save it anyway?</source>
</message>
<message>
<source>Show a system tray icon</source>
<translation type="unfinished"/>
<translation>Δείχνουν ένα εικονίδιο του δίσκου συστήματος</translation>
</message>
<message>
<source>Hide window to system tray when minimized</source>
@@ -1226,6 +1321,14 @@ Do you want to save it anyway?</source>
<source>Remember last key files</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="en_US">
<TS version="2.1" language="en_US">
<context>
<name>DatabaseWidget</name>
<message numerus="yes">
@@ -32,7 +32,7 @@
<name>EditWidgetIcons</name>
<message numerus="yes">
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation>
<translation type="vanished">
<numerusform>Can&apos;t delete icon. Still used by %n item.</numerusform>
<numerusform>Can&apos;t delete icon. Still used by %n items.</numerusform>
</translation>

View File

@@ -373,6 +373,10 @@ Do you want to save it anyway?</source>
<translation>La base de datos que está tratando de guardar está bloqueda por otra instancia de KeePassX.
̉¿Desea guardarla de cualquier manera?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -424,6 +428,14 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>No se puede calcular la llave maestra</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -738,6 +750,14 @@ Do you want to save it anyway?</source>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>No se puede eliminar el icono. Utilizado aún en %n elemento</numerusform><numerusform>No se puede eliminar el icono. Utilizado aún en %n elementos</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -851,6 +871,10 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>No se puede calcular la clave maestra</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1302,6 +1326,14 @@ Esta migración es en un único sentido. No podrá abrir la base importada con l
<source>Remember last key files</source>
<translation>Recordar últimos archivos clave</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -373,6 +373,10 @@ Do you want to save it anyway?</source>
<translation>La base de données que vous essayez de sauvegarder a été verrouillée par une autre instance de KeePassX.
Voulez-vous quand même la sauvegarder ?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -424,6 +428,14 @@ Voulez-vous quand même la sauvegarder ?</translation>
<source>Unable to calculate master key</source>
<translation>Impossible de calculer la clé maître</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -738,6 +750,14 @@ Voulez-vous quand même la sauvegarder ?</translation>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Impossible de supprimer l&apos;icône. Toujours utilisée par %n objet(s).</numerusform><numerusform>Impossible de supprimer l&apos;icône. Toujours utilisée par %n objet(s).</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -851,6 +871,10 @@ Voulez-vous quand même la sauvegarder ?</translation>
<source>Unable to calculate master key</source>
<translation>Impossible de calculer la clé maître</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1302,6 +1326,14 @@ Ceci est une migration à sens unique. Vous ne serez plus en mesure d&apos;ouvri
<source>Remember last key files</source>
<translation>Se rappeler les derniers fichiers-clés ouverts</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -373,6 +373,10 @@ Do you want to save it anyway?</source>
<translation>Basis data yang Anda coba buka terkunci oleh KeePassX lain yang sedang berjalan.
Apakah Anda tetap ingin menyimpannya?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -424,6 +428,14 @@ Apakah Anda tetap ingin menyimpannya?</translation>
<source>Unable to calculate master key</source>
<translation>Tidak bisa mengkalkulasi kunci utama</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -738,6 +750,14 @@ Apakah Anda tetap ingin menyimpannya?</translation>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Tidak bisa menghapus ikon. Masih digunakan oleh %n item.</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -851,6 +871,10 @@ Apakah Anda tetap ingin menyimpannya?</translation>
<source>Unable to calculate master key</source>
<translation>Tidak bisa mengkalkulasi kunci utama</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1302,6 +1326,14 @@ Ini adalah migrasi satu arah. Anda tidak akan bisa lagi membuka basis data yang
<source>Remember last key files</source>
<translation>Ingat berkas kunci terakhir</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -373,6 +373,10 @@ Do you want to save it anyway?</source>
<translation>Il database che stai tentando di salvare è bloccato da un&apos;altra istanza di KeePassX.
Vuoi salvare comunque?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -424,6 +428,14 @@ Vuoi salvare comunque?</translation>
<source>Unable to calculate master key</source>
<translation>Impossibile calcolare la chiave principale</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -738,6 +750,14 @@ Vuoi salvare comunque?</translation>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Impossibile eliminare l&apos;icona in quanto è in uso da %n voce.</numerusform><numerusform>Impossibile eliminare l&apos;icona in quanto è in uso da %n voci.</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -851,6 +871,10 @@ Vuoi salvare comunque?</translation>
<source>Unable to calculate master key</source>
<translation>Impossibile calcolare la chiave principale</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1302,6 +1326,14 @@ Questa è una migrazione in una sola direzione. Non potrai aprire il database im
<source>Remember last key files</source>
<translation>Ricorda gli ultimi file di chiavi</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -373,6 +373,10 @@ Do you want to save it anyway?</source>
<translation>保存しようとしたデータベースは別のKeePassXプログラムからロックされています。
とにかく保存しますか?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -424,6 +428,14 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>マスターキーを計算できませんでした</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -738,6 +750,14 @@ Do you want to save it anyway?</source>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>%n個のアイテムから使われているので、アイコンを削除できません。</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -851,6 +871,10 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>マスターキーを計算できませんでした</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1302,6 +1326,14 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Remember last key files</source>
<translation></translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -371,6 +371,10 @@ Do you want to save it anyway?</source>
<translation>저장하려고 하는 데이터베이스를 다른 KeePassX 인스턴스에서 잠갔습니다.
그래도 저장하시겠습니까?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -422,6 +426,14 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>마스터 키를 계산할 수 없음</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -735,6 +747,14 @@ Do you want to save it anyway?</source>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>아이콘을 삭제할 수 없습니다. 항목 %n개에서 사용 중입니다.</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -848,6 +868,10 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>마스터 키를 계산할 수 없음</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1299,6 +1323,14 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Remember last key files</source>
<translation> </translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

File diff suppressed because it is too large Load Diff

View File

@@ -373,6 +373,10 @@ Do you want to save it anyway?</source>
<translation>De database die u op probeert te slaan is vergrendeld door een andere instantie van KeePassX.
Wilt u toch doorgaan met opslaan?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -424,6 +428,14 @@ Wilt u toch doorgaan met opslaan?</translation>
<source>Unable to calculate master key</source>
<translation>Niet mogelijk om hoofdsleutel te berekenen</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -738,6 +750,14 @@ Wilt u toch doorgaan met opslaan?</translation>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Kan icoon niet verwijderen. Het wordt nog gebruikt door %n element.</numerusform><numerusform>Kan icoon niet verwijderen. Het wordt nog gebruikt door %n elementen.</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -851,6 +871,10 @@ Wilt u toch doorgaan met opslaan?</translation>
<source>Unable to calculate master key</source>
<translation>Niet mogelijk om hoofdsleutel te berekenen</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1302,6 +1326,14 @@ Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen
<source>Remember last key files</source>
<translation>Onthoud laatste sleutelbestanden</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -373,6 +373,10 @@ Do you want to save it anyway?</source>
<translation>Baza, którą próbujesz zapisać jest zablokowana przez inną instancję KeePassX.
Czy chcesz zapisać mimo to?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -424,6 +428,14 @@ Czy chcesz zapisać mimo to?</translation>
<source>Unable to calculate master key</source>
<translation>Nie mogę wyliczyć głównego klucza</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -738,6 +750,14 @@ Czy chcesz zapisać mimo to?</translation>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Nie mogę usunąć ikony. Nadal używana przez %n wpis.</numerusform><numerusform>Nie mogę usunąć ikony. Nadal używana przez %n wpisów.</numerusform><numerusform>Nie mogę usunąć ikony. Nadal używana przez %n wpisów.</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -851,6 +871,10 @@ Czy chcesz zapisać mimo to?</translation>
<source>Unable to calculate master key</source>
<translation>Nie mogę wyliczyć głównego klucza</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1302,6 +1326,14 @@ Nie będzie można skonwertować nowej bazy do starego programu KeePassX 0.4.</t
<source>Remember last key files</source>
<translation>Zapamiętaj ostatni plik klucza</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

File diff suppressed because it is too large Load Diff

View File

@@ -371,6 +371,10 @@ Fechar e Ignorar alterações ?</translation>
Do you want to save it anyway?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -422,6 +426,14 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>Impossível calcular ficheiro chave</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -735,6 +747,14 @@ Do you want to save it anyway?</source>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Impossível apagar icon. Ainda em uso por %n item(s).</numerusform><numerusform>Impossível apagar icon. Ainda em uso por %n item(s).</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -848,6 +868,10 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>Impossível calcular chave mestra:</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1296,6 +1320,14 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Remember last key files</source>
<translation>Lembrar os últimos ficheiro chave</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

File diff suppressed because it is too large Load Diff

View File

@@ -371,6 +371,10 @@ Zavrži spremembe in zapri?</translation>
Do you want to save it anyway?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -422,6 +426,14 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>Izračun glavnega ključa ni uspel</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -735,6 +747,14 @@ Do you want to save it anyway?</source>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Ikone ni mogoče izbrisati. Uporablja jo še %n vnos.</numerusform><numerusform>Ikone ni mogoče izbrisati. Uporabljata jo še %n vnosa.</numerusform><numerusform>Ikone ni mogoče izbrisati. Uporabljajo jo še %n vnosi.</numerusform><numerusform>Ikone ni mogoče izbrisati. Uporablja jo še %n vnosov.</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -848,6 +868,10 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>Izračun glavnega ključa ni uspel</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1296,6 +1320,14 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Remember last key files</source>
<translation>Zapomni si zadnje datoteke s ključi</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -373,6 +373,10 @@ Do you want to save it anyway?</source>
<translation>Databasen du försöker spara som är låst av en annan instans av KeePassX.
Vill du spara endå?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -424,6 +428,14 @@ Vill du spara endå?</translation>
<source>Unable to calculate master key</source>
<translation>Kunde inte räkna nu master-nyckeln</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -738,6 +750,14 @@ Vill du spara endå?</translation>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Kan inte ta bort ikonen. Den används fortfarande av %n post</numerusform><numerusform>Kan inte ta bort ikonen. Den används fortfarande av %n poster</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -851,6 +871,10 @@ Vill du spara endå?</translation>
<source>Unable to calculate master key</source>
<translation>Kunde inte räkna nu master-nyckeln</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1302,6 +1326,14 @@ Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas
<source>Remember last key files</source>
<translation>Komihåg senaste nyckel-filen</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -371,6 +371,10 @@ Do you want to save it anyway?</source>
<translation>Це сховище заблоковано іншою запущеною копією KeePassX.
Ви впевнені, що хочете зберегти його?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -422,6 +426,14 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>Неможливо вирахувати майстер-пароль</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -736,6 +748,14 @@ Do you want to save it anyway?</source>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>Ви дійсно хочете перемістити %n запис в смітник?</numerusform><numerusform>Ви дійсно хочете перемістити %n записи в смітник?</numerusform><numerusform>Ви дійсно хочете перемістити %n записів в смітник?</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -849,6 +869,10 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>Неможливо вирахувати майстер-пароль</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1300,6 +1324,14 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Remember last key files</source>
<translation>Памятати останні файл-ключі</translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -373,6 +373,10 @@ Do you want to save it anyway?</source>
<translation>你要保存的数据库已被另一个KeePassX锁住。
你仍然要保存吗?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -424,6 +428,14 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>无法计算主密码</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -738,6 +750,14 @@ Do you want to save it anyway?</source>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>不能删除图标。仍在被 %n 个项目使用</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -851,6 +871,10 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>无法计算主密码</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1301,6 +1325,14 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Remember last key files</source>
<translation></translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -372,6 +372,10 @@ Do you want to save it anyway?</source>
<translation>你嘗試要打開的資料庫已經被另一個正在執行的 KeePassX 鎖定
還要儲存嗎?</translation>
</message>
<message>
<source>Unable to open the database.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>DatabaseWidget</name>
@@ -423,6 +427,14 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>無法計算主金鑰</translation>
</message>
<message>
<source>Move entry to recycle bin?</source>
<translation type="unfinished"/>
</message>
<message>
<source>Do you really want to move entry &quot;%1&quot; to the recycle bin?</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditEntryWidget</name>
@@ -737,6 +749,14 @@ Do you want to save it anyway?</source>
<source>Can&apos;t delete icon. Still used by %n item(s).</source>
<translation><numerusform>不能刪除圖示。仍在被 %n 個使用</numerusform></translation>
</message>
<message>
<source>Error</source>
<translation type="unfinished"/>
</message>
<message>
<source>Can&apos;t read icon:</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>EditWidgetProperties</name>
@@ -850,6 +870,10 @@ Do you want to save it anyway?</source>
<source>Unable to calculate master key</source>
<translation>無法計算主金鑰</translation>
</message>
<message>
<source>Wrong key or database file is corrupt.</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>KeePass2Reader</name>
@@ -1302,6 +1326,14 @@ This is a one-way migration. You won&apos;t be able to open the imported databas
<source>Remember last key files</source>
<translation></translation>
</message>
<message>
<source>Hide window to system tray instead of App Exit</source>
<translation type="unfinished"/>
</message>
<message>
<source>Hide window to system tray on App start</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>SettingsWidgetSecurity</name>

View File

@@ -5,8 +5,13 @@ BASEDIR=$(dirname $0)
cd $BASEDIR/../..
echo Updating source file
lupdate -no-ui-lines -disable-heuristic similartext -locations none -no-obsolete src -ts share/translations/keepassx_en.ts
lupdate -no-ui-lines -disable-heuristic similartext -locations none -pluralonly src -ts share/translations/keepassx_en_plurals.ts
lupdate-qt5 -no-ui-lines -disable-heuristic similartext -locations none -no-obsolete src -ts share/translations/keepassx_en.ts
lupdate-qt5 -no-ui-lines -disable-heuristic similartext -locations none -pluralonly src -ts share/translations/keepassx_en_plurals.ts
echo
echo Pushing English translation file to Transifex
tx push -s
echo
echo Pulling translations from Transifex
tx pull -a --minimum-perc=80

View File

@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "keepassx.ico"
IDI_ICON1 ICON DISCARDABLE "keepassxc.ico"

Some files were not shown because too many files have changed in this diff Show More