Giter Club home page Giter Club logo

tachiweb-server's Introduction

TachiWeb-Server Travis status

TachiWeb-Server is a port of Tachiyomi to the desktop and server platforms.

Downloads

Windows installer download   Linux 64-bit AppImage download   Mac DMG download

Show all downloads

Windows Linux macOS Server-only
64-bit/32-bit installation file 32-bit AppImage DMG image Executable JAR
32-bit portable zip archive 64-bit AppImage zip archive
64-bit portable zip archive 64-bit .pacman package
32-bit .tar.gz archive
64-bit .tar.gz archive

Older builds


Java 8 or newer is required to run the application.

About

TachiWeb-Server provides a consistent and flexible API for programs using the Tachiyomi backend. TachiWeb-Server allows multiple programs to use the same Tachiyomi library at the same time and provides a foundation for alternative frontends to build on.

Currently, this project comes bundled with a React frontend that is enabled by default and a bootstrapper to integrate the application with your desktop.

TachiWeb is not officially supported by Tachiyomi or it's contributors.

Motivation

There is currently no Manga reader that can be easily synced between the desktop and mobile. TachiWeb-Server is fully compatible with Tachiyomi's data structures and backups, allowing easy migration between the two. Seamless sync between the two programs is a goal and planned feature.

Server setup

TachiWeb can also be installed on servers. Refer to INSTALL.md for the server installation procedure.

State

TachiWeb-Server usable, but still alpha software. The API is not stable and can change at any time. Details on the state of the project can be found here: https://github.com/TachiWeb/TachiWeb-Server/projects.

License

Copyright 2019 Andy Bao and contributors

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

tachiweb-server's People

Contributors

covert8 avatar null-dev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tachiweb-server's Issues

Duplicate mangaId returned from catalogue

image

Trying the new global catalogue search, I noticed hundreds of errors being thrown from duplicate mangaIds. The above screenshot is an example of a single source returning 2 of the same manga.

Not sure the best way to help pinpoint the source of the error. Lemme know what I can do on my side.

Categories feature incomplete?

Taking a look at the tachiweb-ui code, I can see features to create, edit, reorder, and delete categories. But I can't find anything for assigning manga to these categories.

Is this just something that hasn't been implemented?

Remove dummy category

#37 (comment)
3c8ac9a, 34d632a

I know I was originally the one who asked you to include the list of manga not in a category. I realized shortly after it was added that this was at best unneeded and at worst potentially misleading.

The only time this could be necessary is if the client re-fetches all the category data every time categories are edited, but this is super inefficient and not the approach I'm taking with the front end code.

Password authentication crash

when going to Settings --> Server --> Password authentication

and entering any value in, the page crash turn blank.

Gradle: Build failed with an exception

Hi, thanks for your works !
I have this error when I start build with scripts/build.sh

Installing library to library folder...
Cleaning up...
Done!
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Starting a Gradle Daemon (subsequent builds will be faster)
Parallel execution is an incubating feature.

FAILURE: Build failed with an exception.

* Where:
Settings file '/tmp/TachiWeb-Server/settings.gradle' line: 7

* What went wrong:
Project :dex-translator not found.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.8.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 2s
Java build failed!

Thank you for you help

Failed to update chapters list.

I have tried Java 8 Update 221 (32bit and 64bit) with both portable (32bit and 64bit) and the installer. All have the same issue that it failed to update the chapters list when I tried to read some manga. I have tried from different extensions as well.

Any help is appreciated. Thank you!

MangaPlus - "Failed to load this catalogue"

Can't read anything from mangaplus, when trying to add something from the Catalogue menu I get said error. Restoring a backup from mobile Tachi that includes a title from there seems to simply not import it at all.

Categories API not working

Tried to add manga to categories in v3 returned a 501 not implemented error, so here I am trying to use the v2 api.

Here's a list of categories I made

{
    "data": [
        ...
        {
            "id": 4,
            "name": "Blah 2",
            "order": 2,
            "flags": 0,
            "manga": []
        },
        ...
    ],
    "success": true
}

Calling GET on http://localhost:4567/api/v2/categories/4/name returns

{
    "data": [
        {
            "id": 4,
            "name": "Blah 2"
        }
    ],
    "success": true
}

but I can't figure out any way to get a POST to work. I tried multiple combinations of JSON data and nothing worked. Here's one of the errors that the server is giving.

[qtp1154610887-50] ERROR xyz.nulldev.ts.api.http.TachiWebRoute - Route handler failure (error ID: 03f10d52-769b-4137-afef-e4a7722fee34)!
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `xyz.nulldev.ts.api.v2.http.categories.CategoryName[]` out of START_OBJECT token
 at [Source: (String)"{
    "name": "change this"
}"; line: 1, column: 1]
	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
	at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1343)
	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1139)
	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1093)
	at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.handleNonArray(ObjectArrayDeserializer.java:330)
	at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:175)
	at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:21)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004)
	at io.javalin.translator.json.JavalinJsonPlugin$jsonToObjectMapper$1.map(JavalinJsonPlugin.kt:28)
	at xyz.nulldev.ts.api.v2.http.jvcompat.JavalinCompatKt.bodyAsClass(JavalinCompat.kt:39)
	at xyz.nulldev.ts.api.v2.http.categories.CategoriesController.setName(CategoriesController.kt:155)
	at xyz.nulldev.ts.api.http.HttpAPI$start$26.invoke(HttpAPI.kt:181)
	at xyz.nulldev.ts.api.http.HttpAPI$start$26.invoke(HttpAPI.kt:60)
	at xyz.nulldev.ts.api.v2.http.jvcompat.JavalinShim.handleReq(JavalinShim.kt:9)
	at xyz.nulldev.ts.api.http.TachiWebRoute.handle(TachiWebRoute.kt:75)
	at spark.RouteImpl$1.handle(RouteImpl.java:61)
	at spark.http.matching.Routes.execute(Routes.java:61)
	at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:130)
	at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1568)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
	at org.eclipse.jetty.server.Server.handle(Server.java:531)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:319)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:175)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:133)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:754)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:672)
	at java.lang.Thread.run(Thread.java:748)

Extension/Catalog Not Working

The ReadComicsOnline catalog is throwing up a "Failed to load this catalog" error when trying to load it. I think its probably due to the url of the site changing, it happens all the time to the android app. The url is now https://readcomiconline.to/

As this url is getting changed on a semi regular basis is there a way to be able to manually update the url? rather than having to update the whole app?

Filter default is filter out instead of undefined

Hi first thx for this great application. I searched for something like this for a long time ^^

The default for filter options is to filter out (screenshot) instead of being undefined could this be changed ? tyvm for reading
Screenshot_2019-08-23_23-39-46

Reader settings don't take effect

Hey guys.

I've tried to change reader settings and I did, or I thought so. When I came back to reading none of the settings I chose applied. Pages are being scrolled vertically despite fiddling with different settings and instead of being in the form of carousel with left/right buttons moving horizontally.

Am I doing something wrong or is not working settings panel this app's limitation?

Best regards.

Restore not working

I had a library of 12 manga and created a backup file.
I removed the app data folder, restarted the server, and attempted to restore from a file.

Only 1 manga was restored.

API to 'Mark previous as read'

Currently there's an API to update the reading status of 1 chapter, but nothing similar to 'Mark previous as read'.

You could technically send out multiple requests for each chapter, but that doesn't feel like an elegant solution.

License

Correct me if I'm wrong, but a lot of the code here is from Tachiyomi. Making it Apache code, meaning your breaking the license terms by not at least including the Apache license in your project. But as Dual licensing is a pain you should really just relicense TachiWeb to Apache

Download Feature

Can't download any manga there isn't option while there's filter for downloaded.

[Question] Adding more sources?

Currently this is possible in the app through extensions. What about this? 🤔

Edit : Just looked at the projects page and realise how this will be done therefore I'm closing this.

Download Tachiyomi jar Problem

Hello, i've tried to download the latest build from this address (like writed in the install.md):
https://ci.nulldev.xyz/job/TachiWeb-Server/lastSuccessfulBuild/artifact/TachiServer/build/libs/TachiServer-all-1.0.jar
But I can't download it, I've tried with chrome and microoft edge three times for each browser.

This is the error I've got:

Error 504
Ray ID: 431e98580b5ba869 • 2018-06-28 07:57:08 UTC
Gateway time-out

You Browser Working
Paris Cloudflare Working
ci.nulldev.xyz Host Error

What happened?
The web server reported a gateway time-out error.

What can I do?
Please try again in a few minutes.

Add option to save reader type to server

Currently I have a SinglePageReader and WebtoonReader.
I don't have any in-app way of selecting which reader, so I'm defaulting to WebtoonReader.

It would be nice to have a way to select (and persist) which reader you want as a default and per manga.

Another alternative is to only have the WebtoonReader. imo it's the superior way to read

Sometimes images are incorrect + they stay cached

Not sure exactly how to describe, and I can't reproduce it easily.
Sometimes when searching in the catalogue, a manga will show the cover image for the wrong manga. This will end up staying cached for future requests unless I hard reload.

I don't think it's a client side problem, so leaving this issue here.

Cannot build

Hello, first of all thanks for this application :)

Unfortunately when i run scripts/build.sh i get a permission error.
capture

when i run the command as sudo i also get an error:
1

And then later i get this error:
3

Thanks in advance :)

Build error: gradle project dex-translator not found

Hi, awesome work so far.
I was looking at making an Arch aur package but ran into a build error.
The following is my error.
* What went wrong: Project :dex-translator not found.

It's obviously refering to the settings.gradle file
includeBuild('dex2jar') { dependencySubstitution { substitute module('dex2jar:dex-translator') with project(':dex-translator') } }

When looking in the dex2jar folder, it's suspiciously empty.
Is this somekind of script or gradle error?
Thanks for the help.

Run TachiWeb-Server on startup

Hey,
is it possible to make the application start on startup?

If yes how would i do it? I tried creating a tachi.service file which contained this:
[Unit]
Description= TachiWeb-Server
After=network.target

[Service]
Type=simple
User=tachi
Group=tachi
ExecStart=/usr/bin/java -jar /path/to/TachiServer-all-1.0.jar

[Install]
WantedBy=default.target

On startup, the application started, but nothing would load. It stated that the library failed to load, the catalogues also didnt load.

IOS PWA

The following backend changes are required for the IOS PWA:

  • UPnP port forwarding
  • API endpoint to get external IP
  • Find some way to lock in the server port. Currently, we calculate the server port dynamically on startup which will break the IOS app if the port ever changes.

Category ids are not incremented correctly

When you create a category, it creates a new one with id of the largest non-deleted id + 1. However, this is incorrect behavior because it's possible to create a new category with an old id and that old ids' corresponding manga.

example

  1. Create a category
  2. Add manga to that category
  3. Delete that category
  4. Create a new category (name doesn't matter)
  5. Observe that the id is the same as the first category and it 'remembers' your manga in this category

I believe expected behavior is that category ids do not get reset. They continue to increment even if categories are deleted.

2 API calls with the same name (editCategories)

@tachiweb/api-client/lib/api.js

There's 2 editCategories functions. Haven't tried using the exposed api yet, so idk if this is a breaking bug or not. Functionally, it works as expected.

Wont stop loading

It is just loading and tells me that something failed in every tab... it broke when i tried to add more extensions because some of them weren't working. Reinstall didnt Do anything. Help

Error sending cached Cover

Hello, when I'm trying to download im getting this exception:
capture

Im running Ubuntu server 16.04.

Thank you for your help :]

Build successful, exception when running

When I try to run the server, I get this exception

ilmike@mymachine:~/TachiWeb-Server/target$ java -jar TachiServer-1.0-SNAPSHOT-jar-with-dependencies.jar
[main] INFO xyz.nulldev.ts.TachiServer - Starting server...
Exception in thread "main" java.lang.VerifyError: class xyz.nulldev.ts.android.CustomContext overrides final method getString.(I[Ljava/lang/Object;)Ljava/lang/String;
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
at sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
at sun.reflect.generics.repository.ClassRepository.getSuperclass(ClassRepository.java:90)
at java.lang.Class.getGenericSuperclass(Class.java:777)
at uy.kohesive.injekt.api.FullTypeReference.(TypeInfo.kt:34)
at xyz.nulldev.ts.ServerModule$registerInjectables$$inlined$addSingletonFactory$1.(TypeInfo.kt:27)
at xyz.nulldev.ts.ServerModule.registerInjectables(ServerModule.kt:70)
at uy.kohesive.injekt.api.InjektModule$DefaultImpls.registerWith(Modules.kt:18)
at xyz.nulldev.ts.ServerModule.registerWith(ServerModule.kt:41)
at uy.kohesive.injekt.api.InjektRegistrar$DefaultImpls.importModule(Registrar.kt:5)
at uy.kohesive.injekt.registry.default.DefaultRegistrar.importModule(DefaultRegistrar.kt:13)
at uy.kohesive.injekt.api.InjektScope.importModule(Scope.kt)
at xyz.nulldev.ts.TachiServer.main(TachiServer.kt:56)

Binary Jar dl site down?

The site for the latest binary in the read me seems to be down. Been trying to refresh it for the last few days but kept getting a cloudflare error. I just found this project so I'm not sure what current developments are.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.