Exemple #1
0
        public void ReadAsxEntryRef()
        {
            var             parsed_playlist = PlaylistParser.Parse(new SafeUri("http://download.banshee.fm/test/remote.asx"), BaseUri);
            IPlaylistFormat plref           = LoadPlaylist(new AsxPlaylistFormat(), "entryref.asx");

            Assert.AreEqual(2, plref.Elements.Count);
            AssertEqual(parsed_playlist.Elements, plref.Elements);
        }
Exemple #2
0
 private IPlaylistFormat LoadPlaylist(IPlaylistFormat playlist, string filename, Uri rootPath)
 {
     playlist.BaseUri = BaseUri;
     if (rootPath != null)
     {
         playlist.RootPath = rootPath;
     }
     playlist.Load(File.OpenRead(Path.Combine(playlists_dir, filename)), true);
     return(playlist);
 }
        public void ReadAsxEntryRef()
        {
            PlaylistParser parser = new PlaylistParser();

            parser.BaseUri = BaseUri;

            parser.Parse(new SafeUri("http://download.banshee.fm/test/remote.asx"));
            IPlaylistFormat plref = LoadPlaylist(new AsxPlaylistFormat(), "entryref.asx");

            Assert.AreEqual(parser.Elements, plref.Elements);
        }
Exemple #4
0
        public void Init()
        {
            Mono.Addins.AddinManager.Initialize(BinDir);

            playlists_dir = Path.Combine(TestsDir, "data/playlist-data");
            IPlaylistFormat playlist = LoadPlaylist(new M3uPlaylistFormat(), "extended.m3u");

            foreach (PlaylistElement element in playlist.Elements)
            {
                elements.Add(element);
            }
        }
        public void Init()
        {
            Mono.Addins.AddinManager.Initialize(BinDir);

            playlists_dir = Path.Combine(TestsDir, "Banshee.Services/playlist-data");
            IPlaylistFormat playlist = LoadPlaylist(new M3uPlaylistFormat(), "extended.m3u");

            foreach (Dictionary <string, object> element in playlist.Elements)
            {
                elements.Add(element);
            }
        }
Exemple #6
0
        [Test] // https://bugzilla.gnome.org/show_bug.cgi?id=661507
        public void ReadM3uWithDosPathAsRootPath()
        {
            playlists_dir = Path.Combine(TestsDir, "data/playlist-data");
            IPlaylistFormat playlist = LoadPlaylist(new M3uPlaylistFormat(),
                                                    "dos_path_nokia.m3u",
                                                    new Uri("E:\\"));

            Assert.AreEqual(playlist.Elements [0].Uri.AbsoluteUri.ToString(),
                            "file:///iamyourbase/Music/Atari%20Doll/Atari%20Doll/01.%20Queen%20for%20a%20Day.mp3");
            Assert.AreEqual(playlist.Elements [1].Uri.AbsoluteUri.ToString(),
                            "file:///iamyourbase/Music/Barenaked%20Ladies/All%20Their%20Greatest%20Hits%201991/04.%20One%20Week.mp3");
        }
        public static string [] ImportPlaylist(string playlistUri, Uri baseUri)
        {
            IPlaylistFormat playlist = Load(playlistUri, baseUri);
            List <string>   uris     = new List <string> ();

            if (playlist != null)
            {
                foreach (Dictionary <string, object> element in playlist.Elements)
                {
                    uris.Add(((Uri)element["uri"]).AbsoluteUri);
                }
            }
            return(uris.ToArray());
        }
        private void OnImportFinished(object o, EventArgs args)
        {
            importer.Finished -= OnImportFinished;

            if (CanSyncPlaylists)
            {
                var insert_cmd = new Hyena.Data.Sqlite.HyenaSqliteCommand(
                    "INSERT INTO CorePlaylistEntries (PlaylistID, TrackID) VALUES (?, ?)");
                foreach (string playlist_path in PlaylistFiles)
                {
                    // playlist_path has a file:// prefix, and GetDirectoryName messes it up,
                    // so we need to convert it to a regular path
                    string base_folder = ms_device.RootPath != null ? BaseDirectory :
                                         System.IO.Path.GetDirectoryName(SafeUri.UriToFilename(playlist_path));

                    IPlaylistFormat loaded_playlist = PlaylistFileUtil.Load(playlist_path,
                                                                            new Uri(base_folder),
                                                                            ms_device.RootPath);
                    if (loaded_playlist == null)
                    {
                        continue;
                    }

                    string         name     = System.IO.Path.GetFileNameWithoutExtension(SafeUri.UriToFilename(playlist_path));
                    PlaylistSource playlist = new PlaylistSource(name, this);
                    playlist.Save();
                    //Hyena.Data.Sqlite.HyenaSqliteCommand.LogAll = true;
                    foreach (PlaylistElement element in loaded_playlist.Elements)
                    {
                        string track_path = element.Uri.LocalPath;
                        long   track_id   = DatabaseTrackInfo.GetTrackIdForUri(new SafeUri(track_path), DbId);
                        if (track_id == 0)
                        {
                            Log.DebugFormat("Failed to find track {0} in DAP library to load it into playlist {1}", track_path, playlist_path);
                        }
                        else
                        {
                            ServiceManager.DbConnection.Execute(insert_cmd, playlist.DbId, track_id);
                        }
                    }
                    //Hyena.Data.Sqlite.HyenaSqliteCommand.LogAll = false;
                    playlist.UpdateCounts();
                    AddChildSource(playlist);
                }
            }

            import_reset_event.Set();
        }
Exemple #9
0
        public static IPlaylistFormat Load(string playlistUri, Uri baseUri, Uri rootPath)
        {
            PlaylistFormatDescription [] formats = PlaylistFileUtil.ExportFormats;

            // If the file has an extenstion, rearrange the format array so that the
            // appropriate format is tried first.
            if (System.IO.Path.HasExtension(playlistUri))
            {
                string extension = System.IO.Path.GetExtension(playlistUri);
                extension = extension.ToLower();

                int index = -1;
                foreach (PlaylistFormatDescription format in formats)
                {
                    index++;
                    if (extension.Equals("." + format.FileExtension))
                    {
                        break;
                    }
                }

                if (index != -1 && index != 0 && index < formats.Length)
                {
                    // Move to first position in array.
                    PlaylistFormatDescription preferredFormat = formats[index];
                    formats[index] = formats[0];
                    formats[0]     = preferredFormat;
                }
            }

            foreach (PlaylistFormatDescription format in formats)
            {
                try {
                    IPlaylistFormat playlist = (IPlaylistFormat)Activator.CreateInstance(format.Type);
                    playlist.BaseUri  = baseUri;
                    playlist.RootPath = rootPath;
                    playlist.Load(Banshee.IO.File.OpenRead(new SafeUri(playlistUri)), true);
                    return(playlist);
                } catch (InvalidPlaylistException) {
                }
            }

            return(null);
        }
Exemple #10
0
        private void OnExportPlaylist(object o, EventArgs args)
        {
            AbstractPlaylistSource source = ActionSource as AbstractPlaylistSource;

            if (source == null)
            {
                return;
            }
            source.Activate();

            PlaylistExportDialog chooser = new PlaylistExportDialog(source.Name, PrimaryWindow);

            string uri = null;
            PlaylistFormatDescription format = null;
            int response = chooser.Run();

            if (response == (int)ResponseType.Ok)
            {
                uri = chooser.Uri;
                // Get the format that the user selected.
                format = chooser.GetExportFormat();
            }
            chooser.Destroy();

            if (uri == null)
            {
                // User cancelled export.
                return;
            }

            try {
                IPlaylistFormat playlist = (IPlaylistFormat)Activator.CreateInstance(format.Type);
                SafeUri         suri     = new SafeUri(uri);
                if (suri.IsLocalPath)
                {
                    playlist.BaseUri = new Uri(System.IO.Path.GetDirectoryName(suri.LocalPath));
                }
                playlist.Save(Banshee.IO.File.OpenWrite(new SafeUri(uri), true), source);
            } catch (Exception e) {
                Console.WriteLine(e);
                Log.Error(Catalog.GetString("Could not export playlist"), e.Message, true);
            }
        }
Exemple #11
0
        private void OnImportFinished(object o, EventArgs args)
        {
            importer.Finished -= OnImportFinished;

            if (CanSyncPlaylists)
            {
                var insert_cmd = new Hyena.Data.Sqlite.HyenaSqliteCommand(
                    "INSERT INTO CorePlaylistEntries (PlaylistID, TrackID) VALUES (?, ?)");
                int [] psources = new int [] { DbId };
                foreach (string playlist_path in PlaylistFiles)
                {
                    IPlaylistFormat loaded_playlist = PlaylistFileUtil.Load(playlist_path, new Uri(PlaylistsPath));
                    if (loaded_playlist == null)
                    {
                        continue;
                    }

                    PlaylistSource playlist = new PlaylistSource(System.IO.Path.GetFileNameWithoutExtension(playlist_path), this);
                    playlist.Save();
                    //Hyena.Data.Sqlite.HyenaSqliteCommand.LogAll = true;
                    foreach (Dictionary <string, object> element in loaded_playlist.Elements)
                    {
                        string track_path = (element["uri"] as Uri).LocalPath;
                        int    track_id   = DatabaseTrackInfo.GetTrackIdForUri(new SafeUri(track_path), psources);
                        if (track_id == 0)
                        {
                            Log.DebugFormat("Failed to find track {0} in DAP library to load it into playlist {1}", track_path, playlist_path);
                        }
                        else
                        {
                            ServiceManager.DbConnection.Execute(insert_cmd, playlist.DbId, track_id);
                        }
                    }
                    //Hyena.Data.Sqlite.HyenaSqliteCommand.LogAll = false;
                    playlist.UpdateCounts();
                    AddChildSource(playlist);
                }
            }

            import_reset_event.Set();
        }
Exemple #12
0
 private void LoadTest(IPlaylistFormat playlist, string filename, bool mmsh)
 {
     LoadPlaylist(playlist, filename);
     AssertTest(playlist.Elements, mmsh);
 }
Exemple #13
0
        public bool Parse(SafeUri uri)
        {
            ThreadAssist.AssertNotInMainThread();
            lock (this) {
                elements = null;
                HttpWebResponse response       = null;
                Stream          stream         = null;
                Stream          web_stream     = null;
                bool            partial_read   = false;
                long            saved_position = 0;

                if (uri.Scheme == "file")
                {
                    stream = Banshee.IO.File.OpenRead(uri);
                }
                else if (uri.Scheme == "http")
                {
                    response   = Download(uri, HTTP_REQUEST_RETRIES);
                    web_stream = response.GetResponseStream();
                    try {
                        stream = new MemoryStream();

                        byte [] buffer = new byte[4096];
                        int     read;

                        // If we haven't read the whole stream and if
                        // it turns out to be a playlist, we'll read the rest
                        read = web_stream.Read(buffer, 0, buffer.Length);
                        stream.Write(buffer, 0, read);
                        if ((read = web_stream.Read(buffer, 0, buffer.Length)) > 0)
                        {
                            partial_read = true;
                            stream.Write(buffer, 0, read);
                            saved_position = stream.Position;
                        }

                        stream.Position = 0;
                    } finally {
                        if (!partial_read)
                        {
                            web_stream.Close();
                            response.Close();
                        }
                    }
                }
                else
                {
                    Hyena.Log.DebugFormat("Not able to parse playlist at {0}", uri);
                    return(false);
                }

                PlaylistFormatDescription matching_format = null;

                foreach (PlaylistFormatDescription format in playlist_formats)
                {
                    stream.Position = 0;

                    if (format.MagicHandler(new StreamReader(stream)))
                    {
                        matching_format = format;
                        break;
                    }
                }

                if (matching_format == null)
                {
                    if (partial_read)
                    {
                        web_stream.Close();
                        response.Close();
                    }
                    return(false);
                }

                if (partial_read)
                {
                    try {
                        stream.Position = saved_position;
                        Banshee.IO.StreamAssist.Save(web_stream, stream, false);
                    } finally {
                        web_stream.Close();
                        response.Close();
                    }
                }
                stream.Position = 0;
                IPlaylistFormat playlist = (IPlaylistFormat)Activator.CreateInstance(matching_format.Type);
                playlist.BaseUri = BaseUri;
                playlist.Load(stream, false);
                stream.Dispose();

                elements = playlist.Elements;
                Title    = playlist.Title ?? Path.GetFileNameWithoutExtension(uri.LocalPath);
                return(true);
            }
        }
 private void LoadTest (IPlaylistFormat playlist, string filename, bool mmsh)
 {
     LoadPlaylist (playlist, filename);
     AssertTest (playlist.Elements, mmsh);
 }
 private IPlaylistFormat LoadPlaylist (IPlaylistFormat playlist, string filename)
 {
     playlist.BaseUri = BaseUri;
     playlist.Load (File.OpenRead (Path.Combine (playlists_dir, filename)), true);
     return playlist;
 }
Exemple #16
0
        public void ReadAsfReferenceRemote()
        {
            IPlaylistFormat pl = LoadPlaylist(new AsfReferencePlaylistFormat(), "reference_remote.asx");

            Assert.AreEqual("mmsh://remote/remote.mp3", (pl.Elements[0].Uri).AbsoluteUri);
        }
        public void ReadAsfReferenceRemote()
        {
            IPlaylistFormat pl = LoadPlaylist(new AsfReferencePlaylistFormat(), "reference_remote.asx");

            Assert.AreEqual(elements[0]["uri"], pl.Elements[0]["uri"]);
        }
Exemple #18
0
        public void ReadAsfReferenceLocal()
        {
            IPlaylistFormat pl = LoadPlaylist(new AsfReferencePlaylistFormat(), "reference_local.asx");

            Assert.AreEqual(elements[2].Uri, pl.Elements[0].Uri);
        }
 private IPlaylistFormat LoadPlaylist(IPlaylistFormat playlist, string filename)
 {
     playlist.BaseUri = BaseUri;
     playlist.Load(File.OpenRead(Path.Combine(playlists_dir, filename)), true);
     return(playlist);
 }
Exemple #20
0
 private IPlaylistFormat LoadPlaylist(IPlaylistFormat playlist, string filename)
 {
     return(LoadPlaylist(playlist, filename, null));
 }
        public bool Parse(SafeUri uri)
        {
            ThreadAssist.AssertNotInMainThread();
            lock (this) {
                elements = null;
                HttpWebResponse response       = null;
                Stream          stream         = null;
                Stream          web_stream     = null;
                bool            partial_read   = false;
                long            saved_position = 0;

                if (uri.Scheme == "file")
                {
                    stream = Banshee.IO.File.OpenRead(uri);
                }
                else if (uri.Scheme == "http")
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri.AbsoluteUri);
                    request.UserAgent         = Banshee.Web.Browser.UserAgent;
                    request.KeepAlive         = false;
                    request.Timeout           = 5 * 1000;
                    request.AllowAutoRedirect = true;

                    // Parse out and set credentials, if any
                    string user_info = new Uri(uri.AbsoluteUri).UserInfo;
                    if (!String.IsNullOrEmpty(user_info))
                    {
                        string username = String.Empty;
                        string password = String.Empty;
                        int    cIndex   = user_info.IndexOf(":");
                        if (cIndex != -1)
                        {
                            username = user_info.Substring(0, cIndex);
                            password = user_info.Substring(cIndex + 1);
                        }
                        else
                        {
                            username = user_info;
                        }
                        request.Credentials = new NetworkCredential(username, password);
                    }

                    response   = (HttpWebResponse)request.GetResponse();
                    web_stream = response.GetResponseStream();

                    try {
                        stream = new MemoryStream();

                        byte [] buffer = new byte[4096];
                        int     read;

                        // If we haven't read the whole stream and if
                        // it turns out to be a playlist, we'll read the rest
                        read = web_stream.Read(buffer, 0, buffer.Length);
                        stream.Write(buffer, 0, read);
                        if ((read = web_stream.Read(buffer, 0, buffer.Length)) > 0)
                        {
                            partial_read = true;
                            stream.Write(buffer, 0, read);
                            saved_position = stream.Position;
                        }

                        stream.Position = 0;
                    } finally {
                        if (!partial_read)
                        {
                            web_stream.Close();
                            response.Close();
                        }
                    }
                }
                else
                {
                    Hyena.Log.DebugFormat("Not able to parse playlist at {0}", uri);
                    return(false);
                }

                PlaylistFormatDescription matching_format = null;

                foreach (PlaylistFormatDescription format in playlist_formats)
                {
                    stream.Position = 0;

                    StreamReader reader = new StreamReader(stream);
                    if (format.MagicHandler(reader))
                    {
                        matching_format = format;
                        break;
                    }
                }

                if (matching_format == null)
                {
                    return(false);
                }

                if (partial_read)
                {
                    try {
                        stream.Position = saved_position;
                        Banshee.IO.StreamAssist.Save(web_stream, stream, false);
                    } finally {
                        web_stream.Close();
                        response.Close();
                    }
                }
                stream.Position = 0;
                IPlaylistFormat playlist = (IPlaylistFormat)Activator.CreateInstance(matching_format.Type);
                playlist.BaseUri = BaseUri;
                playlist.Load(stream, false);
                stream.Dispose();

                elements = playlist.Elements;
                Title    = playlist.Title ?? Path.GetFileNameWithoutExtension(uri.LocalPath);
                return(true);
            }
        }
 private IPlaylistFormat LoadPlaylist (IPlaylistFormat playlist, string filename, Uri rootPath)
 {
     playlist.BaseUri = BaseUri;
     if (rootPath != null) {
         playlist.RootPath = rootPath;
     }
     playlist.Load (File.OpenRead (Path.Combine (playlists_dir, filename)), true);
     return playlist;
 }
 private IPlaylistFormat LoadPlaylist (IPlaylistFormat playlist, string filename)
 {
     return LoadPlaylist (playlist, filename, null);
 }