Commit Graph

144 Commits

Author SHA1 Message Date
schroda
a95937f253 Fix/global search not showing request error (#310)
* Show error message in case search request failed

In case of an error the message was showing "no mangas found"

* [i18n::en] Sort keys alphabetically
2023-05-20 13:25:10 +02:00
schroda
474e568a05 Refactor SearchAll screen (#308) 2023-05-20 13:23:30 +02:00
schroda
f908195b09 Feature/cleanup search all (#307)
* [Cleanup] Improve variable names

* [Cleanup] Improve typing

* [Cleanup] Extract source sort by name logic into function

* Do not sort original loaded source list

"Sort" mutates the original array

* [Cleanup] Extract search result sort logic into function

* [Cleanup] Simplify adding default languages to shown languages
2023-05-20 13:19:03 +02:00
schroda
feac34ba83 Trigger global search request (#305)
Issue introduced with a457d80c44.
"FetchedSources" was changed to represent the loading state of the request, but it was forgotten to update its usage
2023-05-18 22:28:53 +02:00
schroda
aa801a57ee Feature/updates screen use infinite swr hook (#303)
* Use "RequestManager" for loading updates

* [Cleanup] Fix typing

* Memoize grouped updates

* [TSConfig] Increase target version

Makes it possible to iterate over a "IterableIterator" (e.g. [...<Map>.entries()])

* Use "GroupedVirtuoso" for "Updates" screen

* Optionally use "padding" instead of margin for the loading placeholder

In case the loading placeholder gets used in a "react-virtuoso" list, the margin might cause issues with the calculated height.

* Use "padding" instead of "margin"

"Margin" breaks "react-virtuosos" height calculation

* Add background color to group header

With virtuoso the group headers are sticky, thus, a background color is needed

* Simplify "groupByDate" object structure

It's not necessary to save the items inside the group object
2023-05-18 13:48:01 +02:00
schroda
a457d80c44 Feature/streamline backend requests (#297)
* Introduce "RequestManager"

* Use "RequestManager" - Simple replacements

 - Get rid of all "util/client" imports
 - replace old requests with new "RequestManager"
 - remove "fetcher" from global SWR config
     instead of using the SWR hooks by themselves, the "requestManager" is supposed to be used

* Use "RequestManager" - Do requests via SWR hooks

Use SWR hooks at places where it's easily usable

* Prevent trailing slashes in the "baseUrl"
2023-05-18 13:25:19 +02:00
schroda
58eb2fead3 Feature/enforce license notice in each file via eslint rule (#304)
* [ESLint] Add "eslint-plugin-header" as dev dependency

* [ESLint::eslint-plugin-header] Setup rule

* [ESLint::eslint-plugin-header] Fix errors
2023-05-18 13:17:41 +02:00
schroda
13dbb8faf4 Prevent add category FAB from overlaying last category (#301) 2023-05-15 18:41:43 +02:00
schroda
5aaf0854fe Fix/download queue staying stopped when removing download (#299)
* [Cleanup] Use async/await

* Show download queue removal error toast

* Optionally restart download queue after removing download

When removing a download while the download queue was running, the queue was never started again.
2023-05-15 18:15:28 +02:00
schroda
8dae72604f Update to SWR version 2.x (#296)
* Update SWR to version 2.1.5

* Improve generic type names

* Use "isLoading" property of "useSWR" response

* Correctly load library without selected tab

With the latest SWR version the library was empty on the first load.
Not sure what exactly is the reason, but due to "isPaused" the request wasn't sent even after "activeTab" wasn't undefined anymore.
Instead of using "isPaused", passing "null" as the key will also prevent SWR from doing the request.
2023-05-15 11:56:55 +02:00
schroda
4aff22079a Settings language add description (#294)
* Add translation notice to language setting

* Make local source guide link readable in dark mode
2023-05-12 11:52:00 +02:00
schroda
bd91510227 Remove eslint rule deactivations (#290) 2023-05-11 18:00:37 +02:00
schroda
d92dc83dda Display strings in uppercase (#291)
Translation string will be changed to a capitalized string instead of uppercase.
2023-05-11 02:17:59 +03:30
schroda
548b22d211 fix/library_settings_screen_title_update_on_language_change (#287) 2023-05-01 23:32:38 +02:00
schroda
b906509f9f Add missing licence text (#286) 2023-05-01 23:31:41 +02:00
schroda
9a27335760 Add option to include and exclude categories from the global update (#265) 2023-04-22 13:03:51 +02:00
schroda
79b2305e54 Feature/library show number of mangas in category (#269)
* Pass optional browser tab only title

Makes it possible to have a different title for the "NavBar" and the browser tab

* Show number of items in category and library

---------

Co-authored-by: schroda <github@dasch.simplelogin.com>
2023-04-22 11:39:59 +02:00
schroda
0a56a2f6d4 Extensions cleanup (#257)
* [Cleanup] Add enums and types

* Extract "default languages" from ISOLanguages

The "default languages" will also be translated depending on which language the user selected
2023-04-21 00:27:42 +02:00
schroda
22b3437dcd Keep "add category" fab position fixed (#283)
The button is supposed to stay in the bottom right corner at all times
2023-04-12 18:36:52 +02:00
schroda
d51150b784 Feature/reader skip duplicate chapters (#262)
* Skip duplicate chapters in the Reader

* Debounce "end of page" handling in the reader

* Update keyboard event listener

In case the "go" function changed, the listeners have to be updated
2023-04-05 13:37:12 +02:00
schroda
b1dc13cd30 Update browser and nav bar title on language change (#275) 2023-03-29 00:44:03 +03:30
Yon
16c0f854fe Fix discord and github links (#267) 2023-03-25 22:05:25 +03:30
schroda
39780df0e0 add language selection to settings (#260)
* Add language selection to settings

* Add available languages to i18n
2023-03-25 22:04:05 +03:30
schroda
d58bd6cd92 add translation keys (#246)
* Fix i18n tsc issue

"t" can return null by default.
This was already disabled in the config, but it had no effect on tsc.

* Fix translation in "DefaultNavBar"

key was missing and since this is a constant the translation wouldn't update in case the language got changed after first load.

* Enable typing for i18n translation keys

* Add translation keys
2023-03-23 16:29:32 +03:30
schroda
23001a4298 update react scripts dependency (#255)
* Move "dependencies" close to "devDependencies"

Makes it easier to have a quick overview

* Upgrade "react-scripts" to latest version

With new versions of node (> v16) the build scripts fails with the following error "error:0308010C:digital envelope routines::unsupported"

* Upgrade "react-scripts" to v5 - Fix import

* Upgrade "eslint" dependencies

The latest version of "react-scripts" uses eslint v8 causing the following error "... ERROR in Plugin "react" was conflicted between ".eslintrc.js" >> eslint-config-airbnb ..."

* Upgrade "eslint" dependencies - Allow nested components as props

* Upgrade "eslint" dependencies - Fix lint issues
2023-03-11 20:35:58 +03:30
akabhirav
91e7bd2b27 Added sort by last read (#254) 2023-03-05 10:26:50 +03:30
akabhirav
e32078917d Replace Sort by ID with Date Added (#253) 2023-03-04 20:21:39 +03:30
akabhirav
a67370be62 Introduce override filters while searching setting (#242)
* Introduced override filters while searching setting

* update branch; change strings and method names

* fix eslint issue

* code review changes

* moved search setting types into its own type

---------

Co-authored-by: akxer <>
2023-03-04 20:21:24 +03:30
Daniel
96fd1cf73b remove manually created typing d ts file (#249)
* Rename file

".d.ts" files are files that are automatically generated during compilation (in case option is set) and shouldn't be created manually.

* Export types and interfaces

* Add missing imports
2023-02-24 19:10:37 +03:30
akabhirav
5473d14eae Adds search by genre to WebUI (#238)
* add pagination to library and fix some prettier issues

* add genre search support like tachiyomi android app

* Search by genre like you do in tachiyomi mobile app

---------

Co-authored-by: akxer <>
2023-02-16 09:26:09 +03:30
Aria Moradi
94e45c2133 add translation keys 2023-02-14 20:08:03 +03:30
Aria Moradi
688358f673 add translation keys 2023-02-14 16:47:38 +03:30
Aria Moradi
76d44bd657 clean up translations 2023-02-14 16:28:37 +03:30
Aria Moradi
1c7c3e566c add i18n (#239) 2023-02-13 20:21:44 +03:30
akabhirav
aaedbb7be9 add pagination to library and fix some prettier issues (#237)
Co-authored-by: akxer <>
2023-02-12 18:43:41 +03:30
Daniel
ad9a12b2ec Fix reader nav bar scroll to page (#236)
* Correctly scroll to page

Using "curPage" as the "initialPage" broke "scrolling up".
The page got reset to the first page in that case

* Support resume and scrolling to page for "DoublePagedPager"

* Support resume and scrolling to page for "PagedPager"

* Prevent "ReaderNavBar" from disappearing in "VerticalPager"

Due to handling the overflow on the "root" div and the "nav bar" being sticky and having a combined with of 100vw with the "vertical pager", once the first page was reached, that was behind the 100vw, the "nav bar" got moved out of the screen.
This made using the "nav bar" unusable for the "vertical pager".
2023-02-12 18:42:17 +03:30
Daniel
c7aaed8378 Add chapter page dropdown (#230)
Makes it possible to select a specific page of the current chapter
2023-02-08 20:56:09 +03:30
Daniel
2c11708c92 increase prettier line length to 120 (#233)
* [Prettier] Increase max line length to 120

100 is quite low, especially on modern monitors.
The length is also reached quite quickly with 4 spaces per tab depending on the indentation depth

* [Prettier] Increase max line length to 120 - Fix formatting
2023-02-08 20:49:26 +03:30
Daniel
4e0a860dfd add prettier for auto formatting (#231)
* [Prettier] Add "prettier"

Makes the formatting of the code consistent.
By using the eslint-plugin-prettier formatting issues will be highlighted as a lint error.
These errors will be auto fixed by running "lint --fix" (which can be done automatically on file save)

* [Prettier] Add "prettier" - Fix formatting
2023-02-06 12:36:33 +03:30
Daniel
2eeea41a45 force absolute import path (#223)
* Add "no-relative-import-paths" eslint plugin

* Add "no-relative-import-paths" eslint plugin - Fix imports
2023-02-05 18:45:20 +03:30
Daniel
f7b369b95d set browser tab title (#220)
* Update the browser tab title

The tab title will be set to the same title as the "NavigationBar" with "- Tachidesk" as the suffix

* Set the manga title and chapter name as browser tab title in the reader

While the reader is still loading the "mangaId" and the "chapterIndex" will be set as the title.
2023-01-07 19:14:00 +03:30
Daniel
9702728771 add logic for metadata migration (#218)
* [#215] Handle metadata migration

Makes it possible to change "metadata keys" and the "app metadata key prefix" without losing data

* [#215] Fix checking and handling missing reader settings in metadata

With the new migration logic missing reader settings couldn't be detected anymore in case the metadata included outdated app metadata keys for the reader settings.

* [#215] Fix name of "IReaderSettings" property
2023-01-06 20:49:45 +03:30
Daniel
7642b5808c [#211] Refresh Library after a update (#212)
Library had to be refreshed manually to see the latest manga updates.
2023-01-06 20:05:26 +03:30
Daniel
dca968fdb7 make default reader settings changeable (#217)
* [#214] Move "reader settings" util functions into new file

* [#214] Extract "options" of "ReaderSettings" to new component

* [#214] Add component for changing the default reader settings

* [#214] Add default "ReaderSettings" to "Settings"

* [#214] Use default "ReaderSettings" stored on the server

Wait for both "manga" and "defaultSettings" to be loaded.
Otherwise, by the time the "manga" response was received, the "defaultSettings" might be still loading and thus, the local fallback "default" settings will get used as the "default settings"

* [#214] Save and update "ReaderSettings" options in case they are missing

- Manga gets read the first time => save settings in metadata
- Default settings get opened the first time => save settings in global metadata
2023-01-06 20:04:16 +03:30
Daniel
46ac5d5531 Save reader settings per manga in Meta (#216)
* [#213] Add missing "meta" property

- IManga
- IMangaCard (optional)
- IChapter
- ICategory

* [#213] Add util functions for handling metadata

- global server
- manga
- chapter
- category

* [#213] Use "ReaderSettings" from the manga metadata

- get ReaderSettings from manga metadata
- remove unnecessary check "make sure settings has all the keys"
    in case the stored settings in the metadata are outdated they will be filled with default values

* [#213] Reload manga only in case "mangaId" changed

In case the chapter is still from the same manga, a reload is unnecessary

* [#213] Only update the changed reader setting

Otherwise the app has to send patch requests to the server for every setting even if it didn't change

* [#213] Hide "openButton" on first render in case "navBar" is shown

The "openButton" was always set to be visible event in case the navBar was shown on the first render

* [#213] Open the "ReaderNavBar" if needed after receiving new settings

Otherwise, the drawer won't open in case the "navBar" was hidden on the first render since the default state in that case was set to false

* [#213] Update "ReaderSettings" after receiving the manga response

Otherwise, the default settings aren't getting removed

* [#213] Hide/Show "OpenButton" when opening/closing the drawer

Otherwise, the button stays hidden until it gets updated due to scrolling

* [#213] Keep "ReaderNavBar" state when opening prev/next chapter

In case the navBar wasn't sticky but opened, it got closed when the prev/next chapter got opened

* [#213] Prevent "ReaderNavBar" from closing when changing "staticNav" setting
2023-01-06 19:45:29 +03:30
Valter Martinek
8dfc89ee17 Refactor/download queue and cleanup visuals overall (#202)
* Move context providers and configuration providers to separate component, extract theme to separate file

* Use custom palette color instead of direct colors

* Replace different clicable things with CardActionArea to get transition and links

* Refactor DownloadQueue, update layout, unify all the download progress indicators

* Unify active filter indicator

* Use divider instead of hr

* Fix background color in extensions light theme

* Fix thumbnail overlay in library screen list view

* Don't show download button on downloaded updates
2022-11-26 16:21:56 +03:30
Valter Martinek
7aa4d2f3de Verticall scroll navigation and fix (#200)
* Remove scroll tracking from Page component

* Replace initial scrolling trigger with initialPage prop to be more clear on when to scroll to inital page

* Add current page tracking back to HorizontalPager

* Memoize prevChapter and nextChapter functions

* Rewrite navigation in vertical pager to scroll by screen percentage instead of whole pages, refactor code

* Handle last pages explicitly to fix issue with small last pages
2022-11-24 23:35:05 +03:30
Valter Martinek
62816338f3 Refactor and fix sorting in library (#197) 2022-11-24 23:34:30 +03:30
Valter Martinek
154b357c40 Options panels refactoring (#196)
* Refactor library options to match chapter options using shared component

* Disable some eslint rules

* Cleanup SourceOptions layout to use same components as other panels
2022-11-24 12:11:03 +03:30
Valter Martinek
3972d7757f Fix navbar back button behavior (#195)
* Enable passing backLink through location state. Explicitly handle cases for BACK

* Allow pages to override default backLink. Fix manga page back link

* Cleanup
2022-11-21 04:03:45 +03:30