mirror of
https://github.com/sissbruecker/linkding.git
synced 2026-03-07 02:13:12 +08:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3086926146 | ||
|
|
b53bd9f112 | ||
|
|
75c0429973 | ||
|
|
0829d00e5f | ||
|
|
88fcb42292 |
167
CHANGELOG.md
167
CHANGELOG.md
@@ -1,135 +1,174 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.11.0 (26/05/2022)
|
||||||
|
|
||||||
|
### What's Changed
|
||||||
|
* Add background tasks to admin by @sissbruecker in https://github.com/sissbruecker/linkding/pull/264
|
||||||
|
* Improve about section by @sissbruecker in https://github.com/sissbruecker/linkding/pull/265
|
||||||
|
* Allow creating archived bookmark through REST API by @kencx in https://github.com/sissbruecker/linkding/pull/268
|
||||||
|
* Add PATCH support to bookmarks endpoint by @sissbruecker in https://github.com/sissbruecker/linkding/pull/269
|
||||||
|
* Add community reference to linkding-cli by @bachya in https://github.com/sissbruecker/linkding/pull/270
|
||||||
|
|
||||||
|
### New Contributors
|
||||||
|
* @kencx made their first contribution in https://github.com/sissbruecker/linkding/pull/268
|
||||||
|
|
||||||
|
**Full Changelog**: https://github.com/sissbruecker/linkding/compare/v1.10.1...v1.11.0
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## v1.10.1 (21/05/2022)
|
## v1.10.1 (21/05/2022)
|
||||||
### What's Changed
|
|
||||||
* Fake request headers to reduce bot detection by @sissbruecker in https://github.com/sissbruecker/linkding/pull/263
|
|
||||||
|
|
||||||
|
|
||||||
|
### What's Changed
|
||||||
|
* Fake request headers to reduce bot detection by @sissbruecker in https://github.com/sissbruecker/linkding/pull/263
|
||||||
|
|
||||||
|
|
||||||
**Full Changelog**: https://github.com/sissbruecker/linkding/compare/v1.10.0...v1.10.1
|
**Full Changelog**: https://github.com/sissbruecker/linkding/compare/v1.10.0...v1.10.1
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.10.0 (21/05/2022)
|
## v1.10.0 (21/05/2022)
|
||||||
### What's Changed
|
|
||||||
* Add to managed hosting options by @m3nu in https://github.com/sissbruecker/linkding/pull/253
|
|
||||||
* Add community reference to aiolinkding by @bachya in https://github.com/sissbruecker/linkding/pull/259
|
|
||||||
* Improve import performance by @sissbruecker in https://github.com/sissbruecker/linkding/pull/261
|
|
||||||
* Update how-to.md to fix unclear/paraphrased Safari action in IOS Shortcuts by @feoh in https://github.com/sissbruecker/linkding/pull/260
|
|
||||||
* Allow searching for untagged bookmarks by @sissbruecker in https://github.com/sissbruecker/linkding/pull/226
|
|
||||||
|
|
||||||
### New Contributors
|
|
||||||
* @m3nu made their first contribution in https://github.com/sissbruecker/linkding/pull/253
|
|
||||||
* @bachya made their first contribution in https://github.com/sissbruecker/linkding/pull/259
|
|
||||||
* @feoh made their first contribution in https://github.com/sissbruecker/linkding/pull/260
|
|
||||||
|
|
||||||
|
### What's Changed
|
||||||
|
* Add to managed hosting options by @m3nu in https://github.com/sissbruecker/linkding/pull/253
|
||||||
|
* Add community reference to aiolinkding by @bachya in https://github.com/sissbruecker/linkding/pull/259
|
||||||
|
* Improve import performance by @sissbruecker in https://github.com/sissbruecker/linkding/pull/261
|
||||||
|
* Update how-to.md to fix unclear/paraphrased Safari action in IOS Shortcuts by @feoh in https://github.com/sissbruecker/linkding/pull/260
|
||||||
|
* Allow searching for untagged bookmarks by @sissbruecker in https://github.com/sissbruecker/linkding/pull/226
|
||||||
|
|
||||||
|
### New Contributors
|
||||||
|
* @m3nu made their first contribution in https://github.com/sissbruecker/linkding/pull/253
|
||||||
|
* @bachya made their first contribution in https://github.com/sissbruecker/linkding/pull/259
|
||||||
|
* @feoh made their first contribution in https://github.com/sissbruecker/linkding/pull/260
|
||||||
|
|
||||||
**Full Changelog**: https://github.com/sissbruecker/linkding/compare/v1.9.0...v1.10.0
|
**Full Changelog**: https://github.com/sissbruecker/linkding/compare/v1.9.0...v1.10.0
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.9.0 (14/05/2022)
|
## v1.9.0 (14/05/2022)
|
||||||
### What's Changed
|
|
||||||
* Scroll menu items into view when using keyboard by @sissbruecker in https://github.com/sissbruecker/linkding/pull/248
|
|
||||||
* Add whitespace after auto-completed tag by @sissbruecker in https://github.com/sissbruecker/linkding/pull/249
|
|
||||||
* Bump django from 3.2.12 to 3.2.13 by @dependabot in https://github.com/sissbruecker/linkding/pull/244
|
|
||||||
* Add community helm chart reference to readme by @pascaliske in https://github.com/sissbruecker/linkding/pull/242
|
|
||||||
* Feature: Shortcut key for new bookmark by @rithask in https://github.com/sissbruecker/linkding/pull/241
|
|
||||||
* Clarify archive.org feature by @clach04 in https://github.com/sissbruecker/linkding/pull/229
|
|
||||||
* Make Internet Archive integration opt-in by @sissbruecker in https://github.com/sissbruecker/linkding/pull/250
|
|
||||||
|
|
||||||
### New Contributors
|
|
||||||
* @pascaliske made their first contribution in https://github.com/sissbruecker/linkding/pull/242
|
|
||||||
* @rithask made their first contribution in https://github.com/sissbruecker/linkding/pull/241
|
|
||||||
* @clach04 made their first contribution in https://github.com/sissbruecker/linkding/pull/229
|
|
||||||
|
|
||||||
|
### What's Changed
|
||||||
|
* Scroll menu items into view when using keyboard by @sissbruecker in https://github.com/sissbruecker/linkding/pull/248
|
||||||
|
* Add whitespace after auto-completed tag by @sissbruecker in https://github.com/sissbruecker/linkding/pull/249
|
||||||
|
* Bump django from 3.2.12 to 3.2.13 by @dependabot in https://github.com/sissbruecker/linkding/pull/244
|
||||||
|
* Add community helm chart reference to readme by @pascaliske in https://github.com/sissbruecker/linkding/pull/242
|
||||||
|
* Feature: Shortcut key for new bookmark by @rithask in https://github.com/sissbruecker/linkding/pull/241
|
||||||
|
* Clarify archive.org feature by @clach04 in https://github.com/sissbruecker/linkding/pull/229
|
||||||
|
* Make Internet Archive integration opt-in by @sissbruecker in https://github.com/sissbruecker/linkding/pull/250
|
||||||
|
|
||||||
|
### New Contributors
|
||||||
|
* @pascaliske made their first contribution in https://github.com/sissbruecker/linkding/pull/242
|
||||||
|
* @rithask made their first contribution in https://github.com/sissbruecker/linkding/pull/241
|
||||||
|
* @clach04 made their first contribution in https://github.com/sissbruecker/linkding/pull/229
|
||||||
|
|
||||||
**Full Changelog**: https://github.com/sissbruecker/linkding/compare/v1.8.8...v1.9.0
|
**Full Changelog**: https://github.com/sissbruecker/linkding/compare/v1.8.8...v1.9.0
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.8.8 (27/03/2022)
|
## v1.8.8 (27/03/2022)
|
||||||
- [**bug**] Prevent bookmark actions through get requests
|
|
||||||
|
- [**bug**] Prevent bookmark actions through get requests
|
||||||
- [**bug**] Prevent external redirects
|
- [**bug**] Prevent external redirects
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.8.7 (26/03/2022)
|
## v1.8.7 (26/03/2022)
|
||||||
- [**bug**] Increase request buffer size [#28](https://github.com/sissbruecker/linkding/issues/28)
|
|
||||||
- [**enhancement**] Allow specifying port through LINKDING_PORT environment variable [#156](https://github.com/sissbruecker/linkding/pull/156)
|
- [**bug**] Increase request buffer size [#28](https://github.com/sissbruecker/linkding/issues/28)
|
||||||
|
- [**enhancement**] Allow specifying port through LINKDING_PORT environment variable [#156](https://github.com/sissbruecker/linkding/pull/156)
|
||||||
- [**chore**] Bump NPM packages [#224](https://github.com/sissbruecker/linkding/pull/224)
|
- [**chore**] Bump NPM packages [#224](https://github.com/sissbruecker/linkding/pull/224)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.8.6 (25/03/2022)
|
## v1.8.6 (25/03/2022)
|
||||||
- [bug] fix bookmark access restrictions
|
|
||||||
- [bug] prevent external redirects
|
- [bug] fix bookmark access restrictions
|
||||||
|
- [bug] prevent external redirects
|
||||||
- [chore] bump dependencies
|
- [chore] bump dependencies
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.8.5 (13/12/2021)
|
## v1.8.5 (12/12/2021)
|
||||||
- [**bug**] Ensure tag names do not contain spaces [#182](https://github.com/sissbruecker/linkding/issues/182)
|
|
||||||
- [**bug**] Consider not copying whole GIT repository to Docker image [#174](https://github.com/sissbruecker/linkding/issues/174)
|
- [**bug**] Ensure tag names do not contain spaces [#182](https://github.com/sissbruecker/linkding/issues/182)
|
||||||
|
- [**bug**] Consider not copying whole GIT repository to Docker image [#174](https://github.com/sissbruecker/linkding/issues/174)
|
||||||
- [**enhancement**] Make bookmarks count column in admin sortable [#183](https://github.com/sissbruecker/linkding/pull/183)
|
- [**enhancement**] Make bookmarks count column in admin sortable [#183](https://github.com/sissbruecker/linkding/pull/183)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.8.4 (16/10/2021)
|
## v1.8.4 (16/10/2021)
|
||||||
|
|
||||||
- [**enhancement**] Allow non-admin users to change their password [#166](https://github.com/sissbruecker/linkding/issues/166)
|
- [**enhancement**] Allow non-admin users to change their password [#166](https://github.com/sissbruecker/linkding/issues/166)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.8.3 (03/10/2021)
|
## v1.8.3 (03/10/2021)
|
||||||
|
|
||||||
- [**enhancement**] Enhancement: let user configure to open links in same tab instead on a new window/tab [#27](https://github.com/sissbruecker/linkding/issues/27)
|
- [**enhancement**] Enhancement: let user configure to open links in same tab instead on a new window/tab [#27](https://github.com/sissbruecker/linkding/issues/27)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.8.2 (02/10/2021)
|
## v1.8.2 (02/10/2021)
|
||||||
|
|
||||||
- [**bug**] Fix jumping search box [#163](https://github.com/sissbruecker/linkding/pull/163)
|
- [**bug**] Fix jumping search box [#163](https://github.com/sissbruecker/linkding/pull/163)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.8.1 (01/10/2021)
|
## v1.8.1 (01/10/2021)
|
||||||
- [**enhancement**] Add global shortcut for search [#161](https://github.com/sissbruecker/linkding/pull/161)
|
|
||||||
|
- [**enhancement**] Add global shortcut for search [#161](https://github.com/sissbruecker/linkding/pull/161)
|
||||||
- allows to press `s` to focus the search input
|
- allows to press `s` to focus the search input
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.8.0 (04/09/2021)
|
## v1.8.0 (04/09/2021)
|
||||||
- [**enhancement**] Wayback Machine Integration [#59](https://github.com/sissbruecker/linkding/issues/59)
|
|
||||||
- Automatically creates snapshots of bookmarked websites on [web archive](https://archive.org/web/)
|
- [**enhancement**] Wayback Machine Integration [#59](https://github.com/sissbruecker/linkding/issues/59)
|
||||||
|
- Automatically creates snapshots of bookmarked websites on [web archive](https://archive.org/web/)
|
||||||
- This is one of the largest changes yet and adds a task processor that runs as a separate process in the background. If you run into issues with this feature, it can be disabled using the [LD_DISABLE_BACKGROUND_TASKS](https://github.com/sissbruecker/linkding/blob/master/docs/Options.md#ld_disable_background_tasks) option
|
- This is one of the largest changes yet and adds a task processor that runs as a separate process in the background. If you run into issues with this feature, it can be disabled using the [LD_DISABLE_BACKGROUND_TASKS](https://github.com/sissbruecker/linkding/blob/master/docs/Options.md#ld_disable_background_tasks) option
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.7.2 (26/08/2021)
|
## v1.7.2 (26/08/2021)
|
||||||
|
|
||||||
- [**enhancement**] Add support for nanosecond resolution timestamps for bookmark import (e.g. Google Bookmarks) [#146](https://github.com/sissbruecker/linkding/issues/146)
|
- [**enhancement**] Add support for nanosecond resolution timestamps for bookmark import (e.g. Google Bookmarks) [#146](https://github.com/sissbruecker/linkding/issues/146)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.7.1 (25/08/2021)
|
## v1.7.1 (25/08/2021)
|
||||||
- [**bug**] umlaut/non-ascii characters broken when using bookmarklet (firefox) [#148](https://github.com/sissbruecker/linkding/issues/148)
|
|
||||||
- [**bug**] Bookmark import accepts empty URL values [#124](https://github.com/sissbruecker/linkding/issues/124)
|
- [**bug**] umlaut/non-ascii characters broken when using bookmarklet (firefox) [#148](https://github.com/sissbruecker/linkding/issues/148)
|
||||||
|
- [**bug**] Bookmark import accepts empty URL values [#124](https://github.com/sissbruecker/linkding/issues/124)
|
||||||
- [**enhancement**] Show the version in the settings [#104](https://github.com/sissbruecker/linkding/issues/104)
|
- [**enhancement**] Show the version in the settings [#104](https://github.com/sissbruecker/linkding/issues/104)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.7.0 (17/08/2021)
|
## v1.7.0 (17/08/2021)
|
||||||
- Upgrade to Django 3
|
|
||||||
|
- Upgrade to Django 3
|
||||||
- Bump other dependencies
|
- Bump other dependencies
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.6.5 (15/08/2021)
|
## v1.6.5 (15/08/2021)
|
||||||
|
|
||||||
- [**enhancement**] query with multiple hashtags very slow [#112](https://github.com/sissbruecker/linkding/issues/112)
|
- [**enhancement**] query with multiple hashtags very slow [#112](https://github.com/sissbruecker/linkding/issues/112)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.6.4 (13/05/2021)
|
## v1.6.4 (13/05/2021)
|
||||||
|
|
||||||
- Update dependencies for security fixes
|
- Update dependencies for security fixes
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.6.3 (07/04/2021)
|
## v1.6.3 (06/04/2021)
|
||||||
|
|
||||||
- [**bug**] relative names use the wrong "today" after day change [#107](https://github.com/sissbruecker/linkding/issues/107)
|
- [**bug**] relative names use the wrong "today" after day change [#107](https://github.com/sissbruecker/linkding/issues/107)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.6.2 (04/04/2021)
|
## v1.6.2 (04/04/2021)
|
||||||
|
|
||||||
- [**enhancement**] Expose `date_added` in UI [#85](https://github.com/sissbruecker/linkding/issues/85)
|
- [**enhancement**] Expose `date_added` in UI [#85](https://github.com/sissbruecker/linkding/issues/85)
|
||||||
- [**closed**] Archived bookmarks - no result when searching for a word which is used only as tag [#83](https://github.com/sissbruecker/linkding/issues/83)
|
- [**closed**] Archived bookmarks - no result when searching for a word which is used only as tag [#83](https://github.com/sissbruecker/linkding/issues/83)
|
||||||
- [**closed**] Add archive/unarchive button to edit bookmark page [#82](https://github.com/sissbruecker/linkding/issues/82)
|
- [**closed**] Add archive/unarchive button to edit bookmark page [#82](https://github.com/sissbruecker/linkding/issues/82)
|
||||||
@@ -138,46 +177,57 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
## v1.6.1 (31/03/2021)
|
## v1.6.1 (31/03/2021)
|
||||||
|
|
||||||
- Expose date_added in UI [#85](https://github.com/sissbruecker/linkding/issues/85)
|
- Expose date_added in UI [#85](https://github.com/sissbruecker/linkding/issues/85)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.6.0 (29/03/2021)
|
## v1.6.0 (28/03/2021)
|
||||||
|
|
||||||
- Bulk edit mode [#101](https://github.com/sissbruecker/linkding/pull/101)
|
- Bulk edit mode [#101](https://github.com/sissbruecker/linkding/pull/101)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.5.0 (28/03/2021)
|
## v1.5.0 (28/03/2021)
|
||||||
|
|
||||||
- [**closed**] Add a dark mode [#49](https://github.com/sissbruecker/linkding/issues/49)
|
- [**closed**] Add a dark mode [#49](https://github.com/sissbruecker/linkding/issues/49)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.4.1 (20/03/2021)
|
## v1.4.1 (20/03/2021)
|
||||||
- Security patches
|
|
||||||
|
- Security patches
|
||||||
- Documentation improvements
|
- Documentation improvements
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.4.0 (24/02/2021)
|
## v1.4.0 (24/02/2021)
|
||||||
|
|
||||||
- [**enhancement**] Improve admin utilization [#76](https://github.com/sissbruecker/linkding/issues/76)
|
- [**enhancement**] Improve admin utilization [#76](https://github.com/sissbruecker/linkding/issues/76)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.3.3 (18/02/2021)
|
## v1.3.3 (18/02/2021)
|
||||||
|
|
||||||
- [**closed**] Missing "description" request body parameter in API causes 500 [#78](https://github.com/sissbruecker/linkding/issues/78)
|
- [**closed**] Missing "description" request body parameter in API causes 500 [#78](https://github.com/sissbruecker/linkding/issues/78)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.3.2 (18/02/2021)
|
## v1.3.2 (18/02/2021)
|
||||||
|
|
||||||
- [**closed**] /archive and /unarchive API routes return 404 [#77](https://github.com/sissbruecker/linkding/issues/77)
|
- [**closed**] /archive and /unarchive API routes return 404 [#77](https://github.com/sissbruecker/linkding/issues/77)
|
||||||
- [**closed**] API - /api/check_url?url= with token authetification [#55](https://github.com/sissbruecker/linkding/issues/55)
|
- [**closed**] API - /api/check_url?url= with token authetification [#55](https://github.com/sissbruecker/linkding/issues/55)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.3.1 (15/02/2021)
|
## v1.3.1 (15/02/2021)
|
||||||
|
|
||||||
[enhancement] Enhance delete links with inline confirmation
|
[enhancement] Enhance delete links with inline confirmation
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.3.0 (14/02/2021)
|
## v1.3.0 (14/02/2021)
|
||||||
|
|
||||||
- [**closed**] Novice help. [#71](https://github.com/sissbruecker/linkding/issues/71)
|
- [**closed**] Novice help. [#71](https://github.com/sissbruecker/linkding/issues/71)
|
||||||
- [**closed**] Option to create bookmarks public [#70](https://github.com/sissbruecker/linkding/issues/70)
|
- [**closed**] Option to create bookmarks public [#70](https://github.com/sissbruecker/linkding/issues/70)
|
||||||
- [**enhancement**] Show URL if title is not available [#64](https://github.com/sissbruecker/linkding/issues/64)
|
- [**enhancement**] Show URL if title is not available [#64](https://github.com/sissbruecker/linkding/issues/64)
|
||||||
@@ -189,11 +239,40 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
## v1.2.1 (12/01/2021)
|
## v1.2.1 (12/01/2021)
|
||||||
|
|
||||||
- [**bug**] Bug: Two equal tags with different capitalisation lead to 500 server errors [#65](https://github.com/sissbruecker/linkding/issues/65)
|
- [**bug**] Bug: Two equal tags with different capitalisation lead to 500 server errors [#65](https://github.com/sissbruecker/linkding/issues/65)
|
||||||
- [**closed**] Enhancement: category and pagination [#11](https://github.com/sissbruecker/linkding/issues/11)
|
- [**closed**] Enhancement: category and pagination [#11](https://github.com/sissbruecker/linkding/issues/11)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## v1.2.0 (09/01/2021)
|
## v1.2.0 (09/01/2021)
|
||||||
|
|
||||||
- [**closed**] Add Favicon [#58](https://github.com/sissbruecker/linkding/issues/58)
|
- [**closed**] Add Favicon [#58](https://github.com/sissbruecker/linkding/issues/58)
|
||||||
- [**closed**] Make tags case-insensitive [#45](https://github.com/sissbruecker/linkding/issues/45)
|
- [**closed**] Make tags case-insensitive [#45](https://github.com/sissbruecker/linkding/issues/45)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## v1.1.1 (01/01/2021)
|
||||||
|
|
||||||
|
- [**enhancement**] Add docker-compose support [#54](https://github.com/sissbruecker/linkding/pull/54)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## v1.1.0 (31/12/2020)
|
||||||
|
|
||||||
|
- [**enhancement**] Search autocomplete [#52](https://github.com/sissbruecker/linkding/issues/52)
|
||||||
|
- [**enhancement**] Improve Netscape bookmarks file parsing [#50](https://github.com/sissbruecker/linkding/issues/50)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## v1.0.0 (31/12/2020)
|
||||||
|
|
||||||
|
- [**bug**] Import does not import bookmark descriptions [#47](https://github.com/sissbruecker/linkding/issues/47)
|
||||||
|
- [**enhancement**] Enhancement: return to same page we were on after editing a bookmark [#26](https://github.com/sissbruecker/linkding/issues/26)
|
||||||
|
- [**bug**] Increase limit on bookmark URL length [#25](https://github.com/sissbruecker/linkding/issues/25)
|
||||||
|
- [**enhancement**] API for app development [#24](https://github.com/sissbruecker/linkding/issues/24)
|
||||||
|
- [**enhancement**] Enhancement: detect duplicates at entry time [#23](https://github.com/sissbruecker/linkding/issues/23)
|
||||||
|
- [**bug**] Error importing bookmarks [#18](https://github.com/sissbruecker/linkding/issues/18)
|
||||||
|
- [**enhancement**] Enhancement: better administration page [#4](https://github.com/sissbruecker/linkding/issues/4)
|
||||||
|
- [**enhancement**] Bug: Navigation bar active link stays on add bookmark [#3](https://github.com/sissbruecker/linkding/issues/3)
|
||||||
|
- [**bug**] CSS Stylesheet presented as text/plain [#2](https://github.com/sissbruecker/linkding/issues/2)
|
||||||
Binary file not shown.
@@ -93,6 +93,7 @@ def _create_missing_tags(netscape_bookmarks: List[NetscapeBookmark], user: User)
|
|||||||
tag = Tag(name=tag_name, owner=user)
|
tag = Tag(name=tag_name, owner=user)
|
||||||
tag.date_added = timezone.now()
|
tag.date_added = timezone.now()
|
||||||
tags_to_create.append(tag)
|
tags_to_create.append(tag)
|
||||||
|
tag_cache.put(tag)
|
||||||
|
|
||||||
Tag.objects.bulk_create(tags_to_create)
|
Tag.objects.bulk_create(tags_to_create)
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from django.contrib.auth.models import User
|
|||||||
from waybackpy.exceptions import WaybackError
|
from waybackpy.exceptions import WaybackError
|
||||||
|
|
||||||
from bookmarks.models import Bookmark, UserProfile
|
from bookmarks.models import Bookmark, UserProfile
|
||||||
|
from bookmarks.services.website_loader import DEFAULT_USER_AGENT
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -38,10 +39,10 @@ def _create_web_archive_snapshot_task(bookmark_id: int, force_update: bool):
|
|||||||
|
|
||||||
logger.debug(f'Create web archive link for bookmark: {bookmark}...')
|
logger.debug(f'Create web archive link for bookmark: {bookmark}...')
|
||||||
|
|
||||||
wayback = waybackpy.Url(bookmark.url)
|
archive = waybackpy.WaybackMachineSaveAPI(bookmark.url, DEFAULT_USER_AGENT)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
archive = wayback.save()
|
archive.save()
|
||||||
except WaybackError as error:
|
except WaybackError as error:
|
||||||
logger.exception(f'Error creating web archive link for bookmark: {bookmark}...', exc_info=error)
|
logger.exception(f'Error creating web archive link for bookmark: {bookmark}...', exc_info=error)
|
||||||
raise
|
raise
|
||||||
|
|||||||
@@ -45,11 +45,14 @@ def load_page(url: str):
|
|||||||
return str(results.best())
|
return str(results.best())
|
||||||
|
|
||||||
|
|
||||||
|
DEFAULT_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
|
||||||
|
|
||||||
|
|
||||||
def fake_request_headers():
|
def fake_request_headers():
|
||||||
return {
|
return {
|
||||||
"Accept": "text/html,application/xhtml+xml,application/xml",
|
"Accept": "text/html,application/xhtml+xml,application/xml",
|
||||||
"Accept-Encoding": "gzip, deflate",
|
"Accept-Encoding": "gzip, deflate",
|
||||||
"Dnt": "1",
|
"Dnt": "1",
|
||||||
"Upgrade-Insecure-Requests": "1",
|
"Upgrade-Insecure-Requests": "1",
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36",
|
"User-Agent": DEFAULT_USER_AGENT,
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
bookmarks/static/apple-touch-icon.png
Normal file
BIN
bookmarks/static/apple-touch-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
@@ -7,6 +7,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<link rel="icon" href="{% static 'favicon.png' %}"/>
|
<link rel="icon" href="{% static 'favicon.png' %}"/>
|
||||||
|
<link rel="apple-touch-icon" href="{% static 'apple-touch-icon.png' %}">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimal-ui">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimal-ui">
|
||||||
<meta name="description" content="Self-hosted bookmark service">
|
<meta name="description" content="Self-hosted bookmark service">
|
||||||
<meta name="robots" content="index,follow">
|
<meta name="robots" content="index,follow">
|
||||||
|
|||||||
@@ -10,15 +10,13 @@ from bookmarks.services import tasks
|
|||||||
from bookmarks.tests.helpers import BookmarkFactoryMixin, disable_logging
|
from bookmarks.tests.helpers import BookmarkFactoryMixin, disable_logging
|
||||||
|
|
||||||
|
|
||||||
class MockWaybackUrl:
|
class MockWaybackMachineSaveAPI:
|
||||||
|
|
||||||
def __init__(self, archive_url: str):
|
def __init__(self, archive_url: str):
|
||||||
self.archive_url = archive_url
|
self.archive_url = archive_url
|
||||||
|
|
||||||
def save(self):
|
def save(self):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|
||||||
class MockWaybackUrlWithSaveError:
|
class MockWaybackUrlWithSaveError:
|
||||||
def save(self):
|
def save(self):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
@@ -52,7 +50,7 @@ class BookmarkTasksTestCase(TestCase, BookmarkFactoryMixin):
|
|||||||
def test_create_web_archive_snapshot_should_update_snapshot_url(self):
|
def test_create_web_archive_snapshot_should_update_snapshot_url(self):
|
||||||
bookmark = self.setup_bookmark()
|
bookmark = self.setup_bookmark()
|
||||||
|
|
||||||
with patch.object(waybackpy, 'Url', return_value=MockWaybackUrl('https://example.com')):
|
with patch.object(waybackpy, 'WaybackMachineSaveAPI', return_value=MockWaybackMachineSaveAPI('https://example.com')):
|
||||||
tasks.create_web_archive_snapshot(self.get_or_create_test_user(), bookmark, False)
|
tasks.create_web_archive_snapshot(self.get_or_create_test_user(), bookmark, False)
|
||||||
self.run_pending_task(tasks._create_web_archive_snapshot_task)
|
self.run_pending_task(tasks._create_web_archive_snapshot_task)
|
||||||
bookmark.refresh_from_db()
|
bookmark.refresh_from_db()
|
||||||
@@ -60,7 +58,7 @@ class BookmarkTasksTestCase(TestCase, BookmarkFactoryMixin):
|
|||||||
self.assertEqual(bookmark.web_archive_snapshot_url, 'https://example.com')
|
self.assertEqual(bookmark.web_archive_snapshot_url, 'https://example.com')
|
||||||
|
|
||||||
def test_create_web_archive_snapshot_should_handle_missing_bookmark_id(self):
|
def test_create_web_archive_snapshot_should_handle_missing_bookmark_id(self):
|
||||||
with patch.object(waybackpy, 'Url', return_value=MockWaybackUrl('https://example.com')) as mock_wayback_url:
|
with patch.object(waybackpy, 'WaybackMachineSaveAPI', return_value=MockWaybackMachineSaveAPI('https://example.com')) as mock_wayback_url:
|
||||||
tasks._create_web_archive_snapshot_task(123, False)
|
tasks._create_web_archive_snapshot_task(123, False)
|
||||||
self.run_pending_task(tasks._create_web_archive_snapshot_task)
|
self.run_pending_task(tasks._create_web_archive_snapshot_task)
|
||||||
|
|
||||||
@@ -69,7 +67,7 @@ class BookmarkTasksTestCase(TestCase, BookmarkFactoryMixin):
|
|||||||
def test_create_web_archive_snapshot_should_handle_wayback_save_error(self):
|
def test_create_web_archive_snapshot_should_handle_wayback_save_error(self):
|
||||||
bookmark = self.setup_bookmark()
|
bookmark = self.setup_bookmark()
|
||||||
|
|
||||||
with patch.object(waybackpy, 'Url',
|
with patch.object(waybackpy, 'WaybackMachineSaveAPI',
|
||||||
return_value=MockWaybackUrlWithSaveError()):
|
return_value=MockWaybackUrlWithSaveError()):
|
||||||
with self.assertRaises(NotImplementedError):
|
with self.assertRaises(NotImplementedError):
|
||||||
tasks.create_web_archive_snapshot(self.get_or_create_test_user(), bookmark, False)
|
tasks.create_web_archive_snapshot(self.get_or_create_test_user(), bookmark, False)
|
||||||
@@ -78,7 +76,7 @@ class BookmarkTasksTestCase(TestCase, BookmarkFactoryMixin):
|
|||||||
def test_create_web_archive_snapshot_should_skip_if_snapshot_exists(self):
|
def test_create_web_archive_snapshot_should_skip_if_snapshot_exists(self):
|
||||||
bookmark = self.setup_bookmark(web_archive_snapshot_url='https://example.com')
|
bookmark = self.setup_bookmark(web_archive_snapshot_url='https://example.com')
|
||||||
|
|
||||||
with patch.object(waybackpy, 'Url', return_value=MockWaybackUrl('https://other.com')):
|
with patch.object(waybackpy, 'WaybackMachineSaveAPI', return_value=MockWaybackMachineSaveAPI('https://other.com')):
|
||||||
tasks.create_web_archive_snapshot(self.get_or_create_test_user(), bookmark, False)
|
tasks.create_web_archive_snapshot(self.get_or_create_test_user(), bookmark, False)
|
||||||
self.run_pending_task(tasks._create_web_archive_snapshot_task)
|
self.run_pending_task(tasks._create_web_archive_snapshot_task)
|
||||||
bookmark.refresh_from_db()
|
bookmark.refresh_from_db()
|
||||||
@@ -88,7 +86,7 @@ class BookmarkTasksTestCase(TestCase, BookmarkFactoryMixin):
|
|||||||
def test_create_web_archive_snapshot_should_force_update_snapshot(self):
|
def test_create_web_archive_snapshot_should_force_update_snapshot(self):
|
||||||
bookmark = self.setup_bookmark(web_archive_snapshot_url='https://example.com')
|
bookmark = self.setup_bookmark(web_archive_snapshot_url='https://example.com')
|
||||||
|
|
||||||
with patch.object(waybackpy, 'Url', return_value=MockWaybackUrl('https://other.com')):
|
with patch.object(waybackpy, 'WaybackMachineSaveAPI', return_value=MockWaybackMachineSaveAPI('https://other.com')):
|
||||||
tasks.create_web_archive_snapshot(self.get_or_create_test_user(), bookmark, True)
|
tasks.create_web_archive_snapshot(self.get_or_create_test_user(), bookmark, True)
|
||||||
self.run_pending_task(tasks._create_web_archive_snapshot_task)
|
self.run_pending_task(tasks._create_web_archive_snapshot_task)
|
||||||
bookmark.refresh_from_db()
|
bookmark.refresh_from_db()
|
||||||
@@ -117,7 +115,7 @@ class BookmarkTasksTestCase(TestCase, BookmarkFactoryMixin):
|
|||||||
self.setup_bookmark()
|
self.setup_bookmark()
|
||||||
self.setup_bookmark()
|
self.setup_bookmark()
|
||||||
|
|
||||||
with patch.object(waybackpy, 'Url', return_value=MockWaybackUrl('https://example.com')):
|
with patch.object(waybackpy, 'WaybackMachineSaveAPI', return_value=MockWaybackMachineSaveAPI('https://example.com')):
|
||||||
tasks.schedule_bookmarks_without_snapshots(user)
|
tasks.schedule_bookmarks_without_snapshots(user)
|
||||||
self.run_pending_task(tasks._schedule_bookmarks_without_snapshots_task)
|
self.run_pending_task(tasks._schedule_bookmarks_without_snapshots_task)
|
||||||
self.run_all_pending_tasks(tasks._create_web_archive_snapshot_task)
|
self.run_all_pending_tasks(tasks._create_web_archive_snapshot_task)
|
||||||
@@ -131,7 +129,7 @@ class BookmarkTasksTestCase(TestCase, BookmarkFactoryMixin):
|
|||||||
self.setup_bookmark(web_archive_snapshot_url='https://example.com')
|
self.setup_bookmark(web_archive_snapshot_url='https://example.com')
|
||||||
self.setup_bookmark(web_archive_snapshot_url='https://example.com')
|
self.setup_bookmark(web_archive_snapshot_url='https://example.com')
|
||||||
|
|
||||||
with patch.object(waybackpy, 'Url', return_value=MockWaybackUrl('https://other.com')):
|
with patch.object(waybackpy, 'WaybackMachineSaveAPI', return_value=MockWaybackMachineSaveAPI('https://other.com')):
|
||||||
tasks.schedule_bookmarks_without_snapshots(user)
|
tasks.schedule_bookmarks_without_snapshots(user)
|
||||||
self.run_pending_task(tasks._schedule_bookmarks_without_snapshots_task)
|
self.run_pending_task(tasks._schedule_bookmarks_without_snapshots_task)
|
||||||
self.run_all_pending_tasks(tasks._create_web_archive_snapshot_task)
|
self.run_all_pending_tasks(tasks._create_web_archive_snapshot_task)
|
||||||
@@ -149,7 +147,7 @@ class BookmarkTasksTestCase(TestCase, BookmarkFactoryMixin):
|
|||||||
self.setup_bookmark(user=other_user)
|
self.setup_bookmark(user=other_user)
|
||||||
self.setup_bookmark(user=other_user)
|
self.setup_bookmark(user=other_user)
|
||||||
|
|
||||||
with patch.object(waybackpy, 'Url', return_value=MockWaybackUrl('https://example.com')):
|
with patch.object(waybackpy, 'WaybackMachineSaveAPI', return_value=MockWaybackMachineSaveAPI('https://example.com')):
|
||||||
tasks.schedule_bookmarks_without_snapshots(user)
|
tasks.schedule_bookmarks_without_snapshots(user)
|
||||||
self.run_pending_task(tasks._schedule_bookmarks_without_snapshots_task)
|
self.run_pending_task(tasks._schedule_bookmarks_without_snapshots_task)
|
||||||
self.run_all_pending_tasks(tasks._create_web_archive_snapshot_task)
|
self.run_all_pending_tasks(tasks._create_web_archive_snapshot_task)
|
||||||
|
|||||||
@@ -139,6 +139,17 @@ class ImporterTestCase(TestCase, BookmarkFactoryMixin, ImportTestMixin):
|
|||||||
|
|
||||||
self.assertEqual(Tag.objects.count(), 4)
|
self.assertEqual(Tag.objects.count(), 4)
|
||||||
|
|
||||||
|
def test_create_missing_tags_does_not_duplicate_tags(self):
|
||||||
|
html_tags = [
|
||||||
|
BookmarkHtmlTag(href='https://example.com', tags='tag1'),
|
||||||
|
BookmarkHtmlTag(href='https://foo.com', tags='tag1'),
|
||||||
|
BookmarkHtmlTag(href='https://bar.com', tags='tag1'),
|
||||||
|
]
|
||||||
|
import_html = self.render_html(tags=html_tags)
|
||||||
|
import_netscape_html(import_html, self.get_or_create_test_user())
|
||||||
|
|
||||||
|
self.assertEqual(Tag.objects.count(), 1)
|
||||||
|
|
||||||
def test_should_append_tags_to_bookmark_when_reimporting_with_different_tags(self):
|
def test_should_append_tags_to_bookmark_when_reimporting_with_different_tags(self):
|
||||||
html_tags = [
|
html_tags = [
|
||||||
BookmarkHtmlTag(href='https://example.com', tags='tag1'),
|
BookmarkHtmlTag(href='https://example.com', tags='tag1'),
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "linkding",
|
"name": "linkding",
|
||||||
"version": "1.11.0",
|
"version": "1.11.1",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -22,4 +22,4 @@ supervisor==4.2.2
|
|||||||
typing-extensions==3.10.0.0
|
typing-extensions==3.10.0.0
|
||||||
urllib3==1.26.6
|
urllib3==1.26.6
|
||||||
uWSGI==2.0.18
|
uWSGI==2.0.18
|
||||||
waybackpy==2.4.3
|
waybackpy==3.0.6
|
||||||
|
|||||||
@@ -28,4 +28,4 @@ soupsieve==1.9.2
|
|||||||
sqlparse==0.4.2
|
sqlparse==0.4.2
|
||||||
typing-extensions==3.10.0.0
|
typing-extensions==3.10.0.0
|
||||||
urllib3==1.26.6
|
urllib3==1.26.6
|
||||||
waybackpy==2.4.3
|
waybackpy==3.0.6
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
1.11.0
|
1.11.1
|
||||||
|
|||||||
Reference in New Issue
Block a user