From 61a8585e4352c6a79670a07d952d7cce0d2e4a5c Mon Sep 17 00:00:00 2001 From: WhatFox Date: Wed, 18 Nov 2015 20:00:26 +0000 Subject: [PATCH] Only allow private trackers --- README.md | 81 +++---- src/Jackett/Content/logos/animetorrents.png | Bin 8102 -> 0 bytes src/Jackett/Content/logos/bakabt.png | Bin 2980 -> 0 bytes src/Jackett/Content/logos/rarbg.png | Bin 9036 -> 0 bytes src/Jackett/Content/logos/rutor.png | Bin 15946 -> 0 bytes src/Jackett/Content/logos/showrss.png | Bin 4156 -> 0 bytes src/Jackett/Content/logos/strike.png | Bin 1725 -> 0 bytes src/Jackett/Content/logos/t411.png | Bin 9516 -> 0 bytes src/Jackett/Content/logos/thepiratebay.png | Bin 7800 -> 0 bytes src/Jackett/Content/logos/torrentz.png | Bin 5683 -> 0 bytes src/Jackett/Indexers/AnimeTorrents.cs | 176 -------------- src/Jackett/Indexers/BakaBT.cs | 196 --------------- src/Jackett/Indexers/RUTor.cs | 233 ------------------ src/Jackett/Indexers/Rarbg.cs | 187 --------------- src/Jackett/Indexers/ShowRSS.cs | 132 ----------- src/Jackett/Indexers/Strike.cs | 173 -------------- src/Jackett/Indexers/T411.cs | 249 -------------------- src/Jackett/Indexers/ThePirateBay.cs | 161 ------------- src/Jackett/Indexers/Torrentz.cs | 212 ----------------- src/Jackett/Jackett.csproj | 36 --- 20 files changed, 35 insertions(+), 1801 deletions(-) delete mode 100644 src/Jackett/Content/logos/animetorrents.png delete mode 100644 src/Jackett/Content/logos/bakabt.png delete mode 100644 src/Jackett/Content/logos/rarbg.png delete mode 100644 src/Jackett/Content/logos/rutor.png delete mode 100644 src/Jackett/Content/logos/showrss.png delete mode 100644 src/Jackett/Content/logos/strike.png delete mode 100644 src/Jackett/Content/logos/t411.png delete mode 100644 src/Jackett/Content/logos/thepiratebay.png delete mode 100644 src/Jackett/Content/logos/torrentz.png delete mode 100644 src/Jackett/Indexers/AnimeTorrents.cs delete mode 100644 src/Jackett/Indexers/BakaBT.cs delete mode 100644 src/Jackett/Indexers/RUTor.cs delete mode 100644 src/Jackett/Indexers/Rarbg.cs delete mode 100644 src/Jackett/Indexers/ShowRSS.cs delete mode 100644 src/Jackett/Indexers/Strike.cs delete mode 100644 src/Jackett/Indexers/T411.cs delete mode 100644 src/Jackett/Indexers/ThePirateBay.cs delete mode 100644 src/Jackett/Indexers/Torrentz.cs diff --git a/README.md b/README.md index 8ec4c86cb..5e97dc36c 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,10 @@ This project is a new fork and is recruiting development help. If you are able to help out please contact us. -#### Overview -This software creates a [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/master/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) API server on your machine. Torznab enables software such as [Sonarr](https://sonarr.tv) to access data from your favorite indexers in a similar fashion to rss but with added features such as searching. TorrentPotato is an interface accessible to [CouchPotato](https://couchpota.to/). - Jackett works as a proxy server: it translates queries from apps (Sonarr, SickRage, CouchPotato, Mylar, etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps. -We were previously focused on TV but are working on extending searches to allow for searching other items such as movies, comics, and music. +Developer note: The software implments the [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/master/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs. + #### Supported Systems @@ -15,47 +13,38 @@ We were previously focused on TV but are working on extending searches to allow * Linux and OSX using Mono 4 (v3 should work but you may experience crashes). -#### Supported Trackers - * [AlphaRatio](https://alpharatio.cc/) - * [AnimeBytes](https://animebytes.tv/) - * [AnimeTorrents](http://animetorrents.me/) - * [Avistaz](https://avistaz.to/) - * [BakaBT](http://bakabt.me/) - * [bB](http://reddit.com/r/baconbits) - * [BeyondHD](https://beyondhd.me/) - * [BIT-HDTV](https://www.bit-hdtv.com) - * [BitMeTV](http://www.bitmetv.org/) - * [BlueTigers](https://www.bluetigers.ca/) - * [BTN](http://broadcasthe.net) - * [Demonoid](http://www.demonoid.pw/) - * [EuTorrents](https://eutorrents.to/) - * [FileList](http://filelist.ro/) - * [FrenchTorrentDb](http://www.frenchtorrentdb.com/) - * [Freshon](https://freshon.tv/) - * [HD-Space](https://hd-space.org/) - * [HD-Torrents.org](https://hd-torrents.org/) - * [Immortalseed.me](http://immortalseed.me) - * [IPTorrents](https://iptorrents.com/) - * [MoreThan.tv](https://morethan.tv/) - * [NextGen](https://nxtgn.org/) - * [pretome](https://pretome.info) - * [PrivateHD](https://privatehd.to/) - * [RARBG](https://rarbg.to/) - * [RuTor](http://rutor.org/) - * [SceneAccess](https://sceneaccess.eu/login) - * [SceneTime](https://www.scenetime.com/) - * [Shazbat](www.shazbat.tv/login) - * [ShowRSS](https://showrss.info/) - * [Strike](https://getstrike.net/) - * [T411](http://www.t411.io/) - * [TehConnection](https://tehconnection.eu/) - * [The Pirate Bay](https://thepiratebay.se/) - * [TorrentBytes](https://www.torrentbytes.net/) - * [TorrentDay](https://torrentday.eu/) - * [TorrentLeech](http://www.torrentleech.org/) - * [TorrentShack](http://torrentshack.me/) - * [Torrentz](https://torrentz.eu/) - * [TV Chaos UK](https://tvchaosuk.com/) +#### Supported Private Trackers + * AlphaRatio + * AnimeBytes + * Avistaz + * BakaBT + * bB + * BeyondHD + * BIT-HDTV + * BitMeTV + * BlueTigers + * BTN + * EuTorrents + * FileList + * Freshon + * HD-Space + * HD-Torrents + * Immortalseed + * IPTorrents + * MoreThan + * NextGen + * Pretome + * PrivateHD + * SceneAccess + * SceneTime + * Shazbat + * Strike + * TehConnection + * TorrentBytes + * TorrentDay + * TorrentLeech + * TorrentShack + * TV Chaos UK #### Installation on Windows @@ -97,7 +86,7 @@ Try running with the "--SSLFix true" if you are on Redhat/Fedora/NNS based libcu You can get additional logging with the switches "-t -l". Please post logs if you are unable to resolve your issue with these switches ensuring to remove your username/password/cookies. ### Contributing -All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/zone117x/Jackett/issues). It is recommended to use Visual studio 2015 when making code changes in this project. +All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/zone117x/Jackett/issues). It is recommended to use Visual studio 2015 when making code changes in this project. We currently only support private trackers. ### Screenshots diff --git a/src/Jackett/Content/logos/animetorrents.png b/src/Jackett/Content/logos/animetorrents.png deleted file mode 100644 index d49d1da91d0d0fcdd6dc869fd9722379213b1c6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8102 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 diff --git a/src/Jackett/Content/logos/bakabt.png b/src/Jackett/Content/logos/bakabt.png deleted file mode 100644 index 9754ce3e3cacf2279c142fea45d8c66e3db892c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2980 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 diff --git a/src/Jackett/Content/logos/showrss.png b/src/Jackett/Content/logos/showrss.png deleted file mode 100644 index 77b8ed46f7bea1389bc216f4efae82759ca8be31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4156 zcmV-C5X0|@P)JNvWp^{X5T^ybGqAo+!HX8ydetj`S6|(@A>ea5AXT#$_6t`$bkcdB!?1{ zOQcjtDL5ZKXJn*cq7M!Pl1!wgKA3Ql1NrcI(|dYsHX?*TBuJJm(7uQsx*b4b$ocRB z5U=k4cDGiSDqk0BKelBq70Ql0Qho2|#`65;@|Vt4+yD6CCqy<9P_OMDRu{0f?<=$2 zyN&}Rg+ag9t1Qj&xE>!Y{;KXUO2&fRBbY9gZZEI*zwO$;sp6+%AqWbL6O4bHn40|X zxwcu2!)T^let9}N$R(wcM2ds~Jlx)#AN@W*It|0{{~!Sp*FO&9I6P^cgx%{az%T=W zft0PupZcL8NMy#_TCG+iirrw)Y($N-KfJ@qoD7MaDge*ynN4V2MI6P?`Om%YC28`K zwrQ(Pt%%TqEs8)3l&-55a3k1_po+K@R1mO$dj(O8D@DOg0RdNv_*KMO6~U^gwiZN_ z+S>FhUoXkKGxI;TO=1XCT#3GLf57E1cXsEVGjnIKy3jQ-KRxs5JMW!8`%8d;1|cJi z46xIqqaj$zdE}-WK|+0ElCoRO(%{|s)UlT>iFX0 z51xDc;rs6@_uVs0%+gH;0e~nHASnQJvG?ea3!i)h6+^CUSp?6t=N@|I*?k8dkU-Xn z?;fTnFO)IgxpU1>Ypj}&K@bdF@u8C$vZC3$bH~83Be6p1g+MT8GfhoiLf26n-|$e- z(%faAm`E{afWX2-SV9!d=ci*kgDrYdsLCE4eeg~&1G+8lwedu7dXk}PAVmk4#-U|F zStcCG69mXo#o+U~3LdyPv8xvO+IR;f}uc1sMQ#S1@Yh z1;ObFs+1E%PzFHD6F_9paV)wS) zx4n4q@R{SukRJ=lV zpbvl;>)*L*NIY@nfd?bXwb=E?Jy zTm9>YckkKTWovwWJLm3_zW)5PH(!2X@{hB!Mgf@?j3==Op+wMo%Fsz=pa*4Ess@Gz z4?ObN-n;h;IfN!jtl*!|^ZuK&-rD$?nVIqN@tpE(yFE2A;VHvCdvr)HKo9^pK`xbm zT_Y4=Xbrad2U;Q6hD{r_$p1y7Yc~toC+eOG#F~;1DRw{1VMASk^+WGnI+&zrl~=Q0}v!$ z;9l-M^B&II=bYOO?XC6J8`gXMalf_KW`BGA_|9JIch>LQcYo&``Cm7i5v~0bgcbI` zHQNgn+FwlDe?PYN8Xnf<O|dI@%3myzM&wLB~lwl`^1^#MR>R!_z%;K%ddZkjhcGk(3u zvDC!?$qE3d7$^g*jMXViM@{RrYOI}QOJ-;3wK-MqG$c^~-1o`C0bi&KK)Q+K(0K94 zIPu7M;m8zIRgBCxPz+Y!n6J-gjs-)VA1WFT50BwLpDJ8W1;nTjPk@YA{`<|ME)XB| zho6s!I$ySArg-;=vT8tCSAxiZ*fw`vOih~jcUvTC7mJI+JY3^vzQP)fUGk`=32LHM zkyhmpwY-YE#;}eR0Q?m|)Ul*uxHC&h52wD(CiZvdP39G}xmN(W*J;7`rPgvS(f zYmYJ85v2j4z}4{i1g_8-rUN0>QMmXKktITDzZl1*0%<2O9UNgk93bWPLn(mE>LK1b zs4iAeuZ_ECl1=J~#Sul5$eRd(R=~xwlJF6p8|KWEBt`*nW?4p7GEo;tWEqS^i$loo zl1CTAk7_RW%?ddg@CE&$UPsI~NoOr?`<5vS6tjS7_tUVgN+t}a8v~O7ES^S_0+LOH zsbfl~u{%I#&hwDH4Y?XNzrU0QxXOhPHy~oh?H3G(hOk zl~~Q+2%66n6>eV|vHrE`iSuV4O-VND8)-m^W%nc|Caqpvd$~$u_tb%XNh=ngD9F~LC6n`!TbM4ZDY9^;UN(cOvMDnZrn47-j&MX$IH$Z5VWQB7|yiBm=cC``zOT+C| z(*vW14$fE+ja5SksrP_Yi*E!sHf}tc_I3iI|Sn`OQL2uKb^ZNjshXa$Gs5}=Haw{ z##EtGVQ&BS58r-%z$a1Rgb=oJg^&S^`#g}j!AgL5IT|JdCdUPuuE|8|JpQ^wl{}|A zQ#wh!@(FA{rETtHEnk?MJNJ8$6d>e0$(@)Bucrwer)Au!0tiPJKvaPu_&0sC5&w13 z{xEOX_ofDz?l)7n^-f*t(y*OzYh{eim6tB^^;$M&$no4viDesWuB{IVTIl6kl)8f= z&zF~l`*^H=$*-oW0%P3q^S!O1v*vpaD%|wG5>|I;p|^9woEZcPjkUGQUmU$=wA<40 zLvLNZN(o2|ogLxjMlVf~!kHB)1BknN!BaEEip6|oq*Oka&wWzJ=_&m1DW=R48Q!ln z9rO{?0Neqj6u{>6GVdSGfAcQnZeVrGz&8|__YR~0v;)wd+4YpUXr!rn0})$^Do}(# zEYtR@*@(Y+p(@PRdx?+R)_HS|Wo2Kh_=an{uK~_~Q5-SaeSPptOuIn?XRccn<~gwN zV};t>gxClVr=0iJ(6JRCHhkd5kU)`T^o>ocCi^ZOKkUJs+n2s5jU46i@ms-BBRx;+ zKI>>|Sm{4{&1B!U#s-D>ZzFL!Albm20SsyOhExY38Q=`SeddHazeDOakQ$bnnVSV{ z`D}il3%~O*mT znb?TejF7X%#}gOKU+(Yo*CEeF40Vc`7Ff0~p8~Fwlq?(Ok~sTS&ScUga(BYI`9quv zwNKR z*6?@M1&#gq?U3+c9w!TOv|SiexfoIPF7U>}Eh_=Sxj3rW#yoc<)S7=TZq0RVEA)o? zv)T_r+DoWTEa(SQ0CRbb;d*B4E+>QTMZ(|LPKqSjTFdzyd$hxz{V7{j42)$0)sgK0 zN3qk#bW4H*4ySMH@8s?`_4Ux`_#Qob+6jWduyziP*xsI~g)`bL6;IjDjwsGxpJ5bG zS9Sh={SVy$fC5uldKmMZv!}=7efr1%c=-DF?%TJe?q*xl9T)E*^r;(HZ!hx${e${j zz5D)o=-2?u@s8|Bds#*bGup%X)a~yg+W|-1MmR(F-Y!qz_P*^m;Dt?g#%epc%^vDO z?P&+WNb!z+Mm*la5tcTO-3SeSPK$r-9SL!)cM7BA$C;a6flfGYbWWZi9wZ zo@~uE8`=&eZ;PK9yeeSq+Lr?|qN5vXYg94C+SlwVN_ATnE=r4wHg>cSBAfJWDRHq| zqTV@o?1-8m6bxIP{@{R5^T~OLZ6bsqqJ9_A*w|Vc(sFnld-o)fWkgI;-5z7fG-3BZ zA+ra&ySMqXVa&O8h-p%lA7RlTT=~?b^Jns(l6H2Na{3vMjN-3;Lilz}6rD$e0!3wH z+toi(!QwjF4J|*5j7f8`1pqY&u_7^@!CkAOB5UesY2rHc4^@50qh%4RXAOug^%DV; z4x*gQD5N9Hg)p5VxLwAQOsr?hCStC^`b*gO9f6IOH7blEEjGmy(+#ArCdM0twEkA3 z!CeYUe{YYD1poj500#M6?;k@cBz_Q&c*G+f@rXw};t@|)jP4h0+tQr?00004&PXu*S)~&(Zbw_?EP|fUdMBb$?Tl zna0}P*yiZs?CvXffo!3tywumj+1!=8z&e47DRzKuqNu3H%hTiKGJJ*F=jmUWpoFlt z=kW1moTIGD&i4BH_xk$&{{BIQj!ur2SCpH?+1xpRiLlJjGkk{5-{RTk=##p?QID4{ zd4ra`!J59qoxsJQ!p5S+$T)wArpC%vlbWf>%uS7zuFKC@l$?dJx4YBV>+?(JG zV_xO9OvGw@*eyp-biIVvH`}+L+`~3WZueF1(weR)yvCYt9 zo1$HppR&!-vd+=7&eFBe)3(slxYE_R($;^ivnX|cV40x3)Y!e%*uK`;zt-7MkC$Sb zqBVYpK!uKpv$fGt-JA#X9pr)I@!<@jx;Op&0h>@Pb#pUntpTWjF zf{W_$@}a`V#oFER_V!toob>qkq{Yc_qpJ4#`EsSJb*HVW$jqzB&0LnA{Qdp?{{F4Y z&P$AxZK0^`^z;)uA$I@(1Y$`S`+4rW-(bvMNzDx1@jKIXWEQY-zNF@b&OXOxNz-Nkw;hq{ftE}WplC{} zT?t6L2mcv5dNNlm;QNDc{^fh6TF_Dvmyt^*b$y{v^rN?*g6yB1ILmd0 zZqV{wqfSejIT7ewA!%@EhKjQ86I^fTd;x!3#x2hROP5K54g44&W$YHFO%}j-(B!Ti zx>aNE=55Jp4(x&x3m14)r=j2g1}FwM3OYghi@7Sdb`p#~CMgL@g{Amo1Xiu?d*?o;+w!2~`S0t0)&s1`3KYKxh)j zQ;-F>jwxW@8q@`SO)miOjcg-61^$$SI#)`5J~YCXuYmf_oEyugKInrC846=%Q_r4B zO!J`z2&3B2ObT1N0_r&pF2cH?eT)#S8a{93@|B+)m1a)$w_bq-q)bjOZ#)^mQsTUP zsPDAX&SZg1eb8}&=cfZOOEy(Pm9|o#XiQKInoAt`70xuc|F!}U*A3mWl~e1+bBDI| z_VylF=0Oz{aG7{8XjX~PfllS^7yVXF3k>sykr20+VvoFr5s|4+0H= zlFAivXekE-4M5-3Wflr9onT7aJ#B4mJIhd)F(LiMiO^g!bf7aDxY+@aYXG`WxAL^k zF>?j|{i=5PMg7<)2^uFtvpA@=dzprycQR)66h79BQFnC#JZzx}*(($#LDPv)Tk+~^ z=31c-0Wd+*gi&zzC%5%p86au^ng_ybhk_pCBXz8sv9a?@X;mLEYn#f@w7*gel-H~5`Ka;J!ZfH&lif;2uK-4&t3j*M*6&xBm8M?0C zM9Y@-E=1E}WFv&lULN;>F0+!bhG+iu{-51tY0^;h>adf}`5{qTi)YZU{*QMms6NJV( za;Auzip50Hr^ z#RY(<2DIbg`t|D%@06s|-Eir`AudoXQ1R0P@wL-jA|`TP#)$XxVY554it~67TC>k;#y7ehv&krXHw5zzn!&!Y)<| zY9$Na0OsztOfTK6{408LJbdjYXA?pnk)+-ifkls6W>Z4noI-~*tq-{UsI0R&p*`R7 z_|&DqoUxYKv{3yF!0}_2*}Twp?RW+ze=yoIn-^*YYwjCn%{K$us#U92ty=v9^0KsH Tu<&}W00000NkvXXu0mjf!u+Sl diff --git a/src/Jackett/Content/logos/t411.png b/src/Jackett/Content/logos/t411.png deleted file mode 100644 index fd7c09505c74a2d70374fb0e6344eb399570f040..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9516 zcmV+{CDYo8P);nKih?9sJj4SaK;j?);>O-PJNG-fJNUky**ELi8Wsv7 z04sUydi>t2ujjq(-*@%b-)k@!yA1$8RV%*46-z^e`n*}E+w7_;P6yy~^lA1#kvZ0253I=?GUy-*p2|2A=R8$8m+@Fb}k2 zQbx^0jkq=+*Q-&r+NxL6s8*jxgOSEj+-w@9I);HSwg=ZL5+q{jC&HCPe=Gz3jvG9v zNBz?Z0Q@kwY3J^(`|cmuu;ZLpy1?8oJ~T3Y;`BfN)9;Q?&x7ki=z|}k#Rf$-+=3uL zpadYnI6y~DVXHIITN5I1BYqHL^6$`RnxV(WPYYPKO4=@#^sr)QNvd< z=qH#VI2Z+xc*Y;U@q_vd_#3oo4N1aWw>UJsW%u44_q@ZsY0G&YoM@?|Q;m;pDg5Rd z^G|>OZ%$5BU@!#71L45<>u~N>sLw&Fz$gS*a1auN3!Vo~0B#6=4!k^sm(Q0QUE03V z2gd~|QA#*toNVK&!jAAx=Ays%~hu+(()wK%TOyrqY7yZDuFb?v(_kHoEpi& z4QuN6k;pCzoBG@#I&--F`MU{X=qCCwkUAwXIL^)MH|^MW&)VI0>d~7{rtDa)HQ7v~ zM!J%lzj%1XUw!?D|MS3WP|PE2jKRx~!HMTUC%_!wf-G~dB{HP$qK%Do!11X$CQI@2@+7Owm|BH3=Al_LX~K*#7&Z#V zxdE09!W9k<5xv9P4+vxWb&W~hd|(2Rd*umu^+yooK^81F1TYZI zQ45K*cAm}#=y3>Pql&bdpi9$clM)>A9k~H0jKIJ!l$JqhIpl_+P=s6o!T~6ag5#3o z2h{i^GI0~?^QJNjm1&q8H&Yj&G6VB7raliUA=x8l!|;3sgM&ox@b&|OnLb?@ti2O% zkV9dt?uEI{J8r%8o_8$UcKb}O_*z4qtTyLbiHQ|N6whlB*2<@Fg5p$Ik$^U~_x6V0Ta3I1EqC>!2A>nL}MP32p_}+T&F{JYz6Bw z)TYlJOJ}|M@^=%KVKHGD7($-JVX?G%*KM~w@Xo=_JJ0d(iAH+*QnlJr5Gll4X-LR@ z)+%FarrF57aN-j9E?Qtn;q~VrjvyS&j2(i?I}!jLjVIKt7oh9KI%fzB)^^fNfM*E? zLXwLhTS-P9z5CoG5-P>6(nG^g8iwIjFt#4XZh_G?WFAT|R|S6rwhW`_L``%J)mfN2 z$IicMYIBSW1F+=a^bTY1@b&@17}Ku{+;kUYh-DVT($um$mc9c1B?;op#=6xCi^cWZ zckR0WUBxZ8p69{QYU@HPtw##t6k-Lb25slo3?2WO*Y3Z$v~pzRtB*ftJO?#w<}4ie zUnm@o2h3!XE<(41A}5qBa)xfQ%+m`={6J?xL?=2UIiMi1(}fA5B@v>NN{S$AK-@&J zsLnxo90p6UVjYCTAaXFg5(Y;hKLlQg{BevDHgy^fKZ%h67xZG#Jvd8_UhnXB1JQfA zRF@3+yWx6G$cet)HpREkqC0=(GNcZ)91jX04cqIhd=Iy=o&`X!P=cLwz2)5 z7mvX!kE1k`j9#0Gd>>Qa?~bLjUVZtyh>V#CW|E{dy5i3Fe|Tiy{_{@mWIeuAtER0K z5(?jx0j044fCkj0@+Fu$198I>j^@sVsd`7G_-s<{%Vp&QL9p^PE1XoJ$dGpmtUTpox>lbxtvvc!o#9Y>Vgs(fgoLH1Zo(7 z=g?opG0MAm3XZ;j0_x=ftZSgZLK}?#Tc_dT8*upVVEe;x_b;PN53RvA@dhKW^bba< zcNlwyw-*RYTDHDj;O2X-gTiYS4vpOTu}?MD?>t$HW}C5&G{gy7bw$mzGb0eSVDv6>zRvi;IBZDohNT?0n3~^ju5O~Jyt3WeBh%Wz5C$@ zo3%OzMj0FKNRa|drTf^ozW4b*`K$tl+DTwjvq@qU0w%@4KwjEmzyn22?z;qz6!4&LZlrRjKP*9pz7H`ctr>TXjCAsz(b#at@lE+hSGfG`;?(# z*G}Oxjqh5lG|&^QWp^x{30i;tZi3N6h`_u41CJhBxn*{;3K42KK~8U$lFI~+T0VCH zCQe}}WHbmG&8Q`Yiqnl&q+)O+8szE>Mp%yDHpPZe7d&(DN*4wOg3!Nt>(=di_EctP zK^Y;qVkR*Vb4XIda|6SrlH<5asdhjh1fIz+aw&4TaOzl7V({v7aP~OH{B8g$WsFN#`uW19&3oY}o>(5nK)o4h$Ac```WUFz}nTnh;zFVr7i}uhH;Fk+G{XLbd}sgQ)vquzYmn zef#hH;KTQBShKPfMb&DPVhJ7wer|9OYV+{MPhs*LxIPF6R4RlF!*I>!%@2O$qdWJ% z!<9~yDy{XGKl5*&{Xbtb#ZhnzZ00OGf7GnM9UoU*Vdlpf&nEYl=pDx1;q3u}0n2dg z(?wdyO}B|yG;Qm-(=%=B!{1F9r07aGu<;I%15j;J#I7NZWclpvE5aQci(^BB2Y&MM z(}$l1mm+7*(HDYh3!08w(n%UoJGxF&sLdc+oM(SFCr%*vl^z@}24QgPU3YHSvMFvh z1!sbR6d0qS@G$DfQLPbgO;J6C1&-qs@`deNZ~4fh5AENxlQUMS)wR})F>OHN16e$A z4i5hqgu>9$0H{YgCl0;W{3{vr0m+FlD!pTa`6V z;184rM#om(z5fB^Fp4uKrPOK42!3+n9o6R&K#{*-g@OF&vf=yo?)vrjKfHFuvU;+rGUtA?9+uz{k5yPv#LL`1`5L%*Ca6x zgi2Ur=KgKBjpT!BGoCG1UpaLanRRLlB{JN#!jln3X_`k#OtnU>b{1Wu;%2&zHb5_1 zHWYZ?T@T#9dhO~)wSw{>-KbeVbnunEdv-gX2U-aOg5iOXkiC_T99_O_<><&|r@n4% z`AoSY7|(^C6ui-j0?86(p1x3dt&&FgI2Ql~qBt_VV)fehef$$U@4mNLt;UVI=le#b zw8q0dA(*i5MiS_HtU7}M%Fq~a2b>UK9)Mljn!C)@o4420gF%pn*B~~{1|rv*hhxu# z19I!CW!$Kdg8TBhGvjB@Lo32$rvV6jU>(6x2{^7%(8<6Ecm|?7UBf_`Tp^#& zg*R=u<=*}GB~cTM(VDrg`_rfY{?MVr_uq4;V9an3+R%iY0y<3~O3yGM9LJHe)@XX3 zQ_O|ursiHae(LTmH=7{$?1j14D{<)iu523{*Y_RATd{t__B-!NTMedFu~cl;>!7s| z++pA%?j7Jc1L;GnhN+&x<#@*nO*SRFdQ)%S($w?zecR};oR;pr1KIJ`{M`hj2GYeG zR@?%^aGv(mm*AxXIWO3-yeJq9`25nv3Ehl?z#ASKS~fH&(ioDcz2cd~S?FprDshtn zexm6nq0Vjn#n4bO$mbt^-+Ky$d>TapZLC|KnS0{N0|vP7IvjBawDT0`F-}p1kcKlu z2EdhKq!@A`zVgIRe(Q68{iVmBKQkXaJ6@S;#zjx$B@?D?V+<3@FvoRSnucMnI8=J! zz=5y-#TP&+-$n6o1qd!WNdk_*YmJd9Iy(U2F?{U|g5F{5g=1+Tvdey5B)g`0I|AO# zL9Ecq9eHZa&0}}H|B-Dww~U4!2b0F;zCAns^1prB_1)3Z;KfT5zx8{6c4@kdc@hHz zd>)C;5({cP23j(U-?n4dj%K|sg@}{^&Y$|h4^N%BaLf92jM;oR zs)gi+a|#*&#V9opD?M4Roj8B-;`H2q|H@+r4j#`B7dI5-(TTZ%kvw7ryz$zx?qN-`}`xtM7YUFrk?zxZn)1QD(_;01U3y=oBByg+WiCuhlf3 zO#L-N-fF5FfN)S#U;D9iy&|Jl#)E^TUHKj8XE#SUSo-*^&8L<0ah`d zjWy;PVNPRUkS)DiE2@q3+{@~|Z29Pek31-h(MBtDGVYtNpZeZ+p7e5|kd9p()!2z~ z&IJc!eY}*K!Q|}x_-y6hfA+7VI4xHi+?R#%lX{K`1HL073{H%Yzy?vJg?6$eqAFi*@K!I7C7IVMUGwrZsD2Do61BLVE%ATJG(EOP{w zc`12dJ^1$L@2wREX1pA57w72bj~4HFaNpV?2@t1Rq9F#!kyQ~h2N<6&&(F;RGoUEY zOKs|#5o8=`of6oKQ*~g5hD)yJ@7cF^?aiy>dXsY=rA7+z*!Lcvotay6%UaX^5&UgV z!5z->xBzHp0ul-pC+2Dpgy1lC^o7*buzs_Uf&&66QC7HM7E7U&R%tYK{=(z`<4Yiz zJ2dRLZmR86kx2#)B5Tb9oskr%0BK@Zi409#yQ2EuVeA>+C4tB;`*gYXrryhgQgH4F zM2*2>X{1;H0AH|_mP3W$-BNq(*r{5%f-CN+0wDOaYG|94Q<)AiKth`!7v=|YtJbc* z@7{Y%syH*LGC`Ps@x?<=A9%(c$P?C#WX$F>m>_2lf@jeK=O8`EdoXz(j=cnN)2v#p z$uLO96a>Oa8hoi-yd&FTwK=1R*qeSb^rmNCqBff-lG@5cZ;7vjwF6TribfJ5z76 zi65}HyY$L1%w5#VxOfF-=G2M*{q@JTtQ)&y$ELA?fHO8AmYAFmJwwO(_UM&A0|8fl1C3X6_kI?_|4*Yw?FA2AEJdWnd0x zF6S-=cZ`#R&ytKnLYkt+GkeF@X0fX;y<#_5=@mU$dN4nMSr;kGhhO~kGY7=>JO1YL z|6%oD2ms?#vw!?wzIgi86Ohk=RuG05)}^X5okJp1aUk66xZ6T2qw@p#An> zd*e7_Oe@1&-~Zm@kG*p6FyupETyw6ew>@!YgFA$feqSQ$Duve%!iAG`>DbuK0D?!k zKPDOXI2Y}wi)3d zs8}kM-t+E<0^hAwt2ol0KQS@&&2K%ffq@qoAvNQMStD&vOe~aO2*5S<>KvjzI|Yu1 zxEho;WAI^U8;IZGq{ItvlIa>-@J9$dW0E7YBgnC{wv-Ub!LFKUZ5{F=sC$QT>EX?Q z=)LUIMRunH+1pxrMLkf)>t#HH!~v4b_dU-Moz$E*N`bJivN&xAl+_1ozo>DruCYCo zN*7CmzU%GTd)t;x>zfTs%O{$JuKW0tKRols87LMJ#Ww1U(_2~41TevAip3>NUxE`a zLbC~hPoBU6DGb?jPN*ZV08iKpg0mZYW6cuw6@p3f3ywhA+9wMuHsRU01Po$tfc;EL zuNH9Z(?wog!9{=m#e`)@TUdgqG%$r6T6e`DNFngH^;Uu#h1e5n?NH8wAUG)F27Ym{ zuwrcGgZuB*IyG8rZJZ!De&XbJzWsgl8lH>K<>;ynYflW6G1lA*=`bO%B=X`(G`~Se z5ZYo2>wvi-pe2QDk_%@cUK4^|on^M#=7c!L^Q7_2;b7&>MvfK@bbP|K8gJq2EnVp* zdWW|gh~CRSUF2fl{C0mP%^+@3E>=@hpwrYql$x|{v+<1H-7E#XR@i{}n6axJofR5g zDwW(I*#E%YH?3M(tJe`OQl_u|?f0gqW?L#tw7!L!sRG&Bm=idM~ zz?LO8k&S#jXx8@eoH4TAb_vE#0y_;B1Vu8=C1TGk@Yy^by}J!{16pc|fUfQDT-|5V zZ{6j3n0f{fHQTc?qv>oCqw7j1%2u#pFl6t;(qG6X0J`%flmO|F4+bv?!Z5db^{Tt} z?v9fLj8TS3*M0o^KYrpnPl4+~wL!nYnoLIAskIWT4~!Y#;qw|!oH-x8d6Z0%1jovg z0h2`%nsDXT#GoECha@12%NXw{y&)z5^6_LL>{na@IC&G!Ny{}!7;l$rg86wh^#o_q zw2)H+%EzVUmP(XK7!$7Jcn&f20#9Aigp9l-b?j(7u6E~`l$$rM9~vw)nh{lLuq2Ky zj8EM4z`jCpKr$|*#O0ST;Gw^D%}T8dXW$7w(MaB$oDG(({N>;Nlp6$77cU<8#wyCLDwYt{CHj?7X0P8vZCn7*c??Is0}#kO&78g3Nj(<}eEGq^;H!$O8a=4lfPZ zF}bFuzB?dfZ)@q5b@PceYXq&e_DM3+ieqJz0TK9N=(neBOX)nNZ#9`mg|F-SWGJ}f zdR)qpp%Sx$$jQfY_VHi+fbYBHTkX;f&9RJDN+(IGjk#1!&Qu~WX8p};ckK8?A@9wO z&zwAX=;Uk1!1uH8gL6&EHiu!DrUZ8dbLhu91=m*5g|#anq`{j)U|7c;WCn6C$V@)o z;1T8kkOrNSR9>GB&{w1(aTG$w~jlN~H!5z18 zTGu3yY0yy|(;RFeHHj<^XEkNc%tzH&$>mPaQTi*#v#pPowUw{3L zW}JYOU zny%xHE*s*6xdaGv!NmB)Q{Viy1UUWXo9D(SU?5LmTOa|^Vv;hjXyFqMF1mS)8ah6n zkz`uMLc%W4kZmxI1>PEYYb4^xgai2g^*VM?Nmed*Ei$$s;p&38{`^Z2pwTNk9_6S3 zwYgcVA9>}KcResVTX3XZZy zn}NXl0W@{J6{S%5`V&u|yD;ttezO@ziHegn#&4ulD^V$Pl2$8u<49C3Cth&d-rGL@ zFF(#0q$(A_M+S38Ub^tbKl!g|D}m65fdV2#M+bOe1WKF3m?TqT^`0S+f-NL)1n+n= zi9*3`K^HO;rW`1RKtXN;zpC_n6lG9MrG`?x3lJ6y0m{gLJ&Z$3a4L#@-!=zM4;k0k(>i) zP1c9zW)3S1K%l_)vhA-3uda%H)~?Q`T)ku_bK6-C2XUYm;H3CA^rwTfcIc2q*v4)G zM}Q4Fb+V}9${^7@j7tq~4>T;pu}>G-Q#|>026sdlO@o`Z>`;Qklj+H4zxd}n*L-I0 zEvr=dGW1PVZ78h@dSvM4n`OR`Dh<*m$Rt!|K`Vq43|fv{5z3Qo`{@cosB6hixadmf z#^J&-&=C|%UcSKnP&f|FoZ53O7Z=xsaNUHbAY~S&5z%qa+-k55%&{+{^?B>I?UDI- z0U(7V3%=tzJRl&Xl!(1_pi<`2DXrVkjMIi@kVc>rg2{$sS0CJ&w+`<9LD<|&_rKGh ze`&%P78Z?{hfAj*R{(7w%w2fynJ@px&&0p+8@JxNEg$3}t)oP-(3iO!cN~c0cFtT9 z@KFmpsuTyYFaqMF)g*$PRMVOV>Eh*ullU#8G2r-s2|ZB23`N=uxHig$=!g{O)R!*+ zpXE{nMRr2weK+q3P~Kq9$w}rpZq@}G839dGRSt92#+zrySB?x!$MLyKGe13g2ABSX z19MYDqbv7p-0<8phZ{IYZDi##_S~Q74_5y!y><1y8-(_lZs;-f{rS6zY=+4=!vJk; zBdb@;^d;O>!f~NkJo)lVpZnDB?A~|Bw%d1)EMLy0oS(1!=fO{Ja z4pEsRK%s;>%@$y@Hd%ld(#Q12VEQ5m*;Yyoz@=tfI?@vY6FFEVAqGM=m=8F!z>6*& zvDUji1Bp^yt=A+k`VOQ~jU!9pnj}X$*Oh8Z^FDazKLeH6Iz4#lNtij05kBL{FFhzv z!P#RFMc{gia%!M4r{Z`+rPBVpcMlH_r%BwZ*T>IYdhy7yax-F%lWq9g(H+~DDkcCL zO-NN+8hjr@zr)Olxnpv&?SVB)YO4uxbB%=UYe)9KYk#TVYM7s~dRmc#o$iD6wD zgCD}F!*Jqxa09#R5SB+?JdGpnIE!NPEPKg}($J!~fy@Bj3w##%#Lx}Awf8KuY`n;Is#-s z834OKk77FII(3b9I12)2I2R5S3&r7)%aMv#95FJOXqr>y=1e7;t+&#sMHncUc#}<> z>DlJ-gP>@?2`;ja4U9&-cRm1j zJ&LX!&^xdr&zNJ+0$TDwmNahBNn`?46j?`=|x>Rea1{Rv&gLHy#9@n8>##e1t zNVNEM*wmDO|0maJ)2p8QRs@n{bmj7!Z{O!`+&x~YoqOTg=+rTgSgeu>bKHWVmGI!N zVBD7`;07#i!dE|QE}n$JVbIz_n$^Sb?wBk4j>$5#QP1|xHK0>$sb;jd9Rnk%Hj6v1 z4D(Jfa2Z{hFUX((K|Ym!Vgv}Gn21u7#A%cy5aD7HB5i1Kp*fFcsa41K#QWO5K+oV@ zvrVrkfpY`xUd?!0Z+zCGp5ThG3FIGUaSr!y;a18CJ?>KqL0 z0<9p8%c!_jU5cbEE(I&OVpoIXp>ZH>RtRIhvj+!iufL05rmY>pjf}_>FzPnem z9Up)j@*kx!NeW;JrDAdQO#^FgsT(X~zXOz)R_Ztu)2!B@!C)4c7CWwZ{MCqV{=s<4HyI|WkCqJK~r3Yn}ileVPp)gH2Hw8eeSFi zCd+J*F$Azm&?YCO$IS-q$YR}djkOw(B*c(V$HZbuja%aF{u{5RT>*{+{4WCBc*eee zN25FYib@mYV8u~sIhJ9ekmGvX?qc;j^>V(H-}y7#hwm;Vco1K5j#IrW180000< KMNUMnLSTXdVT}*~ diff --git a/src/Jackett/Content/logos/thepiratebay.png b/src/Jackett/Content/logos/thepiratebay.png deleted file mode 100644 index fa6f61d38de7c7d9050eb208437ada6e92d75ae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7800 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 KMNUMnLSTY&%o*GO diff --git a/src/Jackett/Content/logos/torrentz.png b/src/Jackett/Content/logos/torrentz.png deleted file mode 100644 index bf987f3f1914701c503f5d23855145f9b58faed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5683 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 ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - var pairs = new Dictionary { - { "username", configData.Username.Value }, - { "password", configData.Password.Value }, - { "form", "login" }, - { "rememberme[]", "1" } - }; - - var loginPage = await RequestStringWithCookiesAndRetry(LoginUrl, null, null); - - var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, SearchUrl, SiteLink); - await ConfigureIfOK(result.Cookies, result.Content != null && result.Content.Contains("logout.php"), () => - { - CQ dom = result.Content; - var errorMessage = dom[".ui-state-error"].Text().Trim(); - throw new ExceptionWithConfigData(errorMessage, configData); - }); - - return IndexerConfigurationStatus.RequiresTesting; - } - - public async Task> PerformQuery(TorznabQuery query) - { - var releases = new List(); - var searchString = query.GetQueryString(); - var searchUrl = SearchUrl; - var queryCollection = new NameValueCollection(); - - queryCollection.Add("total", "146"); // Not sure what this is about but its required! - - var cat = "0"; - var queryCats = MapTorznabCapsToTrackers(query); - if (queryCats.Count == 1) - { - cat = queryCats.First().ToString(); - } - - queryCollection.Add("cat", cat); - queryCollection.Add("searchin", "filename"); - queryCollection.Add("search", searchString); - queryCollection.Add("page", "1"); - searchUrl += "?" + queryCollection.GetQueryString(); - - var extraHeaders = new Dictionary() - { - { "X-Requested-With", "XMLHttpRequest" } - }; - - var response = await RequestStringWithCookiesAndRetry(searchUrl, null, SearchUrlReferer, extraHeaders); - - var results = response.Content; - try - { - CQ dom = results; - - var rows = dom["tr"]; - foreach (var row in rows.Skip(1)) - { - var release = new ReleaseInfo(); - var qRow = row.Cq(); - var qTitleLink = qRow.Find("td:eq(1) a:eq(0)").First(); - release.Title = qTitleLink.Find("strong").Text().Trim(); - - // If we search an get no results, we still get a table just with no info. - if (string.IsNullOrWhiteSpace(release.Title)) - { - break; - } - - release.Description = release.Title; - release.Guid = new Uri(qTitleLink.Attr("href")); - release.Comments = release.Guid; - - var dateString = qRow.Find("td:eq(4)").Text(); - release.PublishDate = DateTime.ParseExact(dateString, "dd MMM yy", CultureInfo.InvariantCulture); - - var qLink = qRow.Find("td:eq(2) a"); - release.Link = new Uri(qLink.Attr("href")); - - var sizeStr = qRow.Find("td:eq(5)").Text(); - release.Size = ReleaseInfo.GetBytes(sizeStr); - - var connections = qRow.Find("td:eq(7)").Text().Trim().Split("/".ToCharArray(),StringSplitOptions.RemoveEmptyEntries); - - release.Seeders = ParseUtil.CoerceInt(connections[0].Trim()); - release.Peers = ParseUtil.CoerceInt(connections[1].Trim()) + release.Seeders; - - var rCat = row.Cq().Find("td:eq(0) a").First().Attr("href"); - var rCatIdx = rCat.IndexOf("cat="); - if (rCatIdx > -1) - { - rCat = rCat.Substring(rCatIdx + 4); - } - - release.Category = MapTrackerCatToNewznab(rCat); - - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(results, ex); - } - - return releases; - } - } -} diff --git a/src/Jackett/Indexers/BakaBT.cs b/src/Jackett/Indexers/BakaBT.cs deleted file mode 100644 index 5c89fd31c..000000000 --- a/src/Jackett/Indexers/BakaBT.cs +++ /dev/null @@ -1,196 +0,0 @@ -using CsQuery; -using Jackett.Models; -using Jackett.Services; -using Jackett.Utils; -using Jackett.Utils.Clients; -using Newtonsoft.Json.Linq; -using NLog; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net; -using System.Text; -using System.Threading.Tasks; -using System.Web; -using Jackett.Models.IndexerConfig; - -namespace Jackett.Indexers -{ - public class BakaBT : BaseIndexer, IIndexer - { - public string SearchUrl { get { return SiteLink + "browse.php?only=0&hentai=1&incomplete=1&lossless=1&hd=1&multiaudio=1&bonus=1&c1=1&reorder=1&q="; } } - public string LoginUrl { get { return SiteLink + "login.php"; } } - - new ConfigurationDataBasicLogin configData - { - get { return (ConfigurationDataBasicLogin)base.configData; } - set { base.configData = value; } - } - - public BakaBT(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps) - : base(name: "BakaBT", - description: "Anime Community", - link: "http://bakabt.me/", - caps: new TorznabCapabilities(TorznabCatType.TVAnime), - manager: i, - client: wc, - logger: l, - p: ps, - configData: new ConfigurationDataBasicLogin()) - { - } - - public async Task ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - - var loginForm = await webclient.GetString(new Utils.Clients.WebRequest() - { - Url = LoginUrl, - Type = RequestType.GET - }); - - var pairs = new Dictionary { - { "username", configData.Username.Value }, - { "password", configData.Password.Value }, - { "returnto", "/index.php" } - }; - - var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginForm.Cookies, true, null, SiteLink); - var responseContent = response.Content; - await ConfigureIfOK(response.Cookies, responseContent.Contains("Logout"), () => - { - CQ dom = responseContent; - var messageEl = dom[".error"].First(); - var errorMessage = messageEl.Text().Trim(); - throw new ExceptionWithConfigData(errorMessage, configData); - }); - - return IndexerConfigurationStatus.RequiresTesting; - } - - public async Task> PerformQuery(TorznabQuery query) - { - - // This tracker only deals with full seasons so chop off the episode/season number if we have it D: - if (!string.IsNullOrWhiteSpace(query.SearchTerm)) - { - var splitindex = query.SearchTerm.LastIndexOf(' '); - if (splitindex > -1) - query.SearchTerm = query.SearchTerm.Substring(0, splitindex); - } - - var releases = new List(); - var searchString = query.SanitizedSearchTerm; - var episodeSearchUrl = SearchUrl + HttpUtility.UrlEncode(searchString); - var response = await RequestStringWithCookiesAndRetry(episodeSearchUrl); - - try - { - CQ dom = response.Content; - var rows = dom[".torrents tr.torrent"]; - - foreach (var row in rows) - { - - var qRow = row.Cq(); - var qTitleLink = qRow.Find("a.title").First(); - var title = qTitleLink.Text().Trim(); - - // Insert before the release info - var taidx = title.IndexOf('('); - var tbidx = title.IndexOf('['); - - if (taidx == -1) - taidx = title.Length; - - if (tbidx == -1) - tbidx = title.Length; - var titleSplit = Math.Min(taidx, tbidx); - var titleSeries = title.Substring(0, titleSplit); - var releaseInfo = title.Substring(titleSplit); - - // For each over each pipe deliminated name - foreach (var name in titleSeries.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)) - { - var release = new ReleaseInfo(); - - release.Title = (name + releaseInfo).Trim(); - // Ensure the season is defined as this tracker only deals with full seasons - if (release.Title.IndexOf("Season") == -1) - { - // Insert before the release info - var aidx = release.Title.IndexOf('('); - var bidx = release.Title.IndexOf('['); - - if (aidx == -1) - aidx = release.Title.Length; - - if (bidx == -1) - bidx = release.Title.Length; - - var insertPoint = Math.Min(aidx, bidx); - release.Title = release.Title.Substring(0, insertPoint) + "Season 1 " + release.Title.Substring(insertPoint); - } - - release.Description = release.Title; - release.Guid = new Uri(SiteLink + qTitleLink.Attr("href")); - release.Comments = release.Guid; - - release.Link = new Uri(SiteLink + qRow.Find(".peers a").First().Attr("href")); - - release.Seeders = int.Parse(qRow.Find(".peers a").Get(0).InnerText); - release.Peers = release.Seeders + int.Parse(qRow.Find(".peers a").Get(1).InnerText); - - release.MinimumRatio = 1; - - var size = qRow.Find(".size").First().Text(); - release.Size = ReleaseInfo.GetBytes(size); - - //22 Jul 15 - var dateStr = qRow.Find(".added").First().Text().Replace("'", string.Empty); - if (dateStr.Split(' ')[0].Length == 1) - dateStr = "0" + dateStr; - - if (string.Equals(dateStr, "yesterday", StringComparison.InvariantCultureIgnoreCase)) - { - release.PublishDate = DateTime.Now.AddDays(-1); - } - else if (string.Equals(dateStr, "today", StringComparison.InvariantCultureIgnoreCase)) - { - release.PublishDate = DateTime.Now; - } - else - { - release.PublishDate = DateTime.ParseExact(dateStr, "dd MMM yy", CultureInfo.InvariantCulture); - } - - releases.Add(release); - } - } - } - catch (Exception ex) - { - OnParseError(response.Content, ex); - } - - return releases; - } - - public override async Task Download(Uri link) - { - var downloadPage = await RequestStringWithCookies(link.ToString()); - CQ dom = downloadPage.Content; - var downloadLink = dom.Find(".download_link").First().Attr("href"); - - if (string.IsNullOrWhiteSpace(downloadLink)) - { - throw new Exception("Unable to find download link."); - } - - var response = await RequestBytesWithCookies(SiteLink + downloadLink); - return response.Content; - } - } -} diff --git a/src/Jackett/Indexers/RUTor.cs b/src/Jackett/Indexers/RUTor.cs deleted file mode 100644 index 6d7d77e14..000000000 --- a/src/Jackett/Indexers/RUTor.cs +++ /dev/null @@ -1,233 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Jackett.Models; -using Newtonsoft.Json.Linq; -using NLog; -using Jackett.Utils; -using System.Net; -using System.Net.Http; -using CsQuery; -using System.Web; -using Jackett.Services; -using Jackett.Utils.Clients; -using System.Text.RegularExpressions; -using Jackett.Models.IndexerConfig; -using System.Globalization; -using Newtonsoft.Json; -using Jackett.Models.IndexerConfig.Bespoke; - -namespace Jackett.Indexers -{ - public class RuTor : BaseIndexer, IIndexer - { - private string SearchUrl { get { return SiteLink + "search/0/{0}/000/0/{1}"; } } - private string BrowseUrl { get { return SiteLink + "browse/0/{0}/0/0"; } } - readonly static string defaultSiteLink = "http://rutor.org/"; - - new ConfigurationDataRuTor configData - { - get { return (ConfigurationDataRuTor)base.configData; } - set { base.configData = value; } - } - - public RuTor(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps) - : base(name: "RUTor", - description: "Свободный торрент трекер", - link: "http://rutor.org/", - caps: TorznabUtil.CreateDefaultTorznabTVCaps(), - manager: i, - client: wc, - logger: l, - p: ps, - configData: new ConfigurationDataRuTor(defaultSiteLink)) - { - TorznabCaps.Categories.Add(TorznabCatType.TVAnime); - TorznabCaps.Categories.Add(TorznabCatType.Movies); - TorznabCaps.Categories.Add(TorznabCatType.Audio); - TorznabCaps.Categories.Add(TorznabCatType.Books); - } - - public async Task ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - var oldConfig = configData; - var releases = await PerformQuery(new TorznabQuery()); - - await ConfigureIfOK(string.Empty, releases.Count() > 0, () => - { - configData = oldConfig; - throw new Exception("Could not find releases from this URL"); - }); - - return IndexerConfigurationStatus.RequiresTesting; - } - - - protected override void SaveConfig() - { - indexerService.SaveConfig(this as IIndexer, JsonConvert.SerializeObject(configData)); - } - - // Override to load legacy config format - public override void LoadFromSavedConfiguration(JToken jsonConfig) - { - var json = jsonConfig.ToString(); - configData = JsonConvert.DeserializeObject(json); - IsConfigured = true; - } - - private readonly int CAT_ANY = 0; - private readonly int CAT_FOREIGN_MOVIE = 1; - // private readonly int CAT_OUR_MOVIES = 5; - // private readonly int CAT_POP_SCIFI_MOVIES = 12; - private readonly int CAT_TV_SERIES = 4; - // private readonly int CAT_TV = 6; - // private readonly int CAT_ANIMATION = 7; - private readonly int CAT_ANIME = 10; - private readonly int CAT_MUSIC = 2; - // private readonly int CAT_GAMES = 8; - // private readonly int CAT_SOFTWARE = 9; - // private readonly int CAT_SPORTS_HEALTH = 13; - // private readonly int CAT_HUMOR = 15; - // private readonly int CAT_ECONOMY_LIFE = 14; - private readonly int CAT_BOOKS = 11; - // private readonly int CAT_OTHER = 3; - - public async Task> PerformQuery(TorznabQuery query) - { - var releases = new List(); - var searchString = query.GetQueryString(); - var searchCategory = CAT_ANY; - - if (query.Categories.Contains(TorznabCatType.TV.ID) || - query.Categories.Contains(TorznabCatType.TVHD.ID) || - query.Categories.Contains(TorznabCatType.TVSD.ID)) - { - searchCategory = CAT_TV_SERIES; - } - - if ((searchCategory == CAT_ANY) && - (query.Categories.Contains(TorznabCatType.Movies.ID) || - query.Categories.Contains(TorznabCatType.MoviesForeign.ID) || - query.Categories.Contains(TorznabCatType.MoviesHD.ID) || - query.Categories.Contains(TorznabCatType.MoviesSD.ID))) - { - searchCategory = CAT_FOREIGN_MOVIE; - } - - if ((searchCategory == CAT_ANY) && - (query.Categories.Contains(TorznabCatType.TVAnime.ID))) - { - searchCategory = CAT_ANIME; - } - - if ((searchCategory == CAT_ANY) && - (query.Categories.Contains(TorznabCatType.Books.ID))) - { - searchCategory = CAT_BOOKS; - } - - if ((searchCategory == CAT_ANY) && - (query.Categories.Contains(TorznabCatType.Audio.ID) || - query.Categories.Contains(TorznabCatType.AudioLossless.ID) || - query.Categories.Contains(TorznabCatType.AudioMP3.ID))) - { - searchCategory = CAT_MUSIC; - } - - string queryUrl = string.Empty; - if (string.IsNullOrWhiteSpace(searchString)) - { - queryUrl = string.Format(BrowseUrl, searchCategory); - } - else - { - queryUrl = string.Format(SearchUrl, searchCategory, HttpUtility.UrlEncode(searchString.Trim())); - } - - var results = await RequestStringWithCookiesAndRetry(queryUrl, string.Empty); - try - { - CQ dom = results.Content; - var rows = dom["#index table tr"]; - foreach (var row in rows.Skip(1)) - { - var release = new ReleaseInfo(); - - release.MinimumRatio = 1; - release.MinimumSeedTime = 172800; - - var date = StringUtil.StripNonAlphaNumeric(row.Cq().Find("td:eq(0)").Text().Trim() - .Replace("Янв", "01") - .Replace("Фев", "02") - .Replace("Мар", "03") - .Replace("Апр", "04") - .Replace("Май", "05") - .Replace("Июн", "06") - .Replace("Июл", "07") - .Replace("Авг", "08") - .Replace("Сен", "09") - .Replace("Окт", "10") - .Replace("Ноя", "11") - .Replace("Дек", "12")); - - release.PublishDate = DateTime.ParseExact(date, "ddMMyy", CultureInfo.InvariantCulture); - - var hasTorrent = row.Cq().Find("td:eq(1) a").Length == 3; - var titleIndex = 1; - if (hasTorrent) - titleIndex++; - - release.Title = row.Cq().Find("td:eq(1) a:eq(" + titleIndex + ")").Text().Trim(); - if (configData.StripRussian.Value) - { - var split = release.Title.IndexOf('/'); - if (split > -1) - { - release.Title = release.Title.Substring(split + 1).Trim(); - } - } - - release.Description = release.Title; - - var hasComments = row.Cq().Find("td:eq(2) img").Length > 0; - var sizeCol = 2; - - if (hasComments) - sizeCol++; - - var sizeStr = StringUtil.StripRegex(row.Cq().Find("td:eq(" + sizeCol + ")").Text(), "[^a-zA-Z0-9\\. -]", " ").Trim(); - string[] sizeSplit = sizeStr.Split(' '); - release.Size = ReleaseInfo.GetBytes(sizeSplit[1].ToLower(), ParseUtil.CoerceFloat(sizeSplit[0])); - - release.Seeders = ParseUtil.CoerceInt(row.Cq().Find(".green").Text().Trim()); - release.Peers = ParseUtil.CoerceInt(row.Cq().Find(".red").Text().Trim()) + release.Seeders; - - release.Guid = new Uri(configData.Url.Value + row.Cq().Find("td:eq(1) a:eq(" + titleIndex + ")").Attr("href").Substring(1)); - release.Comments = release.Guid; - - if (hasTorrent) - { - release.Link = new Uri(row.Cq().Find("td:eq(1) a:eq(0)").Attr("href")); - release.MagnetUri = new Uri(row.Cq().Find("td:eq(1) a:eq(1)").Attr("href")); - } - else - { - release.MagnetUri = new Uri(row.Cq().Find("td:eq(1) a:eq(0)").Attr("href")); - } - - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(results.Content, ex); - } - - return releases; - } - } -} diff --git a/src/Jackett/Indexers/Rarbg.cs b/src/Jackett/Indexers/Rarbg.cs deleted file mode 100644 index 5e35e85bb..000000000 --- a/src/Jackett/Indexers/Rarbg.cs +++ /dev/null @@ -1,187 +0,0 @@ -using Jackett.Models; -using Jackett.Models.IndexerConfig; -using Jackett.Services; -using Jackett.Utils.Clients; -using Newtonsoft.Json.Linq; -using NLog; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Threading.Tasks; -using System.Web; - -namespace Jackett.Indexers -{ - public class Rarbg : BaseIndexer, IIndexer - { - readonly static string defaultSiteLink = "https://torrentapi.org/"; - - private Uri BaseUri - { - get { return new Uri(configData.Url.Value); } - set { configData.Url.Value = value.ToString(); } - } - - private string ApiEndpoint { get { return BaseUri + "pubapi_v2.php"; } } - private string TokenUrl { get { return ApiEndpoint + "?get_token=get_token"; } } - private string SearchUrl { get { return ApiEndpoint + "?app_id=jackett_v{0}&mode={1}&format=json_extended&search_string={2}&token={3}"; } } - - - new ConfigurationDataUrl configData - { - get { return (ConfigurationDataUrl)base.configData; } - set { base.configData = value; } - } - - private DateTime lastTokenFetch; - private string token; - - readonly TimeSpan TOKEN_DURATION = TimeSpan.FromMinutes(10); - - private bool HasValidToken { get { return !string.IsNullOrEmpty(token) && lastTokenFetch > DateTime.Now - TOKEN_DURATION; } } - - Dictionary categoryLabels; - - public Rarbg(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps) - : base(name: "RARBG", - description: "RARBG", - link: defaultSiteLink, - caps: new TorznabCapabilities(), - manager: i, - client: wc, - logger: l, - p: ps, - configData: new ConfigurationDataUrl(defaultSiteLink)) - { - categoryLabels = new Dictionary(); - - AddCat(4, TorznabCatType.XXX, "XXX (18+)"); - AddCat(14, TorznabCatType.MoviesSD, "Movies/XVID"); - AddCat(48, TorznabCatType.MoviesHD, "Movies/XVID/720"); - AddCat(17, TorznabCatType.MoviesSD, "Movies/x264"); - AddCat(44, TorznabCatType.MoviesHD, "Movies/x264/1080"); - AddCat(45, TorznabCatType.MoviesHD, "Movies/x264/720"); - AddCat(47, TorznabCatType.Movies3D, "Movies/x264/3D"); - AddCat(42, TorznabCatType.MoviesBluRay, "Movies/Full BD"); - AddCat(46, TorznabCatType.MoviesBluRay, "Movies/BD Remux"); - AddCat(18, TorznabCatType.TVSD, "TV Episodes"); - AddCat(41, TorznabCatType.TVHD, "TV HD Episodes"); - AddCat(23, TorznabCatType.AudioMP3, "Music/MP3"); - AddCat(25, TorznabCatType.AudioLossless, "Music/FLAC"); - AddCat(27, TorznabCatType.PCGames, "Games/PC ISO"); - AddCat(28, TorznabCatType.PCGames, "Games/PC RIP"); - AddCat(40, TorznabCatType.ConsolePS3, "Games/PS3"); - AddCat(32, TorznabCatType.ConsoleXbox360, "Games/XBOX-360"); - AddCat(33, TorznabCatType.PCISO, "Software/PC ISO"); - AddCat(35, TorznabCatType.BooksEbook, "e-Books"); - } - - void AddCat(int cat, TorznabCategory catType, string label) - { - AddCategoryMapping(cat, catType); - categoryLabels.Add(label, cat); - } - - async Task CheckToken() - { - if (!HasValidToken) - { - var result = await RequestStringWithCookiesAndRetry(TokenUrl); - var json = JObject.Parse(result.Content); - token = json.Value("token"); - lastTokenFetch = DateTime.Now; - } - } - - public async Task ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - var releases = await PerformQuery(new TorznabQuery()); - - await ConfigureIfOK(string.Empty, releases.Count() > 0, () => - { - throw new Exception("Could not find releases from this URL"); - }); - - return IndexerConfigurationStatus.Completed; - } - - public Task> PerformQuery(TorznabQuery query) - { - return PerformQuery(query, 0); - } - - public async Task> PerformQuery(TorznabQuery query, int attempts = 0) - { - await CheckToken(); - var releases = new List(); - var queryStr = HttpUtility.UrlEncode(query.GetQueryString()); - - var mode = string.IsNullOrEmpty(queryStr) ? "list" : "search"; - var episodeSearchUrl = string.Format(SearchUrl, Engine.ConfigService.GetVersion(), mode, queryStr, token); - var cats = string.Join(";", MapTorznabCapsToTrackers(query)); - if (!string.IsNullOrEmpty(cats)) - { - episodeSearchUrl += "&category=" + cats; - } - - var response = await RequestStringWithCookiesAndRetry(episodeSearchUrl, string.Empty); - - try - { - var jsonContent = JObject.Parse(response.Content); - - int errorCode = jsonContent.Value("error_code"); - if (errorCode == 20) // no results found - { - return releases.ToArray(); - } - - if (errorCode > 0) // too many requests per second - { - if (attempts < 3) - { - await Task.Delay(TimeSpan.FromSeconds(2)); - return await PerformQuery(query, ++attempts); - } - else - { - throw new Exception(jsonContent.Value("error")); - } - } - - foreach (var item in jsonContent.Value("torrent_results")) - { - var release = new ReleaseInfo(); - release.Title = item.Value("title"); - release.Description = release.Title; - release.Category = MapTrackerCatToNewznab(categoryLabels[item.Value("category")].ToString()); - - release.MagnetUri = new Uri(item.Value("download")); - release.InfoHash = release.MagnetUri.ToString().Split(':')[3].Split('&')[0]; - - release.Comments = new Uri(item.Value("info_page")); - release.Guid = release.Comments; - - // ex: 2015-08-16 21:25:08 +0000 - var dateStr = item.Value("pubdate").Replace(" +0000", ""); - var dateTime = DateTime.ParseExact(dateStr, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); - release.PublishDate = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc).ToLocalTime(); - - release.Seeders = item.Value("seeders"); - release.Peers = item.Value("leechers") + release.Seeders; - release.Size = item.Value("size"); - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(response.Content, ex); - } - - return releases.ToArray(); - } - - } -} diff --git a/src/Jackett/Indexers/ShowRSS.cs b/src/Jackett/Indexers/ShowRSS.cs deleted file mode 100644 index 62638a65d..000000000 --- a/src/Jackett/Indexers/ShowRSS.cs +++ /dev/null @@ -1,132 +0,0 @@ -using Jackett.Models; -using Jackett.Services; -using Jackett.Utils; -using Jackett.Utils.Clients; -using Newtonsoft.Json.Linq; -using NLog; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Text; -using System.Threading.Tasks; -using System.Web; -using System.Xml; -using Jackett.Models.IndexerConfig; - -namespace Jackett.Indexers -{ - public class ShowRSS : BaseIndexer, IIndexer - { - readonly static string defaultSiteLink = "http://showrss.info/"; - - private Uri BaseUri - { - get { return new Uri(configData.Url.Value); } - set { configData.Url.Value = value.ToString(); } - } - - private string SearchAllUrl { get { return BaseUri + "feeds/all.rss"; } } - - new ConfigurationDataUrl configData - { - get { return (ConfigurationDataUrl)base.configData; } - set { base.configData = value; } - } - - public ShowRSS(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps) - : base(name: "ShowRSS", - description: "showRSS is a service that allows you to keep track of your favorite TV shows", - link: defaultSiteLink, - caps: TorznabUtil.CreateDefaultTorznabTVCaps(), - manager: i, - client: wc, - logger: l, - p: ps, - configData: new ConfigurationDataUrl(defaultSiteLink)) - { - } - - public async Task ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - var releases = await PerformQuery(new TorznabQuery()); - - await ConfigureIfOK(string.Empty, releases.Count() > 0, () => - { - throw new Exception("Could not find releases from this URL"); - }); - - return IndexerConfigurationStatus.RequiresTesting; - } - - // Override to load legacy config format - public override void LoadFromSavedConfiguration(JToken jsonConfig) - { - if (jsonConfig is JObject) - { - BaseUri = new Uri(jsonConfig.Value("base_url")); - SaveConfig(); - IsConfigured = true; - return; - } - - base.LoadFromSavedConfiguration(jsonConfig); - } - - public override Task Download(Uri link) - { - throw new NotImplementedException(); - } - - public async Task> PerformQuery(TorznabQuery query) - { - var releases = new List(); - var episodeSearchUrl = string.Format(SearchAllUrl); - var result = await RequestStringWithCookiesAndRetry(episodeSearchUrl, string.Empty); - var xmlDoc = new XmlDocument(); - - try - { - xmlDoc.LoadXml(result.Content); - ReleaseInfo release; - string serie_title; - - foreach (XmlNode node in xmlDoc.GetElementsByTagName("item")) - { - release = new ReleaseInfo(); - - release.MinimumRatio = 1; - release.MinimumSeedTime = 172800; - - serie_title = node.SelectSingleNode(".//*[local-name()='rawtitle']").InnerText; - release.Title = serie_title; - - release.Comments = new Uri(node.SelectSingleNode("link").InnerText); - int category = 0; - int.TryParse(node.SelectSingleNode("title").InnerText, out category); - release.Category = category; - var test = node.SelectSingleNode("enclosure"); - release.Guid = new Uri(test.Attributes["url"].Value); - release.PublishDate = DateTime.Parse(node.SelectSingleNode("pubDate").InnerText, CultureInfo.InvariantCulture); - - release.Description = node.SelectSingleNode("description").InnerText; - release.InfoHash = node.SelectSingleNode("description").InnerText; - release.Size = 0; - release.Seeders = 1; - release.Peers = 1; - release.MagnetUri = new Uri(node.SelectSingleNode("link").InnerText); - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(result.Content, ex); - } - - return releases; - } - } -} diff --git a/src/Jackett/Indexers/Strike.cs b/src/Jackett/Indexers/Strike.cs deleted file mode 100644 index 74bdf59cd..000000000 --- a/src/Jackett/Indexers/Strike.cs +++ /dev/null @@ -1,173 +0,0 @@ -using Jackett.Models; -using Jackett.Services; -using Jackett.Utils; -using Jackett.Utils.Clients; -using Newtonsoft.Json.Linq; -using NLog; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Text; -using System.Threading.Tasks; -using System.Web; -using Jackett.Models.IndexerConfig; -using System.Collections.Specialized; -using Jackett.Models.IndexerConfig.Bespoke; - -namespace Jackett.Indexers -{ - public class Strike : BaseIndexer, IIndexer - { - readonly static string defaultSiteLink = "https://getstrike.net/"; - - private Uri BaseUri - { - get { return new Uri(configData.Url.Value); } - set { configData.Url.Value = value.ToString(); } - } - - private string SearchUrl { get { return BaseUri + "api/v2/torrents/search/?phrase={0}"; } } - private string DownloadUrl { get { return BaseUri + "torrents/api/download/{0}.torrent"; } } - - new ConfigurationDataStrike configData - { - get { return (ConfigurationDataStrike)base.configData; } - set { base.configData = value; } - } - - - public Strike(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps) - : base(name: "Strike", - description: "Torrent search engine", - link: defaultSiteLink, - caps: new TorznabCapabilities(), - manager: i, - client: wc, - logger: l, - p: ps, - configData: new ConfigurationDataStrike(defaultSiteLink)) - { - AddCategoryMapping("Anime", TorznabCatType.TVAnime); - AddCategoryMapping("Applications", TorznabCatType.PC); - AddCategoryMapping("Books", TorznabCatType.Books); - AddCategoryMapping("Games", TorznabCatType.PCGames); - AddCategoryMapping("Movies", TorznabCatType.Movies); - AddCategoryMapping("TV", TorznabCatType.TV); - AddCategoryMapping("XXX", TorznabCatType.XXX); - AddCategoryMapping("Music", TorznabCatType.Audio); - - /*AddCategoryMapping("Movies:Highres Movies", TorznabCatType.MoviesHD); - AddCategoryMapping("Movies:3D Movies", TorznabCatType.Movies3D); - AddCategoryMapping("Books:Ebooks", TorznabCatType.BooksEbook); - AddCategoryMapping("Books:Comics", TorznabCatType.BooksComics); - AddCategoryMapping("Books:Audio Books", TorznabCatType.AudioAudiobook); - AddCategoryMapping("Games:XBOX360", TorznabCatType.ConsoleXbox360); - AddCategoryMapping("Games:Wii", TorznabCatType.ConsoleWii); - AddCategoryMapping("Games:PSP", TorznabCatType.ConsolePSP); - AddCategoryMapping("Games:PS3", TorznabCatType.ConsolePS3); - AddCategoryMapping("Games:PC", TorznabCatType.PCGames); - AddCategoryMapping("Games:Android", TorznabCatType.PCPhoneAndroid); - AddCategoryMapping("Music:Mp3", TorznabCatType.AudioMP3);*/ - } - - public async Task ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - var releases = await PerformQuery(new TorznabQuery()); - - await ConfigureIfOK(string.Empty, releases.Count() > 0, () => - { - throw new Exception("Could not find releases from this URL"); - }); - - return IndexerConfigurationStatus.Completed; - } - - // Override to load legacy config format - public override void LoadFromSavedConfiguration(JToken jsonConfig) - { - if (jsonConfig is JObject) - { - BaseUri = new Uri(jsonConfig.Value("base_url")); - SaveConfig(); - IsConfigured = true; - return; - } - - base.LoadFromSavedConfiguration(jsonConfig); - } - - public async Task> PerformQuery(TorznabQuery query) - { - List releases = new List(); - var queryString = query.GetQueryString(); - var searchTerm = string.IsNullOrEmpty(queryString) ? DateTime.Now.Year.ToString() : queryString; - var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchTerm)); - - var trackerCategories = MapTorznabCapsToTrackers(query, mapChildrenCatsToParent: true); - - // This tracker can only search one cat at a time, otherwise search all and filter results - if (trackerCategories.Count == 1) - { - episodeSearchUrl += "&category=" + trackerCategories[0]; - } - - var results = await RequestStringWithCookiesAndRetry(episodeSearchUrl, string.Empty); - try - { - var jResults = JObject.Parse(results.Content); - foreach (JObject result in (JArray)jResults["torrents"]) - { - var release = new ReleaseInfo(); - - release.MinimumRatio = 1; - release.MinimumSeedTime = 172800; - - if (trackerCategories.Count > 0 && !trackerCategories.Contains((string)result["torrent_category"])) - { - continue; - } - release.Category = MapTrackerCatToNewznab((string)result["torrent_category"]); - - release.Title = (string)result["torrent_title"]; - release.Description = release.Title; - release.Seeders = (int)result["seeds"]; - release.Peers = (int)result["leeches"] + release.Seeders; - release.Size = (long)result["size"]; - - // "Apr 2, 2015", "Apr 12, 2015" (note the spacing) - // some are unix timestamps, some are not.. :/ - var dateString = string.Join(" ", ((string)result["upload_date"]).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); - float dateVal; - if (ParseUtil.TryCoerceFloat(dateString, out dateVal)) - release.PublishDate = DateTimeUtil.UnixTimestampToDateTime(dateVal); - else - release.PublishDate = DateTime.ParseExact(dateString, "MMM d, yyyy", CultureInfo.InvariantCulture); - - release.Guid = new Uri((string)result["page"]); - release.Comments = release.Guid; - - release.InfoHash = (string)result["torrent_hash"]; - release.MagnetUri = new Uri((string)result["magnet_uri"]); - release.Link = new Uri(string.Format(DownloadUrl, release.InfoHash)); - - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(results.Content, ex); - } - - return releases; - } - - public override Task Download(Uri link) - { - throw new NotImplementedException(); - } - } -} diff --git a/src/Jackett/Indexers/T411.cs b/src/Jackett/Indexers/T411.cs deleted file mode 100644 index bc59c9fdc..000000000 --- a/src/Jackett/Indexers/T411.cs +++ /dev/null @@ -1,249 +0,0 @@ -using Jackett.Models; -using Jackett.Services; -using Jackett.Utils; -using Jackett.Utils.Clients; -using Newtonsoft.Json.Linq; -using NLog; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Net.Http.Headers; -using System.Text; -using System.Threading.Tasks; -using System.Web; -using Jackett.Models.IndexerConfig; - -namespace Jackett.Indexers -{ - public class T411 : BaseIndexer, IIndexer - { - private readonly string CommentsUrl = ""; - const string ApiUrl = "http://api.t411.in"; - const string AuthUrl = ApiUrl + "/auth"; - const string SearchUrl = ApiUrl + "/torrents/search/{0}"; - const string DownloadUrl = ApiUrl + "/torrents/download/{0}"; - - HttpClientHandler handler; - HttpClient client; - - new ConfigurationDataLoginTokin configData - { - get { return (ConfigurationDataLoginTokin)base.configData; } - set { base.configData = value; } - } - - public T411(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps) - : base(name: "T411", - description: "French Torrent Tracker", - link: "http://www.t411.in/", - caps: TorznabUtil.CreateDefaultTorznabTVCaps(), - manager: i, - client: wc, - logger: l, - p: ps, - configData: new ConfigurationDataLoginTokin()) - { - CommentsUrl = SiteLink + "/torrents/{0}"; - IsConfigured = false; - handler = new HttpClientHandler - { - AllowAutoRedirect = true - }; - client = new HttpClient(handler); - - - - AddCategoryMapping("Film\\/Vidéo", TorznabCatType.Movies); - AddCategoryMapping("Vidéo-clips", TorznabCatType.Other); - AddCategoryMapping("Série TV", TorznabCatType.TV); - AddCategoryMapping("Animation", TorznabCatType.TVAnime); - AddCategoryMapping("Film", TorznabCatType.Movies); - AddCategoryMapping("Concert", TorznabCatType.AudioVideo); - AddCategoryMapping("Documentaire", TorznabCatType.Audio); - AddCategoryMapping("Spectacle", TorznabCatType.TV); - AddCategoryMapping("Sport", TorznabCatType.TVSport); - AddCategoryMapping("Animation Série", TorznabCatType.TVAnime); - AddCategoryMapping("Emission TV", TorznabCatType.TV); - - - AddCategoryMapping("Application", TorznabCatType.PC0day); - AddCategoryMapping("Linux", TorznabCatType.PC); - AddCategoryMapping("MacOS", TorznabCatType.PCMac); - AddCategoryMapping("Windows", TorznabCatType.PC); - AddCategoryMapping("Smartphone", TorznabCatType.PCPhoneOther); - AddCategoryMapping("Tablette", TorznabCatType.PCPhoneOther); - AddCategoryMapping("Autre", TorznabCatType.PC); - AddCategoryMapping("Formation", TorznabCatType.PC); - - AddCategoryMapping("Emulation", TorznabCatType.PC); - AddCategoryMapping("Emulateurs", TorznabCatType.PC); - AddCategoryMapping("Roms", TorznabCatType.PC); - - AddCategoryMapping("GPS", TorznabCatType.Other); - AddCategoryMapping("Applications", TorznabCatType.Other); - AddCategoryMapping("Cartes", TorznabCatType.Other); - AddCategoryMapping("Divers", TorznabCatType.Other); - - AddCategoryMapping("Audio", TorznabCatType.Audio); - AddCategoryMapping("Karaoke", TorznabCatType.Audio); - AddCategoryMapping("Samples", TorznabCatType.Audio); - AddCategoryMapping("Musique", TorznabCatType.Audio); - AddCategoryMapping("Podcast Radio", TorznabCatType.Audio); - - AddCategoryMapping("eBook", TorznabCatType.BooksEbook); - AddCategoryMapping("Audio", TorznabCatType.AudioAudiobook); - AddCategoryMapping("Bds", TorznabCatType.AudioVideo); - AddCategoryMapping("Comics", TorznabCatType.BooksComics); - AddCategoryMapping("Livres", TorznabCatType.Books); - AddCategoryMapping("Mangas", TorznabCatType.BooksForeign); - AddCategoryMapping("Presse", TorznabCatType.BooksMagazines); - - AddCategoryMapping("xXx", TorznabCatType.XXX); - AddCategoryMapping("eBooks", TorznabCatType.XXXImageset); - AddCategoryMapping("Jeux vidéo", TorznabCatType.XXX); - AddCategoryMapping("Video", TorznabCatType.XXXDVD); - //AddCategoryMapping("Animation", TorznabCatType.XXX); Used above :/ - - AddCategoryMapping("Jeu vidéo", TorznabCatType.PCGames); - AddCategoryMapping("Linux", TorznabCatType.PCGames); - AddCategoryMapping("MacOS", TorznabCatType.PCGames); - // AddCategoryMapping("Windows", TorznabCatType.PCGames); Used above :/ - AddCategoryMapping("Nintendo", TorznabCatType.Console); - AddCategoryMapping("Sony", TorznabCatType.Console); - AddCategoryMapping("Microsoft", TorznabCatType.PCGames); - AddCategoryMapping("Smartphone", TorznabCatType.PCPhoneOther); - AddCategoryMapping("Tablette", TorznabCatType.PCPhoneOther); - AddCategoryMapping("Autre", TorznabCatType.Other); - - AddCategoryMapping("Jeux vidéo", TorznabCatType.Other); - } - - async Task GetAuthToken(bool forceFetch = false) - { - if (!forceFetch && configData.LastTokenFetchDateTime > DateTime.Now - TimeSpan.FromHours(48)) - { - return configData.ApiToken.Value; - } - - var pairs = new Dictionary { - { "username", configData.Username.Value }, - { "password", configData.Password.Value } - }; - - var content = new FormUrlEncodedContent(pairs); - - var response = await client.PostAsync(AuthUrl, content); - var responseContent = await response.Content.ReadAsStringAsync(); - var jsonResponse = JObject.Parse(responseContent); - if (jsonResponse["error"] != null) - { - throw new ApplicationException((string)jsonResponse["error"]); - } - configData.ApiToken.Value = (string)jsonResponse["token"]; - configData.LastTokenFetchDateTime = DateTime.Now; - return configData.ApiToken.Value; - } - - public async Task ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - - Exception tokenFetchEx = null; - try - { - await GetAuthToken(true); - } - catch (Exception ex) - { - tokenFetchEx = new ExceptionWithConfigData(ex.Message, configData); - } - - await ConfigureIfOK(string.Empty, tokenFetchEx == null, () => - { - throw tokenFetchEx; - }); - - return IndexerConfigurationStatus.RequiresTesting; - } - - // Override to load legacy config format - public override void LoadFromSavedConfiguration(JToken jsonConfig) - { - if (jsonConfig is JObject) - { - configData.ApiToken.Value = jsonConfig.Value("token"); ; - configData.Username.Value = jsonConfig.Value("username"); - configData.Password.Value = jsonConfig.Value("password"); - SaveConfig(); - IsConfigured = true; - return; - } - - base.LoadFromSavedConfiguration(jsonConfig); - } - - public async Task> PerformQuery(TorznabQuery query) - { - var releases = new List(); - var searchTerm = string.IsNullOrEmpty(query.SanitizedSearchTerm) ? "%20" : query.SanitizedSearchTerm; - var searchString = searchTerm + " " + query.GetEpisodeSearchString(); - var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString)); - - var message = new HttpRequestMessage(); - message.Method = HttpMethod.Get; - message.RequestUri = new Uri(episodeSearchUrl); - message.Headers.TryAddWithoutValidation("Authorization", await GetAuthToken()); - - var response = await client.SendAsync(message); - var results = await response.Content.ReadAsStringAsync(); - - var jsonResult = JObject.Parse(results); - try - { - var items = (JArray)jsonResult["torrents"]; - foreach (var item in items) - { - var release = new ReleaseInfo(); - - release.MinimumRatio = 1; - release.MinimumSeedTime = 172800; - var torrentId = (string)item["id"]; - release.Link = new Uri(string.Format(DownloadUrl, torrentId)); - release.Title = (string)item["name"]; - release.Description = release.Title; - release.Comments = new Uri(string.Format(CommentsUrl, (string)item["rewritename"])); - release.Guid = release.Comments; - - var dateUtc = DateTime.ParseExact((string)item["added"], "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); - release.PublishDate = DateTime.SpecifyKind(dateUtc, DateTimeKind.Utc).ToLocalTime(); - - release.Seeders = ParseUtil.CoerceInt((string)item["seeders"]); - release.Peers = ParseUtil.CoerceInt((string)item["leechers"]) + release.Seeders; - release.Size = ParseUtil.CoerceLong((string)item["size"]); - release.Category = MapTrackerCatToNewznab((string)item["categoryname"]); - - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(results, ex); - } - return releases; - } - - public override async Task Download(Uri link) - { - var message = new HttpRequestMessage(); - message.Method = HttpMethod.Get; - message.RequestUri = link; - message.Headers.TryAddWithoutValidation("Authorization", await GetAuthToken()); - - var response = await client.SendAsync(message); - return await response.Content.ReadAsByteArrayAsync(); - } - } -} diff --git a/src/Jackett/Indexers/ThePirateBay.cs b/src/Jackett/Indexers/ThePirateBay.cs deleted file mode 100644 index 2135442cd..000000000 --- a/src/Jackett/Indexers/ThePirateBay.cs +++ /dev/null @@ -1,161 +0,0 @@ -using CsQuery; -using Jackett.Models; -using Jackett.Services; -using Jackett.Utils; -using Jackett.Utils.Clients; -using Newtonsoft.Json.Linq; -using NLog; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using System.Web; -using Jackett.Models.IndexerConfig; - -namespace Jackett.Indexers -{ - public class ThePirateBay : BaseIndexer, IIndexer - { - readonly static string defaultSiteLink = "https://thepiratebay.mn/"; - - private Uri BaseUri - { - get { return new Uri(configData.Url.Value); } - set { configData.Url.Value = value.ToString(); } - } - - private string SearchUrl { get { return BaseUri + "search/{0}/0/99/208,205"; } } - private string RecentUrl { get { return BaseUri + "recent"; } } - - new ConfigurationDataUrl configData - { - get { return (ConfigurationDataUrl)base.configData; } - set { base.configData = value; } - } - - public ThePirateBay(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps) - : base(name: "The Pirate Bay", - description: "The worlds largest bittorrent indexer", - link: defaultSiteLink, - caps: TorznabUtil.CreateDefaultTorznabTVCaps(), - manager: i, - client: wc, - logger: l, - p: ps, - configData: new ConfigurationDataUrl(defaultSiteLink)) - { - } - - public async Task ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - var releases = await PerformQuery(new TorznabQuery()); - - await ConfigureIfOK(string.Empty, releases.Count() > 0, () => - { - throw new Exception("Could not find releases from this URL"); - }); - - return IndexerConfigurationStatus.Completed; - } - - // Override to load legacy config format - public override void LoadFromSavedConfiguration(JToken jsonConfig) - { - if (jsonConfig is JObject) - { - BaseUri = new Uri(jsonConfig.Value("base_url")); - SaveConfig(); - IsConfigured = true; - return; - } - - base.LoadFromSavedConfiguration(jsonConfig); - } - - public async Task> PerformQuery(TorznabQuery query) - { - var releases = new List(); - var queryStr = HttpUtility.UrlEncode(query.GetQueryString()); - var episodeSearchUrl = string.IsNullOrWhiteSpace(queryStr) ? RecentUrl : string.Format(SearchUrl, queryStr); - var response = await RequestStringWithCookiesAndRetry(episodeSearchUrl, string.Empty); - - try - { - CQ dom = response.Content; - - var rows = dom["#searchResult > tbody > tr"]; - foreach (var row in rows) - { - if (row.ChildElements.Count() < 2) - continue; - - var release = new ReleaseInfo(); - CQ qRow = row.Cq(); - CQ qLink = qRow.Find(".detName > .detLink").First(); - - release.MinimumRatio = 1; - release.MinimumSeedTime = 172800; - release.Title = qLink.Text().Trim(); - release.Description = release.Title; - release.Comments = new Uri(BaseUri + qLink.Attr("href").TrimStart('/')); - release.Guid = release.Comments; - - var downloadCol = row.ChildElements.ElementAt(1).Cq().Children("a"); - release.MagnetUri = new Uri(downloadCol.Attr("href")); - release.InfoHash = release.MagnetUri.ToString().Split(':')[3].Split('&')[0]; - - var descString = qRow.Find(".detDesc").Text().Trim(); - var descParts = descString.Split(','); - - var timeString = descParts[0].Split(' ')[1]; - - if (timeString.Contains(" ago")) - { - release.PublishDate = (DateTime.Now - TimeSpan.FromMinutes(ParseUtil.CoerceInt(timeString.Split(' ')[0]))); - } - else if (timeString.Contains("Today")) - { - release.PublishDate = (DateTime.UtcNow - TimeSpan.FromHours(2) - TimeSpan.Parse(timeString.Split(' ')[1])).ToLocalTime(); - } - else if (timeString.Contains("Y-day")) - { - release.PublishDate = (DateTime.UtcNow - TimeSpan.FromHours(26) - TimeSpan.Parse(timeString.Split(' ')[1])).ToLocalTime(); - } - else if (timeString.Contains(':')) - { - var utc = DateTime.ParseExact(timeString, "MM-dd HH:mm", CultureInfo.InvariantCulture) - TimeSpan.FromHours(2); - release.PublishDate = DateTime.SpecifyKind(utc, DateTimeKind.Utc).ToLocalTime(); - } - else - { - var utc = DateTime.ParseExact(timeString, "MM-dd yyyy", CultureInfo.InvariantCulture) - TimeSpan.FromHours(2); - release.PublishDate = DateTime.SpecifyKind(utc, DateTimeKind.Utc).ToLocalTime(); - } - - release.Size = ReleaseInfo.GetBytes(descParts[1]); - - release.Seeders = ParseUtil.CoerceInt(row.ChildElements.ElementAt(2).Cq().Text()); - release.Peers = ParseUtil.CoerceInt(row.ChildElements.ElementAt(3).Cq().Text()) + release.Seeders; - - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(response.Content, ex); - } - return releases.ToArray(); - } - - public override Task Download(Uri link) - { - throw new NotImplementedException(); - } - } -} diff --git a/src/Jackett/Indexers/Torrentz.cs b/src/Jackett/Indexers/Torrentz.cs deleted file mode 100644 index ed7640726..000000000 --- a/src/Jackett/Indexers/Torrentz.cs +++ /dev/null @@ -1,212 +0,0 @@ -using Jackett.Models; -using Jackett.Services; -using Jackett.Utils; -using Jackett.Utils.Clients; -using Newtonsoft.Json.Linq; -using NLog; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Net; -using System.Net.Http; -using System.Threading.Tasks; -using System.Web; -using System.Windows.Forms; -using System.Xml; -using System.Linq; -using Jackett.Models.IndexerConfig; - -namespace Jackett.Indexers -{ - public class Torrentz : BaseIndexer, IIndexer - { - readonly static string defaultSiteLink = "https://torrentz.eu/"; - - private Uri BaseUri - { - get { return new Uri(configData.Url.Value); } - set { configData.Url.Value = value.ToString(); } - } - - private string SearchUrl { get { return BaseUri + "feed_verifiedP?f={0}"; } } - - new ConfigurationDataUrl configData - { - get { return (ConfigurationDataUrl)base.configData; } - set { base.configData = value; } - } - - - public Torrentz(IIndexerManagerService i, Logger l, IWebClient wc, IProtectionService ps) - : base(name: "Torrentz", - description: "Torrentz is a meta-search engine and a Multisearch. This means we just search other search engines.", - link: defaultSiteLink, - caps: TorznabUtil.CreateDefaultTorznabTVCaps(), - manager: i, - client: wc, - logger: l, - p: ps, - configData: new ConfigurationDataUrl(defaultSiteLink)) - { - } - - public async Task ApplyConfiguration(JToken configJson) - { - configData.LoadValuesFromJson(configJson); - var releases = await PerformQuery(new TorznabQuery()); - - await ConfigureIfOK(string.Empty, releases.Count() > 0, () => - { - throw new Exception("Could not find releases from this URL"); - }); - return IndexerConfigurationStatus.Completed; - } - - // Override to load legacy config format - public override void LoadFromSavedConfiguration(JToken jsonConfig) - { - if (jsonConfig is JObject) - { - BaseUri = new Uri(jsonConfig.Value("base_url")); - SaveConfig(); - IsConfigured = true; - return; - } - - base.LoadFromSavedConfiguration(jsonConfig); - } - - public async Task> PerformQuery(TorznabQuery query) - { - var releases = new List(); - var searchString = query.GetQueryString(); - var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString.Trim())); - var xmlDoc = new XmlDocument(); - string xml = string.Empty; - var result = await RequestStringWithCookiesAndRetry(episodeSearchUrl); - - try - { - xmlDoc.LoadXml(result.Content); - - ReleaseInfo release; - TorrentzHelper td; - string serie_title; - - foreach (XmlNode node in xmlDoc.GetElementsByTagName("item")) - { - release = new ReleaseInfo(); - - release.MinimumRatio = 1; - release.MinimumSeedTime = 172800; - serie_title = node.SelectSingleNode("title").InnerText; - release.Title = serie_title; - - release.Comments = new Uri(node.SelectSingleNode("link").InnerText); - int category = 0; - int.TryParse(node.SelectSingleNode("category").InnerText, out category); - release.Category = category; - release.Guid = new Uri(node.SelectSingleNode("guid").InnerText); - release.PublishDate = DateTime.Parse(node.SelectSingleNode("pubDate").InnerText, CultureInfo.InvariantCulture); - - td = new TorrentzHelper(node.SelectSingleNode("description").InnerText); - release.Description = td.Description; - release.InfoHash = td.hash; - release.Size = td.Size; - release.Seeders = td.Seeders; - release.Peers = td.Peers + release.Seeders; - release.MagnetUri = TorrentzHelper.createMagnetLink(td.hash, serie_title); - releases.Add(release); - } - } - catch (Exception ex) - { - OnParseError(xml, ex); - } - - return releases; - } - - public override Task Download(Uri link) - { - throw new NotImplementedException(); - } - } - - public class TorrentzHelper - { - public TorrentzHelper(string description) - { - this.Description = description; - if (null == description) - { - this.Description = ""; - this.Size = 0; - this.Peers = 0; - this.Seeders = 0; - this.hash = ""; - } - else - FillProperties(); - } - - public static Uri createMagnetLink(string hash, string title) - { - string MagnetLink = "magnet:?xt=urn:btih:{0}&dn={1}&tr={2}"; - string Trackers = WebUtility.UrlEncode("udp://tracker.publicbt.com:80&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.ccc.de:80&tr=udp://tracker.istole.it:80"); - title = WebUtility.UrlEncode(title); - - return new Uri(string.Format(MagnetLink, hash, title, Trackers)); - } - - private void FillProperties() - { - string description = this.Description; - int counter = 0; - while (description.Contains(" ")) - { - int nextSpace = description.IndexOf(": ") + 1; - int secondSpace; - if (counter != 0) - secondSpace = description.IndexOf(" ", nextSpace + 1); - else - secondSpace = description.IndexOf(": ", nextSpace + 2) - description.IndexOf(" ", nextSpace); - - string val; - if (secondSpace == -1) - { - val = description.Substring(nextSpace).Trim(); - description = string.Empty; - } - else - { - val = description.Substring(nextSpace, secondSpace - nextSpace).Trim(); - description = description.Substring(secondSpace); - } - - switch (counter) - { - case 0: - this.Size = ReleaseInfo.GetBytes(val); - break; - case 1: - this.Seeders = ParseUtil.CoerceInt(val.Contains(",") ? val.Remove(val.IndexOf(","), 1) : val); - break; - case 2: - this.Peers = ParseUtil.CoerceInt(val.Contains(",") ? val.Remove(val.IndexOf(","), 1) : val); - break; - case 3: - this.hash = val; - break; - } - counter++; - } - } - - public string Description { get; set; } - public long Size { get; set; } - public int Seeders { get; set; } - public int Peers { get; set; } - public string hash { get; set; } - } -} diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj index 84b515891..ad65375f4 100644 --- a/src/Jackett/Jackett.csproj +++ b/src/Jackett/Jackett.csproj @@ -190,7 +190,6 @@ - @@ -212,15 +211,12 @@ - - - @@ -228,15 +224,10 @@ - - - - - @@ -437,15 +428,9 @@ PreserveNewest - - PreserveNewest - PreserveNewest - - PreserveNewest - PreserveNewest @@ -500,12 +485,6 @@ PreserveNewest - - PreserveNewest - - - PreserveNewest - PreserveNewest @@ -515,15 +494,9 @@ PreserveNewest - - PreserveNewest - PreserveNewest - - PreserveNewest - PreserveNewest @@ -584,18 +557,9 @@ PreserveNewest - - PreserveNewest - - - PreserveNewest - PreserveNewest - - PreserveNewest - PreserveNewest