From 9970183fb4bedf6d3b15e531e1d25263ae7c0a8b Mon Sep 17 00:00:00 2001 From: ransome1 Date: Fri, 27 Oct 2023 00:05:48 +0200 Subject: [PATCH] Updated Flatpak Appdata file, added script to bump version number --- .erb/scripts/update-version-numbers.js | 26 + .gitignore | 4 +- flatpak/com.github.ransome1.sleek.appdata.xml | 36 +- flatpak/com.github.ransome1.sleek.desktop | 2 +- package.json | 4 - release/app/package.json | 5 +- release/app/yarn.lock | 105 + snap/gui/icon.png | Bin 14197 -> 0 bytes snap/snapcraft.yaml | 2 +- yarn.lock | 10392 ++++++++++++++++ 10 files changed, 10546 insertions(+), 30 deletions(-) create mode 100644 .erb/scripts/update-version-numbers.js create mode 100644 release/app/yarn.lock delete mode 100644 snap/gui/icon.png create mode 100644 yarn.lock diff --git a/.erb/scripts/update-version-numbers.js b/.erb/scripts/update-version-numbers.js new file mode 100644 index 00000000..e8b79d9f --- /dev/null +++ b/.erb/scripts/update-version-numbers.js @@ -0,0 +1,26 @@ +const fs = require('fs'); +const packageJson = require('../../release/app/package.json'); +const { format } = require('date-fns'); // You may need to install this library using `yarn add date-fns` if you haven't already. + +// Update the .flatpak/com.github.ransome1.sleek.desktop file +let desktopContent = fs.readFileSync('../../flatpak/com.github.ransome1.sleek.desktop', 'utf8'); +desktopContent = desktopContent.replace(/Version=.*\n/, `Version=${packageJson.version}\n`); +fs.writeFileSync('../../flatpak/com.github.ransome1.sleek.desktop', desktopContent); + +console.log('Updated com.github.ransome1.sleek.desktop with version', packageJson.version); + +// Update the com.github.ransome1.sleek.appdata.xml file +let appdataContent = fs.readFileSync('../../flatpak/com.github.ransome1.sleek.appdata.xml', 'utf8'); +const today = new Date(); +const formattedDate = format(today, 'yyyy-MM-dd'); +appdataContent = appdataContent.replace(//, ``); +fs.writeFileSync('../../flatpak/com.github.ransome1.sleek.appdata.xml', appdataContent); + +console.log('Updated com.github.ransome1.sleek.appdata.xml with version', packageJson.version, 'and date', formattedDate); + +// Update the snapcraft.yaml file +let snapcraftContent = fs.readFileSync('../../snap/snapcraft.yaml', 'utf8'); +snapcraftContent = snapcraftContent.replace(/version: ".*?"/, `version: "${packageJson.version}"`); +fs.writeFileSync('../../snap/snapcraft.yaml', snapcraftContent); + +console.log('Updated snapcraft.yaml with version', packageJson.version); \ No newline at end of file diff --git a/.gitignore b/.gitignore index b09aea2a..4f2db524 100755 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,4 @@ npm-debug.log.* *.dtmp *.drawio *.snap -*FilterLang.js -*.lock -package-lock.json \ No newline at end of file +*FilterLang.js \ No newline at end of file diff --git a/flatpak/com.github.ransome1.sleek.appdata.xml b/flatpak/com.github.ransome1.sleek.appdata.xml index a5626e47..9e1ec569 100755 --- a/flatpak/com.github.ransome1.sleek.appdata.xml +++ b/flatpak/com.github.ransome1.sleek.appdata.xml @@ -7,7 +7,7 @@ MIT MIT Robin Ahle - + @@ -24,29 +24,27 @@

sleek is an open-source (FOSS) todo manager based on the todo.txt syntax. Stripped down to only the most necessary features, and with a clean and simple interface, sleek aims to help you focus on getting things done.

-

All classic todo.txt attributes are supported and enhanced by additional features. Creating todos is straightforward, and tag-based filtering in tandem with highly customisable grouping and smart full-text search allow for rapid information retrieval. Completed todos can be hidden or archived into separate done.txt files. Easy integration with other todo.txt apps is facilitated by continuously scanning todo.txt files for changes.

-

sleek is available for Windows, MacOS and Linux, and in several languages. For a detailed list of features, see below.

+

All classic todo.txt attributes are supported and enhanced by additional features. Creating todos is straightforward, and tag-based filtering in tandem with highly customisable grouping and smart full-text search allows for rapid information retrieval. Completed todos can be hidden or archived into separate done.txt files. Easy integration with other todo.txt apps is facilitated by continuously scanning todo.txt files for changes.

+

sleek is available for Windows, macOS and Linux, and in several languages.

Features

  • Uses existing todo.txt files or creates new ones
  • -
  • Add and search for todos by priorities, contexts, projects, due dates, creation dates, recurrences (repeating todos), threshold dates
  • -
  • Sort and group todos by priority, due and creation date, context and project or as they occur in the text file
  • -
  • Filter todos by context, project and priority
  • -
  • Find todos using full-text search compatible with todo.txt syntax
  • -
  • Inline autocomplete available
  • -
  • Dates and priorities can be selected by built-in picker elements
  • -
  • Navigable via keyboard shortcuts
  • -
  • Tabindex available
  • -
  • Options for due date reminders and notification badges
  • -
  • Easily toggle between dark and light mode
  • -
  • Compact view and zoom available
  • -
  • Completed todos can be shown, hidden and archived
  • -
  • Multi line todos can be created
  • -
  • Filters are sorted alphanummerically and can be renamed or deleted
  • -
  • Hyperlinks detected automatically
  • File watcher scans todo.txt files for changes
  • Simultaneously manage multiple todo.txt files
  • -
  • Language options: English, German, Italian, Spanish, French, Simplified Chinese, Brazilian Portugese, Japanese, Turkish, Hungarian, Czech, Polish, Russian
  • +
  • Add and search for todos by priority, contexts, projects, due date, creation date, completion date, recurrence (repeating todo), threshold dates (deferred todos), pomodoro intervals
  • +
  • Filter, sort, and group todos by all available attributes
  • +
  • Invert the sorting of each group
  • +
  • Find todos using a sophisticated advanced search based on the todo.txt syntax
  • +
  • Inline autocomplete available for adding contexts and projects
  • +
  • Multi-line and bulk todo creation
  • +
  • Due dates, threshold dates, recurrences, pomodoros and priorities can be selected by built-in picker elements
  • +
  • Speaking dates can be entered for due and threshold dates
  • +
  • Marking a recurring todo as complete, will create a new todo
  • +
  • Navigable via keyboard shortcuts
  • +
  • Due date notifications
  • +
  • Toggle between dark and light mode
  • +
  • Completed todos can be shown, hidden, and archived
  • +
  • Language options: English, German, Italian, Spanish, French, Simplified Chinese, Brazilian Portugese, Japanese, Turkish, Hungarian, Czech, Polish, Russian, Korean, Hindi
diff --git a/flatpak/com.github.ransome1.sleek.desktop b/flatpak/com.github.ransome1.sleek.desktop index 1c6e63b5..8323b059 100755 --- a/flatpak/com.github.ransome1.sleek.desktop +++ b/flatpak/com.github.ransome1.sleek.desktop @@ -6,4 +6,4 @@ Type=Application Icon=com.github.ransome1.sleek Categories=Office Terminal=false -Comment=Todo manager based on the todo.txt syntax for Linux, free and open-source (FOSS) +Comment=todo.txt manager for Linux, free and open-source (FOSS) \ No newline at end of file diff --git a/package.json b/package.json index eb313d7f..aed80edf 100644 --- a/package.json +++ b/package.json @@ -76,10 +76,7 @@ "@mui/system": "^5.14.15", "@mui/x-date-pickers": "^6.10.0", "dayjs": "^1.11.9", - "electron-debug": "^3.2.0", - "electron-log": "^4.4.8", "electron-store": "^8.1.0", - "electron-updater": "^5.3.0", "i18next": "^23.5.1", "jstodotxt": "^1.0.0-alpha.0", "material-ui-popup-state": "^5.0.9", @@ -90,7 +87,6 @@ "react-beautiful-dnd": "^13.1.1", "react-dom": "^18.2.0", "react-i18next": "^13.2.2", - "react-router-dom": "^6.11.2", "sugar": "^2.0.6" }, "devDependencies": { diff --git a/release/app/package.json b/release/app/package.json index df5630f5..6749a8b3 100644 --- a/release/app/package.json +++ b/release/app/package.json @@ -24,8 +24,9 @@ "main": "./dist/main/main.js", "scripts": { "rebuild": "node -r ts-node/register ../../.erb/scripts/electron-rebuild.js", - "postinstall": "npm run rebuild && npm run link-modules", - "link-modules": "node -r ts-node/register ../../.erb/scripts/link-modules.ts" + "postinstall": "yarn run rebuild && yarn run link-modules && yarn run update-version-numbers", + "link-modules": "node -r ts-node/register ../../.erb/scripts/link-modules.ts", + "update-version-numbers": "node ../../.erb/scripts/update-version-numbers.js" }, "dependencies": { "chokidar": "^3.5.3" diff --git a/release/app/yarn.lock b/release/app/yarn.lock new file mode 100644 index 00000000..428ab690 --- /dev/null +++ b/release/app/yarn.lock @@ -0,0 +1,105 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" diff --git a/snap/gui/icon.png b/snap/gui/icon.png deleted file mode 100644 index fccb2dd516d734cdcc1d8b3454047f6cf845d5d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14197 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