Skip to content

Commit b53a7dc

Browse files
committed
Changed multi-book scraping to use displayable comics [#2439]
* Added the filename to the DisplayableComic view and type.
1 parent 8cd2039 commit b53a7dc

File tree

52 files changed

+434
-340
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+434
-340
lines changed

comixed-model/src/main/java/org/comixedproject/model/comicbooks/ComicDetail.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ public class ComicDetail implements PublicationDetail {
326326
*
327327
* @return the comic book id
328328
*/
329-
@JsonProperty("comicId")
329+
@JsonProperty("comicBookId")
330330
@JsonView({
331331
View.ComicListView.class,
332332
View.LastReadList.class,

comixed-model/src/main/java/org/comixedproject/model/library/DisplayableComic.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Date;
2424
import lombok.Getter;
2525
import lombok.Setter;
26+
import org.apache.commons.io.FilenameUtils;
2627
import org.comixedproject.model.archives.ArchiveType;
2728
import org.comixedproject.model.comicbooks.ComicState;
2829
import org.comixedproject.model.comicbooks.ComicType;
@@ -38,7 +39,7 @@
3839
public class DisplayableComic {
3940
@Id
4041
@Column(name = "comic_book_id")
41-
@JsonView({View.ComicDetailsView.class})
42+
@JsonView({View.ComicListView.class})
4243
@Getter
4344
private Long comicBookId;
4445

@@ -47,6 +48,11 @@ public class DisplayableComic {
4748
@Getter
4849
private Long comicDetailId;
4950

51+
@Column(name = "filename")
52+
@JsonView({View.ComicDetailsView.class})
53+
@Getter
54+
private String filename;
55+
5056
@Column(name = "archive_type", columnDefinition = "VARCHAR(4)")
5157
@JsonView({View.ComicDetailsView.class})
5258
@Enumerated(EnumType.STRING)
@@ -75,25 +81,25 @@ public class DisplayableComic {
7581
private ComicType comicType;
7682

7783
@Column(name = "publisher")
78-
@JsonView({View.ComicDetailsView.class})
84+
@JsonView({View.ComicListView.class})
7985
@Getter
8086
@Setter
8187
private String publisher;
8288

8389
@Column(name = "series")
84-
@JsonView({View.ComicDetailsView.class})
90+
@JsonView({View.ComicListView.class})
8591
@Getter
8692
@Setter
8793
private String series;
8894

8995
@Column(name = "volume")
90-
@JsonView({View.ComicDetailsView.class})
96+
@JsonView({View.ComicListView.class})
9197
@Getter
9298
@Setter
9399
private String volume;
94100

95101
@Column(name = "issue_number")
96-
@JsonView({View.ComicDetailsView.class})
102+
@JsonView({View.ComicListView.class})
97103
@Getter
98104
private String issueNumber;
99105

@@ -154,4 +160,10 @@ public class DisplayableComic {
154160
@Getter
155161
@Setter
156162
private Date addedDate;
163+
164+
@Transient
165+
@JsonView({View.ComicListView.class})
166+
public String getBaseFilename() {
167+
return FilenameUtils.getName(this.filename);
168+
}
157169
}

comixed-model/src/main/java/org/comixedproject/model/net/metadata/LoadMultiBookScrapingResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.List;
2424
import lombok.AllArgsConstructor;
2525
import lombok.Getter;
26-
import org.comixedproject.model.comicbooks.ComicBook;
26+
import org.comixedproject.model.library.DisplayableComic;
2727
import org.comixedproject.views.View;
2828

2929
/**
@@ -52,5 +52,5 @@ public class LoadMultiBookScrapingResponse {
5252
@JsonProperty("comicBooks")
5353
@JsonView(View.ComicListView.class)
5454
@Getter
55-
private List<ComicBook> comicBooks;
55+
private List<DisplayableComic> comicBooks;
5656
}

comixed-model/src/main/java/org/comixedproject/model/net/metadata/StartMultiBookScrapingResponse.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.List;
2424
import lombok.AllArgsConstructor;
2525
import lombok.Getter;
26-
import org.comixedproject.model.comicbooks.ComicBook;
26+
import org.comixedproject.model.library.DisplayableComic;
2727
import org.comixedproject.views.View;
2828

2929
/**
@@ -52,5 +52,5 @@ public class StartMultiBookScrapingResponse {
5252
@JsonProperty("comicBooks")
5353
@JsonView(View.ComicListView.class)
5454
@Getter
55-
private List<ComicBook> comicBooks;
55+
private List<DisplayableComic> comicBooks;
5656
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
5+
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
6+
<changeSet id="002_2178_add_filename_to_displayable_comics_view-1" author="mcpierce">
7+
<preConditions onFail="MARK_RAN">
8+
<viewExists viewName="displayable_comics_view" />
9+
</preConditions>
10+
11+
<dropView viewName="displayable_comics_view" />
12+
</changeSet>
13+
14+
<changeSet id="002_2178_add_filename_to_displayable_comics_view-2" author="mcpierce">
15+
16+
<createView replaceIfExists="true" viewName="displayable_comics_view">
17+
SELECT DISTINCT d.comic_book_id as comic_book_id,
18+
d.comic_detail_id as comic_detail_id,
19+
d.filename as filename,
20+
d.archive_type as archive_type,
21+
d.comic_state as comic_state,
22+
CASE
23+
WHEN EXISTS(SELECT *
24+
FROM comic_metadata_sources s
25+
WHERE s.comic_book_id = d.comic_book_id)
26+
THEN false
27+
ELSE true END AS is_unscraped,
28+
d.comic_type as comic_type,
29+
d.publisher as publisher,
30+
d.series as series,
31+
d.volume as volume,
32+
d.issue_number as issue_number,
33+
d.description as description,
34+
d.notes as notes,
35+
(SELECT RIGHT(CONCAT('0000000000', d.issue_number), 10)) as sortable_issue_number, d.title as title, (
36+
SELECT COUNT(*)
37+
FROM comic_pages cp
38+
WHERE cp.comic_book_id = d.comic_book_id) as page_count
39+
, d.cover_date as cover_date
40+
, CASE WHEN d.cover_date IS NULL THEN 0 ELSE (SELECT EXTRACT(MONTH FROM cover_date))
41+
END
42+
as month_published
43+
, CASE WHEN d.cover_date IS NULL THEN 0 ELSE (SELECT EXTRACT(YEAR FROM cover_date))
44+
END
45+
as year_published,
46+
d.store_date as store_date,
47+
d.added_date as added_date
48+
FROM comic_details d
49+
</createView>
50+
51+
</changeSet>
52+
</databaseChangeLog>

comixed-model/src/main/resources/db/migrations/3.0/changelog-3.0.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@
1717

1818
<!-- v3.0 migrations -->
1919
<include file="/db/migrations/3.0/001_2178_add_missing_foreign_keys.xml"/>
20+
<include file="/db/migrations/3.0/002_2178_add_filename_to_displayable_comics_view.xml"/>
2021

2122
</databaseChangeLog>

comixed-rest/src/main/java/org/comixedproject/rest/metadata/ComicBookScrapingController.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@
3535
import org.comixedproject.metadata.model.StoryMetadata;
3636
import org.comixedproject.metadata.model.VolumeMetadata;
3737
import org.comixedproject.model.comicbooks.ComicBook;
38+
import org.comixedproject.model.library.DisplayableComic;
3839
import org.comixedproject.model.net.metadata.*;
3940
import org.comixedproject.service.comicbooks.ComicBookSelectionException;
4041
import org.comixedproject.service.comicbooks.ComicBookService;
4142
import org.comixedproject.service.comicbooks.ComicSelectionService;
43+
import org.comixedproject.service.library.DisplayableComicService;
4244
import org.comixedproject.service.metadata.MetadataCacheService;
4345
import org.comixedproject.service.metadata.MetadataService;
4446
import org.comixedproject.views.View;
@@ -64,6 +66,7 @@ public class ComicBookScrapingController {
6466
@Autowired private MetadataService metadataService;
6567
@Autowired private MetadataCacheService metadataCacheService;
6668
@Autowired private ComicBookService comicBookService;
69+
@Autowired private DisplayableComicService displayableComicService;
6770
@Autowired private ComicSelectionService comicSelectionService;
6871

6972
@Autowired
@@ -270,12 +273,12 @@ public StartMultiBookScrapingResponse startMultiBookScraping(
270273
final String email = principal.getName();
271274
final List<Long> selectedIds =
272275
this.comicSelectionService.decodeSelections(session.getAttribute(LIBRARY_SELECTIONS));
273-
final List<Long> comicDetailIds =
276+
final List<Long> comicBookIds =
274277
this.comicSelectionService.decodeSelections(
275278
session.getAttribute(MULTI_BOOK_SCRAPING_SELECTIONS));
276279

277280
if (!selectedIds.isEmpty()) {
278-
comicDetailIds.addAll(selectedIds);
281+
comicBookIds.addAll(selectedIds);
279282

280283
this.comicSelectionService.clearSelectedComicBooks(email, selectedIds);
281284
session.setAttribute(
@@ -284,13 +287,13 @@ public StartMultiBookScrapingResponse startMultiBookScraping(
284287

285288
session.setAttribute(
286289
MULTI_BOOK_SCRAPING_SELECTIONS,
287-
this.comicSelectionService.encodeSelections(comicDetailIds));
290+
this.comicSelectionService.encodeSelections(comicBookIds));
288291

289292
final int pageSize = request.getPageSize();
290-
final List<ComicBook> comicBooks =
291-
this.comicBookService.loadByComicBookId(comicDetailIds, pageSize, 0);
293+
final List<DisplayableComic> comicBooks =
294+
this.displayableComicService.loadComicsById(pageSize, 0, "", "", comicBookIds);
292295

293-
return new StartMultiBookScrapingResponse(pageSize, 0, comicDetailIds.size(), comicBooks);
296+
return new StartMultiBookScrapingResponse(pageSize, 0, comicBookIds.size(), comicBooks);
294297
} catch (ComicBookSelectionException error) {
295298
throw new MetadataException("Failed to start multi-book scraping", error);
296299
}
@@ -325,8 +328,8 @@ public LoadMultiBookScrapingResponse loadMultiBookScrapingPage(
325328
this.comicSelectionService.decodeSelections(
326329
session.getAttribute(MULTI_BOOK_SCRAPING_SELECTIONS));
327330

328-
final List<ComicBook> comicBooks =
329-
this.comicBookService.loadByComicBookId(comicBookIds, pageSize, pageNumber);
331+
final List<DisplayableComic> comicBooks =
332+
this.displayableComicService.loadComicsById(pageSize, 0, "", "", comicBookIds);
330333

331334
return new LoadMultiBookScrapingResponse(pageSize, pageNumber, comicBookIds.size(), comicBooks);
332335
}
@@ -487,21 +490,20 @@ private StartMultiBookScrapingResponse doRemoveComicBook(
487490
throws ComicBookSelectionException {
488491
log.debug(
489492
"Removing scraped comic book id from multi-book scraping selections: id={}", comicBookId);
490-
final List<Long> comicDetailIds =
493+
final List<Long> comicBookIds =
491494
this.comicSelectionService
492495
.decodeSelections(session.getAttribute(MULTI_BOOK_SCRAPING_SELECTIONS))
493496
.stream()
494497
.filter(id -> id != comicBookId)
495498
.collect(Collectors.toList());
496499
log.debug("Updating multi-book scraping selections");
497500
session.setAttribute(
498-
MULTI_BOOK_SCRAPING_SELECTIONS,
499-
this.comicSelectionService.encodeSelections(comicDetailIds));
501+
MULTI_BOOK_SCRAPING_SELECTIONS, this.comicSelectionService.encodeSelections(comicBookIds));
500502

501503
log.debug("Loading page of comic books still to be scraped");
502-
final List<ComicBook> comicBooks =
503-
this.comicBookService.loadByComicBookId(comicDetailIds, pageSize, pageNumber);
504+
final List<DisplayableComic> comicBooks =
505+
this.displayableComicService.loadComicsById(pageSize, 0, "", "", comicBookIds);
504506
return new StartMultiBookScrapingResponse(
505-
pageSize, pageNumber, comicDetailIds.size(), comicBooks);
507+
pageSize, pageNumber, comicBookIds.size(), comicBooks);
506508
}
507509
}

0 commit comments

Comments
 (0)