internal static WebMusicTrackDetailed MusicTrackDetailed(MediaItem item)
        {
            WebMusicTrackBasic webTrackBasic = MusicTrackBasic(item);

            WebMusicTrackDetailed webTrackDetailed = new WebMusicTrackDetailed
            {
                Title         = webTrackBasic.Title,
                Id            = webTrackBasic.Id,
                Type          = webTrackBasic.Type,
                Path          = webTrackBasic.Path,
                Year          = webTrackBasic.Year,
                Duration      = webTrackBasic.Duration,
                DateAdded     = webTrackBasic.DateAdded,
                Rating        = webTrackBasic.Rating,
                Artwork       = webTrackBasic.Artwork,
                Album         = webTrackBasic.Album,
                DiscNumber    = webTrackBasic.DiscNumber,
                TrackNumber   = webTrackBasic.TrackNumber,
                AlbumArtist   = webTrackBasic.AlbumArtist,
                AlbumArtistId = webTrackBasic.AlbumArtistId,
                AlbumId       = webTrackBasic.AlbumId,
                Artist        = webTrackBasic.Artist,
                ArtistId      = webTrackBasic.ArtistId,
                Genres        = webTrackBasic.Genres
            };

            return(webTrackDetailed);
        }
Exemple #2
0
        private LazyQuery <T> LoadAllTracks <T>() where T : WebMusicTrackBasic, new()
        {
            Dictionary <string, WebMusicArtistBasic> artists = GetAllArtists().ToDictionary(x => x.Id, x => x);

            string sql = "SELECT idTrack, strAlbumArtist, strAlbum, strArtist, iTrack, strTitle, strPath, iDuration, iYear, strGenre " +
                         "FROM tracks t " +
                         "WHERE %where";

            return(new LazyQuery <T>(this, sql, new List <SQLFieldMapping>()
            {
                new SQLFieldMapping("t", "idTrack", "Id", DataReaders.ReadIntAsString),
                new SQLFieldMapping("t", "strArtist", "Artist", DataReaders.ReadPipeList),
                new SQLFieldMapping("t", "strArtist", "ArtistId", DataReaders.ReadPipeList),
                new SQLFieldMapping("t", "strAlbum", "Album", DataReaders.ReadString),
                new SQLFieldMapping("t", "strAlbum", "AlbumId", AlbumIdReader),
                new SQLFieldMapping("t", "strTitle", "Title", DataReaders.ReadString),
                new SQLFieldMapping("t", "iTrack", "TrackNumber", DataReaders.ReadInt32),
                new SQLFieldMapping("t", "strPath", "Path", DataReaders.ReadStringAsList),
                new SQLFieldMapping("t", "strGenre", "Genres", DataReaders.ReadPipeList),
                new SQLFieldMapping("t", "iYear", "Year", DataReaders.ReadInt32),
                new SQLFieldMapping("t", "dateAdded", "DateAdded", DataReaders.ReadDateTime)
            }, delegate(T item)
            {
                if (item is WebMusicTrackDetailed)
                {
                    WebMusicTrackDetailed det = item as WebMusicTrackDetailed;
                    det.Artists = det.ArtistId.Where(x => artists.ContainsKey(x)).Select(x => artists[x]).ToList();
                }
                return item;
            }));
        }
Exemple #3
0
 public string GetTranscoderForTrack(WebMusicTrackDetailed track)
 {
     if (track.Path.First().EndsWith(".mp3") && TranscoderProfile.MIME == "audio/mpeg")
     {
         return("Direct");
     }
     else
     {
         return(Transcoder);
     }
 }
Exemple #4
0
        protected LazyQuery <T> LoadAllTracks <T>() where T : WebMusicTrackBasic, new()
        {
            Dictionary <string, WebMusicArtistBasic> artists = GetAllArtists().ToDictionary(x => x.Id, x => x);

            // Unavailable fields: TrackNumber, Year, Genres,
            string sql = "SELECT t.id AS track_id, t.date_added, t.track, t.rating, t.artfullpath, a.id AS album_id, a.album, p.id AS artist_id, p.artist, " +
                         "GROUP_CONCAT(l.fullpath, '|') AS path, MIN(l.duration) AS duration " +
                         "FROM track_info t " +
                         "LEFT JOIN local_media__track_info lt ON lt.track_info_id = t.id " +
                         "LEFT JOIN local_media l ON l.id = lt.local_media_id " +
                         "LEFT JOIN album_info__track_info at ON at.track_info_id = t.id " +
                         "LEFT JOIN album_info a ON at.album_info_id = a.id " +
                         "LEFT JOIN artist_info__track_info pt ON pt.track_info_id = t.id " +
                         "LEFT JOIN artist_info p ON pt.artist_info_id = p.id " +
                         "WHERE %where " +
                         "GROUP BY t.id, t.date_added, t.track, t.rating, a.id, a.album, p.id, p.artist ";

            return(new LazyQuery <T>(this, sql, new List <SQLFieldMapping>()
            {
                new SQLFieldMapping("", "track_id", "Id", DataReaders.ReadString),
                new SQLFieldMapping("", "path", "Path", DataReaders.ReadPipeList),
                new SQLFieldMapping("t", "date_added", "DateAdded", DataReaders.ReadDateTime),
                new SQLFieldMapping("", "artist_id", "ArtistId", DataReaders.ReadStringAsList),
                new SQLFieldMapping("p", "artist", "Artist", DataReaders.ReadStringAsList),
                new SQLFieldMapping("", "album_id", "AlbumId", DataReaders.ReadString),
                new SQLFieldMapping("a", "album", "Album", DataReaders.ReadString),
                new SQLFieldMapping("t", "track", "Title", DataReaders.ReadString),
                new SQLFieldMapping("l", "duration", "Duration", PlayTimeReader),
                new SQLFieldMapping("t", "rating", "Rating", DataReaders.ReadFloat),
                new SQLFieldMapping("t", "artfullpath", "Artwork", ArtworkReader, WebFileType.Cover)
            }, delegate(T item)
            {
                if (item is WebMusicTrackDetailed)
                {
                    WebMusicTrackDetailed det = item as WebMusicTrackDetailed;
                    det.Artists = det.ArtistId.Where(x => artists.ContainsKey(x)).Select(x => artists[x]).ToList();
                }
                return item;
            }));
        }
 public MusicTrackViewModel(WebMusicTrackDetailed track)
 {
     Track = track;
 }
Exemple #6
0
        private LazyQuery <T> LoadAllTracks <T>() where T : WebMusicTrackBasic, new()
        {
            Dictionary <string, WebMusicArtistBasic> artists = null;
            Dictionary <Tuple <string, string>, IList <WebArtworkDetailed> > artwork = new Dictionary <Tuple <string, string>, IList <WebArtworkDetailed> >();

            string sql = "SELECT idTrack, strAlbumArtist, strAlbum, strArtist, iDisc, iTrack, strTitle, strPath, iDuration, iYear, strGenre, iRating " +
                         "FROM tracks t " +
                         "WHERE %where";

            return(new LazyQuery <T>(this, sql, new List <SQLFieldMapping>()
            {
                new SQLFieldMapping("t", "idTrack", "Id", DataReaders.ReadIntAsString),
                new SQLFieldMapping("t", "strArtist", "Artist", DataReaders.ReadPipeList),
                new SQLFieldMapping("t", "strArtist", "ArtistId", DataReaders.ReadPipeList),
                new SQLFieldMapping("t", "strAlbumArtist", "AlbumArtist", DataReaders.ReadPipeListAsString),
                new SQLFieldMapping("t", "strAlbumArtist", "AlbumArtistId", DataReaders.ReadPipeListAsString),
                new SQLFieldMapping("t", "strAlbum", "Album", DataReaders.ReadString),
                new SQLFieldMapping("t", "strAlbum", "AlbumId", AlbumIdReader),
                new SQLFieldMapping("t", "strTitle", "Title", DataReaders.ReadString),
                new SQLFieldMapping("t", "iDisc", "DiscNumber", DataReaders.ReadInt32),
                new SQLFieldMapping("t", "iTrack", "TrackNumber", DataReaders.ReadInt32),
                new SQLFieldMapping("t", "strPath", "Path", DataReaders.ReadStringAsList),
                new SQLFieldMapping("t", "strGenre", "Genres", DataReaders.ReadPipeList),
                new SQLFieldMapping("t", "iYear", "Year", DataReaders.ReadInt32),
                new SQLFieldMapping("t", "iDuration", "Duration", DataReaders.ReadInt32),
                new SQLFieldMapping("t", "iRating", "Rating", DataReaders.ReadInt32),
                new SQLFieldMapping("t", "dateAdded", "DateAdded", DataReaders.ReadDateTime)
            }, delegate(T item)
            {
                if (item is WebMusicTrackDetailed)
                {
                    if (artists == null)
                    {
                        artists = GetAllArtists().ToDictionary(x => x.Id, x => x);
                    }

                    WebMusicTrackDetailed det = item as WebMusicTrackDetailed;
                    det.Artists = det.ArtistId.Where(x => artists.ContainsKey(x)).Select(x => artists[x]).ToList();
                    if (artists.ContainsKey(det.AlbumArtist))
                    {
                        det.AlbumArtistObject = artists[det.AlbumArtist];
                    }
                }

                // if there is no artist, we can't load album artwork, so just skip without artwork
                if (item.Artist.Count == 0)
                {
                    return item;
                }

                // for now, use album artwork also for songs
                var tuple = new Tuple <string, string>(item.Artist.Distinct().First(), item.Album);
                if (!artwork.ContainsKey(tuple))
                {
                    artwork[tuple] = new List <WebArtworkDetailed>();
                    int i = 0;
                    var files = new string[] {
                        PathUtil.StripInvalidCharacters(item.Artist.Distinct().First() + "-" + item.Album + "L.jpg", '_'),
                        PathUtil.StripInvalidCharacters(item.Artist.Distinct().First() + "-" + item.Album + ".jpg", '_')
                    }
                    .Select(x => Path.Combine(configuration["cover"], "Albums", x))
                    .Where(x => File.Exists(x))
                    .Distinct();
                    foreach (var path in files)
                    {
                        artwork[tuple].Add(new WebArtworkDetailed()
                        {
                            Type = WebFileType.Cover,
                            Offset = i++,
                            Path = path,
                            Rating = 1,
                            Id = path.GetHashCode().ToString(),
                            Filetype = Path.GetExtension(path).Substring(1)
                        });
                    }
                }

                // why isn't there an IList<T>.AddRange() method?
                (item.Artwork as List <WebArtwork>).AddRange(artwork[tuple]);
                return item;
            }));
        }