예제 #1
0
        public PlaylistExportDialog(string name, Window parent) :
            base(Catalog.GetString("Export Playlist"), parent, FileChooserAction.Save)
        {
            initial_name = FileNamePattern.Escape (name);
            playlist = PlaylistFileUtil.GetDefaultExportFormat();
            CurrentName = System.IO.Path.ChangeExtension(initial_name, playlist.FileExtension);
            DefaultResponse = ResponseType.Ok;
            DoOverwriteConfirmation = true;

            AddButton(Stock.Cancel, ResponseType.Cancel);
            AddButton(Catalog.GetString("Export"), ResponseType.Ok);

            InitializeExtraWidget();
        }
예제 #2
0
        protected void OnComboBoxChange(object o, EventArgs args)
        {
            playlist = GetExportFormat();

            if (playlist != null) {
                // Store the export format so that we can default to it the
                // next time the user exports.
                PlaylistFileUtil.SetDefaultExportFormat(playlist);

                // If the filename has an extension, update it to the extension
                // of the export format.
                string file_name = null;

                if (Filename != null) {
                    file_name = System.IO.Path.GetFileName(Filename);
                }

                if (file_name != null) {
                    CurrentName = System.IO.Path.ChangeExtension(file_name, playlist.FileExtension);
                } else {
                    CurrentName = System.IO.Path.ChangeExtension(initial_name, playlist.FileExtension);
                }
            }
        }
예제 #3
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);
            }
        }
예제 #4
0
 public static int GetFormatIndex (PlaylistFormatDescription [] formats, PlaylistFormatDescription playlist)
 {
     int default_export_index = -1;
     foreach (PlaylistFormatDescription format in formats) {
         default_export_index++;
         if (format.FileExtension.Equals (playlist.FileExtension)) {
             break;
         }
     }
     return default_export_index;
 }
예제 #5
0
 public static void SetDefaultExportFormat (PlaylistFormatDescription format)
 {
     try {
         DefaultExportFormat.Set (format.FileExtension);
     } catch (Exception) {
     }
 }
예제 #6
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")
                {
                    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);
            }
        }