예제 #1
0
        public override string ToString(FormatType format, object supplement = null)
        {
            bool   withoutConstant = SongGenreSplash == null;
            string splashAndDxData = $"{SongGenreSplash?.Be($"\n分类:{SongGenreSplash}")}" +
                                     $"{ToSplashRatingString()?.Be("\n难度:{0}", true)}" +
                                     $"{ToSplashConstantString()?.Be("\n定数:{0}", true)}" +
                                     $"{ToRatingString()?.Be("\n旧难度:{0}", true)}" +
                                     $"{ToConstantString()?.Be("\n旧定数:{0}", true)}";

            switch (format)
            {
            case FormatType.Brief:
                return($"{SongId}.{SongTitle}({SongType}) {(withoutConstant ? $"*[{ToSplashRatingString()}]" : $"[{ToSplashConstantString()}]")}");

            case FormatType.Detail:
                return($"{JacketUrl?.Be(new KouImage(JacketUrl, this).ToKouResourceString())}" +     //BUG 需要解决翻页可能会使得图片资源字符串裂开的问题
                       $"{SongId}.{SongTitle} [{SongType}]" +
                       splashAndDxData +
                       Version?.Be($"\n版本:{Version}") +
                       SongArtist?.Be($"\n曲师:{SongArtist}") +
                       SongBpm?.Be($"\nBPM:{SongBpm}") +
                       SongLength?.Be($"\n歌曲长度:{SongLength}") +
                       Remark?.Be($"\n注:{Remark}"));
            }
            return(null);
        }
예제 #2
0
        public override string ToString(FormatType format, object supplement = null)
        {
            string constantDesc = GetBriefConstant();
            string designerDesc = GetBriefChartDesigner();
            string allNotesDesc = GetBriefAllNotes();

            switch (format)
            {
            case FormatType.Brief:
                return($"{SongId}.{SongTitle}{constantDesc?.Be($" [{constantDesc}]")}");

            case FormatType.Detail:
                return($"{JacketUrl?.Be(new KouImage(JacketUrl, this).ToKouResourceString())}" +
                       $"{SongId}.{SongTitle}\n" +
                       constantDesc?.Be($"定数:{constantDesc}\n") +
                       Aliases?.Be($"别名:{Aliases.Select(p => p.Alias).ToStringJoin(',')}\n") +
                       SongArtist?.Be($"曲师:{SongArtist}\n") +
                       designerDesc?.Be($"谱师:{designerDesc}\n") +
                       JacketDesigner?.Be($"画师:{JacketDesigner}\n") +
                       SongBpm?.Be($"BPM:{SongBpm}\n") +
                       SongLength?.Be($"歌曲长度:{SongLength}\n") +
                       SongPack?.Be($"曲包:{SongPack.GetKouEnumFirstName().ToTitleCase()}\n") +
                       allNotesDesc?.Be($"总键数:{allNotesDesc}\n"));
            }
            return(null);
        }
예제 #3
0
        public override string ToString(FormatType format, object supplement = null)
        {
            switch (format)
            {
            case FormatType.Brief:
                return($"{SongId}.{SongTitle} [{ChartRatingClass} {ChartRating}({ChartConstant})]");

            case FormatType.Detail:
                //获取所有歌曲别名
                string allAnotherName = "";
                foreach (var item in PluginArcaeaSong2anothername.Where(x => x.SongId == SongId))
                {
                    allAnotherName += item.AnotherName.AnotherName + ",";
                }
                allAnotherName = allAnotherName.TrimEnd(',');
                if (allAnotherName.IsNullOrWhiteSpace())
                {
                    allAnotherName = null;
                }
                return($"{SongId}.{SongTitle} [{ChartRatingClass} {ChartConstant}]\n" +
                       allAnotherName?.Be($"别名:{allAnotherName}\n") +
                       SongArtist?.Be($"曲师:{SongArtist}\n") +
                       JacketDesigner?.Be($"画师:{JacketDesigner}\n") +
                       SongBpm?.Be($"BPM:{SongBpm}\n") +
                       SongLength?.Be($"歌曲长度:{SongLength}\n") +
                       SongPack?.Be($"曲包:{SongPack}\n") +
                       ChartDesigner?.Be($"谱师:{ChartDesigner}\n") +
                       ChartAllNotes?.Be($"note总数:{ChartAllNotes}\n地键:{ChartFloorNotes}\n天键:{ChartSkyNotes}\n蛇:{ChartArcNotes}\n长条:{ChartHoldNotes}"));
            }
            return(null);
        }
        public ActionResult DeleteConfirmed(int id)
        {
            SongArtist songArtist = db.SongArtists.Find(id);

            db.SongArtists.Remove(songArtist);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
예제 #5
0
        public async Task <SongArtist> AddSongArtist(SongArtist songArtist)
        {
            await _context.SongArtists.AddAsync(songArtist);

            await _context.SaveChangesAsync();

            return(songArtist);
        }
        public IActionResult Create(SongArtist songArtist)
        {
            if (!UserIsInRole(UserTypeEnum.Admin))
            {
                return(Unauthorized("You are not in role to permit this action"));
            }

            _service.Insert(songArtist);
            return(Ok());
        }
예제 #7
0
        public async Task <int> CreateSongAsync(string songTitle, IList <string> songArtists, string sourceName, string sourceItemId)
        {
            if (songTitle == null || string.IsNullOrWhiteSpace(songTitle))
            {
                throw new ArgumentException("Song title should be non-empty.", nameof(songTitle));
            }

            if (songArtists == null || !songArtists.Any())
            {
                throw new ArgumentException("Artists list should be non-empty.", nameof(songArtists));
            }

            songTitle = songTitle.Trim();

            // TODO: Merge artist names when similar?
            var artists = songArtists.Select(x => x.Trim()).Distinct().ToList();

            var similarSongs = this.songsRepository.AllWithDeleted().Where(x => x.Name == songTitle).Select(x => new { x.Id, Artists = x.Artists.Select(a => a.Artist.Name) }).ToList();

            foreach (var similarSong in similarSongs)
            {
                if (!similarSong.Artists.Except(artists).Any() && !artists.Except(similarSong.Artists).Any())
                {
                    // Found the same song
                    return(similarSong.Id);
                }
            }

            var sourceId = this.sourcesRepository.All().FirstOrDefault(x => x.Name == sourceName)?.Id;
            var dbSong   = new Song {
                Name = songTitle, SourceId = sourceId, SourceItemId = sourceItemId
            };
            var dbSongArtists = new List <SongArtist>();

            for (var index = 0; index < artists.Count; index++)
            {
                var dbArtist = this.artistsRepository.AllWithDeleted().FirstOrDefault(x => x.Name == artists[index])
                               ?? new Artist {
                    Name = artists[index]
                };
                var dbSongArtist = new SongArtist {
                    Artist = dbArtist, Song = dbSong, Order = index + 1
                };
                dbSongArtists.Add(dbSongArtist);
            }

            dbSong.Artists = dbSongArtists;

            await this.songsRepository.AddAsync(dbSong);

            await this.songsRepository.SaveChangesAsync();

            return(dbSong.Id);
        }
 public ActionResult Edit([Bind(Include = "Id,SongId,ArtistId")] SongArtist songArtist)
 {
     if (ModelState.IsValid)
     {
         db.Entry(songArtist).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.ArtistId = new SelectList(db.Artists, "Id", "StageName", songArtist.ArtistId);
     ViewBag.SongId   = new SelectList(db.Songs, "Id", "SongTitle", songArtist.SongId);
     return(View(songArtist));
 }
        // GET: SongArtists/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            SongArtist songArtist = db.SongArtists.Find(id);

            if (songArtist == null)
            {
                return(HttpNotFound());
            }
            return(View(songArtist));
        }
        // GET: SongArtists/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            SongArtist songArtist = db.SongArtists.Find(id);

            if (songArtist == null)
            {
                return(HttpNotFound());
            }
            ViewBag.ArtistId = new SelectList(db.Artists, "Id", "StageName", songArtist.ArtistId);
            ViewBag.SongId   = new SelectList(db.Songs, "Id", "SongTitle", songArtist.SongId);
            return(View(songArtist));
        }
        // POST api/SongArtist
        public HttpResponseMessage PostSongArtist(SongArtist songartist)
        {
            if (ModelState.IsValid)
            {
                db.SongArtists.Add(songartist);
                db.SaveChanges();

                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, songartist);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = songartist.Id }));
                return response;
            }
            else
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }
        }
예제 #12
0
        /// <summary>
        /// 自动格式化歌曲信息
        /// </summary>
        /// <param name="song"></param>
        /// <param name="format"></param>
        /// <returns></returns>
        public string AutoFormatSong(PluginArcaeaSong song)
        {
            if (song == null)
            {
                return(null);
            }
            string info = $"{song.SongTitle} [{song.ChartRatingClass} {song.ChartConstant}]\n" +
                          (SongArtist.IsNullOrWhiteSpace() ? null : song.SongArtist?.Be($"曲师:{song.SongArtist}\n")) +
                          (JacketDesigner.IsNullOrWhiteSpace() ? null : song.JacketDesigner?.Be($"画师:{song.JacketDesigner}\n")) +
                          (SongBPM.IsNullOrWhiteSpace() ? null : song.SongBpm?.Be($"BPM:{song.SongBpm}\n")) +
                          (SongLength.IsNullOrWhiteSpace() ? null : song.SongLength?.Be($"歌曲长度:{ song.SongLength}\n")) +
                          //(song.Song_pack?.Be($"曲包:{song.Song_pack}\n")) +
                          (ChartDesigner.IsNullOrWhiteSpace() ? null : song.ChartDesigner?.Be($"谱师:{song.ChartDesigner}\n")) +
                          (NotesCount.IsNullOrWhiteSpace() ? null : song.ChartAllNotes?.Be($"note总数:{song.ChartAllNotes}\n"));

            return(info.ToString().Trim());
        }
예제 #13
0
        public int CreateSong(string songTitle, IList <string> artists)
        {
            songTitle = songTitle.Trim();
            List <string> songArtists = artists.Select(x => x.Trim()).Distinct().ToList();

            var similarSongs = this.context.Songs
                               .Where(x => x.Name == songTitle)
                               .Select(x => new
            {
                x.Id,
                Artists = x.Artists.Select(a => a.Artist.Name)
            }).ToList();

            foreach (var song in similarSongs)
            {
                if (!song.Artists.Except(songArtists).Any() && !songArtists.Except(song.Artists).Any())
                {
                    return(song.Id);
                }
            }

            Song dbSong = new Song {
                Name = songTitle, CreatedOn = DateTime.UtcNow
            };
            List <SongArtist> dbSongArtists = new List <SongArtist>();

            for (int i = 0; i < songArtists.Count; i++)
            {
                Artist dbArtist = this.context.Artists.FirstOrDefault(a => a.Name == songArtists[i]) ?? new Artist {
                    Name = songArtists[i], CreatedOn = DateTime.UtcNow
                };
                SongArtist dbSongArtist = new SongArtist {
                    Artist = dbArtist, Song = dbSong
                };
                dbSongArtists.Add(dbSongArtist);
            }

            dbSong.Artists = dbSongArtists;

            this.context.Songs.Add(dbSong);
            this.context.SaveChanges();

            return(dbSong.Id);
        }
 public bool Update(SongArtist songArtist)
 {
     _repository.Update(songArtist);
     return(_repository.SaveChanges());
 }
 public bool Insert(SongArtist songArtist)
 {
     _repository.Create(songArtist);
     return(_repository.SaveChanges());
 }
        void ReleaseDesignerOutlets()
        {
            if (BackgroundView != null)
            {
                BackgroundView.Dispose();
                BackgroundView = null;
            }

            if (CloseButton != null)
            {
                CloseButton.Dispose();
                CloseButton = null;
            }

            if (ContentView != null)
            {
                ContentView.Dispose();
                ContentView = null;
            }

            if (FavouriteSongsCollectionView != null)
            {
                FavouriteSongsCollectionView.Dispose();
                FavouriteSongsCollectionView = null;
            }

            if (FavouritesTitle != null)
            {
                FavouritesTitle.Dispose();
                FavouritesTitle = null;
            }

            if (FooterView != null)
            {
                FooterView.Dispose();
                FooterView = null;
            }

            if (MaskView != null)
            {
                MaskView.Dispose();
                MaskView = null;
            }

            if (NextLabel != null)
            {
                NextLabel.Dispose();
                NextLabel = null;
            }

            if (PlayerBlurScreen != null)
            {
                PlayerBlurScreen.Dispose();
                PlayerBlurScreen = null;
            }

            if (PlayingSongCoverImageView != null)
            {
                PlayingSongCoverImageView.Dispose();
                PlayingSongCoverImageView = null;
            }

            if (ProgressView != null)
            {
                ProgressView.Dispose();
                ProgressView = null;
            }

            if (SongArtist != null)
            {
                SongArtist.Dispose();
                SongArtist = null;
            }

            if (SongsQueueTitle != null)
            {
                SongsQueueTitle.Dispose();
                SongsQueueTitle = null;
            }

            if (SongsQueueView != null)
            {
                SongsQueueView.Dispose();
                SongsQueueView = null;
            }

            if (SongTitle != null)
            {
                SongTitle.Dispose();
                SongTitle = null;
            }

            if (SubContentViewClipped != null)
            {
                SubContentViewClipped.Dispose();
                SubContentViewClipped = null;
            }

            if (SunContentView != null)
            {
                SunContentView.Dispose();
                SunContentView = null;
            }

            if (TableView != null)
            {
                TableView.Dispose();
                TableView = null;
            }
        }
예제 #17
0
        public static Song FromDataRecord(IDataRecord dr)
        {
            Song o = new Song();
            int  ordinal;

            o.Id = dr.GetInt32(dr.GetOrdinal("Id"));

            try
            {
                o.ChartRank = dr.GetInt64(dr.GetOrdinal("ChartRank"));
            }
            catch (IndexOutOfRangeException iorx) {
                // Ignore these.
            }

            o.Fullname = dr.GetString(dr.GetOrdinal("Fullname"));

            o.Title = dr.GetString(dr.GetOrdinal("Title"));

            ordinal = dr.GetOrdinal("ArtistsXML");
            if (!dr.IsDBNull(ordinal))
            {
                o.Artists = new List <SongArtist>();
                XDocument doc = XDocument.Parse("<root>" + dr.GetString(ordinal) + "</root>");
                foreach (XElement element in doc.Root.Descendants())
                {
                    Artist artist = new Artist()
                    {
                        Id       = (int)element.Attribute("Id"),
                        Fullname = (string)element.Attribute("Fullname"),
                        Title    = (string)element.Attribute("Title")
                    };
                    SongArtist sa = new SongArtist()
                    {
                        Artist   = artist,
                        RoleSlug = (string)element.Attribute("RoleSlug")
                    };
                    o.Artists.Add(sa);
                }
            }

            ordinal = dr.GetOrdinal("GenreId");
            if (!dr.IsDBNull(ordinal))
            {
                Genre genre = new Genre();
                genre.Id       = dr.GetInt32(ordinal);
                genre.Fullname = dr.GetString(dr.GetOrdinal("GenreFullname"));
                genre.Title    = dr.GetString(dr.GetOrdinal("GenreTitle"));
                o.Genre        = genre;
            }

            //public Decimal[] Ranks { get; set;  }

            ordinal = dr.GetOrdinal("Score");
            o.Score = dr.IsDBNull(ordinal) ? 0 : dr.GetDecimal(ordinal);

            ordinal     = dr.GetOrdinal("DebutRank");
            o.DebutRank = dr.IsDBNull(ordinal) ? 0 : dr.GetDecimal(ordinal);

            ordinal    = dr.GetOrdinal("PeakRank");
            o.PeakRank = dr.IsDBNull(ordinal) ? 0 : dr.GetDecimal(ordinal);

            ordinal    = dr.GetOrdinal("Duration");
            o.Duration = dr.IsDBNull(ordinal) ? 0 : dr.GetInt32(ordinal);

            ordinal = dr.GetOrdinal("DebutDateFullname");
            if (!dr.IsDBNull(ordinal))
            {
                o.DebutDate = new DebutPeriod(dr.GetString(ordinal));
            }

            ordinal = dr.GetOrdinal("Tags");
            o.Tags  = dr.IsDBNull(ordinal) ? "" : dr.GetString(ordinal);

            return(o);
        }
        // PUT api/SongArtist/5
        public HttpResponseMessage PutSongArtist(int id, SongArtist songartist)
        {
            if (!ModelState.IsValid)
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }

            if (id != songartist.Id)
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }

            db.Entry(songartist).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
            }

            return Request.CreateResponse(HttpStatusCode.OK);
        }