예제 #1
0
        private void LoadColumnConfiguration()
        {
            string columns = (string)Configuration.Settings.GetValue("MyMusicDetailsColumns", "");

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

            string[] columnWidths = columns.Split(',');
            if (columnWidths.Length == 6)
            {
                AlbumColumnWidth    = Misc.Atoi(columnWidths[0]);
                NumberColumnWidth   = Misc.Atoi(columnWidths[1]);
                TitleColumnWidth    = Misc.Atoi(columnWidths[2]);
                LengthColumnWidth   = Misc.Atoi(columnWidths[3]);
                RatingColumnWidth   = Misc.Atoi(columnWidths[4]);
                ComposerColumnWidth = Misc.Atoi(columnWidths[5]);

                GridHeader.ColumnDefinitions[0].Width = new GridLength(AlbumColumnWidth + 70, GridUnitType.Pixel);
                GridHeader.ColumnDefinitions[1].Width = new GridLength(NumberColumnWidth, GridUnitType.Pixel);
                GridHeader.ColumnDefinitions[2].Width = new GridLength(TitleColumnWidth, GridUnitType.Pixel);
                GridHeader.ColumnDefinitions[3].Width = new GridLength(LengthColumnWidth, GridUnitType.Pixel);
                GridHeader.ColumnDefinitions[4].Width = new GridLength(RatingColumnWidth, GridUnitType.Pixel);
                GridHeader.ColumnDefinitions[5].Width = new GridLength(ComposerColumnWidth, GridUnitType.Pixel);
            }
        }
예제 #2
0
 private void ButtonOK_Click(object sender, RoutedEventArgs e)
 {
     Seconds = Misc.Atoi(textBoxSeconds.Text);
     if (OKClicked != null)
     {
         OKClicked(this, new EventArgs());
     }
 }
예제 #3
0
        private void buttonOK_Click(object sender, EventArgs e)
        {
            participant.Role = comboBoxRole.Text;
            participant.Name = comboBoxName.Text;

            participant.TrackNumber = Misc.Atoi(textBoxTrack.Text);
            participant.Comment     = textBoxComment.Text;
        }
예제 #4
0
        private int GetTotalLength()
        {
            int ret;

            StringBuilder retValue = new StringBuilder(200);

            ret = mciSendString("status " + deviceName + " length", retValue, 200, IntPtr.Zero);

            return(Misc.Atoi(retValue.ToString()));
        }
예제 #5
0
        private int GetNumberOfTracks()
        {
            int ret;

            StringBuilder retValue = new StringBuilder(200);

            ret = mciSendString("status " + deviceName + " number of tracks", retValue, 200, IntPtr.Zero);

            return(Misc.Atoi(retValue.ToString()));
        }
예제 #6
0
        private int GetTrackPosition(int i)
        {
            int ret;

            StringBuilder retValue = new StringBuilder(200);

            ret = mciSendString("status " + deviceName + " position track " + (i + 1).ToString(), retValue, 200, IntPtr.Zero);

            return(Misc.Atoi(retValue.ToString()));
        }
예제 #7
0
        public int GetTrackLength(int track)
        {
            int ret;

            StringBuilder retValue = new StringBuilder(200);

            ret = mciSendString("status " + deviceName + " length track " + (track + 1).ToString(), retValue, 200, IntPtr.Zero);

            return(Misc.Atoi(retValue.ToString()));
        }
        private void ButtonOK_Click(object sender, RoutedEventArgs e)
        {
            participant.Role = ComboBoxRole.Text;
            participant.Name = ComboBoxName.Text;

            participant.TrackNumber = Misc.Atoi(TextBoxTrack.Text);
            participant.Comment     = TextBoxComment.Text;

            this.DialogResult = true;
            this.Close();
        }
예제 #9
0
        public void SetValue(int fieldNumber, string value)
        {
            if (contentControl[fieldNumber] != null)
            {
                switch (userFields[fieldNumber].Type)
                {
                case UserFieldType.Number:
                    ((TextBox)contentControl[fieldNumber]).Text = value;
                    break;

                case UserFieldType.Boolean:
                    if (UsedAsFilter)
                    {
                        if (value == "0")
                        {
                            ((ComboBox)contentControl[fieldNumber]).SelectedIndex = 1;
                        }

                        if (value == "1" || value != null && value.ToLower() == "ja")
                        {
                            ((ComboBox)contentControl[fieldNumber]).SelectedIndex = 2;
                        }
                    }
                    else
                    {
                        if (value == "1" || value != null && value.ToLower() == "ja")
                        {
                            ((CheckBox)contentControl[fieldNumber]).Checked = true;
                        }

                        if (value == "0")
                        {
                            ((CheckBox)contentControl[fieldNumber]).Checked = false;
                        }
                    }
                    break;

                case UserFieldType.Currency:
                    if (!string.IsNullOrEmpty(value))
                    {
                        ((TextBoxCurrency)contentControl[fieldNumber]).Value = Misc.Atoi(value);
                    }
                    break;

                case UserFieldType.Date:
                    ((TextBoxDate)contentControl[fieldNumber]).Value = value;
                    break;

                default:
                    contentControl[fieldNumber].Text = value;
                    break;
                }
            }
        }
예제 #10
0
        int IComparer.Compare(object X, object Y)
        {
            int result      = 0;
            int columnIndex = 0;

            foreach (DataGridSortColumn sortItem in columnSortDirections)
            {
                // Erst Spalte abziehen
                columnIndex = sortItem.Index - 1;

                MyMusicListItem albumItem1 = (MyMusicListItem)X;
                MyMusicListItem albumItem2 = (MyMusicListItem)Y;

                if (albumItem1.Items[columnIndex] is Int32)
                {
                    int val1 = albumItem1.Items[columnIndex] is DBNull ? 0 : (int)albumItem1.Items[columnIndex];
                    int val2 = albumItem2.Items[columnIndex] is DBNull ? 0 : (int)albumItem2.Items[columnIndex];

                    result = Int32Compare(val1, val2, sortItem.SortDirection);
                }
                else if (IsDateField(Fields[columnIndex].Field))
                {
                    DateTime val1 = albumItem1.Items[columnIndex] is DBNull ? DateTime.MinValue : (DateTime)albumItem1.Items[columnIndex];
                    DateTime val2 = albumItem2.Items[columnIndex] is DBNull ? DateTime.MinValue : (DateTime)albumItem2.Items[columnIndex];

                    result = DateTimeCompare(val1, val2, sortItem.SortDirection);
                }
                else if (Fields[columnIndex].Field == Field.ArchiveNumber && Settings.Current.SortArchiveNumberNumeric)
                {
                    int val1 = albumItem1.Items[columnIndex] is DBNull ? 0 : Misc.Atoi((string)albumItem1.Items[columnIndex]);
                    int val2 = albumItem2.Items[columnIndex] is DBNull ? 0 : Misc.Atoi((string)albumItem2.Items[columnIndex]);

                    result = Int32Compare(val1, val2, sortItem.SortDirection);
                }
                else
                {
                    string str1 = albumItem1.Items[columnIndex].ToString();
                    string str2 = albumItem2.Items[columnIndex].ToString();

                    result = StringCompare(str1, str2, sortItem.SortDirection);
                }

                if (result != 0)
                {
                    return(result);
                }
            }

            return(result);
        }
예제 #11
0
        public void SetPlayPositionMS(int position)
        {
            int ret;

            StringBuilder retValue = new StringBuilder(200);

            ret = mciSendString("status " + deviceName + " position", retValue, 200, IntPtr.Zero);

            int totalPosition = Misc.Atoi(retValue.ToString());

            int trackNumber = GetTrackNumberByPosition(totalPosition);

            Play(this.CDInfo.Tracks[trackNumber].StartTime + position, 0);
        }
예제 #12
0
        public void SetField(Field field, string newValue)
        {
            switch (field)
            {
            case Field.ArtistCDName:
                AlbumArtist = newValue;
                break;

            case Field.ArtistTrackName:
                Artist = newValue;
                break;

            case Field.ComposerTrackName:
                Composer = newValue;
                break;

            case Field.TrackTitle:
                Title = newValue;
                break;

            case Field.Title:
                Album = newValue;
                break;

            case Field.TrackCategory:
                Genre = newValue;
                break;

            case Field.TrackNumber:
                TrackNumber = Misc.Atoi(newValue);
                break;

            case Field.TrackYearRecorded:
                Year = Misc.Atoi(newValue);
                break;

            case Field.TrackComment:
                Comment = newValue;
                break;

            case Field.TrackRating:
                Rating = Misc.Atoi(newValue);
                break;
            }
        }
        private List <ChartValue> StatisticArtistGroupBySexCount()
        {
            List <ChartValue> chartValues = this.StatisticSqlGeneral("SELECT Count(1) AS Anzahl, PersonGroup.Sex As ColName " +
                                                                     "FROM PersonGroup " +
                                                                     "GROUP BY PersonGroup.Sex;", false);

            foreach (ChartValue chartValue in chartValues)
            {
                if (string.IsNullOrEmpty(chartValue.Name))
                {
                    chartValue.Name = StringTable.Undefined;
                }
                else
                {
                    chartValue.Name = DataBase.GetNameOfPersonGroupSex((SexType)Misc.Atoi(chartValue.Name));
                }
            }

            return(chartValues);
        }
예제 #14
0
        public int GetPlayPositionMS()
        {
            int ret;

            StringBuilder retValue = new StringBuilder(200);

            ret = mciSendString("status " + deviceName + " position", retValue, 200, IntPtr.Zero);

            if (ret != 0)
            {
                return(0);
            }

            int totalPosition = Misc.Atoi(retValue.ToString());

            int trackNumber = GetTrackNumberByPosition(totalPosition);

            int trackPosition = totalPosition - this.CDInfo.Tracks[trackNumber].StartTime;

            return(trackPosition);
        }
예제 #15
0
        private void GetTrack()
        {
            if (CD == null || ReadOnly)
            {
                return;
            }
            Track track = CD.Tracks[CurrentTrack];

            track.Artist   = textBoxArtistTrack.Text;
            track.Title    = textBoxTitleTrack.Text;
            track.Composer = textBoxComposerTrack.Text;
            track.Codes    = textBoxCodesTrack.Text;
            if (comboBoxCategoryTrack.SelectedItem != null)
            {
                track.Category = comboBoxCategoryTrack.SelectedItem.ToString();
            }
            else
            {
                track.Category = "";
            }

            track.Length   = Misc.ParseTimeString(textBoxLengthTrack.Text);
            track.Language = comboBoxLanguageTrack.Text;
            track.Bpm      = (int)numericUpDownBpmTrack.Value;

            track.YearRecorded = Misc.Atoi(textBoxYearRecordedTrack.Text);

            track.Comment   = textBoxCommentTrack.Text;
            track.Soundfile = textBoxSoundfileTrack.Text;
            track.Rating    = ratingControlTrack.Value;
            track.Lyrics    = textBoxLyricsTrack.Text;

            track.UserField1 = userFieldsTrack.GetValue(0);
            track.UserField2 = userFieldsTrack.GetValue(1);
            track.UserField3 = userFieldsTrack.GetValue(2);
            track.UserField4 = userFieldsTrack.GetValue(3);
            track.UserField5 = userFieldsTrack.GetValue(4);
        }
        private List <ChartValue> StatisticArtistTrackGroupByArtistArtCount()
        {
            List <ChartValue> chartValues = this.StatisticSqlGeneral("SELECT Count(1) AS Anzahl, PersonGroup.Type As ColName " +
                                                                     "FROM PersonGroup, Track " +
                                                                     "WHERE (((PersonGroup.PersonGroupID)=[Track].[ArtistID])) " +
                                                                     "GROUP BY PersonGroup.Type;", false);

            foreach (ChartValue chartValue in chartValues)
            {
                if (string.IsNullOrEmpty(chartValue.Name))
                {
                    chartValue.Name = StringTable.Undefined;
                }
                else
                {
                    chartValue.Name = DataBase.GetNameOfPersonGroupType((PersonGroupType)Misc.Atoi(chartValue.Name));
                }
            }

            return(chartValues);
        }
예제 #17
0
        public static SoundFileInformation GetSoundFileInformation(string filename)
        {
            SoundFileInformation sfInfo = new SoundFileInformation();

            try
            {
                if (string.IsNullOrEmpty(filename) || !File.Exists(filename))
                {
                    return(sfInfo);
                }

                ID3Info id3Info = new ID3Info(filename, true);

                int id3Version = Settings.Current.UseID3Version;

                if (id3Info.ID3v1Info != null && id3Info.ID3v1Info.HaveTag && id3Version != 1)
                {
                    sfInfo.Artist      = id3Info.ID3v1Info.Artist.Trim();
                    sfInfo.Title       = id3Info.ID3v1Info.Title.Trim();
                    sfInfo.Comment     = id3Info.ID3v1Info.Comment.Trim();
                    sfInfo.Album       = id3Info.ID3v1Info.Album.Trim();
                    sfInfo.Year        = id3Info.ID3v1Info.Year.Trim();
                    sfInfo.Genre       = MapID3GenreToHitbaseGenre(id3Info.ID3v1Info.Genre);
                    sfInfo.TrackNumber = id3Info.ID3v1Info.TrackNumber;
                    sfInfo.ID3Version  = 1;
                }

                if (id3Info.ID3v2Info != null && id3Info.ID3v2Info.HaveTag && id3Version != 0)
                {
                    sfInfo.Artist  = id3Info.ID3v2Info.GetTextFrame("TPE1").Trim();
                    sfInfo.Title   = id3Info.ID3v2Info.GetTextFrame("TIT2").Trim();
                    sfInfo.Comment = id3Info.ID3v2Info.GetTextFrame("COMM").Trim();
                    sfInfo.Album   = id3Info.ID3v2Info.GetTextFrame("TALB").Trim();
                    sfInfo.Year    = id3Info.ID3v2Info.GetTextFrame("TYER").Trim();
                    String trackNumber = id3Info.ID3v2Info.GetTextFrame("TRCK");
                    sfInfo.TrackNumber = Misc.Atoi(trackNumber);
                    sfInfo.Genre       = id3Info.ID3v2Info.GetTextFrame("TCON").Trim();
                    sfInfo.Composer    = id3Info.ID3v2Info.GetTextFrame("TCOM").Trim();
                    sfInfo.Language    = id3Info.ID3v2Info.GetTextFrame("TLAN").Trim();

                    // Das mit dem Rating geht irgendwie anders. Erst mal raus
                    //string rating = id3Info.ID3v2Info.GetTextFrame("POPM").Trim();
                    //sfInfo.Rating = Misc.Atoi(rating);

                    string bpm = id3Info.ID3v2Info.GetTextFrame("TBPM").Trim();
                    sfInfo.BPM = Misc.Atoi(bpm);

                    string length = id3Info.ID3v2Info.GetTextFrame("TLEN");
                    if (Misc.Atoi(length) > 0)
                    {
                        sfInfo.Length = Misc.Atoi(length);
                    }

                    sfInfo.Images = new List <byte[]>();
                    if (id3Info.ID3v2Info.AttachedPictureFrames.Items.Length > 0)
                    {
                        ID3.ID3v2Frames.BinaryFrames.BinaryFrame binaryFrame = id3Info.ID3v2Info.AttachedPictureFrames.Items[0];
                        foreach (AttachedPictureFrame apf in id3Info.ID3v2Info.AttachedPictureFrames.Items)
                        {
                            sfInfo.Images.Add(apf.Data.ToArray());
                        }
                    }

                    sfInfo.ID3Version = 2;
                }

                if (sfInfo.Length == 0)
                {
                    FMOD.Sound  sound  = null;
                    FMOD.RESULT res    = SoundEngine.FMODSystem.createStream(filename, FMOD.MODE.OPENONLY, ref sound);
                    uint        length = 0;
                    if (sound != null)
                    {
                        sound.getLength(ref length, FMOD.TIMEUNIT.MS);
                        sound.release();

                        sfInfo.Length = (int)length;
                    }
                }
            }
            catch
            {
                // Zuerst mal hier alle Fehler ignorieren.
            }

            return(sfInfo);
        }
예제 #18
0
        private void FillArtistList()
        {
            Cursor.Current = Cursors.WaitCursor;

            personGroup.PersonGroup.Clear();
            personGroupAdapter.Fill(personGroup.PersonGroup);

            personGroupListBox.Items.Clear();
            personGroupTable.TableModel.Rows.Clear();

            foreach (PersonGroupDataSet.PersonGroupRow row in personGroup.PersonGroup)
            {
                // Leeren Interpreten nicht anzeigen. Kann schon mal angelegt werden.
                if (string.IsNullOrEmpty(row.Name))
                {
                    continue;
                }

                if (personGroupListBox.Visible)
                {
                    try
                    {
                        personGroupListBox.Items.Add(row);
                    }
                    catch
                    {
                    }
                }
                else
                {
                    XPTable.Models.Row newRow = new XPTable.Models.Row();
                    newRow.Cells.Add(new XPTable.Models.Cell(row.Name));
                    newRow.Cells.Add(new XPTable.Models.Cell(row.SaveAs));
                    newRow.Cells.Add(new XPTable.Models.Cell(DataBase.GetNameOfPersonGroupType((PersonGroupType)(row.IsTypeNull() ? 0 : row.Type))));
                    newRow.Cells.Add(new XPTable.Models.Cell(DataBase.GetNameOfPersonGroupSex((SexType)(row.IsSexNull() ? 0 : row.Sex))));
                    newRow.Cells.Add(new XPTable.Models.Cell(row.Country));

                    string date = row.IsBirthDayNull() ? "" : Misc.FormatDate(row.BirthDay);
                    XPTable.Models.Cell cellBirthDay = new XPTable.Models.Cell(date);
                    if (row.IsBirthDayNull())
                    {
                        cellBirthDay.Data = null;
                    }
                    else
                    {
                        cellBirthDay.Data = Misc.Atoi(row.BirthDay);
                    }
                    newRow.Cells.Add(cellBirthDay);

                    date = row.IsDayOfDeathNull() ? "" : Misc.FormatDate(row.DayOfDeath);
                    XPTable.Models.Cell cellDayOfDeath = new XPTable.Models.Cell(date);
                    if (row.IsDayOfDeathNull())
                    {
                        cellDayOfDeath.Data = null;
                    }
                    else
                    {
                        cellDayOfDeath.Data = Misc.Atoi(row.DayOfDeath);
                    }
                    newRow.Cells.Add(cellDayOfDeath);

                    newRow.Cells.Add(new XPTable.Models.Cell(row.URL));

                    XPTable.Models.Cell cellImageFilename = new XPTable.Models.Cell(row.IsImageFilenameNull() ? "" : row.ImageFilename);
                    if (row.IsImageFilenameNull())
                    {
                        cellImageFilename.Data = null;
                    }
                    else
                    {
                        cellImageFilename.Data = row.ImageFilename;
                    }
                    newRow.Cells.Add(cellImageFilename);

                    newRow.Cells.Add(new XPTable.Models.Cell(row.Comment));
                    newRow.Cells.Add(new XPTable.Models.Cell(""));
                    newRow.Tag = row;
                    personGroupTable.TableModel.Rows.Add(newRow);
                }
            }

            toolStripLabelCount.Text = String.Format(StringTable.NumberOfPersonsGroups, personGroup.PersonGroup.Count);

            Cursor.Current = Cursors.Default;

            if (personGroupListBox.Visible)
            {
                //personGroupListBox.Sorted = false;
                //personGroupListBox.Sorted = true;
            }
        }
예제 #19
0
        private void LoadFromFileM3U(string filename)
        {
            string[] allLines = File.ReadAllLines(filename, Encoding.UTF8);

            if (allLines[0] != "#EXTM3U")            // Das ist eine M3U-datei
            {
                return;
            }

            ClearAll();

            String sM3UPath = Path.GetDirectoryName(filename);

            String artist = "";
            String title  = "";
            int    length = 0;

            foreach (string sLine in allLines)
            {
                if (sLine == "#EXTM3U")        // Das ist eine M3U-datei
                {
                    continue;
                }

                if (sLine.Left(1) == "#")
                {
                    if (sLine.Left(8) == "#EXTINF:")
                    {
                        String str = sLine.Mid(8);

                        length = Misc.Atoi(str) * 1000;
                        int iPos = str.IndexOf(",");
                        if (iPos >= 0)
                        {
                            int hyphenLength = 3;
                            str  = str.Mid(iPos + 1);
                            iPos = str.IndexOf(" - ");
                            if (iPos < 0)
                            {
                                iPos         = str.IndexOf("-");
                                hyphenLength = 1;
                            }
                            if (iPos > 0)
                            {
                                artist = str.Left(iPos);
                                artist.Trim();
                                title = str.Mid(iPos + hyphenLength);
                                title.Trim();
                            }
                        }
                    }
                }
                else
                {
                    //String sAbsFilename;
                    String sPath = Path.Combine(sM3UPath, sLine);
                    //PathCanonicalize(sAbsFilename.GetBuffer(_MAX_PATH), sPath);
                    //sAbsFilename.ReleaseBuffer();
                    AddTrack(sPath, length, artist, title);

                    // Damit die Animation schöner aussieht, hier eine kleine Verzögerung. Kann man
                    // eventuell noch verbessern, indem man das Pause nur für die sichtbaren Elemente macht.
                    System.Threading.Thread.Sleep(10);
                }
            }
        }
        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;
            }));
        }
예제 #21
0
        public TrackDataView(DataBase db, CDQueryDataSet cdQuery, Condition condition, SortFieldCollection sortedFields, FieldCollection fields)
        {
            // Zunächst die Spalten definieren
            for (int col = 0; col < fields.Count; col++)
            {
                AddField(db, fields[col]);
            }

            if (sortedFields != null)
            {
                for (int col = 0; col < sortedFields.Count; col++)
                {
                    Field field = GetRealSortField(sortedFields[col].Field);

                    AddField(db, field);
                }
            }

            if (condition != null)
            {
                // Jetzt noch die Spalten für die Condition definieren
                for (int col = 0; col < condition.Count; col++)
                {
                    if (!fieldsValueDictionary.ContainsKey(condition[col].Field))
                    {
                        AddField(db, condition[col].Field);
                    }
                }
            }

            // Für die ID des Tracks auch noch eine Spalte vorsehen
            DataColumn dc = new DataColumn();

            dc.Caption  = "TrackID";
            dc.DataType = typeof(int);
            dataTable.Columns.Add(dc);
            TrackIDColumnName = dc.ColumnName;
            fieldsValueDictionary.Add(Field.TrackID, TrackIDColumnName);
            fieldsStringDictionary.Add(Field.TrackID, TrackIDColumnName);

            // Für die ID der CD auch noch eine Spalte vorsehen
            DataColumn dcCD = new DataColumn();

            dcCD.Caption  = "CDID";
            dcCD.DataType = typeof(int);
            dataTable.Columns.Add(dcCD);
            CDIDColumnName = dcCD.ColumnName;
            fieldsValueDictionary.Add(Field.CDID, CDIDColumnName);
            fieldsStringDictionary.Add(Field.CDID, CDIDColumnName);

            // Für die ID des Interpreten auch noch eine Spalte vorsehen
            DataColumn dcArtist = new DataColumn();

            dcArtist.Caption  = "ArtistID";
            dcArtist.DataType = typeof(int);
            dataTable.Columns.Add(dcArtist);
            ArtistIDColumnName = dcArtist.ColumnName;

            // Für die ID des CD-Interpreten auch noch eine Spalte vorsehen
            DataColumn dcCDArtist = new DataColumn();

            dcCDArtist.Caption  = "ArtistCDID";
            dcCDArtist.DataType = typeof(int);
            dataTable.Columns.Add(dcCDArtist);
            ArtistCDIDColumnName = dcCDArtist.ColumnName;

            // Alle Inhalte füllen
            for (int i = 0; i < cdQuery.Track.Count; i++)
            {
                object[] values   = new object[fieldsToRead.Count * 2 + 4];
                int      colCount = 0;

                for (int col = 0; col < fieldsToRead.Count; col++)
                {
                    object rawValue = cdQuery.Track[i].GetValueByField(db, fieldsToRead[col]);

                    string stringValue = CDQueryDataSet.TrackRow.GetStringByValue(db, fieldsToRead[col], rawValue);

                    values[colCount++] = stringValue;

                    if (Settings.Current.SortArchiveNumberNumeric && fieldsToRead[col] == Field.ArchiveNumber)
                    {
                        rawValue = Misc.Atoi((string)rawValue);
                    }

                    values[colCount++] = rawValue;
                }

                values[colCount++] = cdQuery.Track[i].TrackID;
                values[colCount++] = cdQuery.Track[i].CDID;
                values[colCount++] = cdQuery.Track[i].ArtistID;
                values[colCount++] = cdQuery.Track[i].CDRow.ArtistID;

                dataTable.Rows.Add(values);
            }

            // Sortierung definieren
            string sortString = "";

            foreach (SortField sortField in sortedFields)
            {
                Field field = GetRealSortField(sortField.Field);

                if (fieldsStringDictionary.ContainsKey(field))
                {
                    if (!string.IsNullOrEmpty(sortString))
                    {
                        sortString += ", ";
                    }

                    // Bei einigen Feldern wird nach Wert sortiert, bei den meisten nach der String-Repräsentation
                    if (SortFieldByValue(db, field))
                    {
                        sortString += fieldsValueDictionary[field];
                    }
                    else
                    {
                        sortString += fieldsStringDictionary[field];
                    }

                    if (sortField.SortDirection == SortDirection.Descending)
                    {
                        sortString += " DESC";
                    }
                }
            }

            dataTable.DefaultView.Sort = sortString;

            if (condition != null)
            {
                string filterString = "";
                // Filter definieren
                foreach (SingleCondition cond in condition)
                {
                    if (!string.IsNullOrEmpty(filterString))
                    {
                        if (cond.Logical == Logical.Or)
                        {
                            filterString += " OR ";
                        }
                        else
                        {
                            filterString += " AND ";
                        }
                    }

                    if (fieldsStringDictionary.ContainsKey(cond.Field))
                    {
                        if (DataBase.GetTypeByField(cond.Field) == typeof(string))
                        {
                            if (cond.Field != Field.Date && cond.Field != Field.ArchiveNumber)
                            {
                                filterString += fieldsStringDictionary[cond.Field];
                            }
                            else
                            {
                                filterString += fieldsValueDictionary[cond.Field];
                            }

                            filterString += " " + Condition.GetNameOfOperatorForFilter(cond.Operator) + " ";

                            string val = cond.Value.ToString();

                            val = val.Replace("'", "''");
                            if (cond.Operator == Operator.Contains || cond.Operator == Operator.NotContains)
                            {
                                filterString += "'%" + val + "%'";
                            }
                            else
                            {
                                if (cond.Operator == Operator.StartsWith)
                                {
                                    filterString += "'" + val + "%'";
                                }
                                else
                                {
                                    filterString += "'" + val + "'";
                                }
                            }
                        }
                        else
                        {
                            filterString += fieldsValueDictionary[cond.Field];

                            filterString += " " + Condition.GetNameOfOperatorForFilter(cond.Operator) + " ";

                            filterString += cond.Value.ToString();
                        }
                    }
                }

                dataTable.DefaultView.RowFilter = filterString;
            }

            resultDataTable = dataTable.DefaultView.ToTable();
        }
예제 #22
0
        private static string GetSqlCondition(DataBase db, Condition condition)
        {
            string stringCondition = "";

            int     index       = 0;
            Logical lastLogical = Logical.None;

            foreach (SingleCondition singleCondition in condition)
            {
                if (singleCondition.Field == Field.None)
                {
                    continue;
                }

                string columnField = GetColumn(db, singleCondition.Field);

                string opName = Condition.GetNameOfOperatorForFilter(singleCondition.Operator);

                string singleCondString = columnField + " " + opName + " ";

                bool conditionValid = false;

                if (singleCondition.Operator != Operator.NotEmpty && singleCondition.Operator != Operator.Empty)
                {
                    if (DataBase.GetTypeByField(singleCondition.Field) == typeof(string))
                    {
                        string val = "";

                        if (singleCondition.Value != null)
                        {
                            val = singleCondition.Value.ToString();

                            if (singleCondition.Field == Field.Date)
                            {
                                val = db.ParseDate(val);
                            }
                        }

                        val = val.Replace("'", "''");
                        if (singleCondition.Operator == Operator.Contains || singleCondition.Operator == Operator.NotContains)
                        {
                            singleCondString += "'%" + val + "%'";
                        }
                        else
                        {
                            if (singleCondition.Operator == Operator.StartsWith)
                            {
                                singleCondString += "'" + val + "%'";
                            }
                            else
                            {
                                singleCondString += "'" + val + "'";
                            }
                        }

                        conditionValid = true;
                    }
                    else
                    {
                        if (singleCondition.Value != null)
                        {
                            if (DataBase.GetTypeByField(singleCondition.Field) == typeof(int))
                            {
                                if (singleCondition.Value is string && (singleCondition.Field == Field.TotalLength || singleCondition.Field == Field.TrackLength))
                                {
                                    singleCondString += Misc.ParseTimeString(singleCondition.Value.ToString()).ToString();
                                }
                                else
                                {
                                    singleCondString += Misc.Atoi(singleCondition.Value.ToString()).ToString();
                                }

                                conditionValid = true;
                            }
                            else if (DataBase.GetTypeByField(singleCondition.Field) == typeof(bool))
                            {
                                int intValue = 0;
                                if (Int32.TryParse(singleCondition.Value.ToString(), out intValue))
                                {
                                    // Bei bool-Feldern nur nach 0 und 1 suchen können
                                    if (intValue == 0 || intValue == 1)
                                    {
                                        singleCondString += intValue.ToString();
                                        conditionValid    = true;
                                    }
                                }
                            }
                            else
                            {
                                singleCondString += singleCondition.Value.ToString();
                                conditionValid    = true;
                            }
                        }
                    }
                }
                else
                {
                    if (singleCondition.Operator == Operator.Empty)
                    {
                        singleCondString = string.Format("({0} IS NULL OR {0}='')", columnField);
                        conditionValid   = true;
                    }
                    if (singleCondition.Operator == Operator.NotEmpty)
                    {
                        singleCondString = string.Format("({0} IS NOT NULL AND {0}<>'')", columnField);
                        conditionValid   = true;
                    }
                }

                if (conditionValid)
                {
                    if (index > 0)
                    {
                        if (lastLogical == Logical.Or)
                        {
                            stringCondition += " OR ";
                        }
                        else
                        {
                            stringCondition += " AND ";
                        }
                    }

                    stringCondition += singleCondString;
                }

                lastLogical = singleCondition.Logical;

                index++;
            }

            return(stringCondition);
        }
        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;
            }));
        }
예제 #24
0
        private void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                DataGridRow row = VisualTreeExtensions.FindParent <DataGridRow>(e.OriginalSource as DependencyObject);
                if (row == null)
                {
                    return;
                }

                switch (CurrentViewMode)
                {
                case MainControls.CurrentViewMode.ArtistTable:
                case MainControls.CurrentViewMode.ComposerTable:
                {
                    OpenSelectedPersonGroup();

                    break;
                }

                case MainControls.CurrentViewMode.YearTable:
                {
                    TrackListItem tli = dataGrid.SelectedItem as TrackListItem;

                    int year = Misc.Atoi(tli.Title);

                    AddViewCommandParameters addViewParams = new AddViewCommandParameters();
                    addViewParams.Condition = new DataBaseEngine.Condition();
                    addViewParams.Condition.Add(new SingleCondition()
                        {
                            Field = Field.TrackYearRecorded, Operator = Operator.Equal, Value = year, Logical = Logical.Or
                        });
                    addViewParams.Condition.Add(new SingleCondition()
                        {
                            Field = Field.YearRecorded, Operator = Operator.Equal, Value = year
                        });

                    addViewParams.ImageResourceString = "Calendar.png";
                    addViewParams.Title    = tli.Title;
                    addViewParams.ViewMode = MainControls.CurrentViewMode.MyMusicDetails;

                    CatalogViewCommands.AddView.Execute(addViewParams, Application.Current.MainWindow);
                    e.Handled = true;
                    break;
                }

                case MainControls.CurrentViewMode.RatingTable:
                {
                    TrackListItem tli = dataGrid.SelectedItem as TrackListItem;

                    int rating = Misc.Atoi(tli.Title);

                    AddViewCommandParameters addViewParams = new AddViewCommandParameters();
                    addViewParams.Condition = new DataBaseEngine.Condition();
                    addViewParams.Condition.Add(new SingleCondition()
                        {
                            Field = Field.TrackRating, Operator = Operator.Equal, Value = rating
                        });

                    addViewParams.ImageResourceString = "Star.png";
                    addViewParams.Title    = tli.Title;
                    addViewParams.ViewMode = MainControls.CurrentViewMode.MyMusicDetails;

                    CatalogViewCommands.AddView.Execute(addViewParams, Application.Current.MainWindow);
                    e.Handled = true;
                    break;
                }

                case MainControls.CurrentViewMode.GenreTable:
                {
                    TrackListItem tli = dataGrid.SelectedItem as TrackListItem;

                    string genre = tli.Title;

                    AddViewCommandParameters addViewParams = new AddViewCommandParameters();
                    addViewParams.Condition = new DataBaseEngine.Condition();
                    addViewParams.Condition.Add(new SingleCondition(Field.Category, Operator.Equal, genre, Logical.Or));
                    addViewParams.Condition.Add(new SingleCondition(Field.TrackCategory, Operator.Equal, genre));

                    addViewParams.ImageResourceString = "Category.png";
                    addViewParams.Title    = tli.Title;
                    addViewParams.ViewMode = MainControls.CurrentViewMode.MyMusicDetails;

                    CatalogViewCommands.AddView.Execute(addViewParams, Application.Current.MainWindow);
                    e.Handled = true;
                    break;
                }
                }
            }
        }
예제 #25
0
        public string GetValue(int fieldNumber)
        {
            if (contentControl[fieldNumber] != null)
            {
                switch (userFields[fieldNumber].Type)
                {
                case UserFieldType.Number:
                {
                    if (!string.IsNullOrEmpty(contentControl[fieldNumber].Text))
                    {
                        return(Misc.Atoi(contentControl[fieldNumber].Text).ToString());
                    }
                    else
                    {
                        return("");
                    }
                }

                case UserFieldType.Boolean:
                    if (UsedAsFilter)
                    {
                        switch (((ComboBox)contentControl[fieldNumber]).SelectedIndex)
                        {
                        case 0:
                            return("");

                        case 1:
                            return("0");

                        case 2:
                            return("1");

                        default:
                            return("");
                        }
                    }
                    else
                    {
                        if (((CheckBox)contentControl[fieldNumber]).Checked)
                        {
                            return("1");
                        }
                        else
                        {
                            return("0");
                        }
                    }
                    break;

                case UserFieldType.Currency:
                    if (((TextBoxCurrency)contentControl[fieldNumber]).Value == 0)
                    {
                        return("");
                    }
                    else
                    {
                        return(((TextBoxCurrency)contentControl[fieldNumber]).Value.ToString());
                    }

                case UserFieldType.Date:
                    return(((TextBoxDate)contentControl[fieldNumber]).Value);

                default:
                    return(contentControl[fieldNumber].Text);
                }
            }

            return("");
        }