Coder Social home page Coder Social logo

subject-f / guyamoe Goto Github PK

View Code? Open in Web Editor NEW
453.0 453.0 65.0 8.97 MB

Kaguya Manga Reader Website

Home Page: https://guya.moe

License: GNU Affero General Public License v3.0

Python 31.32% HTML 15.62% CSS 17.47% JavaScript 35.57% Dockerfile 0.02%

guyamoe's People

Contributors

aceofvase avatar algoinde avatar appu1232 avatar dependabot[bot] avatar einlion avatar funkyhippo avatar isaqueks avatar joshdabosh avatar kafkaien42 avatar pyreko avatar rapptz avatar xetera 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

guyamoe's Issues

hello

appu, I have problems with the selfbot and would like to have your discord, please. i've tried fixing it for like a whole day.

having issue while installing

hey there,

im on windows 7 64bit, have python 3.6.1, following the installation guide and i did the first 2 steps without problems (pip install -r requirements.txt and the SECRET_KEY) when i try to do:
./manage.py makemigrations
i get this error at the end
conn = _connect(dsn, connection_factory=connection_factory, **kwasync) django.db.utils.OperationalError: fe_sendauth: no password supplied

here is the full thing:

Veelst@Veelst-PC MINGW64 /c/Server/guyamoe
$ ./manage.py makemigrations
Traceback (most recent call last):
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\base\base.py", line 217, in ensure_connection
    self.connect()
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\base\base.py", line 195, in connect
    self.connection = self.get_new_connection(conn_params)
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\postgresql\base.py", line 178, in get_new_connection
    connection = Database.connect(**conn_params)
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\psycopg2\__init__.py", line 126, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: fe_sendauth: no password supplied


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "./manage.py", line 21, in <module>
    main()
  File "./manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\management\commands\makemigrations.py", line 101, in handle
    loader.check_consistent_history(connection)
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\migrations\loader.py", line 283, in check_consistent_history
    applied = recorder.applied_migrations()
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\migrations\recorder.py", line 73, in applied_migrations
    if self.has_table():
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\migrations\recorder.py", line 56, in has_table
    return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\base\base.py", line 256, in cursor
    return self._cursor()
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\base\base.py", line 233, in _cursor
    self.ensure_connection()
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\base\base.py", line 217, in ensure_connection
    self.connect()
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\base\base.py", line 217, in ensure_connection
    self.connect()
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\base\base.py", line 195, in connect
    self.connection = self.get_new_connection(conn_params)
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\postgresql\base.py", line 178, in get_new_connection
    connection = Database.connect(**conn_params)
  File "C:\Users\Veelst\AppData\Local\Programs\Python\Python36\lib\site-packages\psycopg2\__init__.py", line 126, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: fe_sendauth: no password supplied

i tried to ignore it and proceed but i just get it everytime, no idea what to do, sorry if its such a newbie question in python i know nothing about it!

thanks for help

Double-page handling in the reader

The current implementation of double-page mode has issues when there are pre-stitched spreads in an otherwise normal chapter.
When it should be leaving it as a standalone image, it puts it as part of another spread, messing up the page count and spreads thereafter irrevocably thanks to the implementation of double-page mode. Although I like the implementation otherwise, this should be fixed.
Example: https://guya.moe/proxy/imgur/QhQijGx/1/11

Other readers e.g. mcomix and mangadex handle this more gracefully by looking at the resolution or ratio of the image.

cubari: Custom scrollbar uses move cursor instead of default (pointer) cursor

The custom scrollbar should use the pointer cursor rather than the move (grabber) cursor. It may also be possible to use CSS to change the look of the scrollbar rather than inventing a custom one, but I would imagine there is some functional reason for using a custom one here other than looks.

Cursor before:

image

Cursor after:

image

It's better UX to have scrollbar replacements retain the same pointer as other scrollbars; else, it ruins the illusion and feels bad.

The AGPL licence is the web app version of the GPL so maybe you want to check it out.

First amazing app. You have motivated me to read the manga after finishing the anime. Thanks a lot <3

Second you've made it libre/open source, this is even better! :D

<end-fanboying-fangirling/>

The actual point

So the AGPL is the web app version of the GPL otherwise the copyleft won't be applied in practice.

https://en.wikipedia.org/wiki/GNU_Affero_General_Public_License

I guess copyleft is your intent since you are using the GPL.

Since you seems to have only 3 copyright holders, changing to the AGPL is doable if you want you.

Migrate Kaguya to another host

Cubari.moe support now Imgbb host, this image host support lossless image compression hosts (32mb per file)
you can set never expire to your images/albums. it is already known, i think everybody knows about that, but Imgur host compress all images that has a storage larger than 1mb.

anyway thanks for this website, it is brilliant.

Download chapter naming bug when switching chapter

The download system uses the current chapter for naming the file
https://github.com/appu1232/guyamoe/blob/4f9606bcfdbabc9da0c06755ea7ee5de861d3041/reader/static/js/init.js#L3607

This is not correct because there's no guarantee that is same chapter that was downloaded, in fact if you click on download and switch chapter immediately the chapter download is the previous one but the name refers to the current one.
It would be better to save the name of the chapter being downloaded in the local function of the Download manager and pass it as an argument to initiateDownload function, that way would keep the correct name even if the chapter is changed in the UI.

Add Imgbox.com

support imgbox.com to be used cross your proxy like imgur
here a test chapter: OPM140

ps: Imgur does compression on anything larger than 1mb. Basically all colours & spreads which is less than ideal.
imgbox don't.

Add prev/next in volume cover modal to quickly view different covers

Self-explanatory.

Mockup

image

Implementation

  • Hide or disable prev if on the first volume
  • Hide or disable next if on the latest volume
  • Don't make a dropdown menu because that would be an ugly thing to put in the modal that would rarely be used

Extra

Also consider increasing the size of the modal/the volume cover image. On 1920x1080, the volume cover is only about 4.5x larger when enlarged.

About page very out of date

Reproducing (?)

Go to the Guya.moe about section

  • We have proxies for mangadex (replace mangadex.org in the url with guya.moe for whatever manga you're reading), nh (same way as md), and all sites that use the foolslide comic reader (jaiminisbox, helveticascans, a certain nsfw cafe, and more). For foolslide sites, add guya.moe/fs/ before the entire link (e.g. https://guya.moe/fs/https://helveticascans.com/r/series/mousou-telepathy/).

The features advertised do not work, and the example link doesnt either!

Looks like you moved this feature over to here https://proxy.cubari.moe/#/

Getting 500 server error for my gdrive gist

I have two gdrive gists. One that I created 5 months ago and one that I created just now. The previous one works very well but the recent one gives 500 error whatever I do. The unix timestamps are correct (I think) as mentioned in the closed issue.
The previous one is -
https://guya.moe/proxy/gist/Jszg1/
Gist - https://raw.githubusercontent.com/rohiCoder/selfhosted-manga-cubari/main/AoT(complete)

The current one - https://guya.moe/proxy/gist/Jrzu5/
Gist - https://raw.githubusercontent.com/rohiCoder/selfhosted-manga-cubari/main/Kny(complete)

Please direct me as to what I am missing.

Cubari: git.io discontinued/frozen

The primary way of aggregating lists is currently involves making a gist and then linking to it with git.io .

Unfortunately, git.io has been frozen, with an eye to discontinuation. There are a lot of ways to get around this on a technical level, but I don't know precisely what issues were being solved originally, so I will not comment. However, addressing it is a pending issue.

Invalid Host Exception

I've followed every step, and when I try to run the server, I receive the following message on browser:
image

I've already included the address in allowed hosts, but nothing changes.
image

Search not migrated to cubari URL

The search functionality for the Cubari proxy cannot be directly accessed via the cubari.moe domain, and only appears to exist at proxy.guya.moe.

Cubari gist 500-ing server

I'm trying to create a sort of master reading list for a comic contest, so I generated a cubari.moe gist that would hopefully help me with that. Unfortunately, I get a 500 response with it, like so:

https://cubari.moe/read/gist/JOiI4/

For convenience, the git.io shortened link refers to this revision of this gist: https://gist.github.com/xrabohrok/0b24ba6660c030fd9c446b9eb62d2214

My only guess is that the server is not too happy with receiving about 153 chapters in a go, but the 500 error doesn't give me a lot to go on. Love the site otherwise.

Thanks

a question

is it possible to get guya.moe's webreader template (if it's open source/freeware) ?

Group in default reader fixtures does not exist

After running init.py I get an error stating "Group matching query does not exist."

Logs
Migrations for 'reader':
  reader/migrations/0001_initial.py
    - Create model Group
    - Create model Person
    - Create model Series
    - Create model HitCount
    - Create model Volume
    - Create model ChapterIndex
    - Create model Chapter
Traceback (most recent call last):
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 173, in __get__
    rel_obj = self.field.get_cached_value(instance)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/db/models/fields/mixins.py", line 15, in get_cached_value
    return instance._state.fields_cache[cache_name]
KeyError: 'group'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/serializers/json.py", line 70, in Deserializer
    yield from PythonDeserializer(objects, **options)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/serializers/python.py", line 146, in Deserializer
    obj = base.build_instance(Model, data, using)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/serializers/base.py", line 270, in build_instance
    return Model(**data)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/db/models/base.py", line 503, in __init__
    post_init.send(sender=cls, instance=self)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/dispatch/dispatcher.py", line 177, in send
    return [
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/dispatch/dispatcher.py", line 178, in <listcomp>
    (receiver, receiver(signal=self, sender=sender, **named))
  File "/home/kay/dev/python/guyamoe/app/reader/signals.py", line 85, in remember_original_series_of_chapter
    instance.old_group_id = str(instance.group.id) if hasattr(instance, 'group') else None
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 187, in __get__
    rel_obj = self.get_object(instance)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/db/models/fields/related_descriptors.py", line 154, in get_object
    return qs.get(self.field.get_reverse_related_filter(instance))
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/db/models/query.py", line 429, in get
    raise self.model.DoesNotExist(
reader.models.DoesNotExist: Group matching query does not exist.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/management/commands/loaddata.py", line 72, in handle
    self.loaddata(fixture_labels)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/management/commands/loaddata.py", line 114, in loaddata
    self.load_label(fixture_label)
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/management/commands/loaddata.py", line 172, in load_label
    for obj in objects:
  File "/home/kay/dev/python/guyamoe/lib/python3.8/site-packages/django/core/serializers/json.py", line 74, in Deserializer
    raise DeserializationError() from exc
django.core.serializers.base.DeserializationError: Problem installing fixture '/home/kay/dev/python/guyamoe/app/./reader/fixtures/reader_fixtures.json':

Top-to-bottom but also right-to-left ?

My favorite reading style is vertical of pair page. However the manga layout is right to left. And it seem there was no setting that allow both. Could it possible?

image
image

UI_Dropdown does not target the correct element onblur.

Reproducible on MacOS only, with Firefox and Safari. The bug results in the inability to change themes (since that's the only setting element that's using UI_Dropdown at the moment).

Looks like it's related to this. I'll look into it later, just creating an issue to document this.

Themes Dropdown, arrow prevents input from receiving focus

Pretty much what's written in the title, if you click on the arrow the input will not receive focus and the options are not shown.
It's pretty strange that the dropdown arrow does nothing at all when I would imagine a user will click on it to open the dropdown (well, I do, it's very possible I'm the strange one).
document.getElementsByClassName("arrd")[0].addEventListener("click", function() {document.getElementsByClassName("dropbtn")[0].focus();});
Something like that solves the problem on my end.

I also think it would be nicer for the arrow span to cover the right part of the dropdown without a gap, currently there are 5 pixels where the cursor gets back to text (and clicking on them also opens the dropdown since the click focuses on the input)
image

Swipe gestures behave weirdly on legacy Firefox 68

Swipe gestures cannot be disabled and have no settings corresponding to them.
This makes the reader entirely unusable on my phone, since the entire reader becomes jittery and the slightest touch of the screen will cause it to switch pages, volumes, chapters, etc. The only time it's bearable is when dragging by first clicking on the top bar somewhere.

Having swipe gestures disabled would then mean that the image is entirely fixed, and no amount of sliding your finger across the screen will do anything except scroll up or down, left or right if zoomed.
Pages would be changed by enabling the tap to switch page option, or by using the top bar's controls.

Page selector overlay cannot be dismissed on mobile

The overlay remains regardless of where you tap on the screen, which causes you to skip pages and makes navigating to the next page extremely frustrating.

Tapping on the overlay should dismiss it and allow you to continue reading normally.

Additionally, the majority of the navigation bar is positioned off-screen in the mobile reader.

image

This can be easily replicated in Chrome DevTools, and seems to occur for a variety of phone sizes.

image

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.