Example #1
0
        public Node_Common(Type type, string name, string url)
        {
            m_type   = type;
            m_name   = name;
            m_url    = url;
            m_parent = null;

            m_isDownloading = false;
            m_isParsing     = false;
            m_isParsed      = false;
            m_lockObj       = new object();

            DestinationPathTracker.Instance.PropertyChanged += new PropertyChangedEventHandler(DestinationPathTracker_PropertyChanged);
            this.PropertyChanged += new PropertyChangedEventHandler(Self_PropertyChanged);
        }
Example #2
0
        private bool ParsePageInternal(DownloaderInfo asyncInfo)
        {
            if (IsParsed)
            {
                return(true);
            }

            if (asyncInfo.Worker.CancellationPending)
            {
                asyncInfo.WorkArgs.Cancel = true;
                return(false);
            }

            if (asyncInfo.ProgressCallback != null)
            {
                asyncInfo.ProgressCallback("Starting page download for folder '" + Name + "'.", 0, null);
            }

            StringBuilder   sb       = null;
            HttpWebResponse response = null;

            try
            {
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
                string         finalURL = "https://api.gigahost123.com/api/listS3?bucket=mp3.gigahost123.com&path=" + HttpUtility.UrlEncode(this.URL);
                HttpWebRequest request  = (HttpWebRequest)WebRequest.Create(finalURL);
                response = (HttpWebResponse)request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                sb = new StringBuilder();
                Int32  bufSize   = 1024 * 100;
                Int32  bytesRead = 0;
                byte[] buf       = new byte[bufSize];

                if (asyncInfo.Worker.CancellationPending)
                {
                    response.Close();
                    asyncInfo.WorkArgs.Cancel = true;
                    return(false);
                }

                if (asyncInfo.ProgressCallback != null)
                {
                    asyncInfo.ProgressCallback("Reading page for folder '" + Name + "'.", 20, null);
                }

                long total = 0;
                if (responseStream.CanSeek)
                {
                    total = responseStream.Length;
                }
                else
                {
                    total = 500 * 1024; //assuming 500 KB
                }

                while ((bytesRead = responseStream.Read(buf, 0, bufSize)) != 0)
                {
                    sb.Append(Encoding.UTF8.GetString(buf, 0, bytesRead));

                    if (asyncInfo.Worker.CancellationPending)
                    {
                        response.Close();
                        asyncInfo.WorkArgs.Cancel = true;
                        return(false);
                    }

                    if (asyncInfo.ProgressCallback != null)
                    {
                        asyncInfo.ProgressCallback("Reading page for folder '" + Name + "'.", 20 + (((double)sb.Length / (double)total) * 30), null);
                    }
                }

                response.Close();
            }
            catch (Exception exp)
            {
                if (response != null)
                {
                    response.Close();
                }

                throw new Exception("Page downloading failed.\n  " + exp.Message);
            }

            response = null;

            string json_data = sb.ToString();

            if (asyncInfo.Worker.CancellationPending)
            {
                asyncInfo.WorkArgs.Cancel = true;
                return(false);
            }

            if (asyncInfo.ProgressCallback != null)
            {
                asyncInfo.ProgressCallback("Parsing page for folder '" + Name + "'.", 50, null);
            }

            try
            {
                Online_Page page = JsonConvert.DeserializeObject <Online_Page>(json_data);

                if (page.folders.Length > 0)
                {
                    if (asyncInfo.Worker.CancellationPending)
                    {
                        asyncInfo.WorkArgs.Cancel = true;
                        return(false);
                    }

                    if (asyncInfo.ProgressCallback != null)
                    {
                        asyncInfo.ProgressCallback("Parsing page for folder '" + Name + "'.", 60, null);
                    }

                    double count = 0;
                    foreach (Online_Folder folder_entry in page.folders)
                    {
                        string   folder_url  = "/" + folder_entry.Prefix;
                        string[] parts       = folder_url.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
                        string   folder_name = parts[parts.Length - 1];

                        if (string.IsNullOrEmpty(folder_url) || string.IsNullOrEmpty(folder_name))
                        {
                            throw new Exception("Missing name/url for a folder.");
                        }

                        Node_Directory subfolder = new Node_Directory(folder_name, folder_url);
                        subfolder.Parent = this;
                        AddChild(subfolder);
                        count++;

                        if (asyncInfo.ProgressCallback != null)
                        {
                            asyncInfo.ProgressCallback("Parsing page for folder '" + Name + "'.", 60 + (((double)count / (double)page.folders.Length) * 20), subfolder);
                        }

                        if (asyncInfo.Worker.CancellationPending)
                        {
                            asyncInfo.WorkArgs.Cancel = true;
                            return(false);
                        }
                    }
                }

                if (page.files.Length > 0)
                {
                    if (asyncInfo.Worker.CancellationPending)
                    {
                        asyncInfo.WorkArgs.Cancel = true;
                        return(false);
                    }

                    if (asyncInfo.ProgressCallback != null)
                    {
                        asyncInfo.ProgressCallback("Parsing page for folder '" + Name + "'.", 80, null);
                    }

                    double count = 0;
                    foreach (Online_File file_entry in page.files)
                    {
                        string   song_url  = "/" + file_entry.Key;
                        string[] parts     = song_url.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
                        string   song_name = parts[parts.Length - 1];

                        if (string.IsNullOrEmpty(song_url) || string.IsNullOrEmpty(song_name))
                        {
                            throw new Exception("Missing name/url for a song.");
                        }

                        Node_Song song = new Node_Song(song_name, song_url);
                        song.Parent = this;
                        AddChild(song);
                        count++;

                        if (asyncInfo.ProgressCallback != null)
                        {
                            asyncInfo.ProgressCallback("Parsing page for folder '" + Name + "'.", 80 + (((double)count / (double)page.files.Length) * 20), song);
                        }

                        if (asyncInfo.Worker.CancellationPending)
                        {
                            asyncInfo.WorkArgs.Cancel = true;
                            return(false);
                        }
                    }
                }
            }
            catch (Exception exp)
            {
                throw exp;
            }

            if (asyncInfo.ProgressCallback != null)
            {
                asyncInfo.ProgressCallback("Done processing page for folder '" + Name + "'.", 100, null);
            }

            return(true);
        }
Example #3
0
        private void Category_Changed(object sender, SelectionChangedEventArgs e)
        {
            ComboBoxItem   selected = e.AddedItems[0] as ComboBoxItem;
            string         name     = selected.Content.ToString();
            Node_Directory root     = null;

            switch (name)
            {
            case "Movies":
                if (m_Movies == null)
                {
                    m_Movies = new Node_Directory(name, "/songs/Audio/indian/movies/");
                    m_Movies.Init();
                }
                root = m_Movies;
                break;

            case "Pop":
                if (m_Pop == null)
                {
                    m_Pop = new Node_Directory(name, "/songs/Audio/indian/POP/");
                    m_Pop.Init();
                }
                root = m_Pop;
                break;

            case "Artist (Hindi)":
                if (m_Artist_Hindi == null)
                {
                    m_Artist_Hindi = new Node_Directory(name, "/songs/Audio/indian/artists/Hindi/");
                    m_Artist_Hindi.Init();
                }
                root = m_Artist_Hindi;
                break;

            case "Artist (Punjabi)":
                if (m_Artist_Punjabi == null)
                {
                    m_Artist_Punjabi = new Node_Directory(name, "/songs/Audio/indian/artists/Punjabi/");
                    m_Artist_Punjabi.Init();
                }
                root = m_Artist_Punjabi;
                break;

            case "Bhangra":
                if (m_Bhangra == null)
                {
                    m_Bhangra = new Node_Directory(name, "/songs/Audio/indian/bhangra/");
                    m_Bhangra.Init();
                }
                root = m_Bhangra;
                break;

            case "Oldies":
                if (m_Oldies == null)
                {
                    m_Oldies = new Node_Directory(name, "/songs/Audio/indian/oldies/");
                    m_Oldies.Init();
                }
                root = m_Oldies;
                break;

            case "Instrumental":
                if (m_Instrumental == null)
                {
                    m_Instrumental = new Node_Directory(name, "http://apunkabollywood.net/songs/Audio/indian/Instrumentals/");
                    m_Instrumental.Init();
                }
                root = m_Instrumental;
                break;

            default:
                ErrorLog.Show("Invalid category.");
                return;
            }

            m_rootNode = root;
            c_tree.Items.Clear();
            c_filter.Text = "";
            c_tree.Items.Add(m_rootNode);
        }