Added *Where functions for playlists, bookmarks, tags. Bugfixes.
This commit is contained in:
parent
a17589d540
commit
2010aa7d46
@ -94,7 +94,9 @@ public class MediaLibrary {
|
|||||||
|
|
||||||
public def getByIdOrName(Class modelClass, String input) {
|
public def getByIdOrName(Class modelClass, String input) {
|
||||||
def match
|
def match
|
||||||
if (safeToInteger(input)) match = [orm.getById(modelClass, safeToInteger(input))]
|
if (safeToInteger(input)) {
|
||||||
|
match = orm.getById(modelClass, safeToInteger(input))
|
||||||
|
if (match) match = [match] }
|
||||||
else {
|
else {
|
||||||
match = orm.getByName(modelClass, input)
|
match = orm.getByName(modelClass, input)
|
||||||
if (!match) match = orm.getLike(modelClass, ["name"], [input]) }
|
if (!match) match = orm.getLike(modelClass, ["name"], [input]) }
|
||||||
@ -159,11 +161,11 @@ public class MediaLibrary {
|
|||||||
album = artists.inject(null, { foundAlbum, artist ->
|
album = artists.inject(null, { foundAlbum, artist ->
|
||||||
if (foundAlbum) return foundAlbum
|
if (foundAlbum) return foundAlbum
|
||||||
def cur = orm.getAlbumsWhere(
|
def cur = orm.getAlbumsWhere(
|
||||||
name: albumName, artistId: artistId)
|
name: albumName, artistId: artist.id)
|
||||||
return cur ? cur[0] : null })
|
return cur ? cur[0] : null })
|
||||||
|
|
||||||
if (!album) {
|
if (!album) {
|
||||||
def cur = org.getAlbumsWhere(name: albumName)
|
def cur = orm.getAlbumsWhere(name: albumName)
|
||||||
album = cur ? cur[0] : 0 } }
|
album = cur ? cur[0] : 0 } }
|
||||||
|
|
||||||
// We still can't find the album at all. We'll need to create it
|
// We still can't find the album at all. We'll need to create it
|
||||||
|
@ -52,7 +52,9 @@ public class ORM {
|
|||||||
.toString()
|
.toString()
|
||||||
|
|
||||||
logger.debug("Selecting model.\n\tSQL: {}\n\tPARAMS: {}", query, model.id)
|
logger.debug("Selecting model.\n\tSQL: {}\n\tPARAMS: {}", query, model.id)
|
||||||
return updateModel(sql.firstRow(query, [model.id]), model) }
|
def result = sql.firstRow(query, [model.id])
|
||||||
|
if (!result) return null
|
||||||
|
return updateModel(result, model) }
|
||||||
|
|
||||||
public def getByName(Class modelClass, String name) {
|
public def getByName(Class modelClass, String name) {
|
||||||
def query = new StringBuilder()
|
def query = new StringBuilder()
|
||||||
@ -213,7 +215,7 @@ public class ORM {
|
|||||||
query.append(" JOIN playlists_media_files pmf ON ")
|
query.append(" JOIN playlists_media_files pmf ON ")
|
||||||
query.append(" amf.media_file_id = pmf.media_file_id AND ")
|
query.append(" amf.media_file_id = pmf.media_file_id AND ")
|
||||||
query.append(" pmf.playlist_id = ?")
|
query.append(" pmf.playlist_id = ?")
|
||||||
sqlParams.append(params.playlistId) }
|
sqlParams << params.playlistId }
|
||||||
|
|
||||||
if (params.name || params.year) { query.append(" WHERE ") }
|
if (params.name || params.year) { query.append(" WHERE ") }
|
||||||
|
|
||||||
@ -266,7 +268,7 @@ public class ORM {
|
|||||||
query.append(" JOIN playlists_media_files pmf ON ")
|
query.append(" JOIN playlists_media_files pmf ON ")
|
||||||
query.append(" amf.media_file_id = pmf.media_file_id AND ")
|
query.append(" amf.media_file_id = pmf.media_file_id AND ")
|
||||||
query.append(" pmf.playlist_id = ?")
|
query.append(" pmf.playlist_id = ?")
|
||||||
sqlParams.append(params.playlistId) }
|
sqlParams << params.playlistId }
|
||||||
|
|
||||||
if (params.name) {
|
if (params.name) {
|
||||||
query.append(" WHERE ar.name = ? ")
|
query.append(" WHERE ar.name = ? ")
|
||||||
@ -295,6 +297,40 @@ public class ORM {
|
|||||||
|
|
||||||
public List<Bookmark> getBookmarks() { return getAll(Bookmark) }
|
public List<Bookmark> getBookmarks() { return getAll(Bookmark) }
|
||||||
|
|
||||||
|
public List<Bookmark> getBookmarksWhere(Map options) {
|
||||||
|
def query = new StringBuilder()
|
||||||
|
def sqlParams = []
|
||||||
|
|
||||||
|
query.append("SELECT b.* FROM bookmarks b ")
|
||||||
|
|
||||||
|
if (params.size() > 0) query.append(" WHERE ")
|
||||||
|
|
||||||
|
if (params.playlistId) {
|
||||||
|
query.append(" b.playlist_id = ? ")
|
||||||
|
sqlParams << params.playlistId }
|
||||||
|
|
||||||
|
if (params.userCreated != null) {
|
||||||
|
query.append(" b.user_created = ? ")
|
||||||
|
sqlParams << params.userCreated }
|
||||||
|
|
||||||
|
if (params.name) {
|
||||||
|
query.append (" b.name = ? ")
|
||||||
|
sqlParams << params.name }
|
||||||
|
|
||||||
|
if (params.mediaFileId) {
|
||||||
|
query.append(" b.media_file_id = ? ")
|
||||||
|
sqlParams << params.mediaFileId }
|
||||||
|
|
||||||
|
if (params.playIndex) {
|
||||||
|
query.append(" b.play_index = ? ")
|
||||||
|
sqlParams << params.playIndex }
|
||||||
|
|
||||||
|
query = query.toString()
|
||||||
|
logger.debug("Selecting bookmarks.\n\tSQL: {}\n\tPARAMS: {}",
|
||||||
|
query, sqlParams)
|
||||||
|
return sql.rows(query, sqlParams)
|
||||||
|
.collect { recordToModel(Bookmark, it) } }
|
||||||
|
|
||||||
/// ### Image-specific methods
|
/// ### Image-specific methods
|
||||||
public Image getImageById(int id) { return getById(Image, id) }
|
public Image getImageById(int id) { return getById(Image, id) }
|
||||||
|
|
||||||
@ -335,7 +371,7 @@ public class ORM {
|
|||||||
query.append(" JOIN playlists_media_files pmf ON ")
|
query.append(" JOIN playlists_media_files pmf ON ")
|
||||||
query.append(" pmf.media_file_id = mf.id AND ")
|
query.append(" pmf.media_file_id = mf.id AND ")
|
||||||
query.append(" pmf.playlist_id = ?")
|
query.append(" pmf.playlist_id = ?")
|
||||||
sqlParams.append(params.playlistId) }
|
sqlParams << params.playlistId }
|
||||||
|
|
||||||
if (params.name || params.fileHash || params.filePath ||
|
if (params.name || params.fileHash || params.filePath ||
|
||||||
params.trackNumber) { query.append(" WHERE ") }
|
params.trackNumber) { query.append(" WHERE ") }
|
||||||
@ -391,6 +427,52 @@ public class ORM {
|
|||||||
|
|
||||||
public List<Playlist> getPlaylists() { return getAll(Playlist) }
|
public List<Playlist> getPlaylists() { return getAll(Playlist) }
|
||||||
|
|
||||||
|
public List<Playlist> getPlaylistsWhere(Map params) {
|
||||||
|
def query = new StringBuilder()
|
||||||
|
def sqlParams = []
|
||||||
|
|
||||||
|
query.append("SELECT p.* FROM playlists p ")
|
||||||
|
|
||||||
|
if (params.albumId || params.artistId || params.mediaFileId) {
|
||||||
|
query.append(" JOIN playlists_media_files pmf ON ")
|
||||||
|
.append(" pmf.media_file_id = mf.id ") }
|
||||||
|
|
||||||
|
if (params.mediaFileId) {
|
||||||
|
query.append(" AND mf.media_file_id = ? ")
|
||||||
|
sqlParam << params.mediaFileId }
|
||||||
|
|
||||||
|
if (params.albumId) {
|
||||||
|
query.append(" JOIN albums_media_files almf ON ")
|
||||||
|
.append(" mf.album_id = almf.album_id AND almf.album_id = ? ")
|
||||||
|
sqlParams << params.albumId }
|
||||||
|
|
||||||
|
if (params.artistId) {
|
||||||
|
query.append(" JOIN arists_media_files armf ON ")
|
||||||
|
.append(" mf.artist_id = armf.artist_id AND ")
|
||||||
|
.append(" armf.artist_id = ? ")
|
||||||
|
sqlParams << params.artistId }
|
||||||
|
|
||||||
|
if (params.userCreated != null || params.name || params.copiedFromId)
|
||||||
|
query.append(" WHERE ")
|
||||||
|
|
||||||
|
if (params.userCreated != null) {
|
||||||
|
query.append(" p.user_created = ? ")
|
||||||
|
sqlParams << params.userCreated }
|
||||||
|
|
||||||
|
if (params.name) {
|
||||||
|
query.append(" p.name = ? ")
|
||||||
|
sqlParams << params.name }
|
||||||
|
|
||||||
|
if (params.copiedFromId) {
|
||||||
|
query.append(" p.copied_from_id = ? ")
|
||||||
|
sqlParams << params.copiedFromId }
|
||||||
|
|
||||||
|
query = query.toString()
|
||||||
|
logger.debug("Selecting playlists.\n\tSQL: {}\n\tPARAMS: {}",
|
||||||
|
query, sqlParams)
|
||||||
|
return sql.rows(query, sqlParams)
|
||||||
|
.collect { recordToModel(Playlist, it) } }
|
||||||
|
|
||||||
public Playlist addToPlaylist(int playlistId, int mediaFileId) {
|
public Playlist addToPlaylist(int playlistId, int mediaFileId) {
|
||||||
return withTransaction {
|
return withTransaction {
|
||||||
associate(Playlist, MediaFile, p, mf)
|
associate(Playlist, MediaFile, p, mf)
|
||||||
@ -406,6 +488,41 @@ public class ORM {
|
|||||||
/// ### Tag-specific methods
|
/// ### Tag-specific methods
|
||||||
public Tag getTagById(int id) { return getById(Tag, id) }
|
public Tag getTagById(int id) { return getById(Tag, id) }
|
||||||
public Tag getTagByName(String name) { return getByName(Tag, name)[0] }
|
public Tag getTagByName(String name) { return getByName(Tag, name)[0] }
|
||||||
|
public List<Tag> getTagsWhere(Map params) {
|
||||||
|
def query = new StringBuilder()
|
||||||
|
def sqlParams = []
|
||||||
|
|
||||||
|
query.append("SELECT t.* FROM tags ")
|
||||||
|
|
||||||
|
if (params.mediaFileId || params.artistId || params.albumId ||
|
||||||
|
params.playlistId)
|
||||||
|
query.append(" JOIN media_files_tags mft ON t.id = mft.tag_id")
|
||||||
|
|
||||||
|
if (params.mediaFileId) {
|
||||||
|
query.append(" AND mft.media_file_id = ? ")
|
||||||
|
sqlParams << params.mediaFileId }
|
||||||
|
|
||||||
|
if (params.playlistId) {
|
||||||
|
query.append(" JOIN playlists_media_files pmf ON ")
|
||||||
|
.append(" mft.media_file_id = pmf.media_file_id AND ")
|
||||||
|
.append(" pmf.playlist_id = ? ")
|
||||||
|
sqlParams << params.playlistId }
|
||||||
|
|
||||||
|
if (params.artistId) {
|
||||||
|
query.append(" JOIN artists_media_files armf ON ")
|
||||||
|
.append(" mft.media_file_id = armf.media_file_id AND ")
|
||||||
|
.append(" armf.artist_id = ? ")
|
||||||
|
sqlParams << params.artistId }
|
||||||
|
|
||||||
|
if (params.albumId) {
|
||||||
|
query.append(" JOIN albums_media_files almf ON ")
|
||||||
|
.append(" mft.media_file_id = almf.media_file_id AND ")
|
||||||
|
.append(" almf.album_id = ? ")
|
||||||
|
sqlParams << params.albumId }
|
||||||
|
|
||||||
|
if (params.name) {
|
||||||
|
query.append(" WHERE t.name = ? ")
|
||||||
|
sqlParams << params.name } }
|
||||||
|
|
||||||
/// ### Utility functions
|
/// ### Utility functions
|
||||||
public void withTransaction(Closure c) {
|
public void withTransaction(Closure c) {
|
||||||
|
Loading…
Reference in New Issue
Block a user