mirror of
https://github.com/JasonHHouse/gaps.git
synced 2026-02-11 21:28:37 -06:00
initial commit
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>Gaps</artifactId>
|
||||
<groupId>com.jasonhhouse</groupId>
|
||||
<version>0.0.5</version>
|
||||
<version>0.0.6-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@@ -30,5 +30,11 @@
|
||||
<version>3.9</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
<version>20190722</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</project>
|
||||
9
Core/src/main/java/com/jasonhhouse/gaps/Jsonify.java
Normal file
9
Core/src/main/java/com/jasonhhouse/gaps/Jsonify.java
Normal file
@@ -0,0 +1,9 @@
|
||||
package com.jasonhhouse.gaps;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
public interface Jsonify<T> {
|
||||
|
||||
JSONObject toJSON();
|
||||
|
||||
}
|
||||
@@ -11,21 +11,28 @@ package com.jasonhhouse.gaps;/*
|
||||
import java.util.Objects;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public final class Movie implements Comparable<Movie> {
|
||||
public final class Movie implements Comparable<Movie>, Jsonify<Movie> {
|
||||
|
||||
public static final String TVDB_ID = "tvdbId";
|
||||
public static final String IMDB_ID = "imdbId";
|
||||
public static final String NAME = "name";
|
||||
public static final String YEAR = "year";
|
||||
|
||||
private final String name;
|
||||
|
||||
private final int year;
|
||||
|
||||
private final String collection;
|
||||
@Nullable
|
||||
private String collection;
|
||||
|
||||
private final int tvdbId;
|
||||
private int tvdbId;
|
||||
|
||||
@Nullable
|
||||
private String imdbId;
|
||||
|
||||
private Movie(int tvdbId, @Nullable String imdbId, String name, int year, String collection) {
|
||||
public Movie(int tvdbId, @Nullable String imdbId, String name, int year, @Nullable String collection) {
|
||||
this.tvdbId = tvdbId;
|
||||
this.imdbId = imdbId;
|
||||
this.name = name;
|
||||
@@ -33,18 +40,26 @@ public final class Movie implements Comparable<Movie> {
|
||||
this.collection = collection;
|
||||
}
|
||||
|
||||
public Movie(int tvdbId, @Nullable String imdbId, String name, int year) {
|
||||
this(tvdbId, imdbId, name, year, null);
|
||||
}
|
||||
|
||||
public Movie(String imdbId, String name, int year, String collection) {
|
||||
this(-1, imdbId, name, year, collection);
|
||||
}
|
||||
|
||||
public Movie(int tvdbId, String name, int year, String collection) {
|
||||
this(-1, null, name, year, collection);
|
||||
this(tvdbId, null, name, year, collection);
|
||||
}
|
||||
|
||||
public Movie(String name, int year, String collection) {
|
||||
this(-1, name, year, collection);
|
||||
}
|
||||
|
||||
public Movie(String name, int year) {
|
||||
this(-1, name, year, null);
|
||||
}
|
||||
|
||||
public int getTvdbId() {
|
||||
return tvdbId;
|
||||
}
|
||||
@@ -89,4 +104,20 @@ public final class Movie implements Comparable<Movie> {
|
||||
return getName().compareTo(o.getName());
|
||||
}
|
||||
|
||||
public void merge(Movie movie) {
|
||||
tvdbId = tvdbId == -1 ? movie.getTvdbId() : -1;
|
||||
imdbId = imdbId == null ? movie.getImdbId() : null;
|
||||
collection = collection == null ? movie.getCollection() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject toJSON() {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put(TVDB_ID, tvdbId);
|
||||
jsonObject.put(IMDB_ID, imdbId);
|
||||
jsonObject.put(NAME, name);
|
||||
jsonObject.put(YEAR, year);
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
12
Dockerfile
12
Dockerfile
@@ -1,11 +1,13 @@
|
||||
FROM openjdk:11.0.3-jre-slim
|
||||
FROM openjdk:11.0.5-jre-slim
|
||||
|
||||
EXPOSE 32400
|
||||
|
||||
RUN mkdir -p /usr/src/app
|
||||
RUN mkdir -p /usr/data
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
RUN mkdir -p /usr/app
|
||||
|
||||
COPY GapsWeb/target/GapsWeb-0.0.5.jar /usr/src/app/
|
||||
WORKDIR /usr/app
|
||||
|
||||
ENTRYPOINT ["java", "-jar", "GapsWeb-0.0.5.jar"]
|
||||
COPY GapsWeb/target/GapsWeb-0.0.6-SNAPSHOT.jar /usr/app/
|
||||
|
||||
ENTRYPOINT ["java", "-jar", "GapsWeb-0.0.6-SNAPSHOT.jar"]
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>Gaps</artifactId>
|
||||
<groupId>com.jasonhhouse</groupId>
|
||||
<version>0.0.5</version>
|
||||
<version>0.0.6-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<dependency>
|
||||
<groupId>com.jasonhhouse</groupId>
|
||||
<artifactId>Core</artifactId>
|
||||
<version>0.0.5</version>
|
||||
<version>0.0.6-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
package com.jasonhhouse.gaps;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
@@ -17,6 +17,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Controller;
|
||||
|
||||
@@ -17,19 +17,25 @@ import com.jasonhhouse.gaps.PlexLibrary;
|
||||
import com.jasonhhouse.gaps.SearchCancelledException;
|
||||
import com.jasonhhouse.gaps.SearchResults;
|
||||
import com.jasonhhouse.gaps.UrlGenerator;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.time.LocalDate;
|
||||
import java.time.Year;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -52,6 +58,7 @@ import okhttp3.RequestBody;
|
||||
import okhttp3.Response;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.time.StopWatch;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.json.JSONArray;
|
||||
@@ -78,6 +85,10 @@ public class GapsSearchService implements GapsSearch {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(GapsSearchService.class);
|
||||
|
||||
private final Set<Movie> readMovies;
|
||||
|
||||
private final List<Movie> everyMovie;
|
||||
|
||||
private final Set<Movie> searched;
|
||||
|
||||
private final List<Movie> recommended;
|
||||
@@ -98,8 +109,10 @@ public class GapsSearchService implements GapsSearch {
|
||||
public GapsSearchService(@Qualifier("real") UrlGenerator urlGenerator, SimpMessagingTemplate template) {
|
||||
this.template = template;
|
||||
this.ownedMovies = new HashSet<>();
|
||||
this.readMovies = new HashSet<>();
|
||||
this.searched = new HashSet<>();
|
||||
this.recommended = new ArrayList<>();
|
||||
this.everyMovie = new ArrayList<>();
|
||||
this.urlGenerator = urlGenerator;
|
||||
|
||||
totalMovieCount = new AtomicInteger();
|
||||
@@ -112,11 +125,16 @@ public class GapsSearchService implements GapsSearch {
|
||||
public CompletableFuture<ResponseEntity> run(@NotNull Gaps gaps) {
|
||||
searched.clear();
|
||||
ownedMovies.clear();
|
||||
readMovies.clear();
|
||||
recommended.clear();
|
||||
everyMovie.clear();
|
||||
totalMovieCount.set(0);
|
||||
searchedMovieCount.set(0);
|
||||
cancelSearch.set(false);
|
||||
|
||||
StopWatch watch = new StopWatch();
|
||||
watch.start();
|
||||
|
||||
if (isGapsPropertyValid(gaps)) {
|
||||
String reason = "No search property defined. Must search from at least one type: Folder or Plex";
|
||||
cancelSearch.set(true);
|
||||
@@ -125,6 +143,9 @@ public class GapsSearchService implements GapsSearch {
|
||||
|
||||
defaultValues(gaps);
|
||||
|
||||
//populate read movies
|
||||
readMovieIdsFromFile();
|
||||
|
||||
try {
|
||||
String sessionId = null;
|
||||
// Get TMDB Authorization from user,
|
||||
@@ -152,6 +173,7 @@ public class GapsSearchService implements GapsSearch {
|
||||
|
||||
//Always write to log
|
||||
printRecommended();
|
||||
writeMovieIdsToFile();
|
||||
|
||||
if (StringUtils.isNotEmpty(gaps.getMovieDbListId())) {
|
||||
createTmdbList(gaps, sessionId);
|
||||
@@ -164,6 +186,9 @@ public class GapsSearchService implements GapsSearch {
|
||||
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, reason, e);
|
||||
} finally {
|
||||
cancelSearch.set(true);
|
||||
|
||||
watch.stop();
|
||||
System.out.println("Time Elapsed: " + watch.getTime());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -578,7 +603,7 @@ public class GapsSearchService implements GapsSearch {
|
||||
logger.warn("Year not found for " + title);
|
||||
continue;
|
||||
}
|
||||
String year = node.getAttributes().getNamedItem("year").getNodeValue();
|
||||
int year = Integer.parseInt(node.getAttributes().getNamedItem("year").getNodeValue());
|
||||
|
||||
String guid = "";
|
||||
if (node.getAttributes().getNamedItem("guid") != null) {
|
||||
@@ -586,27 +611,37 @@ public class GapsSearchService implements GapsSearch {
|
||||
}
|
||||
|
||||
Movie movie;
|
||||
if (guid.contains("com.plexapp.agents.themoviedb")) {
|
||||
guid = guid.replace("com.plexapp.agents.themoviedb://", "");
|
||||
guid = guid.replace("?lang=en", "");
|
||||
|
||||
movie = new Movie(Integer.parseInt(guid), title, Integer.parseInt(year), "");
|
||||
} else if (guid.contains("com.plexapp.agents.imdb://")) {
|
||||
guid = guid.replace("com.plexapp.agents.imdb://", "");
|
||||
guid = guid.replace("?lang=en", "");
|
||||
|
||||
movie = new Movie(guid, title, Integer.parseInt(year), "");
|
||||
Movie searchMovie = new Movie(title, year);
|
||||
int indexOfMovie = everyMovie.indexOf(searchMovie);
|
||||
logger.debug("everyMovie.size():" + everyMovie.size());
|
||||
logger.debug("indexOfMovie:" + indexOfMovie);
|
||||
logger.debug("searchMovie:" + searchMovie);
|
||||
if (indexOfMovie != -1) {
|
||||
logger.info("Using existing movie information");
|
||||
movie = everyMovie.get(indexOfMovie);
|
||||
} else {
|
||||
logger.warn("Cannot handle guid value of " + guid);
|
||||
movie = new Movie(title, Integer.parseInt(year), "");
|
||||
if (guid.contains("com.plexapp.agents.themoviedb")) {
|
||||
guid = guid.replace("com.plexapp.agents.themoviedb://", "");
|
||||
guid = guid.replace("?lang=en", "");
|
||||
|
||||
movie = new Movie(Integer.parseInt(guid), title, year, "");
|
||||
} else if (guid.contains("com.plexapp.agents.imdb://")) {
|
||||
guid = guid.replace("com.plexapp.agents.imdb://", "");
|
||||
guid = guid.replace("?lang=en", "");
|
||||
|
||||
movie = new Movie(guid, title, year, "");
|
||||
} else {
|
||||
logger.warn("Cannot handle guid value of " + guid);
|
||||
movie = new Movie(title, year, "");
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("guid:" + guid);
|
||||
logger.debug("guid:" + guid);
|
||||
|
||||
ownedMovies.add(movie);
|
||||
totalMovieCount.incrementAndGet();
|
||||
}
|
||||
logger.info(ownedMovies.size() + " movies found in plex");
|
||||
logger.debug(ownedMovies.size() + " movies found in plex");
|
||||
|
||||
} catch (IOException e) {
|
||||
String reason = "Error connecting to Plex to get Movie list: " + url;
|
||||
@@ -766,6 +801,14 @@ public class GapsSearchService implements GapsSearch {
|
||||
} catch (IOException e) {
|
||||
logger.error("Error getting movie details " + movie, e);
|
||||
}
|
||||
|
||||
int indexOfMovie = everyMovie.indexOf(movie);
|
||||
if (indexOfMovie != -1) {
|
||||
logger.debug("Merging movie data");
|
||||
everyMovie.get(indexOfMovie).merge(movie);
|
||||
} else {
|
||||
everyMovie.add(new Movie(tmdbId, movie.getImdbId(), movie.getName(), movie.getYear(), movie.getCollection()));
|
||||
}
|
||||
}
|
||||
|
||||
private void handleCollection(Movie movie, Gaps gaps, OkHttpClient client, JSONObject movieDetails) {
|
||||
@@ -794,15 +837,33 @@ public class GapsSearchService implements GapsSearch {
|
||||
//Files can't have : so need to remove to find matches correctly
|
||||
String title = part.getString("title").replaceAll(":", "");
|
||||
int year;
|
||||
String releaseDate = null;
|
||||
try {
|
||||
year = Integer.parseInt(part.getString("release_date").substring(0, 4));
|
||||
releaseDate = part.optString("release_date");
|
||||
if (StringUtils.isNotEmpty(releaseDate)) {
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
|
||||
LocalDate date = LocalDate.parse(releaseDate, formatter);
|
||||
year = date.getYear();
|
||||
} else {
|
||||
logger.warn("No year found for " + title + ". Value returned was '" + releaseDate + "'. Not adding the movie to recommended list.");
|
||||
continue;
|
||||
}
|
||||
} catch (StringIndexOutOfBoundsException | NumberFormatException e) {
|
||||
logger.warn("No year found for " + title + ". Value returned was '" + part.getString("release_date") + "'. Not adding the movie to recommended list.");
|
||||
logger.warn("No year found for " + title + ". Value returned was '" + releaseDate + "'. Not adding the movie to recommended list.");
|
||||
continue;
|
||||
}
|
||||
|
||||
Movie movieFromCollection = new Movie(tvdbId, title, year, collectionName);
|
||||
|
||||
int indexOfMovie = everyMovie.indexOf(new Movie(title, year));
|
||||
if (indexOfMovie == -1) {
|
||||
logger.debug("Adding collection movie");
|
||||
everyMovie.add(movieFromCollection);
|
||||
} else {
|
||||
logger.debug("Merging collection movie");
|
||||
everyMovie.get(indexOfMovie).merge(movie);
|
||||
}
|
||||
|
||||
if (ownedMovies.contains(movieFromCollection)) {
|
||||
searched.add(movieFromCollection);
|
||||
sendEmptySearchUpdate();
|
||||
@@ -841,6 +902,89 @@ public class GapsSearchService implements GapsSearch {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints out all recommended files to a text file called gaps_recommended_movies.txt
|
||||
*/
|
||||
private void writeMovieIdsToFile() {
|
||||
final String fileName = "/usr/data/movieIds.json";
|
||||
File file = new File(fileName);
|
||||
if (file.exists()) {
|
||||
boolean deleted = file.delete();
|
||||
if (!deleted) {
|
||||
logger.error("Can't delete existing file " + fileName);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
boolean created = file.createNewFile();
|
||||
if (!created) {
|
||||
logger.error("Can't create file " + fileName);
|
||||
return;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
logger.error("Can't create file " + fileName, e);
|
||||
return;
|
||||
}
|
||||
|
||||
try (FileOutputStream outputStream = new FileOutputStream(fileName)) {
|
||||
JSONArray movies = new JSONArray();
|
||||
for (Movie movie : everyMovie) {
|
||||
movies.put(movie.toJSON());
|
||||
}
|
||||
outputStream.write(movies.toString().getBytes());
|
||||
} catch (FileNotFoundException e) {
|
||||
logger.error("Can't find file " + fileName, e);
|
||||
} catch (IOException e) {
|
||||
logger.error("Can't write to file " + fileName, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints out all recommended files to a text file called gaps_recommended_movies.txt
|
||||
*/
|
||||
private void readMovieIdsFromFile() {
|
||||
final String fileName = "/usr/data/movieIds.json";
|
||||
File file = new File(fileName);
|
||||
if (!file.exists()) {
|
||||
logger.warn("Can't find json file '" + fileName + "'. Most likely first run.");
|
||||
return;
|
||||
}
|
||||
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
|
||||
StringBuilder fullFile = new StringBuilder();
|
||||
String line;
|
||||
while ((line = br.readLine()) != null) {
|
||||
fullFile.append(line);
|
||||
}
|
||||
|
||||
logger.debug(fullFile.toString());
|
||||
|
||||
JSONArray movies = new JSONArray(fullFile.toString());
|
||||
for (int i = 0; i < movies.length(); i++) {
|
||||
Movie movie = jsonToMovie(movies.getJSONObject(i));
|
||||
everyMovie.add(movie);
|
||||
}
|
||||
|
||||
logger.debug("everyMovie.size():" + everyMovie.size());
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
logger.error("Can't find file " + fileName, e);
|
||||
} catch (IOException e) {
|
||||
logger.error("Can't write to file " + fileName, e);
|
||||
} catch (JSONException e) {
|
||||
logger.error("Error parsing JSON file " + fileName, e);
|
||||
}
|
||||
}
|
||||
|
||||
private Movie jsonToMovie(JSONObject jsonMovie) throws JSONException {
|
||||
int tvdbId = jsonMovie.getInt(Movie.TVDB_ID);
|
||||
String imdbId = jsonMovie.optString(Movie.IMDB_ID);
|
||||
String name = jsonMovie.getString(Movie.NAME);
|
||||
int year = jsonMovie.getInt(Movie.YEAR);
|
||||
|
||||
return new Movie(tvdbId, imdbId, name, year);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints out all recommended files to a text file called gaps_recommended_movies.txt
|
||||
*/
|
||||
|
||||
@@ -49,4 +49,4 @@ info:
|
||||
app:
|
||||
name: Gaps
|
||||
description: Gaps searches through your Plex Server or local folders for all movies, then queries for known movies in the same collection. If those movies don't exist in your library, Gaps will recommend getting those movies, legally of course.
|
||||
version: 0.0.5
|
||||
version: 0.0.6-SNAPSHOT
|
||||
@@ -155,7 +155,7 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col l6 s12">
|
||||
<h5 class="white-text">Gaps v0.0.5</h5>
|
||||
<h5 class="white-text">Gaps v0.0.6-SNAPSHOT</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col l6 s12">
|
||||
<h5 class="white-text">Gaps v0.0.5</h5>
|
||||
<h5 class="white-text">Gaps v0.0.6-SNAPSHOT</h5>
|
||||
<p class="grey-text text-lighten-4"><i>Note: Searching through a folder is coming soon.</i></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col l6 s12">
|
||||
<h5 class="white-text">Gaps v0.0.5</h5>
|
||||
<h5 class="white-text">Gaps v0.0.6-SNAPSHOT</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col l6 s12">
|
||||
<h5 class="white-text">Gaps v0.0.5</h5>
|
||||
<h5 class="white-text">Gaps v0.0.6-SNAPSHOT</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col l6 s12">
|
||||
<h5 class="white-text">Gaps v0.0.5</h5>
|
||||
<h5 class="white-text">Gaps v0.0.6-SNAPSHOT</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col s8 offset-s2">
|
||||
<div class="col s12">
|
||||
<div id="progressContainer" class="progress">
|
||||
<div class="indeterminate"></div>
|
||||
</div>
|
||||
@@ -103,7 +103,7 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col l6 s12">
|
||||
<h5 class="white-text">Gaps v0.0.5</h5>
|
||||
<h5 class="white-text">Gaps v0.0.6-SNAPSHOT</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
4
pom.xml
4
pom.xml
@@ -10,12 +10,12 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.2.0.RELEASE</version>
|
||||
<version>2.2.1.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>com.jasonhhouse</groupId>
|
||||
<artifactId>Gaps</artifactId>
|
||||
<version>0.0.5</version>
|
||||
<version>0.0.6-SNAPSHOT</version>
|
||||
<name>Gaps</name>
|
||||
<description>Demo project for Spring Boot</description>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user