Changed export of non-text files

Some non-text files like fonts were being exported as text

Fixed by identifying text files and exporting other files
by copying the bytestream directly.

Affects issues:
- Fixed #1297
This commit is contained in:
Rsl1122 2020-01-24 11:16:03 +02:00
parent d731919b26
commit ba34d2ad9a
5 changed files with 42 additions and 44 deletions

View File

@ -150,9 +150,8 @@ public class NetworkPageExporter extends FileExporter {
}
private void exportRequiredResources(Path toDirectory) throws IOException {
exportImage(toDirectory, "img/Flaticon_circle.png");
exportResources(toDirectory,
"img/Flaticon_circle.png",
"css/sb-admin-2.css",
"css/style.css",
"vendor/jquery/jquery.min.js",
@ -198,26 +197,21 @@ public class NetworkPageExporter extends FileExporter {
private void exportResource(Path toDirectory, String resourceName) throws IOException {
Resource resource = files.getCustomizableResourceOrDefault("web/" + resourceName);
Path to = toDirectory.resolve(resourceName);
if (resourceName.endsWith(".css")) {
export(to, theme.replaceThemeColors(resource.asString()));
} else if ("js/network-values.js".equalsIgnoreCase(resourceName)) {
// Replace /server in urls to fix server page links
export(to, StringUtils.replaceOnce(resource.asString(), "server/", toRelativePathFromRoot("server") + '/'));
} else {
} else if (Resource.isTextResource(resourceName)) {
export(to, resource.asLines());
} else {
export(to, resource);
}
exportPaths.put(resourceName, toRelativePathFromRoot(resourceName));
}
private void exportImage(Path toDirectory, String resourceName) throws IOException {
Resource resource = files.getCustomizableResourceOrDefault("web/" + resourceName);
Path to = toDirectory.resolve(resourceName);
export(to, resource);
exportPaths.put(resourceName, toRelativePathFromRoot(resourceName));
}
private String toRelativePathFromRoot(String resourceName) {
// Network html is exported at /network//index.html or /server/index.html
return "../" + toNonRelativePath(resourceName);

View File

@ -133,10 +133,9 @@ public class PlayerPageExporter extends FileExporter {
}
private void exportRequiredResources(Path toDirectory) throws IOException {
exportImage(toDirectory, "img/Flaticon_circle.png");
// Style
exportResources(toDirectory,
"img/Flaticon_circle.png",
"css/sb-admin-2.css",
"css/style.css",
"vendor/jquery/jquery.min.js",
@ -187,21 +186,15 @@ public class PlayerPageExporter extends FileExporter {
if (resourceName.endsWith(".css")) {
export(to, theme.replaceThemeColors(resource.asString()));
} else {
} else if (Resource.isTextResource(resourceName)) {
export(to, resource.asLines());
} else {
export(to, resource);
}
exportPaths.put(resourceName, toRelativePathFromRoot(resourceName));
}
private void exportImage(Path toDirectory, String resourceName) throws IOException {
Resource resource = files.getCustomizableResourceOrDefault("web/" + resourceName);
Path to = toDirectory.resolve(resourceName);
export(to, resource);
exportPaths.put(resourceName, toRelativePathFromRoot(resourceName));
}
private String toRelativePathFromRoot(String resourceName) {
// Player html is exported at /player/<name>/index.html
return "../../" + toNonRelativePath(resourceName);

View File

@ -128,10 +128,9 @@ public class PlayersPageExporter extends FileExporter {
}
private void exportRequiredResources(Path toDirectory) throws IOException {
exportImage(toDirectory, "img/Flaticon_circle.png");
// Style
exportResources(toDirectory,
"img/Flaticon_circle.png",
"css/sb-admin-2.css",
"css/style.css",
"vendor/jquery/jquery.min.js",
@ -139,6 +138,19 @@ public class PlayersPageExporter extends FileExporter {
"vendor/jquery-easing/jquery.easing.min.js",
"vendor/datatables/jquery.dataTables.min.js",
"vendor/datatables/dataTables.bootstrap4.min.js",
"vendor/fontawesome-free/css/all.min.css",
"vendor/fontawesome-free/webfonts/fa-brands-400.eot",
"vendor/fontawesome-free/webfonts/fa-brands-400.ttf",
"vendor/fontawesome-free/webfonts/fa-brands-400.woff",
"vendor/fontawesome-free/webfonts/fa-brands-400.woff2",
"vendor/fontawesome-free/webfonts/fa-regular-400.eot",
"vendor/fontawesome-free/webfonts/fa-regular-400.ttf",
"vendor/fontawesome-free/webfonts/fa-regular-400.woff",
"vendor/fontawesome-free/webfonts/fa-regular-400.woff2",
"vendor/fontawesome-free/webfonts/fa-solid-900.eot",
"vendor/fontawesome-free/webfonts/fa-solid-900.ttf",
"vendor/fontawesome-free/webfonts/fa-solid-900.woff",
"vendor/fontawesome-free/webfonts/fa-solid-900.woff2",
"js/sb-admin-2.js",
"js/xmlhttprequests.js",
"js/color-selector.js"
@ -157,21 +169,15 @@ public class PlayersPageExporter extends FileExporter {
if (resourceName.endsWith(".css")) {
export(to, theme.replaceThemeColors(resource.asString()));
} else {
} else if (Resource.isTextResource(resourceName)) {
export(to, resource.asLines());
} else {
export(to, resource);
}
exportPaths.put(resourceName, toRelativePathFromRoot(resourceName));
}
private void exportImage(Path toDirectory, String resourceName) throws IOException {
Resource resource = files.getCustomizableResourceOrDefault("web/" + resourceName);
Path to = toDirectory.resolve(resourceName);
export(to, resource);
exportPaths.put(resourceName, toRelativePathFromRoot(resourceName));
}
private String toRelativePathFromRoot(String resourceName) {
// Players html is exported at /players/index.html or /server/index.html
return "../" + toNonRelativePath(resourceName);

View File

@ -162,10 +162,9 @@ public class ServerPageExporter extends FileExporter {
}
private void exportRequiredResources(Path toDirectory) throws IOException {
exportImage(toDirectory, "img/Flaticon_circle.png");
// Style
exportResources(toDirectory,
"img/Flaticon_circle.png",
"css/sb-admin-2.css",
"css/style.css",
"vendor/jquery/jquery.min.js",
@ -217,21 +216,15 @@ public class ServerPageExporter extends FileExporter {
if (resourceName.endsWith(".css")) {
export(to, theme.replaceThemeColors(resource.asString()));
} else {
} else if (Resource.isTextResource(resourceName)) {
export(to, resource.asLines());
} else {
export(to, resource);
}
exportPaths.put(resourceName, toRelativePathFromRoot(resourceName));
}
private void exportImage(Path toDirectory, String resourceName) throws IOException {
Resource resource = files.getCustomizableResourceOrDefault("web/" + resourceName);
Path to = toDirectory.resolve(resourceName);
export(to, resource);
exportPaths.put(resourceName, toRelativePathFromRoot(resourceName));
}
private String toRelativePathFromRoot(String resourceName) {
// Server html is exported at /server/<name>/index.html or /server/index.html
return (serverInfo.getServer().isProxy() ? "../../" : "../") + toNonRelativePath(resourceName);

View File

@ -16,6 +16,8 @@
*/
package com.djrapitops.plan.storage.file;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@ -58,4 +60,14 @@ public interface Resource {
*/
String asString() throws IOException;
/**
* Check if a resource is a text based file.
*
* @param resourceName Name of the resource
* @return true if the resource is text based.
*/
static boolean isTextResource(String resourceName) {
return StringUtils.endsWithAny(resourceName, ".html", ".js", ".css", ".yml", ".txt");
}
}