public async Task AggregateDataAsync_ValidId_ServiceGetsCalledWithCorrectData()
        {
            // Arrange
            var context      = new SutContext();
            var id           = Guid.NewGuid();
            var artistSearch = new ArtistSearch
            {
                Id       = id,
                Name     = "abcdef",
                SortName = "abc",
                Type     = "something",
                Area     = "a"
            };

            context.ArtistService
            .Setup(x => x.GetArtistAsync(id))
            .ReturnsAsync(artistSearch);

            // Act
            var result = await context.Process.AggregateDataAsync(id);

            // Assert
            context.ArtistService.Verify(x => x.GetArtistAsync(id), Times.Once);
            Assert.AreEqual(id, result.ArtistId, nameof(result.ArtistId));
            Assert.AreEqual("abcdef", result.Name, nameof(result.Name));
        }
示例#2
0
        public void LoadArtists()
        {
            StatusText = "Loading...";

            _worker = new BackgroundWorker();

            _worker.DoWork += (o, args) => args.Result = _artistService.Search(args.Argument.ToString());

            _worker.RunWorkerCompleted += (o, args) =>
            {
                IsLoadButtonEnabled = true;
                LoadButtonContent   = "Search";

                if (args.Cancelled)
                {
                    StatusText = "Operation cancelled !";
                }
                else if (args.Error != null)
                {
                    StatusText = "Error : " + args.Error.Message;
                }
                else
                {
                    StatusText = "Result :";

                    ArtistSearch searchResult = (ArtistSearch)args.Result;
                    Artists = searchResult.Results.ArtistMatches.Artists.Where(a => a.Mbid != "").ToList();
                }
            };

            LoadButtonContent   = "Loading...";
            IsLoadButtonEnabled = false;

            _worker.RunWorkerAsync(QueryText);
        }
        public static void Main()
        {
            while (true)
            {
                Console.WriteLine("Search for album and artists:");

                string searchString = Console.ReadLine();

                IEnumerable <WebArtist> artists = ArtistSearch.SearchFor(searchString);

                Console.WriteLine("---ARTISTS---");
                foreach (var artist in artists)
                {
                    Console.WriteLine("Artist: {0}, Guid: {1}", artist.Name, artist.Id);
                }

                IEnumerable <WebAlbum> albums = AlbumSearch.SearchForAlbum(searchString);

                Console.WriteLine("---ALBUMS---");
                foreach (var album in albums)
                {
                    Console.WriteLine("Artist: {0}, Album: {1}", album.Artist, album.Title);
                }
            }
        }
 private void SearchForArtists(string artist)
 {
     ArtistSearch.SearchForAsync(artist, artists =>
     {
         DispatcherHelper.CheckBeginInvokeOnUI(() => {
             this.SearchResultsViewModel.LoadArtists(artists);
         });
     });
 }
        public void Can_get_multiple_results()
        {
            ArtistSearch artistSearch = Api <ArtistSearch> .Create
                                        .WithParameter("q", "pink")
                                        .WithParameter("page", "1")
                                        .WithParameter("pageSize", "20")
                                        .Please();

            Assert.That(artistSearch.Results.Count, Is.GreaterThan(1));
        }
        public void Can_hit_endpoint_with_fluent_interface()
        {
            ArtistSearch artistSearch = Api <ArtistSearch>
                                        .Create
                                        .WithQuery("pink")
                                        .WithParameter("country", "GB")
                                        .Please();

            Assert.That(artistSearch, Is.Not.Null);
        }
示例#7
0
        public ArtistSearchTests()
        {
            artistSearch = new ArtistSearch(ContentLanguagePreference.Default, db.CreateContext(), new EntryUrlParser());

            var artist1 = db.Save(CreateEntry.Artist(ArtistType.Producer, name: "XenonP"));

            db.SaveNames(artist1);
            db.Save(artist1.CreateWebLink("Twitter", "https://twitter.com/XenonP_XM", WebLinkCategory.Official));
            db.SaveNames(db.Save(CreateEntry.Artist(ArtistType.Producer, name: "Clean Tears")));
            db.SaveNames(db.Save(CreateEntry.Artist(ArtistType.Vocaloid, name: "Hatsune Miku")));
        }
示例#8
0
        public void Can_hit_endpoint_with_paging()
        {
            ArtistSearch artistBrowse = Api <ArtistSearch> .Get
                                        .WithParameter("q", "pink")
                                        .WithParameter("page", "2")
                                        .WithParameter("pageSize", "20")
                                        .Please();

            Assert.That(artistBrowse, Is.Not.Null);
            Assert.That(artistBrowse.Page, Is.EqualTo(2));
            Assert.That(artistBrowse.PageSize, Is.EqualTo(20));
        }
 public string artist(ArtistSearch search)
 {
     try
     {
         result = orm.execObject <Result>(search, "api.admin_artist_search");
     }
     catch (Exception exp)
     {
         errorResult(exp);
     }
     return(formattedResult(result));
 }
示例#10
0
        public ArtistSearchTextBox() : base()
        {
            if (System.ComponentModel.LicenseManager.UsageMode ==
                System.ComponentModel.LicenseUsageMode.Runtime)
            {
                Search = new ArtistSearch(ArtistSearch.Fields.MatchName,
                                          ArtistSearch.Fields.FullNameType,
                                          ArtistSearch.Fields.FullName,
                                          ArtistSearch.Fields.ID);
                UpdateCompletionSource();
            }

            UserAttemptedAddItem    += (sender, e) => AddArtist(Text);
            UserAttemptedDeleteItem += (sender, e) => DeleteArtist(e);
            UserAttemptedRenameItem += (sender, e) => RenameArtist(e, "");
        }
示例#11
0
        public static Artist GetComposer(Artist defaultComposer)
        {
            ArtistSearch s = new ArtistSearch(ArtistSearch.Fields.FullName);

            s.AddTypeToSearch(ArtistSearch.TypeCategory.Composers);

            Inputbox ib = new Inputbox("Choose a composer: ", s.PerformSearchToScalar().ToArray(),
                                       defaultComposer != null ? defaultComposer.GetName(Artist.NameFormats.Last_First) : "",
                                       false);

            if (ib.ShowDialog() == DialogResult.Cancel)
            {
                return(null);
            }
            else
            {
                Artist a = new Artist(ib.SelectedItem.ToString(), "composer");
                return(a);
            }
        }
        public async Task AggregateDataAsync_MixedData_ServiceReturnsCorrectData()
        {
            // Arrange
            var context      = new SutContext();
            var id           = Guid.NewGuid();
            var artistSearch = new ArtistSearch
            {
                Id       = id,
                Name     = "abcdef",
                SortName = "abc",
                Type     = "something",
                Area     = "a"
            };

            // TODO: could refactor and make it data driven
            var works = new[]
            {
                new ArtistWork {
                    Id = new Guid("00000000-0000-0000-0000-000000000001"), Title = "1"
                },
                new ArtistWork {
                    Id = new Guid("00000000-0000-0000-0000-000000000002"), Title = "2"
                },
                new ArtistWork {
                    Id = new Guid("00000000-0000-0000-0000-000000000003"), Title = "3"
                },
                new ArtistWork {
                    Id = new Guid("00000000-0000-0000-0000-000000000004"), Title = "4"
                },
                new ArtistWork {
                    Id = new Guid("00000000-0000-0000-0000-000000000005"), Title = "5"
                },
                new ArtistWork {
                    Id = new Guid("00000000-0000-0000-0000-000000000006"), Title = "6"
                }
            };

            var expectedResults = new Dictionary <string, (string, int)>()
            {
                { "1", ("a", 1) },
                { "2", ("a a", 2) },
示例#13
0
    /// <summary>
    /// Perform artist based search.
    /// </summary>
    /// <param name="maxMaxResults">Number of MaxResults to return</param>
    /// <returns>Collection of album tags</returns>
    /// <remarks>
    /// Method first pulls matched artists and then 
    /// based on this result pulls associated albums. Most searches
    /// should not reach this lookup.
    /// </remarks>
    private List<Metadata> ArtistLookup()
    {
      Trace.WriteLine("Performing artist lookup. Artist: "
                      + Tokens["artist"]);
      
      ArtistSearch search = new ArtistSearch(Tokens["artist"], session);
      search.SpecifyItemsPerPage(MaxResults);
      List<Metadata> tmp = (from artist in search.GetPage((int)Pages.FIRST)
                       from album in artist.GetTopAlbums()
                       select album.Item.ToTag()).ToList<Metadata>();
      MaxResults = MaxResults - tmp.Count();

      Trace.WriteLine("MaxResults: " + tmp.Count());
      return tmp;
    }
示例#14
0
        public Browse()
        {
            InitializeComponent();

            status_reset_timer          = new Timer();
            status_reset_timer.Interval = 6000; // reset status message to "Ready" after 6 sec
            status_reset_timer.Tick    += (sender, e) =>
            {
                this.change_status("Ready", false);
                status_reset_timer.Enabled = false;
            };

            if (System.ComponentModel.LicenseManager.UsageMode ==
                System.ComponentModel.LicenseUsageMode.Runtime)
            {
                artistSearch = new ArtistSearch(ArtistSearch.Fields.ID,
                                                ArtistSearch.Fields.FullName,
                                                ArtistSearch.Fields.MatchName);
                artistSearch.AddTypeToSearch(ArtistSearch.TypeCategory.Composers);

                genreSearch = new GenreSearch(GenreSearch.Fields.ID, GenreSearch.Fields.Name);

                pieceSearch = new PieceSearch(PieceSearch.Fields.ID, PieceSearch.Fields.Name,
                                              PieceSearch.Fields.ParentPieceID);

                SupressUpdate = false;

                UpdateArtistList();
                UpdateGenreList();
                UpdatePieceList(false);
            }

            txbComposer.Focus();

            // hide the tabs of tabControlMode
            Rectangle rect = new Rectangle(tabPageSearch.Left, tabPageSearch.Top, tabPageSearch.Width, tabPageSearch.Height);

            tabControlMode.Region = new Region(rect);

            txbComposer.SetDefaultText(TextBoxDefaultAll);
            txbComposer.PopupWidth    = -1;
            txbComposer.ItemSelected += (sender, e) =>
            {
                UpdateGenreList();
                UpdatePieceList(false);

                if (txbComposer.SelectedItem != null)
                {
                    txbFilter.Focus();
                }
            };
            txbComposer.TextChanged += (sender, e) =>
            {
                SupressUpdate = true;
                txbGenre.ResetText();
                txbFilter.Text = TextBoxDefaultNone;
                SupressUpdate  = false;
            };
            txbComposer.KeyDown += (sender, e) =>
            {
                if (e.KeyData == Keys.Enter)
                {
                    if (txbComposer.SelectedItem != null || !txbComposer.HasText())
                    {
                        txbFilter.Focus();
                    }
                    else
                    {
                        if (AddNewComposer(txbComposer.Text)) // add new composer and set focus to dg if add is successful
                        {
                            dg.Focus();
                        }
                    }
                }
                else if (e.KeyData == Keys.F2 && txbComposer.HighlightedItem != null)
                {
                    //change_status(txbComposer.HighlightedValue.ToString() + txbComposer.HighlightedItem.ToString());
                    int id = int.Parse(txbComposer.HighlightedValue.ToString());
                    txbComposer.HideAutoCompleteList();
                    RenameComposer(id, "");
                }
                else if (e.KeyData == Keys.Delete && txbComposer.HighlightedItem != null)
                {
                    int id = int.Parse(txbComposer.HighlightedValue.ToString());
                    txbComposer.HideAutoCompleteList();
                    DeleteComposer(id);
                }
                else
                {
                    return;
                }

                e.Handled = true;
            };
            //txbComposer.LostFocus += new EventHandler(txb_LostFocus);

            txbGenre.SetDefaultText(TextBoxDefaultAll);
            txbGenre.PopupWidth = -1;
            //txbGenre.LostFocus += txb_LostFocus;
            txbGenre.ItemSelected += (sender, e) => UpdatePieceList(false);

            txbFilter.Text         = TextBoxDefaultNone;
            txbFilter.TextChanged += (sender, e) => UpdatePieceList(false);
            txbFilter.KeyDown     += txb_KeyDown;
            txbFilter.KeyDown     += (sender, e) =>
            {
                if (e.KeyData == Keys.Down)
                {
                    dg.Focus();
                }
            };
            txbFilter.Enter += (sender, e) => txbFilter.SelectAll();

            dg.Rows.Clear();
            dg.CellFormatting += (sender, e) =>
            {
                // highlight the fact that the control is not in focus
                e.CellStyle.SelectionBackColor = ((DataGridView)sender).Focused ?
                                                 SystemColors.Highlight : SystemColors.InactiveCaption;

                // highlight the pieces that are "derived" from other pieces (i.e. a transcription, etc.)
                e.CellStyle.ForeColor = (dg[2, e.RowIndex].Value == null) ?
                                        SystemColors.ControlText : Color.Gray;

                // highlight the cell in edit mode
                if (dg.IsCurrentCellInEditMode && dg.CurrentCell == dg[e.ColumnIndex, e.RowIndex])
                {
                    e.CellStyle.BackColor = CellInEditColor;
                }
            };
            dg.SortCompare += (sender, e) =>
            {
                // use natural sorting
                if (dg[1, e.RowIndex1].Value == null || dg[1, e.RowIndex2].Value == null)
                {
                    return;
                }
                e.SortResult = NaturalSortComparer.Default.Compare(dg[1, e.RowIndex1].Value.ToString(),
                                                                   dg[1, e.RowIndex2].Value.ToString());
                e.Handled = true;
            };
            dg.KeyDown += (sender, e) =>
            {
                if (e.KeyData == Keys.Up || e.KeyData == Keys.Down)
                {
                    IsScrolling = true; // don't fetch data if the user is scrolling fast
                }
                else if (e.KeyCode == Keys.Enter)
                {
                    e.Handled = true;

                    // move to next control
                    if (e.Shift)
                    {
                        tabControl.SelectedTab = tabControl.TabPages[2];
                        tabControl.Focus();
                    }
                    else
                    {
                        if (clbDetail.Items.Count != 0)
                        {
                            clbDetail.SelectedIndex = 0;
                        }
                        if (tabControl.SelectedTab == tabControl.TabPages[0] && clbDetail.Items.Count == 0)
                        {
                            tabControl.SelectedTab = tabControl.TabPages[1]; // goto text edit mode
                        }
                        tabControl.Focus();
                    }
                }
                else if (e.KeyData == Keys.Escape)
                {
                    txbFilter.Focus();
                }
                else if (e.KeyData == (Keys.Home))
                {
                    dg.ClearSelection();
                    dg.CurrentCell          = dg[1, 0];
                    dg.CurrentCell.Selected = true;
                }
                else if (e.KeyData == (Keys.End))
                {
                    dg.ClearSelection();
                    dg.CurrentCell          = dg[1, dg.RowCount - 1];
                    dg.CurrentCell.Selected = true;
                }
            };
            dg.KeyUp += (sender, e) =>
            {
                if (e.KeyData == Keys.Up || e.KeyData == Keys.Down)
                {
                    // resume fetchting data after user stop fast scrolling
                    IsScrolling = false;

                    //force re-selection so that the SelectionChanged event will fire
                    dg.ClearSelection();
                    dg.Rows[dg.CurrentRow.Index].Selected = true;
                }
                else if (e.KeyData == (Keys.Alt | Keys.P))
                {
                    tabControl.SelectedTab = tabControl.TabPages[2];
                    dg.Focus();
                }
                else if (e.KeyData == (Keys.Alt | Keys.M))
                {
                    tabControl.SelectedTab = tabControl.TabPages[0];
                    dg.Focus();
                }
                else if (e.KeyData == (Keys.Control | Keys.E))
                {
                    //start text edit mode
                    tabControl.SelectedTab = tabControl.TabPages[1];
                    tabControl.Focus();
                }
                else if (e.KeyData == Keys.Delete)
                {
                    DeletePiece();
                }
            };
            dg.SelectionChanged += (sender, e) => { if (!IsScrolling)
                                                    {
                                                        UpdateDetail();
                                                    }
            };
            dg.GotFocus += (sender, e) =>
            {
                if (dg.SelectedRows.Count == 0) //auto select first row if nothing is already selected
                {
                    dg.Rows[0].Selected = true;
                }
            };
            dg.CellEndEdit += (sender, e) =>
            {
                dg.CurrentCell = dg[e.ColumnIndex, e.RowIndex];
                if (dg[0, e.RowIndex].Value == null && dg.CurrentCell.Value != null)
                {
                    if (!AddNewPiece(dg.CurrentCell.Value.ToString()))
                    {
                        dg.Rows.Remove(dg.Rows[dg.CurrentCell.RowIndex]);
                    }
                }
                else if (!dg.CurrentRow.IsNewRow)
                {
                    RenamePiece(dg.CurrentCell.Value.ToString());
                }
            };

            clbDetail.KeyDown              += new KeyEventHandler(clbDetail_KeyDown);
            clbDetail.LostFocus            += (sender, e) => clbDetail.ClearSelected();
            clbDetail.SelectedIndexChanged += (sender, e) =>
            {
                // show preview of how the formatted name is like on statusbar
                if (!DetailPaneVisible)
                {
                    return;                     // no need to update UI
                }
                if (clbDetail.SelectedIndex != -1 && currentPiece != null)
                {
                    change_status(currentPiece.FormatDetail(clbDetail.SelectedItem.ToString()));
                }
            };

            // don't focus on the tabs themselves
            tabControl.GotFocus    += (sender, e) => this.SelectNextControl(tabControl, true, true, true, true);
            tabControl.Deselecting += (sender, e) =>
            {
                if (e.TabPage == tabPageDetailEdit)
                {
                    if (string.IsNullOrEmpty(txbEdit.Text.Trim()) || ((currentPiece.Details != null &&
                                                                       string.Join("", currentPiece.Details) == string.Join("", txbEdit.Lines))))
                    {
                        return;
                    }
                    DialogResult ret = MessageBox.Show(
                        "Your changes have not been saved; you want to save the changes?",
                        "Confirmation", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
                    switch (ret)
                    {
                    case DialogResult.Cancel:
                        e.Cancel = true;
                        txbEdit.Focus();
                        break;

                    case DialogResult.No:
                        UpdateDetail();
                        break;

                    case DialogResult.Yes:
                        ChangeDetail(txbEdit.Lines);
                        break;

                    default:
                        break;
                    }
                }
            };

            txbEdit.KeyDown += (sender, e) =>
            {
                if (e.KeyData == Keys.Escape)
                {
                    tabControl.SelectTab(0);
                }
                if (e.KeyData == (Keys.Control | Keys.Enter)) // submit changes and leave edit mode
                {
                    ChangeDetail(txbEdit.Lines);
                    tabControl.SelectTab(0);
                }
                if (e.KeyData == (Keys.Shift | Keys.Enter))
                {
                    ChangeDetail(txbEdit.Lines); // submit changes but not leaving edit mode
                }
            };

            txbEdit.PreviewKeyDown += (sender, e) =>
            {
                if (e.KeyData == (Keys.Shift | Keys.Enter) || e.KeyData == (Keys.Control | Keys.Enter))
                {
                    e.IsInputKey = false; //shift+enter and ctrl+enter is used for special purposes, not input...
                }
            };
            //txbEdit.GotFocus += (sender,e) => txbEdit.Lines = currentPiece.Details;

            pgrid.PropertyValueChanged += (sender, e) =>
            {
                change_status((e.OldValue != null ? e.OldValue.ToString() : "") + " => " + e.ChangedItem.Value.ToString());
                Array.ForEach <object>(pgrid.SelectedObjects, p => ((Piece)p).Commit());
                change_status("Properties updated");
            };
            ((ContainerControl)pgrid).Controls[2].PreviewKeyDown += (sender, e) =>
            {
                if (e.KeyData == Keys.Escape)
                {
                    dg.Focus();
                }
            };
        }