Skip to content

Commit 5490ba4

Browse files
authored
update dependencies and java 21
* update depedencies * remove funk controller * remove funk controller * fix code quality issues * update java 21 * Revert "update java 21" This reverts commit 7e704f4. * update java 21 * fix code quality * upload code coverage to sonar * add jacoco * try fix sonar code coverage * Update maven.yml * remove obsolete preview-enabling
1 parent 4e452c1 commit 5490ba4

File tree

58 files changed

+97
-8748
lines changed

Some content is hidden

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

58 files changed

+97
-8748
lines changed

.github/workflows/develop-pre-release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ jobs:
1010

1111
steps:
1212
- uses: actions/checkout@v2
13-
- name: Set up JDK 17
13+
- name: Set up JDK 21
1414
uses: actions/setup-java@v1
1515
with:
16-
java-version: 17
16+
java-version: 21
1717
java-package: jdk+fx
1818
- name: Cache local Maven repository
1919
uses: actions/cache@v4

.github/workflows/maven.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ jobs:
99

1010
steps:
1111
- uses: actions/checkout@v2
12-
- name: Set up JDK 17
12+
- name: Set up JDK 21
1313
uses: actions/setup-java@v1
1414
with:
15-
java-version: 17
15+
java-version: 21
1616
java-package: jdk+fx
1717
- name: Cache local Maven repository
1818
uses: actions/cache@v4
@@ -22,9 +22,9 @@ jobs:
2222
restore-keys: |
2323
${{ runner.os }}-maven-
2424
- name: Build and test with Maven
25-
run: ./mvnw -B package
25+
run: ./mvnw -B clean verify
2626
- name: SonarCloud Scan
27-
run: ./mvnw -B org.jacoco:jacoco-maven-plugin:prepare-agent sonar:sonar -Dsonar.projectKey=mediathekview_MServer -Dsonar.organization=mediathekview -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN
27+
run: ./mvnw -B sonar:sonar -Dsonar.projectKey=mediathekview_MServer -Dsonar.organization=mediathekview -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml -Dsonar.junit.reportPaths=target/surefire-reports
2828
env:
2929
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3030
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

pom.xml

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,22 @@
5656
<properties>
5757
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
5858
<release>4.0.1-SNAPSHOT</release>
59-
<maven.compiler.source>17</maven.compiler.source>
60-
<maven.compiler.target>17</maven.compiler.target>
59+
<maven.compiler.source>21</maven.compiler.source>
60+
<maven.compiler.target>21</maven.compiler.target>
6161

62-
<assertj.version>3.23.1</assertj.version>
63-
<byte-buddy.version>1.12.18</byte-buddy.version>
64-
<commons-net.version>3.8.0</commons-net.version>
65-
<commons-text.version>1.10.0</commons-text.version>
66-
<exec-maven-plugin.version>3.0.0</exec-maven-plugin.version>
67-
<hamcrest.version>2.2</hamcrest.version>
68-
<guava.version>31.1-jre</guava.version>
69-
<gson.version>2.9.1</gson.version>
70-
<jsoup.version>1.15.3</jsoup.version>
71-
<jersey.version>3.1.0-M8</jersey.version>
72-
<javax-jaxb.version>2.4.0-b180830.0359</javax-jaxb.version>
73-
<log4j2.version>2.19.0</log4j2.version>
74-
<junit.version>5.9.1</junit.version>
62+
<assertj.version>3.27.4</assertj.version>
63+
<byte-buddy.version>1.17.7</byte-buddy.version>
64+
<commons-net.version>3.12.0</commons-net.version>
65+
<commons-text.version>1.14.0</commons-text.version>
66+
<exec-maven-plugin.version>3.5.1</exec-maven-plugin.version>
67+
<hamcrest.version>3.0</hamcrest.version>
68+
<guava.version>33.4.8-jre</guava.version>
69+
<gson.version>2.13.1</gson.version>
70+
<jsoup.version>1.21.1</jsoup.version>
71+
<jersey.version>3.1.11</jersey.version>
72+
<javax-jaxb.version>4.0.2</javax-jaxb.version>
73+
<log4j2.version>2.25.1</log4j2.version>
74+
<junit.version>5.13.4</junit.version>
7575
<license-maven-plugin.version>2.0.0</license-maven-plugin.version>
7676
<maven-assembly-plugin.version>3.4.2</maven-assembly-plugin.version>
7777
<maven-dependency-plugin.version>3.3.0</maven-dependency-plugin.version>
@@ -84,9 +84,9 @@
8484
<maven-resources-plugin.version>3.3.0</maven-resources-plugin.version>
8585
<maven-source-plugin.version>3.2.1</maven-source-plugin.version>
8686
<maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version>
87-
<mockito.version>4.8.0</mockito.version>
87+
<mockito.version>5.19.0</mockito.version>
8888
<nexus-staging-maven-plugin.version>1.6.13</nexus-staging-maven-plugin.version>
89-
<wiremock.version>2.34.0</wiremock.version>
89+
<wiremock.version>2.35.2</wiremock.version>
9090
<docker-maven-plugin.version>0.40.2</docker-maven-plugin.version>
9191
<sortpom-maven-plugin.version>3.2.0</sortpom-maven-plugin.version>
9292
</properties>
@@ -154,8 +154,8 @@
154154
<artifactId>jersey-hk2</artifactId>
155155
</dependency>
156156
<dependency>
157-
<groupId>javax.xml.bind</groupId>
158-
<artifactId>jaxb-api</artifactId>
157+
<groupId>jakarta.xml.bind</groupId>
158+
<artifactId>jakarta.xml.bind-api</artifactId>
159159
<version>${javax-jaxb.version}</version>
160160
</dependency>
161161

@@ -339,7 +339,7 @@
339339
<artifactId>maven-javadoc-plugin</artifactId>
340340
<version>${maven-javadoc-plugin.version}</version>
341341
<configuration>
342-
<additionalOptions>--enable-preview --source ${maven.compiler.target}</additionalOptions>
342+
<additionalOptions>--source ${maven.compiler.target}</additionalOptions>
343343
</configuration>
344344
<executions>
345345
<execution>
@@ -367,9 +367,6 @@
367367
<plugin>
368368
<artifactId>maven-compiler-plugin</artifactId>
369369
<version>${maven-compiler-plugin.version}</version>
370-
<configuration>
371-
<compilerArgs>--enable-preview</compilerArgs>
372-
</configuration>
373370
</plugin>
374371
<plugin>
375372
<artifactId>maven-surefire-plugin</artifactId>
@@ -378,7 +375,6 @@
378375
<parallel>classes</parallel>
379376
<useUnlimitedThreads>true</useUnlimitedThreads>
380377
<perCoreThreadCount>true</perCoreThreadCount>
381-
<argLine>--enable-preview</argLine>
382378
</configuration>
383379
</plugin>
384380
<plugin>
@@ -419,6 +415,25 @@
419415
</execution>
420416
</executions>
421417
</plugin>
418+
<plugin>
419+
<groupId>org.jacoco</groupId>
420+
<artifactId>jacoco-maven-plugin</artifactId>
421+
<version>0.8.11</version>
422+
<executions>
423+
<execution>
424+
<goals>
425+
<goal>prepare-agent</goal>
426+
</goals>
427+
</execution>
428+
<execution>
429+
<id>report</id>
430+
<phase>prepare-package</phase>
431+
<goals>
432+
<goal>report</goal>
433+
</goals>
434+
</execution>
435+
</executions>
436+
</plugin>
422437
</plugins>
423438
</build>
424439

src/main/java/de/mediathekview/mserver/base/config/MServerBasicConfigDTO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package de.mediathekview.mserver.base.config;
22

3-
import javax.annotation.Nullable;
3+
import jakarta.annotation.Nullable;
44
import java.util.Objects;
55

66
/**

src/main/java/de/mediathekview/mserver/base/utils/JsonUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.google.gson.JsonObject;
55
import de.mediathekview.mserver.crawler.basic.AbstractCrawler;
66

7-
import javax.annotation.Nullable;
7+
import jakarta.annotation.Nullable;
88
import java.util.Arrays;
99
import java.util.Optional;
1010

src/main/java/de/mediathekview/mserver/crawler/CrawlerManager.java

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,26 @@
2222
import de.mediathekview.mserver.crawler.basic.TimeoutTask;
2323
import de.mediathekview.mserver.crawler.dreisat.DreiSatCrawler;
2424
import de.mediathekview.mserver.crawler.dw.DwCrawler;
25-
import de.mediathekview.mserver.crawler.funk.FunkCrawler;
2625
import de.mediathekview.mserver.crawler.kika.KikaApiCrawler;
2726
import de.mediathekview.mserver.crawler.orfon.OrfOnCrawler;
2827
import de.mediathekview.mserver.crawler.phoenix.PhoenixCrawler;
2928
import de.mediathekview.mserver.crawler.sr.SrCrawler;
3029
import de.mediathekview.mserver.crawler.srf.SrfCrawler;
3130
import de.mediathekview.mserver.crawler.zdf.ZdfCrawler;
32-
import org.apache.logging.log4j.LogManager;
33-
import org.apache.logging.log4j.Logger;
34-
import org.jetbrains.annotations.NotNull;
35-
3631
import java.io.IOException;
3732
import java.net.MalformedURLException;
38-
import java.net.URL;
33+
import java.net.URI;
34+
import java.net.URISyntaxException;
3935
import java.nio.file.Files;
4036
import java.nio.file.Path;
4137
import java.nio.file.Paths;
4238
import java.time.LocalDateTime;
4339
import java.util.*;
4440
import java.util.Map.Entry;
4541
import java.util.concurrent.*;
46-
import java.util.stream.Collectors;
42+
import org.apache.logging.log4j.LogManager;
43+
import org.apache.logging.log4j.Logger;
44+
import org.jetbrains.annotations.NotNull;
4745

4846
/** A manager to control the crawler. */
4947
public class CrawlerManager extends AbstractManager {
@@ -350,7 +348,7 @@ private boolean checkAllUsedFormatsHaveSavePaths() {
350348
final List<FilmlistFormats> missingSavePathFormats =
351349
config.getFilmlistSaveFormats().stream()
352350
.filter(f -> !config.getFilmlistSavePaths().containsKey(f))
353-
.collect(Collectors.toList());
351+
.toList();
354352
missingSavePathFormats.forEach(
355353
f -> printMessage(ServerMessages.NO_FILMLIST_SAVE_PATH_FOR_FORMAT_CONFIGURED, f.name()));
356354
return missingSavePathFormats.isEmpty();
@@ -456,8 +454,8 @@ private Optional<Filmlist> importFilmListFromURl(
456454
final FilmlistFormats aFormat, final String aFilmlistLocation) throws IOException {
457455
try {
458456
filmlistManager.addAllMessageListener(messageListeners);
459-
return filmlistManager.importList(aFormat, new URL(aFilmlistLocation));
460-
} catch (final MalformedURLException malformedURLException) {
457+
return filmlistManager.importList(aFormat, new URI(aFilmlistLocation).toURL());
458+
} catch (final MalformedURLException | URISyntaxException malformedURLException) {
461459
printMessage(ServerMessages.FILMLIST_IMPORT_URL_INVALID, aFilmlistLocation);
462460
}
463461
return Optional.empty();
@@ -511,16 +509,11 @@ private void initializeCrawler(final MServerConfigManager rootConfig) {
511509
crawlerMap.put(
512510
Sender.DREISAT,
513511
new DreiSatCrawler(forkJoinPool, messageListeners, progressListeners, rootConfig));
514-
crawlerMap.put(
515-
Sender.FUNK,
516-
new FunkCrawler(forkJoinPool, messageListeners, progressListeners, rootConfig));
517512
crawlerMap.put(
518513
Sender.KIKA,
519514
new KikaApiCrawler(forkJoinPool, messageListeners, progressListeners, rootConfig));
520515
crawlerMap.put(
521516
Sender.DW, new DwCrawler(forkJoinPool, messageListeners, progressListeners, rootConfig));
522-
//crawlerMap.put(
523-
// Sender.ORF, new OrfCrawler(forkJoinPool, messageListeners, progressListeners, rootConfig));
524517
crawlerMap.put(
525518
Sender.ORF, new OrfOnCrawler(forkJoinPool, messageListeners, progressListeners, rootConfig));
526519
crawlerMap.put(

src/main/java/de/mediathekview/mserver/crawler/ard/json/ArdFilmDeserializer.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
import de.mediathekview.mserver.crawler.basic.AbstractCrawler;
1515
import org.apache.logging.log4j.LogManager;
1616

17-
import javax.annotation.Nullable;
17+
import jakarta.annotation.Nullable;
1818

1919
import java.lang.reflect.Type;
2020
import java.net.MalformedURLException;
21+
import java.net.URI;
22+
import java.net.URISyntaxException;
2123
import java.net.URL;
2224
import java.time.Duration;
2325
import java.time.LocalDateTime;
@@ -39,7 +41,7 @@ public class ArdFilmDeserializer implements JsonDeserializer<List<ArdFilmDto>> {
3941
private static final String ELEMENT_SHOW = "show";
4042
private static final String ELEMENT_TEASERS = "teasers";
4143
private static final String ELEMENT_WIDGETS = "widgets";
42-
private static final String[] ELEMENT_SUBTITLES = {"mediaCollection","embedded","subtitles"};
44+
private static final String[] ELEMENT_SUBTITLES = {ELEMENT_MEDIA_COLLECTION,ELEMENT_EMBEDDED,"subtitles"};
4345
private static final String ELEMENT_SOURCES = "sources";
4446
private static final String ELEMENT_STREAMS = "streams";
4547
private static final String ELEMENT_MEDIA = "media";
@@ -171,7 +173,6 @@ public List<ArdFilmDto> deserialize(
171173
final Optional<String> description = JsonUtils.getAttributeAsString(itemObject, ATTRIBUTE_SYNOPSIS);
172174
final Optional<LocalDateTime> date = parseDate(itemObject);
173175
final Optional<Duration> duration = parseDuration(itemObject);
174-
//final Sender sender = determinePartner(itemObject);
175176
final Optional<String> partner = parsePartner(itemObject);
176177
final Sender sender = ArdConstants.PARTNER_TO_SENDER.get(partner.orElse(""));
177178
final Optional<ArdVideoInfoDto> videoInfo = parseVideos(itemObject, titleOriginal.orElse(""));
@@ -234,13 +235,13 @@ private Optional<Map<Resolution, String>> fallbackToM3U(Optional<ArdVideoInfoDto
234235
String m3uUrl = m3u.get().getVideoUrls().values().toArray(new String[1])[0];
235236
Map<Resolution, URL> resolutionUrlMapFromM3U;
236237
try {
237-
resolutionUrlMapFromM3U = videoDeserializer.loadM3U8(new URL(m3uUrl));
238-
if (resolutionUrlMapFromM3U.size() > 0) {
238+
resolutionUrlMapFromM3U = videoDeserializer.loadM3U8(new URI(m3uUrl).toURL());
239+
if (!resolutionUrlMapFromM3U.isEmpty()) {
239240
Map<Resolution, String> newUrls = new EnumMap<>(Resolution.class);
240241
resolutionUrlMapFromM3U.forEach((key, value) -> newUrls.put(key, value.toString()));
241242
return Optional.of(newUrls);
242243
}
243-
} catch (MalformedURLException e) {
244+
} catch (MalformedURLException | URISyntaxException e) {
244245
LOG.error("Could not convert {} to url", m3uUrl, e );
245246
}
246247
}
@@ -324,8 +325,8 @@ private Film createFilm(
324325
if (!videoInfo.getSubtitleUrl().isEmpty()) {
325326
for (String subtitleUrl : videoInfo.getSubtitleUrl()) {
326327
try {
327-
film.addSubtitle(new URL(subtitleUrl));
328-
} catch (final MalformedURLException ex) {
328+
film.addSubtitle(new URI(subtitleUrl).toURL());
329+
} catch (final MalformedURLException | URISyntaxException ex) {
329330
LOG.error(
330331
"{}, {}, {} Invalid subtitle url: {}",
331332
topic,
@@ -425,9 +426,7 @@ private Optional<Map<Resolution, String>> parseVideoUrls(final JsonObject player
425426
Map<Resolution, String> videoInfo = new EnumMap<>(Resolution.class);
426427
for (Map.Entry<Integer, String> entry : urls.get().entrySet()) {
427428
Resolution resolution = ArdConstants.getResolutionFromWidth(entry.getKey());
428-
if(!videoInfo.containsKey(resolution)) {
429-
videoInfo.put(resolution, entry.getValue());
430-
}
429+
videoInfo.computeIfAbsent(resolution, k -> entry.getValue());
431430
}
432431
// issue if we do not have normal res
433432
// TODO: FIXME

src/main/java/de/mediathekview/mserver/crawler/ard/json/ArdMediaArrayToDownloadUrlsConverter.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@
1313
import org.apache.logging.log4j.LogManager;
1414
import org.apache.logging.log4j.Logger;
1515

16-
import javax.annotation.Nullable;
16+
import jakarta.annotation.Nullable;
1717
import java.net.MalformedURLException;
18+
import java.net.URI;
19+
import java.net.URISyntaxException;
1820
import java.net.URL;
1921
import java.util.*;
2022
import java.util.concurrent.atomic.AtomicBoolean;
21-
import java.util.stream.Collectors;
2223
import java.util.stream.StreamSupport;
2324

2425
public class ArdMediaArrayToDownloadUrlsConverter {
@@ -58,7 +59,7 @@ private static List<ArdFilmUrlInfoDto> filterUrls(
5859
url ->
5960
url.getFileType().isPresent()
6061
&& url.getFileType().get().equalsIgnoreCase(aFileType))
61-
.collect(Collectors.toList());
62+
.toList();
6263
}
6364

6465
private static Optional<Resolution> getQuality(final String qualityAsText) {
@@ -105,7 +106,7 @@ private static String determineUrl(
105106

106107
urls = filterUrls(aUrls, "m3u8");
107108
if (!urls.isEmpty()) {
108-
ardUrlInfo = urls.get(0);
109+
ardUrlInfo = urls.getFirst();
109110
} else {
110111
ardUrlInfo = aUrls.iterator().next();
111112
}
@@ -155,10 +156,10 @@ private static ArdFilmUrlInfoDto getRelevantUrlMp4(
155156
switch (aResolution) {
156157
case SMALL:
157158
// the first url is the best
158-
return aUrls.get(0);
159+
return aUrls.getFirst();
159160
case NORMAL:
160161
// the last url is the best
161-
return aUrls.get(aUrls.size() - 1);
162+
return aUrls.getLast();
162163
case HD:
163164
ArdFilmUrlInfoDto relevantInfo = null;
164165

@@ -217,9 +218,7 @@ private void addUrl(
217218
info.setResolution(Integer.parseInt(width), Integer.parseInt(height));
218219
}
219220

220-
if (!urls.containsKey(quality)) {
221-
urls.put(quality, new LinkedHashSet<>());
222-
}
221+
urls.computeIfAbsent(quality, k -> new LinkedHashSet<>());
223222
urls.get(quality).add(info);
224223
}
225224
}
@@ -278,8 +277,8 @@ private Optional<URL> determineNormalUrlFromHd(Set<ArdFilmUrlInfoDto> ardFilmUrl
278277

279278
if (relevantInfo != null) {
280279
try {
281-
return Optional.of(new URL(relevantInfo.getUrl()));
282-
} catch (final MalformedURLException malformedUrlException) {
280+
return Optional.of(new URI(relevantInfo.getUrl()).toURL());
281+
} catch (final MalformedURLException | URISyntaxException malformedUrlException) {
283282
LOG.error("A download URL is defect.", malformedUrlException);
284283
crawler.printMessage(ServerMessages.DEBUG_INVALID_URL, crawler.getSender().getName(), relevantInfo.getUrl());
285284
}
@@ -292,8 +291,8 @@ private Optional<URL> finalizeUrl(final Map.Entry<Resolution, Set<ArdFilmUrlInfo
292291
final String url = determineUrl(entry.getKey(), entry.getValue());
293292
if (!url.isEmpty()) {
294293
try {
295-
return Optional.of(new URL(optimizeUrl(entry.getKey(), url)));
296-
} catch (final MalformedURLException malformedUrlException) {
294+
return Optional.of(new URI(optimizeUrl(entry.getKey(), url)).toURL());
295+
} catch (final MalformedURLException | URISyntaxException malformedUrlException) {
297296
LOG.error("A download URL is defect.", malformedUrlException);
298297
crawler.printMessage(ServerMessages.DEBUG_INVALID_URL, crawler.getSender().getName(), url);
299298
}

src/main/java/de/mediathekview/mserver/crawler/arte/tasks/ArteTaskBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.apache.logging.log4j.LogManager;
99
import org.apache.logging.log4j.Logger;
1010

11-
import javax.annotation.Nullable;
11+
import jakarta.annotation.Nullable;
1212
import jakarta.ws.rs.client.Invocation.Builder;
1313
import jakarta.ws.rs.client.WebTarget;
1414
import jakarta.ws.rs.core.Response;

0 commit comments

Comments
 (0)