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); }
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); }
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); } }
[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(); }
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); }
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); } }
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(); }
private void LoadTest(IPlaylistFormat playlist, string filename, bool mmsh) { LoadPlaylist(playlist, filename); AssertTest(playlist.Elements, mmsh); }
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; }
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"]); }
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); }
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); }