private void ButtonSearch_Click(object sender, RoutedEventArgs e)
        {
            progressBarSearch.Visibility = System.Windows.Visibility.Visible;

            ButtonSearch.IsEnabled = false;
            TextBlockStatus.Text   = StringTable.OneMomentPlease + "...";

            CDArchiveConfig  cdArchiveConfig = ((ComboBoxArchiveItem)ComboBoxCDArchives.SelectedItem).ArchiveConfig;
            BackgroundWorker bw = new BackgroundWorker();

            bw.DoWork += delegate
            {
                if (cdArchiveConfig.Type == CDArchiveType.BIG3)
                {
                    SearchCDArchive(cdArchiveConfig);
                }
                if (cdArchiveConfig.Type == CDArchiveType.CDArchiveLocal)
                {
                    SearchCDArchiveLocal(cdArchiveConfig);
                }
            };
            bw.RunWorkerCompleted += delegate
            {
                progressBarSearch.Visibility = System.Windows.Visibility.Collapsed;
                UpdateWindowState();
            };
            bw.RunWorkerAsync();
        }
        private void ButtonImportCDs_Click(object sender, RoutedEventArgs e)
        {
            // Alle markierten CDs in den aktuellen Katalog übernehmen.
            foreach (CDItemResult item in DataGridResult.SelectedItems)
            {
                if (CurrentCD != null)
                {
                    /*CString sSaveIdentity = CD->Identity;
                     * int iSaveNumberOfTracks = CD->NumberOfTracks;
                     * Big3::Hitbase::DataBaseEngine::CD^ cd = gcnew Big3::Hitbase::DataBaseEngine::CD();
                     * BOOL bError = FALSE;
                     * BOOL bCanceled = FALSE;
                     *
                     * cd->Identity = gcnew String(m_saIdentities[iSelItem]);
                     *
                     * theApp.m_CDArchives->DownloadCD(gcnew IntPtr(pHttpConnection), cd, bCanceled, bError, TRUE);
                     *
                     * CD = cd;
                     *
                     * CD->Identity = gcnew String(sSaveIdentity);
                     * CD->NumberOfTracks = iSaveNumberOfTracks;*/
                }
                else
                {
                    CD  cd       = new CD();
                    int error    = 0;
                    int canceled = 0;

                    CDArchiveConfig cdArchiveConfig = ((ComboBoxArchiveItem)ComboBoxCDArchives.SelectedItem).ArchiveConfig;

                    if (cdArchiveConfig.Type == CDArchiveType.BIG3)
                    {
                        cd.Identity = item.Identity;

                        CCDArchive cdarchive = new CCDArchive();

                        cdarchive.SearchCDInInternetBig3(cdArchiveConfig, cd, ref canceled, ref error);
                    }

                    if (cdArchiveConfig.Type == CDArchiveType.CDArchiveLocal)
                    {
                        cd.Identity = item.Identity;

                        CCDArchive cdarchive = new CCDArchive();

                        CDArchiveLocalFile.SearchCDInCDArchiveLocalFile(cdArchiveConfig.ArchiveName, cd);
                    }

                    cd.Save(dataBase);
                }
            }

            Close();
        }
        private void ShowDetails()
        {
            CD  cd       = new CD();
            int error    = 0;
            int canceled = 0;

            CDItemResult selItem = ((CDItemResult)this.DataGridResult.SelectedItem);

            if (selItem == null)
            {
                return;
            }

            CDArchiveConfig cdArchiveConfig = ((ComboBoxArchiveItem)ComboBoxCDArchives.SelectedItem).ArchiveConfig;

            if (cdArchiveConfig.Type == CDArchiveType.BIG3)
            {
                cd.Identity = selItem.Identity;

                CCDArchive cdarchive = new CCDArchive();

                cdarchive.SearchCDInInternetBig3(cdArchiveConfig, cd, ref canceled, ref error);
            }

            if (cdArchiveConfig.Type == CDArchiveType.CDArchiveLocal)
            {
                cd.Identity = selItem.Identity;

                CCDArchive cdarchive = new CCDArchive();

                CDArchiveLocalFile.SearchCDInCDArchiveLocalFile(cdArchiveConfig.ArchiveName, cd);
            }

            WindowAlbum windowAlbum = new WindowAlbum(cd, dataBase);

            windowAlbum.SaveAlbumOnOK = false;
            windowAlbum.ShowDialog();
        }
        void SearchCDArchive(CDArchiveConfig cdArchiveConfig)
        {
            String sURL      = "";
            int    iMaxCount = 100;          // Z.zt. fest

            Dispatcher.Invoke((Action)(() =>
            {
                if (Misc.Atoi(TextBoxNumberOfTracks.Text) > 0)
                {
                    sURL = string.Format("cdquery_browse.asp?User=hitbase&Password=hitbase2k&Artist={0}&Title={1}&UPC={2}&NumberOfTracks={3}&MaxCount={4}", TextBoxArtist.Text, TextBoxTitle.Text, TextBoxUPC.Text, Misc.Atoi(TextBoxNumberOfTracks.Text), iMaxCount);
                }
                else
                {
                    sURL = string.Format("cdquery_browse.asp?User=hitbase&Password=hitbase2k&Artist={0}&Title={1}&UPC={2}&MaxCount={3}", TextBoxArtist.Text, TextBoxTitle.Text, TextBoxUPC.Text, iMaxCount);
                }
            }));

            WebClient wc = new WebClient();

            wc.UseDefaultCredentials = true;
            wc.Proxy.Credentials     = CredentialCache.DefaultCredentials;
            wc.Encoding = Encoding.UTF8;
            string content = wc.DownloadString("http://" + cdArchiveConfig.ArchiveName + "/" + sURL);

            content = content.Replace("\r", "");
            string[] saLines;

            saLines = content.Split('\n');

            //!!!!!!!!! Versionsnummer abfragen

            List <CDItemResult> cdList = new List <CDItemResult>();

            bool bError = false;
            int  iLine  = 1;
            int  iCount = 0;

            while (iLine < saLines.Length)
            {
                String sValueID             = "";
                String sValueArtist         = "";
                String sValueTitle          = "";
                String sValueTotalLength    = "";
                String sValueNumberOfTracks = "";

                if (iLine >= saLines.Length || !GetValue(saLines[iLine++], "ID", ref sValueID))
                {
                    bError = true;
                    break;
                }

                if (iLine >= saLines.Length || !GetValue(saLines[iLine++], "Artist", ref sValueArtist))
                {
                    bError = true;
                    break;
                }

                if (iLine >= saLines.Length || !GetValue(saLines[iLine++], "Title", ref sValueTitle))
                {
                    bError = true;
                    break;
                }

                if (iLine >= saLines.Length || !GetValue(saLines[iLine++], "TotalLength", ref sValueTotalLength))
                {
                    bError = true;
                    break;
                }

                if (iLine >= saLines.Length || !GetValue(saLines[iLine++], "NumberOfTracks", ref sValueNumberOfTracks))
                {
                    bError = true;
                    break;
                }

                CDItemResult newItem = new CDItemResult();
                newItem.Identity       = sValueID;
                newItem.Artist         = sValueArtist;
                newItem.Title          = sValueTitle;
                newItem.Length         = Misc.Atoi(sValueTotalLength);
                newItem.NumberOfTracks = Misc.Atoi(sValueNumberOfTracks);

                cdList.Add(newItem);

                iCount++;
            }

            Dispatcher.Invoke((Action)(() =>
            {
                DataGridResult.ItemsSource = cdList;

                String strResult;
                strResult = string.Format("{0} {1}", iCount, StringTable.CDsFound);
                TextBlockStatus.Text = strResult;
            }));
        }
        void SearchCDArchiveLocal(CDArchiveConfig cdArchiveConfig)
        {
            int maxCount = 100;             // Z.zt. fest


            String filename = cdArchiveConfig.ArchiveName;

            if (string.IsNullOrEmpty(filename))
            {
                MessageBox.Show(StringTable.NoCDArchiveDefined, System.Windows.Forms.Application.ProductName, MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            String filter         = "";
            string artist         = "";
            string title          = "";
            string upc            = "";
            string numberOfTracks = "";

            Dispatcher.Invoke((Action)(() =>
            {
                artist = this.TextBoxArtist.Text;
                title = this.TextBoxTitle.Text;
                upc = this.TextBoxUPC.Text;
                numberOfTracks = this.TextBoxNumberOfTracks.Text;
            }));

            if (!string.IsNullOrEmpty(artist))
            {
                filter += "sArtist like '%" + artist + "%'";
            }

            if (!string.IsNullOrEmpty(title))
            {
                if (!string.IsNullOrEmpty(filter))
                {
                    filter += " AND ";
                }

                filter += "sTitle like '%" + title + "%'";
            }

            if (!string.IsNullOrEmpty(upc))
            {
                if (!string.IsNullOrEmpty(filter))
                {
                    filter += " AND ";
                }

                filter += "sUPC='" + upc + "'";
            }

            if (Misc.Atoi(numberOfTracks) != 0)
            {
                if (!string.IsNullOrEmpty(filter))
                {
                    filter += " AND ";
                }

                filter += string.Format("CD.cNumberOfTracks={0}", Misc.Atoi(numberOfTracks));
            }

            if (string.IsNullOrEmpty(filter))
            {
                return;
            }

            string sql;

            sql = string.Format("SELECT * FROM CD INNER JOIN Artist ON CD.IDArtist = Artist.ID WHERE {0} ORDER BY Artist.sArtist, CD.sTitle", filter);

            List <CDItemResult> cdList = new List <CDItemResult>();
            int iCount = 0;

            using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source='" + filename + "'"))
            {
                conn.Open();

                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(sql, conn);

                using (System.Data.OleDb.OleDbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        CDItemResult newItem = new CDItemResult();
                        newItem.Identity       = (string)reader["sIdentity"];
                        newItem.Artist         = (string)reader["sArtist"];
                        newItem.Title          = (string)reader["sTitle"];
                        newItem.Length         = (int)reader["dwTotalLength"];
                        newItem.NumberOfTracks = (int)(byte)reader["cNumberOfTracks"];

                        cdList.Add(newItem);
                        iCount++;
                    }
                }
            }

            Dispatcher.Invoke((Action)(() =>
            {
                DataGridResult.ItemsSource = cdList;

                String strResult;
                strResult = string.Format("{0} {1}", iCount, StringTable.CDsFound);
                TextBlockStatus.Text = strResult;
            }));
        }