From 1360b7afc516c7757c93c7a455e0c665d961d4ed Mon Sep 17 00:00:00 2001 From: glax Date: Sat, 6 Sep 2025 17:27:07 +0200 Subject: [PATCH] Update Readme and License --- DB-Layout.png | Bin 37522 -> 49631 bytes DB-Layout.uxf | 275 ++++++++++++-------- LICENSE.txt | 678 +------------------------------------------------- README.md | 36 ++- 4 files changed, 192 insertions(+), 797 deletions(-) diff --git a/DB-Layout.png b/DB-Layout.png index 38bfd9fb1f749805264702e1ce998f37acd487ad..7e14976a80353dfbb5d5161837c5c06d68c78464 100644 GIT binary patch literal 49631 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
Go{xg)g zYtE>ObT^1P35!YiS>)r=%x!(X_VhZMi?$1R+EJMni%}Dtnvg7Y__iIi%a*%Eq+%-w z7<~#Bu_AS_a1^$S7luVm7Yy92<>_AVON?)?q$C8s3Y1~Wy=5$Qd&8}V8(N~We}W?_ zsZQ&kZd z>JJFKc`+yd8JE{uxZn!(<+@W5&Srrh-^J{T)I-yzKq;kDwXfA9Vtlr+EHEMajO)bU z(mU`#aw;2BY4rzv)6B2ptd*4SObU3>d z=zHGsSxv`myY&C&vdVRg6_u6ngSkx--o@Y47XttS1Q(?LetmZd^-Z3Xf8Y9=w}%{6 zRRg;@wr-7NA}o*`C;ZAt;xe=Vi$zx7Ujl(GMh57=2Biqj(HTlVQk7wR5Fd@$Y3 zuPZ@g7$S53g-GT@!VaKS+oo;agDXyTRk6uZ~?g*0BIeIg{Foeq~uL=eT@v@3}0=- z;+S%t{^w><5&zP4EceQ`n?$5>W~T8X#aIy{`YYN;AX+ zpvTNn@TMYd3*>{{bOh2|#UgyNy>!pK@BhELPwod^RjEd`aMvJx#3lKv-yvQ`#sO;? z&YuA^$^OGzKl`C0%is}Pwm^tMwS+0EG2P6^%c~hx5GCp#iz}E{G_tHe(<_MG3kkV4 zGcio)Kyc|QNKAG@!mFsUR)>@HGAc4Xz3!IWtAuNvD48aHH|0-DMlB}X32oF>>m&Y% z#9tKmDu2mk-vZ0q=EY6t^dk&B9pTo8lFFqV|IJAsK!uixzofi8m{(gCx>~mN=Tm3T zM)ze^_80+h-Q98s@pu1~L1g=;ylc~~Gu=XbdgU1dX^pbpECy=-q6PD^s-l2^&JA!V z0Dm<^&?1iw(~@RhQP_-BrmNN0{E@w$vyNFlX%Ss}5MH~3ue@9tZjkg*FAz53E5MkP z2`u?qdisj9dU$PkTN;j&x>39h>1LYb34~96xgcKcTf+l|t~BRU4WIPctEi};oPs;v zlPn`6gR(=9-w94}5SFVXG+YRujx)2g^36ZeP2AyJwP)krH}7&LU0-dk9pM_z%d~N$ zh}}ph^xNHP8Slk3&YXE{&;Uicg5AflSl<&M=%cXh=j!cpH89mJA~zx@G+Dmo&Wd-M z?0U4|5y$rJlR~n;R}TTj+viQoLbv0W{gFz~`q*cl8rrmc3oJxi+DHd!4rp7K+})BD zPoPM%4>45$)TS)0(BPvDp2~;ps|1S;i+OAnqrmxKS?zCRA4$Qy=0vSSsMM_0DZNoX z{Bm47ck=EX`tZ!xLJ2E@q6~?b4^M-#iY@s{TA?2P6|S$Z$S9xEB8}X0W@alIVb#!2^?|YncWOzY7Y6}n6LMl zirF;LpY!{cslE_oPtI&WKFhGs|7fqB(vUYdWi;9c+WxS#bboVpdLiEv!nFF=@1)CI z2nwRu%j)@6<|vrR(P;67sC6}R2}g^cpRPp`=ikG}7G)}5>dp)c@5^S|DStPEKbUVF z_-oYcTyde=nMLT`%Rv**TXg@$M?T^G!a{hp%w2l#ocuF2-Q{vVy2!FgxVW0}viIL3 zY{~jpj~9rT25TGqV`};H;{389{}5{|m+%-!c{BH%V~TqBUo6pXFU6j}hYB~f1t*y9 zl1U;D|1tF)il^E^TVg?GIj;RdW>pjVuI51mh0?{~)BND|?={5P z|LnzEOc(Fz7|F-KfZs%BPdJswc}v0yiixyE4djmb=pj1m!Kp% zoAs+A(6}-hjK5&qATc*VM&HBRva&$*V{{aGP(~i*JA5rz3YO_xL-;;hEB%5k^Qd`M zXk%&WGApgCRyxIKM#4HNkXs`OAk%WQta(yRedpkCyYH zL~@$#(^Lo+R@BnbJ*oc_`2Wiz7`_x$@lc@c$vCj(P%MnBE82Fzi+ZMl}$5UM954HQjvNgJ3vnX zvlcNpn(@{6AA#$khB<*z_gEHxDB_QT$<~ykc5AuoKm~2%2I`)|@7=csXbug;77glf zO9%v$sa;n-OLLdr=^Uhw)!oTl?8D|XkXkG2!#b-;8PfzQiNXpm8XkJ6wWDZKIsJL_ zGCJ6%xpwb%=<-vB8a4>w7Vrb?x#UO*JLo7Rs7ll&-0`$de^$9JJvNryg=%#zO^MgE z%=Z|Znbzg;e27==m;cmp`n8DZ$&$NG0*3KftsdFS%Zria1P13l9fn_t6>-A)r@z%GRJ6vc zKPfn=s%j5S!3hL6s34ajqnPTqRzKD&ktyfE`de!Q%l#BRnoDsQ6$=i@A05m+5dULG z$J`4#Hy{uz$#*1`{dVj<>7DGs$rkXF!PSOlLBhs9R;#Jp=2Rv+?&CDW4lf`O1qjX% zA+r|X>)rD4>g{4FtJ8ke_qKy=Ms%!V6JKA`q4g`lv^gs<8amCjky4JVc(D4|0E>gw zlqACTN=iyj*b?O=LD|wu6d#1~5xxMB)ZI>B(;7{u-)hdSb+A-Y^1sVedW+ztp~0jI zN7xfj|4!4N_rmX9)hm&O1@(abpdQGJgIppK6BB{O0;4}BXyyZw5&;DiH=OgwFoklrfms#J{jqo8PQ;+taLadnAqker`;^~ zKst1{9Mj3p%I zE}>N!#4n!05iGJKT9x7KfA*|W#)H(0Pw<&Lu5_sq;sxmT=Bq=wb52t)WSOG;wm+6l z(h3y6YGY%QRbY+;BUG)U5 zDCl_f=yL7Z6aRH4_UvM>s-Ps1FZeK4yUu$Mqc%x6*dkdFQVo8gd{56;QR}!HGOX?E z#QC|j>Eu9WTr9hqyq7gc+*8@m{SSO21U$AVpN|!n7)Z2pX$zK)ef`wj@UC>^>WfOb z?(b@2`~+kxHY0WoHf0uYe26FPi|r4+;I3VX-G%MJ^~1nY6u={4AL=;u8JsN4gdq~w z_CL2=YkG(#{s(zhV6{|D6wX|zN!X6mVV_4QyDNgmNz7)ROafnE;&?$ZJJ#}-z8lK% z6*M&HpRI>3F@m1zkl|Kd*eC(s{Y9*zhx^>Prq9e_f1^darlw|=nBF&rI zYhby#Wie^yI2wePM^P9=J@M58lFc06%q53wAl$G82)pZq4d_)uY?3*+JISKG&~^Lq zhv=2|hT?|J*gcF-1q9uDK5e(S__gZCN4tGq8voiv#9!O7KAOMHi%rbd9RI8!Hv9&e z6hTx!RL^oBkFcw;sgf|D3a`$q;bbm3s zBnuC&6IWeb_#`ErQ00o1PFF1a-K>}lvR^lj$9;Gx*;px36hMP{n5sUg-@ z{OWf`j>S#cE6B=%ap#))3{P}#3CiAGw#%0D?Dw7KXud?smViDAx(qpug3ck-cT;dZ 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 WVrCVpRoO^9pYrzI3MumYz5WYz%l2LX literal 37522 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 diff --git a/DB-Layout.uxf b/DB-Layout.uxf index 3f6fa0e..a075f45 100644 --- a/DB-Layout.uxf +++ b/DB-Layout.uxf @@ -4,8 +4,8 @@ UMLClass - 1160 - 680 + 930 + 590 100 40 @@ -15,8 +15,8 @@ UMLClass - 900 - 680 + 670 + 590 140 40 @@ -26,53 +26,53 @@ UMLClass - 500 - 800 - 80 + 250 + 710 + 120 40 - /Job/ + /BaseWorker/ UMLClass - 680 - 800 + 450 + 710 160 40 - /JobWithDownload/ + /BaseWorkerWithContext/ UMLClass - 680 - 680 - 160 + 440 + 590 + 180 40 - RetrieveChaptersJob - + DownloadChapterFrom +MangaConnectorWorker Relation - 570 - 810 - 130 + 360 + 720 + 110 30 lt=<<- - 10.0;10.0;110.0;10.0 + 10.0;10.0;90.0;10.0 Relation - 750 - 710 + 520 + 620 30 110 @@ -82,8 +82,8 @@ Relation - 1170 - 710 + 940 + 620 30 230 @@ -93,8 +93,8 @@ Relation - 1030 - 820 + 800 + 730 150 140 @@ -104,8 +104,8 @@ Relation - 960 - 710 + 730 + 620 30 110 @@ -115,8 +115,8 @@ Relation - 830 - 810 + 600 + 720 90 30 @@ -126,8 +126,8 @@ UMLClass - 1410 - 680 + 1180 + 590 100 40 @@ -137,8 +137,8 @@ Relation - 1250 - 690 + 1020 + 600 180 30 @@ -148,8 +148,8 @@ UMLClass - 1410 - 620 + 1180 + 530 100 40 @@ -159,8 +159,8 @@ UMLClass - 1410 - 560 + 1180 + 470 100 40 @@ -170,8 +170,8 @@ UMLClass - 1410 - 500 + 1180 + 410 100 40 @@ -181,8 +181,8 @@ Relation - 1200 - 510 + 970 + 420 230 190 @@ -192,8 +192,8 @@ Relation - 1230 - 570 + 1000 + 480 200 130 @@ -203,8 +203,8 @@ Relation - 1250 - 630 + 1020 + 540 180 70 @@ -214,8 +214,8 @@ UMLClass - 1410 - 440 + 1180 + 350 100 40 @@ -225,8 +225,8 @@ Relation - 1170 - 450 + 940 + 360 260 250 @@ -236,8 +236,8 @@ UMLClass - 1380 - 800 + 1150 + 710 160 40 @@ -247,8 +247,8 @@ Relation - 1230 - 710 + 1000 + 620 170 130 @@ -258,8 +258,8 @@ UMLClass - 1650 - 800 + 1400 + 710 140 40 @@ -269,19 +269,19 @@ Relation - 1530 - 810 - 140 + 1300 + 720 + 120 30 lt=- - 120.0;10.0;10.0;10.0 + 100.0;10.0;10.0;10.0 UMLUseCase - 1660 - 680 + 1410 + 590 120 40 @@ -291,19 +291,19 @@ Relation - 1500 - 690 - 180 + 1270 + 600 + 160 30 lt=- - 160.0;10.0;10.0;10.0 + 140.0;10.0;10.0;10.0 UMLClass - 900 - 800 + 670 + 710 140 40 @@ -313,8 +313,8 @@ Relation - 1030 - 690 + 800 + 600 150 140 @@ -324,8 +324,8 @@ UMLClass - 1160 - 920 + 930 + 830 100 40 @@ -336,20 +336,20 @@ UMLClass - 460 - 680 + 230 + 590 160 40 - UpdateChapters -DownloadedJob + MoveFileOrFolder +Worker Relation - 530 - 710 + 300 + 620 30 110 @@ -359,8 +359,8 @@ DownloadedJob UMLClass - 1970 - 640 + 1630 + 550 110 40 @@ -371,8 +371,8 @@ Komga UMLClass - 1970 - 710 + 1630 + 620 110 40 @@ -383,8 +383,8 @@ Kavita UMLPackage - 1930 - 600 + 1570 + 510 190 170 @@ -394,21 +394,21 @@ Kavita Relation - 1770 - 690 - 180 + 1520 + 600 + 70 30 lt=- - 160.0;10.0;10.0;10.0 + 50.0;10.0;10.0;10.0 UMLClass - 710 - 910 + 480 + 820 100 - 30 + 40 /Identifiable/ @@ -416,8 +416,8 @@ Kavita Relation - 750 - 830 + 520 + 740 30 100 @@ -427,8 +427,8 @@ Kavita Relation - 530 - 830 + 300 + 740 200 120 @@ -438,23 +438,92 @@ Kavita Relation - 750 - 930 + 520 + 850 480 - 110 + 100 lt=<<- - 10.0;10.0;10.0;90.0;460.0;90.0;460.0;30.0 + 10.0;10.0;10.0;80.0;460.0;80.0;460.0;20.0 Relation - 800 - 670 + 570 + 610 380 - 280 + 250 lt=<<- - 10.0;260.0;260.0;260.0;260.0;10.0;360.0;10.0 + 10.0;230.0;340.0;230.0;340.0;10.0;360.0;10.0 + + + UMLPackage + + 0 + 510 + 630 + 460 + + Workers +-- + + + + UMLClass + + 40 + 710 + 120 + 40 + + /IPeriodicWorker/ + + + + Relation + + 150 + 720 + 120 + 30 + + lt=<<- + 100.0;10.0;10.0;10.0 + + + Relation + + 90 + 620 + 30 + 110 + + lt=<<- + 10.0;90.0;10.0;10.0 + + + UMLClass + + 20 + 590 + 160 + 40 + + CheckForNewChapters +Worker + + + + UMLPackage + + 660 + 290 + 710 + 680 + + MangaContext +-- + diff --git a/LICENSE.txt b/LICENSE.txt index a28fa47..f7322db 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,674 +1,4 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. +Tranga +Docker-Container to monitor (Manga) Scanlation-Sites for download new chapters. +Copyright (C) 2025 C9Glax +This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . \ No newline at end of file diff --git a/README.md b/README.md index 3599b75..267298c 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,12 @@ Last Run - GitHub branch check runs - Last Run + GitHub branch check runs + Last Run + + + GitHub branch check runs + Last Run @@ -40,22 +44,21 @@ Notifications can be sent to your devices using [Gotify](https://gotify.net/), [ ## What this program does and does *not* do -DOES: Download Images from a Website.
-DOES: Create Archives.
+*DOES*: Download Images from a Website.
+*DOES*: Create Archives with those images.
-### how: +_**how**?_ Tranga (this repository) is a REST-API and worker in one. Tranga provides REST-Endpoints to configure workers (Jobs). Requests include searches for Manga, creating and starting Jobs such as downloading available chapters. -For available endpoints check `/swagger` +For available endpoints check `http(s):///swagger` -This repository *does not* include a frontend. A frontend can take many forms, such as a website: +**This repository** _**does not**_ include a frontend. A frontend can take many forms, such as a website: [tranga-website](https://github.com/C9Glax/tranga-website) When downloading a chapter (meaning the images that make-up the manga) from a Website, Tranga will -additionally try and scrape Metadata from the same website ~~or enhance it from third-party sources~~ -([tbd issue](https://github.com/C9Glax/tranga/issues/280)). +additionally try and fetch Metadata from the same website or enhance it from third-party sources. Downloaded images can be jpeg-compressed and/or made black and white to save on diskspace (measured at least a 50% reduction in size, without a significant loss of quality). @@ -160,20 +163,13 @@ Tranga is using a code-first Entity-Framework Core approach. If you modify the d - `Program.cs` Configuration for ASP.NET, Swagger (also in `NamedSwaggerGenOptions.cs`) - `Tranga.cs` Worker-Logic -- `Schema/` Entity-Framework - - `Schema/Jobs/` + Logic for Jobs - - `Schema/**/` + Logic for ** - - `Schema/Contexts/` EF configuration -- `MangaDownloadClients/` Networking-Clients for Scraping -- `Controllers/` ASP.NET Controllers (Endpoints) -- `APIEndpointRecords/` Records for API-Requests with specific Request-Types (Body) +- `Schema/**` Entity-Framework Schema Definitions +- `MangaDownloadClients/**` Networking-Clients for Scraping +- `Controllers/**` ASP.NET Controllers (Endpoints) If you want to add a new Website-Connector:
1. Copy one of the existing connectors, or start from scratch and inherit from `API.Schema.MangaConnectors.MangaConnector`. -2. Add the new Connector as Object-Instance in `Program.cs` to the MangaConnector-Array `connectors`. -3. In `PgsqlContext.cs` add the Discriminator for the Connector (the value is the name of the connector, as defined -in the constructor). -4. In `Program.cs` add a new Object to the Array. +2. Add the new Connector as Object-Instance in `Tranga.cs` to the MangaConnector-Array `connectors`. ### How to test locally