1 package be
.nikiroo
.fanfix
.supported
;
3 import java
.io
.IOException
;
4 import java
.io
.InputStream
;
5 import java
.net
.MalformedURLException
;
7 import java
.util
.AbstractMap
;
8 import java
.util
.ArrayList
;
9 import java
.util
.Collections
;
10 import java
.util
.List
;
11 import java
.util
.Map
.Entry
;
13 import org
.jsoup
.helper
.DataUtil
;
14 import org
.jsoup
.nodes
.Element
;
15 import org
.jsoup
.select
.Elements
;
17 import be
.nikiroo
.fanfix
.Instance
;
18 import be
.nikiroo
.fanfix
.data
.MetaData
;
19 import be
.nikiroo
.utils
.Image
;
20 import be
.nikiroo
.utils
.Progress
;
21 import be
.nikiroo
.utils
.StringUtils
;
23 class MangaLel
extends BasicSupport
{
25 protected boolean isHtml() {
30 protected MetaData
getMeta() throws IOException
{
31 MetaData meta
= new MetaData();
33 String
[] authorDateTag
= getAuthorDateTag();
35 meta
.setTitle(getTitle());
36 meta
.setAuthor(authorDateTag
[0]);
37 meta
.setDate(authorDateTag
[1]);
38 meta
.setTags(explode(authorDateTag
[2]));
39 meta
.setSource(getType().getSourceName());
40 meta
.setUrl(getSource().toString());
41 meta
.setPublisher(getType().getSourceName());
42 meta
.setUuid(getSource().toString());
45 meta
.setSubject("manga");
46 meta
.setType(getType().toString());
47 meta
.setImageDocument(true);
48 meta
.setCover(getCover());
53 private String
getTitle() {
54 Element doc
= getSourceNode();
55 Element h2
= doc
.getElementsByClass("widget-title").first();
57 return StringUtils
.unhtml(h2
.text()).trim();
66 private String
[] getAuthorDateTag() {
67 String
[] tab
= new String
[3];
69 Element doc
= getSourceNode();
70 Element tabEls
= doc
.getElementsByClass("dl-horizontal").first();
72 for (Element tabEl
: tabEls
.children()) {
73 String txt
= tabEl
.text().trim();
75 if (tab
[prevOk
- 1] == null) {
78 tab
[prevOk
- 1] += ", ";
81 tab
[prevOk
- 1] += txt
;
84 if (txt
.equals("Auteur(s)") || txt
.equals("Artist(s)")) {
86 } else if (txt
.equals("Date de sortie")) {
88 } else if (txt
.equals("Type") || txt
.equals("Catégories")) {
96 for (int i
= 0; i
< 3; i
++) {
98 for (String item
: explode(tab
[i
])) {
99 if (!list
.isEmpty()) {
111 protected String
getDesc() {
114 Element doc
= getSourceNode();
115 Element title
= doc
.getElementsByClass("well").first();
117 desc
= StringUtils
.unhtml(title
.text()).trim();
118 if (desc
.startsWith("Résumé")) {
119 desc
= desc
.substring("Résumé".length()).trim();
126 private Image
getCover() {
127 Element doc
= getSourceNode();
128 Element cover
= doc
.getElementsByClass("img-responsive").first();
131 String coverUrl
= cover
.absUrl("src");
135 coverIn
= Instance
.getCache().open(new URL(coverUrl
), this,
138 return new Image(coverIn
);
142 } catch (IOException e
) {
143 Instance
.getTraceHandler().error(e
);
151 protected List
<Entry
<String
, URL
>> getChapters(Progress pg
) {
152 List
<Entry
<String
, URL
>> urls
= new ArrayList
<Entry
<String
, URL
>>();
155 Element doc
= getSourceNode();
156 Elements chapEls
= doc
.getElementsByClass("chapters").first()
157 .getElementsByTag("li");
158 for (Element chapEl
: chapEls
) {
159 Element titleEl
= chapEl
.getElementsByTag("h5").first();
160 String title
= StringUtils
.unhtml(titleEl
.text()).trim();
162 // because Atril does not support strange file names
163 title
= Integer
.toString(chapEls
.size() - i
);
165 Element linkEl
= chapEl
.getElementsByTag("h5").first()
166 .getElementsByTag("a").first();
167 String link
= linkEl
.absUrl("href");
170 urls
.add(new AbstractMap
.SimpleEntry
<String
, URL
>(title
,
172 } catch (MalformedURLException e
) {
173 Instance
.getTraceHandler().error(e
);
179 Collections
.reverse(urls
);
184 protected String
getChapterContent(URL chapUrl
, int number
, Progress pg
)
190 StringBuilder builder
= new StringBuilder();
192 InputStream in
= Instance
.getCache().open(chapUrl
, this, false);
194 Element pageDoc
= DataUtil
.load(in
, "UTF-8", chapUrl
.toString());
195 Elements linkEls
= pageDoc
.getElementsByClass("img-responsive");
196 for (Element linkEl
: linkEls
) {
197 if (linkEl
.hasAttr("data-src")) {
199 builder
.append(linkEl
.absUrl("data-src").trim());
200 builder
.append("]<br/>");
208 return builder
.toString();
212 * Explode an HTML comma-separated list of values into a non-duplicate text
216 * the comma-separated values in HTML format
218 * @return the full list with no duplicate in text format
220 private List
<String
> explode(String values
) {
221 List
<String
> list
= new ArrayList
<String
>();
222 if (values
!= null && !values
.isEmpty()) {
223 for (String auth
: values
.split(",")) {
224 String a
= StringUtils
.unhtml(auth
).trim();
225 if (!a
.isEmpty() && !list
.contains(a
.trim())) {
235 protected boolean supports(URL url
) {
236 return "manga-lel.com".equals(url
.getHost())
237 || "www.manga-lel.com".equals(url
.getHost());