From d769f3445ed4779715b5c2570731b4bb73d8d2aa Mon Sep 17 00:00:00 2001 From: ulrich Date: Tue, 20 Apr 2021 17:15:03 +0000 Subject: [PATCH] Geraete-Liste mit Status (in Arbeit) --- src/de/uhilger/mediaz/api/ListFileHandler.java | 68 ++++++++++++++++++++++++++++++--- 1 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/de/uhilger/mediaz/api/ListFileHandler.java b/src/de/uhilger/mediaz/api/ListFileHandler.java index acd3243..c54c9c7 100644 --- a/src/de/uhilger/mediaz/api/ListFileHandler.java +++ b/src/de/uhilger/mediaz/api/ListFileHandler.java @@ -17,6 +17,7 @@ */ package de.uhilger.mediaz.api; +import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import de.uhilger.mediaz.App; import de.uhilger.mediaz.Server; @@ -25,14 +26,16 @@ import de.uhilger.mediaz.store.FileStorage; import de.uhilger.mediaz.store.Storage; import de.uhilger.mediaz.store.StorageFile; +import de.uhilger.mediaz.store.Track; import java.io.File; +import java.io.FileFilter; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; -import java.util.List; import java.util.Map; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -45,19 +48,22 @@ /* Der Logger fuer diesen ListFileHandler */ private static final Logger logger = Logger.getLogger(ListFileHandler.class.getName()); + private static final String[] specialChars = {new String("\u00c4"), new String("\u00d6"), + new String("\u00dc"), new String("\u00e4"), new String("\u00f6"), new String("\u00fc"), new String("\u00df")}; + Map extMap = new HashMap(); public ListFileHandler(String absoluteDirectoryPathAndName) { super(absoluteDirectoryPathAndName); /* - Nachfolgend hart codiert die Ermittlung von Dateifiltern. + Ermittlung von Dateifiltern. Sie werden erwartet in den Einstellungen 'audioexts' und 'videoexts' jeweils als Dateierweiterungen mit Komma getrennt z.B. "mp4,m4v" */ FileStorage fs = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF))); - initMap(fs, "audioexts", StorageFile.TYP_AUDIO); - initMap(fs, "videoexts", StorageFile.TYP_VIDEO); + initMap(fs, App.getRs(App.RB_AUDIOEXTS), StorageFile.TYP_AUDIO); + initMap(fs, App.getRs(App.RB_VIDEOEXTS), StorageFile.TYP_VIDEO); } private void initMap(Storage s, String key, String typ) { @@ -74,18 +80,29 @@ public void handle(HttpExchange e) throws IOException { String path = e.getRequestURI().toString(); logger.fine(path); - if(path.endsWith(App.getRs(Server.RB_SLASH))) { + if(path.endsWith(Server.SLASH)) { String fName = getFileName(e); logger.fine(fName); File dir = new File(fileBase, fName); logger.fine(dir.getAbsolutePath()); - File[] files = dir.listFiles(); + File[] files = dir.listFiles(new FileFilter() { + @Override + public boolean accept(File pathname) { + Set keys = extMap.keySet(); + String fname = pathname.getName(); + int pos = fname.lastIndexOf("."); + String ext = fname.substring(pos+1); + return keys.contains(ext) || pathname.isDirectory(); + } + }); + Arrays.sort(files); ArrayList list = new ArrayList(); if(files != null) { for(File file : files) { StorageFile sf = new StorageFile(); String fname = file.getName(); sf.setName(fname); + sf.setTitelAnzName(fname); if(file.isDirectory()) { sf.setTyp(StorageFile.TYP_FOLDER); } else { @@ -95,6 +112,7 @@ Object o = extMap.get(ext); if(o instanceof String) { sf.setTyp(o.toString()); + getTrack(file, sf); } else { sf.setTyp(StorageFile.TYP_FILE); } @@ -102,8 +120,12 @@ list.add(sf); } } - String json = jsonWithCustomType(list, "Medialiste"); + //Collections.sort(list); + String json = escapeHtml(jsonWithCustomType(list, "Medialiste")); + logger.fine(json); + Headers headers = e.getResponseHeaders(); + headers.add("Content-Type", "application/json; charset=UTF-8"); e.sendResponseHeaders(200, json.length()); OutputStream os = e.getResponseBody(); os.write(json.getBytes()); @@ -113,5 +135,37 @@ } } + public String escapeHtml(String text) { + text = text.replace(specialChars[0], "Ae"); + text = text.replace(specialChars[1], "Oe"); + text = text.replace(specialChars[2], "Ue"); + text = text.replace(specialChars[3], "ae"); + text = text.replace(specialChars[4], "oe"); + text = text.replace(specialChars[5], "ue"); + text = text.replace(specialChars[6], "ss"); + + /* + text = text.replace(specialChars[0], "Ä"); + text = text.replace(specialChars[1], "Ö"); + text = text.replace(specialChars[2], "Ü"); + text = text.replace(specialChars[3], "ä"); + text = text.replace(specialChars[4], "ö"); + text = text.replace(specialChars[5], "ü"); + text = text.replace(specialChars[6], "ß"); + */ + return text; + } + + private void getTrack(File file, StorageFile sf) { + if(sf.getTyp().equalsIgnoreCase(StorageFile.TYP_AUDIO)) { + Track track = new Track(file); + sf.setInterpret(track.getArtist()); + String trackTitel = track.getTitle(); + if(trackTitel != null && trackTitel.length() > 0) { + sf.setTitelAnzName(trackTitel); + } + sf.setAlbum(track.getAlbum()); + } + } } -- Gitblit v1.9.3