Skip to content

Commit 6bc9d32

Browse files
Fix checkstyle issues, added more refactorings
1 parent 2dc17d4 commit 6bc9d32

File tree

8 files changed

+69
-69
lines changed

8 files changed

+69
-69
lines changed

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCParsingHelper.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,12 @@
88
import org.schabi.newpipe.extractor.Image.ResolutionLevel;
99
import org.schabi.newpipe.extractor.downloader.Downloader;
1010
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
11-
import org.schabi.newpipe.extractor.exceptions.ParsingException;
1211
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
1312
import org.schabi.newpipe.extractor.localization.Localization;
1413

1514
import javax.annotation.Nonnull;
1615
import javax.annotation.Nullable;
1716
import java.io.IOException;
18-
import java.time.OffsetDateTime;
19-
import java.time.format.DateTimeParseException;
2017
import java.util.ArrayList;
2118
import java.util.Collections;
2219
import java.util.List;
@@ -33,15 +30,6 @@ public final class MediaCCCParsingHelper {
3330

3431
private MediaCCCParsingHelper() { }
3532

36-
public static OffsetDateTime parseDateFrom(final String textualUploadDate)
37-
throws ParsingException {
38-
try {
39-
return OffsetDateTime.parse(textualUploadDate);
40-
} catch (final DateTimeParseException e) {
41-
throw new ParsingException("Could not parse date: \"" + textualUploadDate + "\"", e);
42-
}
43-
}
44-
4533
/**
4634
* Check whether an id is a live stream id
4735
* @param id the {@code id} to check

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/MediaCCCStreamExtractor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import static org.schabi.newpipe.extractor.services.media_ccc.extractors.MediaCCCParsingHelper.getImageListFromLogoImageUrl;
44
import static org.schabi.newpipe.extractor.services.media_ccc.extractors.MediaCCCParsingHelper.getThumbnailsFromStreamItem;
5-
import static org.schabi.newpipe.extractor.services.media_ccc.extractors.MediaCCCParsingHelper.parseDateFrom;
65
import static org.schabi.newpipe.extractor.stream.AudioStream.UNKNOWN_BITRATE;
76
import static org.schabi.newpipe.extractor.stream.Stream.ID_UNKNOWN;
87

@@ -27,6 +26,7 @@
2726
import org.schabi.newpipe.extractor.stream.StreamExtractor;
2827
import org.schabi.newpipe.extractor.stream.StreamType;
2928
import org.schabi.newpipe.extractor.stream.VideoStream;
29+
import org.schabi.newpipe.extractor.utils.ExtractorHelper;
3030
import org.schabi.newpipe.extractor.utils.JsonUtils;
3131
import org.schabi.newpipe.extractor.utils.LocaleCompat;
3232

@@ -55,7 +55,7 @@ public String getTextualUploadDate() {
5555
@Nonnull
5656
@Override
5757
public DateWrapper getUploadDate() throws ParsingException {
58-
return new DateWrapper(parseDateFrom(getTextualUploadDate()));
58+
return ExtractorHelper.parseDateWrapper(getTextualUploadDate());
5959
}
6060

6161
@Nonnull

extractor/src/main/java/org/schabi/newpipe/extractor/services/media_ccc/extractors/infoItems/MediaCCCStreamInfoItemExtractor.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
import org.schabi.newpipe.extractor.Image;
55
import org.schabi.newpipe.extractor.exceptions.ParsingException;
66
import org.schabi.newpipe.extractor.localization.DateWrapper;
7-
import org.schabi.newpipe.extractor.services.media_ccc.extractors.MediaCCCParsingHelper;
87
import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor;
98
import org.schabi.newpipe.extractor.stream.StreamType;
9+
import org.schabi.newpipe.extractor.utils.ExtractorHelper;
1010

1111
import javax.annotation.Nonnull;
1212
import javax.annotation.Nullable;
@@ -66,10 +66,8 @@ public String getTextualUploadDate() {
6666
@Override
6767
public DateWrapper getUploadDate() throws ParsingException {
6868
final String date = getTextualUploadDate();
69-
if (date == null) {
70-
return null; // event is in the future...
71-
}
72-
return new DateWrapper(MediaCCCParsingHelper.parseDateFrom(date));
69+
// if null, event is in the future...
70+
return date == null ? null : ExtractorHelper.parseDateWrapper(date);
7371
}
7472

7573
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeFeedInfoItemExtractor.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@
77
import org.schabi.newpipe.extractor.localization.DateWrapper;
88
import org.schabi.newpipe.extractor.stream.StreamInfoItemExtractor;
99
import org.schabi.newpipe.extractor.stream.StreamType;
10+
import org.schabi.newpipe.extractor.utils.ExtractorHelper;
1011

1112
import javax.annotation.Nonnull;
1213
import javax.annotation.Nullable;
13-
import java.time.OffsetDateTime;
14-
import java.time.format.DateTimeParseException;
1514
import java.util.List;
1615

1716
public class YoutubeFeedInfoItemExtractor implements StreamInfoItemExtractor {
@@ -69,12 +68,8 @@ public String getTextualUploadDate() {
6968
@Nullable
7069
@Override
7170
public DateWrapper getUploadDate() throws ParsingException {
72-
try {
73-
return new DateWrapper(OffsetDateTime.parse(getTextualUploadDate()));
74-
} catch (final DateTimeParseException e) {
75-
throw new ParsingException("Could not parse date (\"" + getTextualUploadDate() + "\")",
76-
e);
77-
}
71+
final String date = getTextualUploadDate();
72+
return date == null ? null : ExtractorHelper.parseDateWrapper(date);
7873
}
7974

8075
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
package org.schabi.newpipe.extractor.services.youtube.extractors;
2222

23-
import static org.schabi.newpipe.extractor.localization.TimeAgoPatternsManager.getTimeAgoParserFor;
2423
import static org.schabi.newpipe.extractor.services.youtube.ItagItem.APPROX_DURATION_MS_UNKNOWN;
2524
import static org.schabi.newpipe.extractor.services.youtube.ItagItem.CONTENT_LENGTH_UNKNOWN;
2625
import static org.schabi.newpipe.extractor.services.youtube.YoutubeDescriptionHelper.attributedDescriptionToHtml;
@@ -60,6 +59,7 @@
6059
import org.schabi.newpipe.extractor.localization.DateWrapper;
6160
import org.schabi.newpipe.extractor.localization.Localization;
6261
import org.schabi.newpipe.extractor.localization.TimeAgoParser;
62+
import org.schabi.newpipe.extractor.localization.TimeAgoPatternsManager;
6363
import org.schabi.newpipe.extractor.services.youtube.ItagItem;
6464
import org.schabi.newpipe.extractor.services.youtube.PoTokenProvider;
6565
import org.schabi.newpipe.extractor.services.youtube.PoTokenResult;
@@ -104,6 +104,8 @@
104104
import javax.annotation.Nullable;
105105

106106
public class YoutubeStreamExtractor extends StreamExtractor {
107+
private static final String PREMIERED = "Premiered ";
108+
private static final String PREMIERED_ON = "Premiered on ";
107109

108110
@Nullable
109111
private static PoTokenProvider poTokenProvider;
@@ -172,70 +174,71 @@ public String getName() throws ParsingException {
172174
@Nullable
173175
@Override
174176
public String getTextualUploadDate() throws ParsingException {
175-
final var uploadDate = getUploadDate();
176-
if (uploadDate == null) {
177-
return null;
178-
}
179-
return LocalDate.ofInstant(uploadDate.getInstant(), ZoneId.systemDefault()).toString();
180-
}
181-
182-
@Override
183-
public DateWrapper getUploadDate() throws ParsingException {
184177
final String dateStr = playerMicroFormatRenderer.getString("uploadDate",
185178
playerMicroFormatRenderer.getString("publishDate", ""));
186179
if (!dateStr.isEmpty()) {
187-
return new DateWrapper(OffsetDateTime.parse(dateStr));
180+
return dateStr;
188181
}
189182

190183
final var liveDetails = playerMicroFormatRenderer.getObject("liveBroadcastDetails");
191184
final String timestamp = liveDetails.getString("endTimestamp", // an ended live stream
192185
liveDetails.getString("startTimestamp", "")); // a running live stream
193186

194187
if (!timestamp.isEmpty()) {
195-
return new DateWrapper(OffsetDateTime.parse(timestamp));
188+
return timestamp;
196189
} else if (getStreamType() == StreamType.LIVE_STREAM) {
197190
// this should never be reached, but a live stream without upload date is valid
198191
return null;
199192
}
200193

201194
final var textObject = getVideoPrimaryInfoRenderer().getObject("dateText");
202-
return Optional.ofNullable(getTextFromObject(textObject))
203-
.flatMap(rendererDateText -> {
204-
final Optional<LocalDate> dateOptional;
195+
final String rendererDateText = getTextFromObject(textObject);
196+
if (rendererDateText == null) {
197+
return null;
198+
} else if (rendererDateText.startsWith(PREMIERED_ON)) { // Premiered on 21 Feb 2020
199+
return rendererDateText.substring(PREMIERED_ON.length());
200+
} else if (rendererDateText.startsWith(PREMIERED)) {
201+
// Premiered 20 hours ago / Premiered Feb 21, 2020
202+
return rendererDateText.substring(PREMIERED.length());
203+
} else {
204+
return rendererDateText;
205+
}
206+
}
205207

206-
if (rendererDateText.startsWith("Premiered")) {
207-
final String time = rendererDateText.substring(13);
208+
@Override
209+
public DateWrapper getUploadDate() throws ParsingException {
210+
final String dateText = getTextualUploadDate();
211+
if (dateText == null) {
212+
return null;
213+
}
208214

209-
try { // Premiered 20 hours ago
210-
final var localization = new Localization("en");
211-
return Optional.of(getTimeAgoParserFor(localization).parse(time));
212-
} catch (final Exception e) {
213-
}
215+
try {
216+
return new DateWrapper(OffsetDateTime.parse(dateText));
217+
} catch (final DateTimeParseException e) {
218+
}
214219

215-
// Premiered Feb 21, 2020
216-
dateOptional = parseOptionalDate(time, "MMM dd, yyyy")
217-
// Premiered on 21 Feb 2020
218-
.or(() -> parseOptionalDate(time, "dd MMM yyyy"));
219-
} else {
220-
// Premiered on 21 Feb 2020
221-
dateOptional = parseOptionalDate(rendererDateText, "dd MMM yyyy");
222-
}
220+
try { // Premiered 20 hours ago
221+
final var localization = new Localization("en");
222+
return TimeAgoPatternsManager.getTimeAgoParserFor(localization).parse(dateText);
223+
} catch (final ParsingException e) {
224+
}
223225

224-
return dateOptional.map(date -> {
225-
final var instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
226-
return new DateWrapper(instant, true);
227-
});
226+
return parseOptionalDate(dateText, "MMM dd, yyyy")
227+
.or(() -> parseOptionalDate(dateText.substring(3), "dd MMM yyyy"))
228+
.map(date -> {
229+
final var instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
230+
return new DateWrapper(instant, true);
228231
})
229-
.orElseThrow(() -> new ParsingException("Could not get upload date"));
232+
.orElseThrow(() -> new ParsingException("Could not parse upload date"));
230233
}
231234

232-
private Optional<LocalDate> parseOptionalDate(String date, String pattern) {
235+
private Optional<LocalDate> parseOptionalDate(final String date, final String pattern) {
233236
try {
234-
// TODO: this parses English formatted dates only, we need a better approach to
235-
// parse the textual date
237+
// TODO: this parses English formatted dates only, we need a better approach to parse
238+
// the textual date
236239
final var formatter = DateTimeFormatter.ofPattern(pattern, Locale.ENGLISH);
237240
return Optional.of(LocalDate.parse(date, formatter));
238-
} catch (DateTimeParseException e) {
241+
} catch (final DateTimeParseException e) {
239242
return Optional.empty();
240243
}
241244
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemExtractor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ public boolean isUploaderVerified() throws ParsingException {
246246
@Nullable
247247
@Override
248248
public String getTextualUploadDate() throws ParsingException {
249-
if (getStreamType().equals(StreamType.LIVE_STREAM)) {
249+
if (getStreamType() == StreamType.LIVE_STREAM) {
250250
return null;
251251
}
252252

@@ -274,7 +274,7 @@ public String getTextualUploadDate() throws ParsingException {
274274
@Nullable
275275
@Override
276276
public DateWrapper getUploadDate() throws ParsingException {
277-
if (getStreamType().equals(StreamType.LIVE_STREAM)) {
277+
if (getStreamType() == StreamType.LIVE_STREAM) {
278278
return null;
279279
}
280280

extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamExtractor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import javax.annotation.Nullable;
4040

4141
import java.io.IOException;
42+
import java.time.Instant;
4243
import java.util.Collections;
4344
import java.util.List;
4445
import java.util.Locale;
@@ -71,7 +72,7 @@ public String getTextualUploadDate() throws ParsingException {
7172
}
7273

7374
/**
74-
* A more general {@code Calendar} instance set to the date provided by the service.<br>
75+
* A more general {@link Instant} instance set to the date provided by the service.<br>
7576
* Implementations usually will just parse the date returned from the {@link
7677
* #getTextualUploadDate()}.
7778
*

extractor/src/main/java/org/schabi/newpipe/extractor/utils/ExtractorHelper.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,31 @@
55
import org.schabi.newpipe.extractor.InfoItemsCollector;
66
import org.schabi.newpipe.extractor.ListExtractor;
77
import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage;
8+
import org.schabi.newpipe.extractor.exceptions.ParsingException;
9+
import org.schabi.newpipe.extractor.localization.DateWrapper;
810
import org.schabi.newpipe.extractor.stream.StreamExtractor;
911
import org.schabi.newpipe.extractor.stream.StreamInfo;
1012

13+
import java.time.OffsetDateTime;
14+
import java.time.format.DateTimeParseException;
1115
import java.util.Collections;
1216
import java.util.List;
1317

18+
import javax.annotation.Nonnull;
19+
1420
public final class ExtractorHelper {
1521
private ExtractorHelper() {
1622
}
1723

24+
@Nonnull
25+
public static DateWrapper parseDateWrapper(@Nonnull final String date) throws ParsingException {
26+
try {
27+
return new DateWrapper(OffsetDateTime.parse(date));
28+
} catch (final DateTimeParseException e) {
29+
throw new ParsingException("Could not parse date: \"" + date + "\"", e);
30+
}
31+
}
32+
1833
public static <T extends InfoItem> InfoItemsPage<T> getItemsPageOrLogError(
1934
final Info info, final ListExtractor<T> extractor) {
2035
try {

0 commit comments

Comments
 (0)