use of org.libresonic.player.domain.MediaFile in project libresonic by Libresonic.
the class PlaylistService method getPlaylist.
public PlaylistInfo getPlaylist(int id) {
HttpServletRequest request = WebContextFactory.get().getHttpServletRequest();
Playlist playlist = playlistService.getPlaylist(id);
List<MediaFile> files = playlistService.getFilesInPlaylist(id, true);
String username = securityService.getCurrentUsername(request);
mediaFileService.populateStarredDate(files, username);
populateAccess(files, username);
return new PlaylistInfo(playlist, createEntries(files));
}
use of org.libresonic.player.domain.MediaFile in project libresonic by Libresonic.
the class CoverArtService method saveCoverArt.
private void saveCoverArt(String path, String url) throws Exception {
InputStream input = null;
OutputStream output = null;
try (CloseableHttpClient client = HttpClients.createDefault()) {
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(// 20 seconds
20 * 1000).setSocketTimeout(// 20 seconds
20 * 1000).build();
HttpGet method = new HttpGet(url);
method.setConfig(requestConfig);
try (CloseableHttpResponse response = client.execute(method)) {
input = response.getEntity().getContent();
// Attempt to resolve proper suffix.
String suffix = "jpg";
if (url.toLowerCase().endsWith(".gif")) {
suffix = "gif";
} else if (url.toLowerCase().endsWith(".png")) {
suffix = "png";
}
// Check permissions.
File newCoverFile = new File(path, "cover." + suffix);
if (!securityService.isWriteAllowed(newCoverFile)) {
throw new Exception("Permission denied: " + StringUtil.toHtml(newCoverFile.getPath()));
}
// If file exists, create a backup.
backup(newCoverFile, new File(path, "cover." + suffix + ".backup"));
// Write file.
output = new FileOutputStream(newCoverFile);
IOUtils.copy(input, output);
MediaFile dir = mediaFileService.getMediaFile(path);
// Refresh database.
mediaFileService.refreshMediaFile(dir);
dir = mediaFileService.getMediaFile(dir.getId());
// Rename existing cover files if new cover file is not the preferred.
try {
while (true) {
File coverFile = mediaFileService.getCoverArt(dir);
if (coverFile != null && !isMediaFile(coverFile) && !newCoverFile.equals(coverFile)) {
if (!coverFile.renameTo(new File(coverFile.getCanonicalPath() + ".old"))) {
LOG.warn("Unable to rename old image file " + coverFile);
break;
}
LOG.info("Renamed old image file " + coverFile);
// Must refresh again.
mediaFileService.refreshMediaFile(dir);
dir = mediaFileService.getMediaFile(dir.getId());
} else {
break;
}
}
} catch (Exception x) {
LOG.warn("Failed to rename existing cover file.", x);
}
}
} finally {
IOUtils.closeQuietly(input);
IOUtils.closeQuietly(output);
}
}
use of org.libresonic.player.domain.MediaFile in project libresonic by Libresonic.
the class CoverArtService method setCoverArtImage.
/**
* Downloads and saves the cover art at the given URL.
*
* @param albumId ID of the album in question.
* @param url The image URL.
* @return The error string if something goes wrong, <code>null</code> otherwise.
*/
public String setCoverArtImage(int albumId, String url) {
try {
MediaFile mediaFile = mediaFileService.getMediaFile(albumId);
saveCoverArt(mediaFile.getPath(), url);
return null;
} catch (Exception x) {
LOG.warn("Failed to save cover art for album " + albumId, x);
return x.toString();
}
}
Aggregations