예제 #1
0
 public SearchResult(ArtistModel model)
 {
     Id = model.Id;
     Name = string.Format("{0}, {1}", model.LastName, model.FirstName);
     Bio = model.Biography;
     Type = SearchResultType.Artist.ToString();
 }
예제 #2
0
        private void UpdateArtistsTreeView(Task<Indexes> task)
        {
            switch (task.Status)
            {
                case TaskStatus.RanToCompletion:
                    Dispatcher.Invoke(() =>
                    {
                        ArtistItems.Clear();

                        if (task.Result == null || task.Result.Items == null)
                            return;

                        foreach (Index index in task.Result.Items)
                        {
                            var artistItem = new ArtistModel { Name = index.Name };

                            foreach (Artist artist in index.Artists)
                                artistItem.Children.Add(new ArtistModel { Name = artist.Name, Artist = artist });

                            ArtistItems.Add(artistItem);
                        }
                    });
                    break;
            }
        }
예제 #3
0
        public IHttpActionResult Get(int id)
        {
            var artist = this.data.Artists.Get(id);

            if (artist == null)
            {
                return(NotFound());
            }

            var artistModel = ArtistModel.FromArtist(artist);

            return(Ok(artistModel));
        }
예제 #4
0
        public IEnumerable <ArtistModel> GetAll()
        {
            var entities = this.artistRepository.GetAll();

            List <ArtistModel> models = new List <ArtistModel>();

            foreach (var entity in entities)
            {
                models.Add(ArtistModel.CreateFromArtistEntity(entity));
            }

            return(models);
        }
예제 #5
0
        public async Task <ServiceResult> Update(ArtistModel model)
        {
            var serviceResult = new ServiceResult();
            var result        = await _artistRepository.Update(model);

            serviceResult.Success = result.Success;
            if (!result.Success)
            {
                serviceResult.Error.Code        = ErrorStatusCode.BudRequest;
                serviceResult.Error.Description = result.Message;
            }
            return(serviceResult);
        }
예제 #6
0
        private void OnToArtist(object sender, RoutedEventArgs e)
        {
            if (!(TracksDataGrid.SelectedItem is ITrack track))
            {
                return;
            }
            var artist = new ArtistModel(track.Artist)
            {
                Id = track.ArtistId
            };

            ToArtist?.Invoke(this, new ArtistEventArgs(artist));
        }
예제 #7
0
    /// <summary>
    /// This function is responsable for extracting the Artist model from SpotifyArtistsSearchResult
    /// I'm not using the Automapper here as this logic is more related to the Spotify client
    /// </summary>
    public List <ArtistModel> GetArtistsNamesList()
    {
        List <ArtistModel> artists = new List <ArtistModel>();

        foreach (var artist in SpotifyArtistsSearchResult.Items)
        {
            ArtistModel ar = new ArtistModel();
            ar.Id   = artist.Id;
            ar.Name = artist.Name;
            artists.Add(ar);
        }
        return(artists);
    }
        public void DeleteAlbumArtists(List <ArtistModel> artists)
        {
            ArtistModel beforeArtist = new ArtistModel();

            foreach (var artist in artists)
            {
                if (artist != beforeArtist)
                {
                    _context.Artists.Remove(artist);
                }
                beforeArtist = artist;
            }
        }
        // GET api/Artists/5
        public ArtistModel GetArtist(int id)
        {
            ArtistModel artist = repository.All()
                                 .Where(x => x.ArtistId == id)
                                 .Select(ArtistModel.FromArtist).FirstOrDefault();

            if (artist == null)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
            }

            return(artist);
        }
예제 #10
0
        public AjaxResponseModel Update(ArtistModel model, string userId)
        {
            var resultModel = new AjaxResponseModel();

            try
            {
                var artist = _context.MstArtists.Include(x => x.ArtistDepartments)
                             .FirstOrDefault(x => x.Cd == model.Cd);

                if (artist != null)
                {
                    artist.Code         = model.Code.Trim();
                    artist.Name         = model.Name.Trim();
                    artist.ItemName     = model.ItemName.Trim();
                    artist.CategoryName = model.NameCategory.Trim();
                    artist.NameKana     = model.NameKana.Trim();
                    artist.IsFavorited  = model.IsFavorited;
                    artist.UpdateDate   = DateTime.Now;
                    artist.UpdateUserId = userId;

                    Update(artist);

                    if (artist.ArtistDepartments != null)
                    {
                        // remove department of artist
                        _context.ArtistDepartments.RemoveRange(artist.ArtistDepartments);

                        // add department agian for artist
                        List <ArtistDepartment> result = AddNewArtistDepartments(model, model.Cd);

                        _context.ArtistDepartments.AddRange(result);
                    }

                    _context.SaveChanges();

                    resultModel.Status  = true;
                    resultModel.Message = "編集に成功しました。";
                    return(resultModel);
                }

                resultModel.Status  = false;
                resultModel.Message = "作家が見つかりません。";
                return(resultModel);
            }
            catch (Exception)
            {
                resultModel.Status  = false;
                resultModel.Message = "作家の編集に失敗しました。";
                return(resultModel);
            }
        }
        public async Task <IActionResult> Create([Bind("Name,Description,FullName,Order,Active,IconUrl,ImageUrl,ThumbUrl")] ArtistModel artistModel, IFormFile IconUrlFile, IFormFile ImageUrlFile, IFormFile ThumbUrlFile)
        {
            //check the model is valid
            if (ModelState.IsValid)
            {
                artistModel.Active       = true;
                artistModel.CreationTime = DateTime.UtcNow;
                artistModel.Guid         = Guid.NewGuid().ToString();

                #region Upload File to azure storage

                List <IFormFile> allFiles = new List <IFormFile> {
                    IconUrlFile, ImageUrlFile, ThumbUrlFile
                };

                foreach (IFormFile file in allFiles)
                {
                    if (file == null)
                    {
                        continue;
                    }

                    //create file class to use uploading files
                    AzureBlobFile azureBlobFile = new AzureBlobFile(Enums.InterfaceFileTypes.Artist,
                                                                    file,
                                                                    await file.GetBytes(),
                                                                    artistModel.Name,
                                                                    string.Empty,
                                                                    Configuration.GetConnectionString("AccessKey"),
                                                                    Configuration.GetConnectionString("ContainerName"));

                    //create azure storace service
                    BlobStorageService objBlobService = new BlobStorageService(azureBlobFile.AccessKey, azureBlobFile.ContainerName);

                    //upload file to azure storage
                    string uploadedFileName = objBlobService.UploadFileToBlob(azureBlobFile);

                    //Set azure storage file nime into the model property
                    Helper.Helper.UpdateProperty(artistModel, azureBlobFile.PropertyName, uploadedFileName);
                }

                #endregion

                _context.Add(artistModel);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }

            return(View(artistModel));
        }
예제 #12
0
        public IHttpActionResult AddArtist(ArtistModel _model)
        {
            Artist newArtist = new Artist()
            {
                artistId = _model.artistId,
                name     = _model.name,
                surname  = _model.surname,
                contact  = _model.contact
            };

            db.Artist.Add(newArtist);
            db.SaveChanges();
            return(Ok());
        }
        public List <ArtistModel> GetTrimedArtists(string artists)
        {
            string[] styTab  = artists.Split(",");
            var      artList = new List <ArtistModel>();

            for (int i = 0; i < styTab.Length; i++)
            {
                var ar = new ArtistModel();
                ar.Name = styTab[i].Trim();
                artList.Add(ar);
            }

            return(artList);
        }
        public async Task Save_ForMultipleSongsWhenNewArtistIsCreated_UpdatesSongCorrectly()
        {
            // Arrange

            var oldArtist = new ArtistModel {
                Id = new ItemId("1"), Name = "Old Artist"
            };

            var mocker = CreateMocker(artists: new[] { oldArtist }, genres: Array.Empty <GenreModel>());
            var target = mocker.CreateInstance <EditSongPropertiesViewModel>();

            var song1 = new SongModel
            {
                Id     = new ItemId("1"),
                Artist = oldArtist,
            };

            var song2 = new SongModel
            {
                Id     = new ItemId("2"),
                Artist = oldArtist,
            };

            await target.Load(new[] { song1, song2, }, CancellationToken.None);

            // Act

            target.Artist        = null;
            target.NewArtistName = "New Artist";

            await target.Save(CancellationToken.None);

            // Assert

            var artistServiceMock = mocker.GetMock <IArtistsService>();
            Func <ArtistModel, bool> checkArtist = x => x.Name == "New Artist";

            artistServiceMock.Verify(x => x.CreateArtist(It.Is <ArtistModel>(y => checkArtist(y)), It.IsAny <CancellationToken>()), Times.Once);

            Func <SongModel, Action <SongModel>, bool> verifySongUpdate = (song, updateAction) =>
            {
                updateAction(song);
                return(song.Artist.Name == "New Artist");
            };
            var songServiceMock = mocker.GetMock <ISongsService>();

            songServiceMock.Verify(x => x.UpdateSong(It.IsAny <SongModel>(), It.IsAny <Action <SongModel> >(), It.IsAny <CancellationToken>()), Times.Exactly(2));
            songServiceMock.Verify(x => x.UpdateSong(song1, It.Is <Action <SongModel> >(y => verifySongUpdate(song1, y)), It.IsAny <CancellationToken>()), Times.Once);
            songServiceMock.Verify(x => x.UpdateSong(song2, It.Is <Action <SongModel> >(y => verifySongUpdate(song2, y)), It.IsAny <CancellationToken>()), Times.Once);
        }
예제 #15
0
        public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary <string, object> state)
        {
            uint id = 0;

            if (!uint.TryParse(parameter.ToString(), out id))
            {
                NavigationService.Navigate(typeof(Views.LibraryPage));
            }
            Artist = ArtistModel.GetNew(id);
            if (Artist.Profile == null)
            {
                await Net.WebApi.Instance.GetArtistInfo(Artist);
            }
        }
        //get artistID
        public int GetArtistID(ArtistModel thisArtist)
        {
            int newArtistID;

            DbCommand get_Artist = db.GetStoredProcCommand("get_Artist");

            db.AddInParameter(get_Artist, "artistName", DbType.String, thisArtist.artistName);
            db.AddOutParameter(get_Artist, "artistID", DbType.Int32, sizeof(int));
            db.ExecuteScalar(get_Artist);
            newArtistID = (Int32)db.GetParameterValue(get_Artist, "@artistID");


            return(Convert.ToInt32(newArtistID));
        }
예제 #17
0
        public MainWindow()
        {
            var connStr = ConnectionFactory.GetConnectionString();

            Artists = Data.Collection.GetArtists(connStr);
            var artist = new ArtistModel()
            {
                ArtistId = 1, Name = "New Artists"
            };

            Artists.Add(artist);

            InitializeComponent();
        }
예제 #18
0
        public IAsyncAction GetArtistInfo(ArtistModel artist, bool cover = false)
        {
            //TODO: 艺人专辑http://www.xiami.com/app/xiating/artist-album2?id= 相似艺人http://www.xiami.com/app/xiating/artist-similar?id=
            //TODO: 艺人专辑、艺人歌曲列表都采用增量加载
            if (artist.XiamiID == 0)
            {
                throw new ArgumentException("ArtistModel未设置ID");
            }
            return(Run(async token =>
            {
                try
                {
                    LogService.DebugWrite($"Get info of Artist {artist.XiamiID}", nameof(WapApi));

                    var gettask = HttpHelper.GetAsync($"http://www.xiami.com/app/xiating/artist?id={artist.XiamiID}");
                    token.Register(() => gettask.Cancel());
                    var content = await gettask;
                    HtmlDocument doc = new HtmlDocument();
                    doc.LoadHtml(content);

                    var body = doc.DocumentNode.SelectSingleNode("//div[@id='artist']");
                    artist.Name = body.SelectSingleNode(".//h2").InnerText;
                    artist.AliasName = body.SelectSingleNode(".//p").InnerText;
                    var area = body.SelectSingleNode(".//p[2]");
                    if (area != null)
                    {
                        artist.Name = area.InnerText.Remove(0, 3);
                    }

                    if (artist.Art.Host == "")
                    {
                        var art = body.SelectSingleNode(".//img").GetAttributeValue("src", AlbumModel.SmallDefaultUri);
                        artist.Art = new Uri(art);
                        artist.ArtFull = new Uri(art.Replace("_1", ""));
                    }

                    var songlist = ParseArtistSongs(body.SelectSingleNode(".//ul[@class='playlist']")).ToArray();//只计算一次count
                    artist.HotSongs = new PageItemsCollection <SongModel>(songlist, (pageindex, c) => GetArtistSongsPage(artist.XiamiID, pageindex, c));
                    artist.Albums = new PageItemsCollection <AlbumModel>(16, (pageindex, c) => GetArtistAlbumPage(artist.XiamiID, pageindex, c));

                    LogService.DebugWrite($"Finish Getting info of Artist {artist.XiamiID}", nameof(WapApi));
                }
                catch (Exception e)
                {
                    LogService.ErrorWrite(e, nameof(WapApi));
                    throw e;
                }
            }));
        }
예제 #19
0
        public IHttpActionResult Add(ArtistModel artist)
        {
            if (!this.ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Artist artistToAdd = Mapper.Map <ArtistModel, Artist>(artist);

            this.Db.Artists.Add(artistToAdd);
            this.Db.SaveChanges();
            artist.Id = artistToAdd.Id;

            return(Ok(artistToAdd));
        }
예제 #20
0
        public IHttpActionResult Post(ArtistModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest("Invalid Artist data."));
            }

            var newArtist = Mapper.Map <Artist>(model);

            this.data.Artists.Add(newArtist);

            this.data.SaveChanges();

            return(this.Ok());
        }
        internal void Edit(Guid id, string title, ArtistModel artist, StyleModel style, int year, string description, string type, float price, bool availability)
        {
            var item = _dbContext.Artworks.First(x => x.Id == id);

            item.Title        = title;
            item.Artist       = artist;
            item.Style        = style;
            item.Year         = year;
            item.Description  = description;
            item.Type         = type;
            item.Price        = price;
            item.Availability = availability;

            _dbContext.SaveChanges();
        }
예제 #22
0
        public IHttpActionResult Add(ArtistModel artistModel)
        {
            if (!this.ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var newAtist = ArtistModel.ToArtist(artistModel);

            this.data.Artists.Add(newAtist);
            this.data.SaveChanges();

            artistModel.ID = newAtist.ID;
            return(Ok(artistModel));
        }
예제 #23
0
        public IHttpActionResult Add(ArtistModel artistModel)
        {
            if (!this.ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var newAtist = ArtistModel.ToArtist(artistModel);

            this.data.Artists.Add(newAtist);
            this.data.SaveChanges();

            artistModel.ID = newAtist.ID;
            return Ok(artistModel);
        }
예제 #24
0
        public void ChangeDB(EFContext context, JObject jsonFile, List <int> ids)
        {
            if (ids.Count != 2)
            {
                if (Successor != null)
                {
                    Successor.ChangeDB(context, jsonFile, ids);
                }
            }
            else
            {
                try
                {
                    foreach (var a in jsonFile["artists"])
                    {
                        var artist = new ArtistModel()
                        {
                            Name  = a["name"].ToString(),
                            Album = new AlbumModel()
                        };
                        artist.Album.ID = ids[1];

                        context.Artists.Add(artist);
                        context.SaveChanges();
                        if (Successor != null)
                        {
                            Successor.ChangeDB(context, jsonFile, ids);
                        }
                    }
                }
                catch (Exception)
                {
                    var artist = new ArtistModel()
                    {
                        Name  = "no data",
                        Album = new AlbumModel()
                    };
                    artist.Album.ID = ids[1];

                    context.Artists.Add(artist);
                    context.SaveChanges();
                    if (Successor != null)
                    {
                        Successor.ChangeDB(context, jsonFile, ids);
                    }
                }
            }
        }
        public IHttpActionResult Post([FromBody] ArtistModel artist)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }
            else
            {
                var result = Mapper.Map <Artist>(artist);

                this.artists.Add(result);
                this.artists.SaveChanges();

                return(this.Created(this.Url.ToString(), result));
            }
        }
예제 #26
0
        public IHttpActionResult Delete(int id)
        {
            var existingArtist = this.data.Artists.Get(id);

            if (existingArtist == null)
            {
                return(BadRequest(BabRequestMessage));
            }

            var artistModel = ArtistModel.FromArtist(existingArtist);

            this.data.Artists.Delete(existingArtist);
            this.data.SaveChanges();

            return(Ok(artistModel));
        }
예제 #27
0
        public static ArtistModel ToArtistModel(Artist artist)
        {
            if (artist == null)
            {
                return(null);
            }

            var artistModel = new ArtistModel
            {
                Id          = artist.Id,
                Name        = artist.Name,
                Description = artist.Description
            };

            return(artistModel);
        }
        public ArtistListViewModel(TypeListEnum type, string filter = "All")
        {
            ArtistStatuses = DataAccess.GetStatusList();
            ArtistScores   = DataAccess.GetScoreList();
            TypeList       = type;
            ArtistList     = DataAccess.GetArtistList(TypeList, filter);

            FirstLetterFilterList = Enumerable.Range('A', 26).Select(x => (char)x).Select(c => c.ToString()).ToList();
            FirstLetterFilterList.Insert(0, "All");
            FirstLetterFilterList.Add("0-9");
            FirstLetterFilterList.Add("*");

            ArtistSelected = new ArtistModel();
            UpdateArtistUpToDateCommand = new RelayCommand(UpdateArtistUpToDate, param => canExecute);
            FirstLetterFilterCommand    = new RelayCommand(FirstLetterFilter, param => canExecute);
        }
예제 #29
0
        public static Artist ToArtist(ArtistModel artistModel)
        {
            if (artistModel == null)
            {
                return(null);
            }

            var artist = new Artist
            {
                Id          = artistModel.Id,
                Name        = artistModel.Name,
                Description = artistModel.Description
            };

            return(artist);
        }
예제 #30
0
        public async Task <ArtistModel> UpdateArtistAsync(ArtistModel artist)
        {
            var a = _mapper.Map <Artist>(artist);

            a = _unitOfWork.Artists.Update(a);
            await _unitOfWork.CommitAsync();

            var f = new List <Expression <Func <Artist, bool> > >()
            {
                (x => x.ArtistId == a.ArtistId)
            };

            a = await _unitOfWork.Artists.GetOneAsync(f, null, false);

            return(_mapper.Map <ArtistModel>(a));
        }
        /// <summary>
        /// GET: ArtistModel/Details/5
        /// </summary>
        /// <param name="id">artistId</param>
        /// <returns></returns>
        public async Task <ActionResult> Details(long?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            //finds the artist
            ArtistModel artist = await _context.Artists.FindAsync(id);

            if (artist == null)
            {
                return(NotFound());
            }
            return(View(artist));
        }
예제 #32
0
        public async Task <ActionResult <IEnumerable <ArtistDownloadModel> > > SearchArtistAsync(string name)
        {
            try
            {
                var artists = (await ArtistModel.PerformArtistSearch(
                                   name,
                                   _spotifyAPICredentials).ConfigureAwait(false)).Artists.Items;

                return(Ok(MapEntitiesToDownloadModels <FullArtist, ArtistDownloadModel>(artists)));
            }
            catch (Exception err)
            {
                LogException(err);
                return(Problem("There was an error searching for the artist from Spotify", statusCode: 500, type: err.GetType().ToString()));
            }
        }
예제 #33
0
            public static Artist AddArtist(ArtistModel artist)
            {
                HttpResponseMessage response = client.PostAsJsonAsync("api/artists", artist).Result;
                var myArtist = response.Content.ReadAsAsync <Artist>().Result;

                if (response.IsSuccessStatusCode)
                {
                    Console.WriteLine("Artist added: {0}", artist.Name);
                }
                else
                {
                    Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
                }

                return(myArtist);
            }
예제 #34
0
        public IHttpActionResult Create(ArtistModel artist)
        {
            if (!this.ModelState.IsValid)
            {
                return BadRequest(this.ModelState);
            }

            var newArtist = new Artist()
            {
                Name = artist.Name,
                Country = artist.Country,
                DateOfBirth = artist.DateOfBirth
            };

            this.data.Artists.Add(newArtist);
            this.data.SaveChanges();

            artist.ArtistId = newArtist.ArtistId;
            return Ok(artist);
        }
예제 #35
0
        public IHttpActionResult Update(int id, ArtistModel artist)
        {
            if (!this.ModelState.IsValid)
            {
                return BadRequest(this.ModelState);
            }

            var artistToUpdate = this.data.Artists
                                     .All()
                                     .FirstOrDefault(a => a.ArtistId == id);

            if (artistToUpdate == null)
            {
                return BadRequest("The artist with id: " + id + " does not exists.");
            }

            artistToUpdate.Name = artist.Name;
            artistToUpdate.Country = artist.Country;
            artistToUpdate.DateOfBirth = artist.DateOfBirth;
            this.data.SaveChanges();

            artist.ArtistId = artistToUpdate.ArtistId;
            return Ok(artist);
        }
예제 #36
0
        private void LoadCollection()
        {
            PerfTracer perfTracer = new PerfTracer("LibraryModel Loading");

            IEnumerable<SongTable> allSongs = DatabaseManager.Current.FetchSongs();
            foreach (SongTable songEntry in allSongs)
            {
                SongModel songModel = new SongModel(songEntry);
                _allSongs.Add(songModel);
                songLookupDictionary.Add(songModel.SongId, songModel);                
            }

            perfTracer.Trace("Songs Added");

            IEnumerable<AlbumTable> allAlbums = DatabaseManager.Current.FetchAlbums();
            foreach (AlbumTable albumEntry in allAlbums)
            {
                AlbumModel albumModel = new AlbumModel(albumEntry);
                _allAlbums.Add(albumModel);
                albumLookupDictionary.Add(albumModel.AlbumId, albumModel);
            }

            perfTracer.Trace("Albums Added");

            IEnumerable<ArtistTable> allArtists = DatabaseManager.Current.FetchArtists();
            foreach (ArtistTable artistEntry in allArtists)
            {
                ArtistModel artistModel = new ArtistModel(artistEntry);
                _allArtists.Add(artistModel);
                artistLookupDictionary.Add(artistModel.ArtistId, artistModel);
            }

            perfTracer.Trace("Artists Added");

            IEnumerable<PlaylistTable> allPlaylists = DatabaseManager.Current.FetchPlaylists();
            foreach (PlaylistTable playlistEntry in allPlaylists)
            {
                PlaylistModel playlistModel = new PlaylistModel(playlistEntry);
                Playlists.Add(playlistModel);
                playlistLookupDictionary.Add(playlistModel.PlaylistId, playlistModel);

                playlistModel.Populate();
            }

            perfTracer.Trace("Playlists Added");

            IEnumerable<MixTable> allMixes = DatabaseManager.Current.FetchMixes();
            foreach (MixTable mixEntry in allMixes)
            {
                MixModel mixModel = new MixModel(mixEntry);
                Mixes.Add(mixModel);
                mixLookupDictionary.Add(mixModel.MixId, mixModel);

                mixModel.Populate();
            }

            perfTracer.Trace("Mixes Added");
        }
예제 #37
0
 public CommissionModel(ApplicationUser c, ArtistModel a)
 {
     Commissioner = c;
     Artist = a;
     CommissionedOn = DateTime.Now;
 }
예제 #38
0
        private ArtistViewModel LookupArtist(ArtistModel artist)
        {
            if (artist == null) return null;

            if (ArtistLookupMap.ContainsKey(artist.ArtistId))
            {
                return ArtistLookupMap[artist.ArtistId];
            }
            else
            {
                ArtistViewModel newArtistViewModel = new ArtistViewModel(artist);

                ArtistLookupMap.Add(newArtistViewModel.ArtistId, newArtistViewModel);
                ArtistCollection.Add(newArtistViewModel, newArtistViewModel.SortName);

                return newArtistViewModel;
            }
        }
예제 #39
0
        public ArtistModel LookupArtistByName(string artistName, bool createIfNotFound = true)
        {
            ArtistTable artistTable = DatabaseManager.Current.LookupArtist(artistName);

            if (artistTable == null)
            {
                if (createIfNotFound)
                {
                    ArtistTable newArtist = new ArtistTable(artistName);
                    DatabaseManager.Current.AddArtist(newArtist);

                    ArtistModel artistModel = new ArtistModel(newArtist);
                    artistLookupDictionary.Add(artistModel.ArtistId, artistModel);

                    return artistModel;
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return LookupArtistById(artistTable.ArtistId);
            }
        }
예제 #40
0
        public IHttpActionResult Update(int id, ArtistModel artistModel)
        {
            if (!this.ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var existingArtist = this.data.Artists.Get(id);
            if (existingArtist == null)
            {
                return BadRequest(BabRequestMessage);
            }

            ArtistModel.ToArtist(artistModel, existingArtist);

            this.data.Artists.Update(existingArtist);
            this.data.SaveChanges();

            return Ok(artistModel);
        }
예제 #41
0
파일: WebApi.cs 프로젝트: cmpute/XiamiTing
 internal void ParseMusicianInfo(ArtistModel artist, HtmlNode contentnode, bool cover = true)
 {
     System.Diagnostics.Debug.Write("尚未完成获取音乐人信息");
 }
예제 #42
0
파일: WebApi.cs 프로젝트: cmpute/XiamiTing
        public IAsyncAction GetArtistInfo(ArtistModel artist, bool cover = true)
        {
            if (artist.XiamiID == 0)
                throw new ArgumentException("ArtistModel未设置ID");
            return Run(async token =>
            {
                try
                {
                    LogService.DebugWrite($"Get info of Artist {artist.XiamiID}", nameof(WebApi));
                    
                    List<Task> process = new List<Task>();
                    var gettask = HttpHelper.GetAsync($"http://www.xiami.com/artist/{artist.XiamiID}");
                    token.Register(() => gettask.Cancel());
                    var content = await gettask;
                    HtmlDocument doc = new HtmlDocument();
                    doc.LoadHtml(content);
                    //System.Diagnostics.Debugger.Break();
                    if (artist.IsXiamiMusician)
                    { ParseMusicianInfo(artist, doc.DocumentNode.SelectSingleNode("/html/body/div[@id='Glory']"), cover); return; }
                    else if (doc.DocumentNode.SelectSingleNode("//h1").SelectSingleNode("../i[@title='音乐人']") != null)
                    {
                        artist.IsXiamiMusician = true;
                        ParseMusicianInfo(artist, doc.DocumentNode.SelectSingleNode("/html/body/div[@id='Glory']"), cover); return;
                    }
                    var body = doc.DocumentNode.SelectSingleNode("/html/body/div[@id='page']");
                    process.Add(Task.Run(async () =>
                    {
                        var pgettask = HttpHelper.GetAsync($"http://www.xiami.com/artist/profile/id/{artist.XiamiID}");
                        token.Register(() => pgettask.Cancel());
                        var pcontent = await pgettask;
                        HtmlDocument pdoc = new HtmlDocument();
                        pdoc.LoadHtml(pcontent);
                        var pdiv = pdoc.DocumentNode.SelectSingleNode(".//div[@class='profile']");
                        pdiv.RemoveChild(pdiv.SelectSingleNode("./h3"));
                        artist.Profile = pdiv.InnerHtml;
                    }, token));
                    process.Add(Task.Run(() =>
                    {
                        var id = artist.XiamiID;
                        artist.HotSongs = new PageItemsCollection<SongModel>(20, ParseArtistTopSongs(
                            body.SelectSingleNode(".//div[@class='common_sec']/table")).ToList(),
                            async (page, ptoken) =>
                            {
#if DEBUG
                                System.Diagnostics.Debugger.Break();
#endif
                                var pgettask = HttpHelper.GetAsync($"http://www.xiami.com/artist/top/id/{id}/page/{page}");
                                ptoken.Register(() => pgettask.Cancel());
                                var pcontent = await pgettask;
                                HtmlDocument pdoc = new HtmlDocument();
                                pdoc.LoadHtml(pcontent);
                                var pbody = pdoc.DocumentNode.SelectSingleNode("/html/body/div[@id='page']");
                                return ParseArtistTopSongs(pbody.SelectSingleNode(".//table[@class]")).ToList();
                            });
                    }, token));
                    var title = body.SelectSingleNode(".//h1");
                    if (artist.Name == null || cover)
                        artist.Name = title.FirstChild.InnerText;
                    if (artist.Description == null || cover)
                        if (title.LastChild.Name == "span")
                            artist.Description = title.LastChild.InnerText;
                    var detail = body.SelectSingleNode(".//table");

                    foreach (var item in detail.SelectNodes("./tr"))
                    {
                        var tds = item.SelectNodes("./td");
                        switch (tds[0].InnerText)
                        {
                            case "地区:":
                                artist.Area = tds[1].InnerText;
                                break;
                            case "风格:":
                                artist.Genre = tds[1].SelectNodes("./a").Select((node) =>
                                  {
                                      var gen = GenreModel.GetNew(ParseXiamiID(node.GetAttributeValue("href", "/0")));
                                      gen.Name = node.InnerText;
                                      return gen;
                                  }).ToList();
                                break;
                        }
                    }
                    if (artist.Art == null || cover)
                    {
                        var image = body.SelectSingleNode(".//img");
                        artist.Art = new Uri(image.GetAttributeValue("src", ArtistModel.SmallDefaultUri));
                        artist.ArtFull = new Uri(image.GetAttributeValue("src", ArtistModel.LargeDefaultUri).Replace("_2", ""));
                    }

                    await Task.WhenAll(process);
                    LogService.DebugWrite($"Finish Getting info of Artist {artist.XiamiID}", nameof(WebApi));
                }
                catch (Exception e)
                {
                    LogService.ErrorWrite(e, nameof(WebApi));
#if DEBUG
                    System.Diagnostics.Debugger.Break();
#endif
                    throw e;
                }
            });
        }
예제 #43
0
        public ArtistModel LookupArtistById(int artistId)
        {
            if (artistLookupDictionary.ContainsKey(artistId))
            {
                return artistLookupDictionary[artistId];
            }
            else
            {
                ArtistTable artistTable = DatabaseManager.Current.LookupArtistById(artistId);

                if (artistTable == null)
                {
                    return null;
                }
                else
                {
                    ArtistModel artistModel = new ArtistModel(artistTable);
                    artistLookupDictionary.Add(artistModel.ArtistId, artistModel);

                    return artistModel;
                }
            }
        }
예제 #44
0
 public void Delete(ArtistModel model)
 {
     _session.Delete(model);
 }
예제 #45
0
 public void Add(ArtistModel model)
 {
     _session.Add(model);
 }
예제 #46
0
파일: WapApi.cs 프로젝트: cmpute/XiamiTing
        public IAsyncAction GetArtistInfo(ArtistModel artist, bool cover = false)
        {
            //TODO: 艺人专辑http://www.xiami.com/app/xiating/artist-album2?id= 相似艺人http://www.xiami.com/app/xiating/artist-similar?id=
            //TODO: 艺人专辑、艺人歌曲列表都采用增量加载
            if (artist.XiamiID == 0)
                throw new ArgumentException("ArtistModel未设置ID");
            return Run(async token =>
            {
                try
                {
                    LogService.DebugWrite($"Get info of Artist {artist.XiamiID}", nameof(WapApi));
                    
                    var gettask = HttpHelper.GetAsync($"http://www.xiami.com/app/xiating/artist?id={artist.XiamiID}");
                    token.Register(() => gettask.Cancel());
                    var content = await gettask;
                    HtmlDocument doc = new HtmlDocument();
                    doc.LoadHtml(content);

                    var body = doc.DocumentNode.SelectSingleNode("//div[@id='artist']");
                    artist.Name = body.SelectSingleNode(".//h2").InnerText;
                    artist.AliasName = body.SelectSingleNode(".//p").InnerText;
                    var area = body.SelectSingleNode(".//p[2]");
                    if (area != null) artist.Name = area.InnerText.Remove(0, 3);

                    if (artist.Art.Host == "")
                    {
                        var art = body.SelectSingleNode(".//img").GetAttributeValue("src", AlbumModel.SmallDefaultUri);
                        artist.Art = new Uri(art);
                        artist.ArtFull = new Uri(art.Replace("_1", ""));
                    }
                    
                    var songlist = ParseArtistSongs(body.SelectSingleNode(".//ul[@class='playlist']")).ToArray();//只计算一次count
                    artist.HotSongs = new PageItemsCollection<SongModel>(songlist, (pageindex, c) => GetArtistSongsPage(artist.XiamiID, pageindex, c));
                    artist.Albums = new PageItemsCollection<AlbumModel>(16, (pageindex, c) => GetArtistAlbumPage(artist.XiamiID, pageindex, c));
                    
                    LogService.DebugWrite($"Finish Getting info of Artist {artist.XiamiID}", nameof(WapApi));
                }
                catch (Exception e)
                {
                    LogService.ErrorWrite(e, nameof(WapApi));
                    throw e;
                }
            });
        }
예제 #47
0
 public void Edit(ArtistModel model)
 {
     var record = _session.Single<Artist>(x=>x.Id == model.Id);
     record.Update(model);
     _session.CommitChanges();
 }
예제 #48
0
 public IAsyncAction GetArtistInfo(ArtistModel artist, bool cover = false)
 {
     throw new NotImplementedException();
 }