protected void CreateShortcut(ReleaseList remoteRelease) { if (string.IsNullOrEmpty(remoteRelease.ShortcutIcon) || remoteRelease.ShortcutIcon.Trim().Length == 0) { return; } string iconLocation = AppDomain.CurrentDomain.BaseDirectory + remoteRelease.ShortcutIcon; string appName = remoteRelease.AppName; foreach (char invalidChar in Path.GetInvalidFileNameChars()) { appName = appName.Replace(invalidChar, '_'); } string shortcutPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\" + appName + ".lnk"; if (File.Exists(shortcutPath)) { return; } var creator = new ShortcutCreator( appName, AppDomain.CurrentDomain.BaseDirectory + Constants.UpdaterExeName, iconLocation, remoteRelease.Company); creator.CreateOnDesktop(); creator.CreateOnStartMenu(); }
private void WorkerOnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs runWorkerCompletedEventArgs) { if (runWorkerCompletedEventArgs.Error != null) { Application.Exit(); Common.Start(_localRelease, true); return; } _remoteRelease = runWorkerCompletedEventArgs.Result as ReleaseList; if (_localRelease.Compare(_remoteRelease) == 0) { Application.Exit(); Common.Start(_localRelease, false); return; } //Hide(); if (CheckProcessing() != DialogResult.OK) { Application.Exit(); return; } var form = new UpdateForm(_localRelease, _remoteRelease); form.ShowDialog(); }
public ReleaseForm(string buildDir, List <FileListItem> folderAndFiles, ReleaseList releaseList) { InitializeComponent(); _buildDir = buildDir; _folderAndFiles = folderAndFiles; _releaseList = releaseList; }
private void ConnectionFormLoad(object sender, EventArgs e) { string localXmlPath = Path.Combine(Application.StartupPath, Constants.ReleaseConfigFileName); _localRelease = FileUtil.ReadReleaseList(localXmlPath); _worker.RunWorkerAsync(_localRelease.ReleaseUrl + "/" + Constants.ReleaseConfigFileName); }
protected virtual bool BuildReleaseList() { BuildDir = Path.GetDirectoryName(Project.FullName) + "\\bin\\" + SolutionBuild.ActiveConfiguration.Name + "\\"; var cacheDir = Common.GetHostDir() + "\\_Projects\\" + FileUtil.MD5(Project.FullName) + "\\project.xml"; CacheHelper = new CacheHelper <ProjectCache>(); try { ProjectCache = CacheHelper.Get(cacheDir); } catch { ProjectCache = new ProjectCache(); } var files = GatherFiles(BuildDir); ////string releaseFileName = Path.GetDirectoryName(prj.FullName) + "\\" + Common.ReleaseConfigFileName; var releaseFileName = Path.GetDirectoryName(Project.FullName) + "\\bin\\" + Common.ReleaseConfigFileName; if (File.Exists(releaseFileName)) { ReleaseList = FileUtil.ReadReleaseList(releaseFileName); } if (ReleaseList == null) { var icons = Directory.GetFiles(BuildDir, "*.ico"); ReleaseList = new ReleaseList { AppName = _productToRelease.Name, Company = _productToRelease.CompanyName, ApplicationStart = Common.GetAssemblyName(Project) + ".exe", ShortcutIcon = icons.Length > 0 ? Path.GetFileName(icons[0]) : "" }; } ReleaseList.ReleaseVersion = _productToRelease.Version; ReleaseList.MinVersion = _productToRelease.Version; var f = new ReleaseForm(BuildDir, files, ReleaseList); if (f.ShowDialog() == DialogResult.OK) { if (ProjectCache == null) { ProjectCache = new ProjectCache(); } ProjectCache.ExcludeFiles = f.GetExcludedFiles().ToList(); ProjectCache.ExcludeFolders = f.GetExcludedFolders().ToList(); CacheHelper.Save(ProjectCache, cacheDir); return(true); } return(false); }
public void Install(string tempDir, string appDir, ReleaseList releaseList) { if (releaseList.Packaged) { //var d = new UnzipDelegate(ZipHelper.Unzip); //d.BeginInvoke(Path.Combine(tempDir, releaseList.Files[0].FileName), appDir, DoZipCompleted, null); //ZipHelper.Unzip(Path.Combine(tempDir, releaseList.Files[0].FileName), appDir); ZipHelper.Unzip(Path.Combine(tempDir, releaseList.Files[0].FileName), appDir); } else { FileUtil.CopyFiles(tempDir, appDir); } }
public void Write(string clientId, UpdateLog log) { var path = string.Format(_xmlPath, clientId); var dir = Path.GetDirectoryName(path); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var currentLogs = new List <UpdateLog>(); if (File.Exists(path)) { currentLogs = XmlSerializerHelper.LoadObjectFromXml <List <UpdateLog> >(path); if (currentLogs.Count > 0) { var diff = ReleaseList.CompareVersion(currentLogs[0].Version, log.Version); if (diff > 0) { return; } if (diff == 0) { currentLogs[0].Description = log.Description; } else { currentLogs.Insert(0, log); } } else { currentLogs.Insert(0, log); } } else { currentLogs.Insert(0, log); } var xml = XmlSerializerHelper.GetXmlStringFromObject(currentLogs); FileUtil.WriteText(path, xml, Encoding.UTF8); }
public UpdateForm(ReleaseList localRelease, ReleaseList remoteRelease) { InitializeComponent(); btnUpgrade.Focus(); _tempDir = Path.Combine(Path.GetTempPath(), localRelease.AppName); if (!Directory.Exists(_tempDir)) { Directory.CreateDirectory(_tempDir); } _localRelease = localRelease; _remoteRelease = remoteRelease; _updateProxy = Common.GetUpdateProxy(_remoteRelease); _worker = new BackgroundWorker { WorkerReportsProgress = true }; _worker.ProgressChanged += WorkProgressChanged; _worker.DoWork += DoWork; _worker.RunWorkerCompleted += RunWorkerCompleted; }
public static TrackList FromDataTrack(string trackPlayUrl, Data.Track track, int releaseMediaNumber, Release release, Data.Artist artist, Data.Artist trackArtist, string baseUrl, Image trackThumbnail, Image releaseThumbnail, Image artistThumbnail, Image trackArtistThumbnail) { return(new TrackList { DatabaseId = track.Id, Id = track.RoadieId, Track = new DataToken { Text = track.Title, Value = track.RoadieId.ToString() }, Release = ReleaseList.FromDataRelease(release, artist, baseUrl, artistThumbnail, releaseThumbnail), LastPlayed = track.LastPlayed, Artist = ArtistList.FromDataArtist(artist, artistThumbnail), TrackArtist = trackArtist == null ? null : ArtistList.FromDataArtist(trackArtist, trackArtistThumbnail), TrackNumber = track.TrackNumber, MediaNumber = releaseMediaNumber, CreatedDate = track.CreatedDate, LastUpdated = track.LastUpdated, Duration = track.Duration, FileSize = track.FileSize, ReleaseDate = release.ReleaseDate, PlayedCount = track.PlayedCount, Rating = track.Rating, Status = track.Status, Title = track.Title, TrackPlayUrl = trackPlayUrl, Thumbnail = trackThumbnail }); }
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new Form1()); var reList = new ReleaseList { AppName = "Demo", ReleaseVersion = "1.0", Company = "CnSharp", ApplicationStart = "demo.exe" }; var dir = @"C:\Users\Jeremy Chin\Dev\Studio\OpenSource\SharpUpdater\2.1\tests\Demo_V1.0\bin\Debug\"; _rootLength = dir.Length; var files = GatherFiles(dir); var f = new ReleaseForm( dir, files, reList ); Application.Run(f); }
private void ConnectionFormLoad(object sender, EventArgs e) { bool downloaded = false; string newVersionXmlPath = ""; if (!string.IsNullOrEmpty(_tempDir) && _tempDir.Trim().Length > 0) { if (Directory.Exists(_tempDir)) { newVersionXmlPath = Path.Combine(_tempDir, Constants.ReleaseConfigFileName); downloaded = true; } else if (File.Exists(_tempDir) && !string.IsNullOrEmpty(_configFile) && _configFile.Trim().Length > 0) { newVersionXmlPath = _configFile; downloaded = true; } } if (downloaded) { try { _remoteRelease = FileUtil.ReadReleaseList(newVersionXmlPath); lblStatus.Text = Common.GetLocalText("UpdateTo") + "V" + _remoteRelease.ReleaseVersion; Install(); } catch { DialogResult = DialogResult.No; } } else { DialogResult = DialogResult.No; } }
public async Task <Library.Models.Pagination.PagedResult <models.BookmarkList> > List(User roadieUser, PagedRequest request, bool?doRandomize = false, BookmarkType?filterType = null) { var sw = new Stopwatch(); sw.Start(); var result = from b in DbContext.Bookmarks join u in DbContext.Users on b.UserId equals u.Id where b.UserId == roadieUser.Id where filterType == null || b.BookmarkType == filterType select new models.BookmarkList { Comment = b.Comment, Position = b.Position, User = new models.DataToken { Text = u.UserName, Value = u.RoadieId.ToString() }, DatabaseId = b.Id, Id = b.RoadieId, CreatedDate = b.CreatedDate, LastUpdated = b.LastUpdated, Type = b.BookmarkType, BookmarkTargetId = b.BookmarkTargetId }; var sortBy = string.IsNullOrEmpty(request.Sort) ? request.OrderValue(new Dictionary <string, string> { { "CreatedDate", "DESC" } }) : request.OrderValue(); var rowCount = result.Count(); var rows = result.OrderBy(sortBy).Skip(request.SkipValue).Take(request.LimitValue).ToArray(); var user = await GetUser(roadieUser.UserId); foreach (var row in rows) { switch (row.Type) { case BookmarkType.Artist: var artist = DbContext.Artists.FirstOrDefault(x => x.Id == row.BookmarkTargetId); if (artist == null) { continue; } row.Bookmark = new models.DataToken { Text = artist.Name, Value = artist.RoadieId.ToString() }; row.Artist = models.ArtistList.FromDataArtist(artist, ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, artist.RoadieId)); row.Thumbnail = ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, artist.RoadieId); row.SortName = artist.SortName ?? artist.Name; break; case BookmarkType.Release: var release = DbContext.Releases.Include(x => x.Artist) .FirstOrDefault(x => x.Id == row.BookmarkTargetId); if (release == null) { continue; } row.Bookmark = new models.DataToken { Text = release.Title, Value = release.RoadieId.ToString() }; row.Release = ReleaseList.FromDataRelease(release, release.Artist, HttpContext.BaseUrl, ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, release.Artist.RoadieId), ImageHelper.MakeReleaseThumbnailImage(Configuration, HttpContext, release.RoadieId)); row.Thumbnail = ImageHelper.MakeReleaseThumbnailImage(Configuration, HttpContext, release.RoadieId); row.SortName = release.SortTitleValue; break; case BookmarkType.Track: var track = DbContext.Tracks .Include(x => x.ReleaseMedia) .Include(x => x.ReleaseMedia.Release) .Include(x => x.ReleaseMedia.Release.Artist) .Include(x => x.TrackArtist) .FirstOrDefault(x => x.Id == row.BookmarkTargetId); if (track == null) { continue; } row.Bookmark = new models.DataToken { Text = track.Title, Value = track.RoadieId.ToString() }; row.Track = models.TrackList.FromDataTrack(MakeTrackPlayUrl(user, HttpContext.BaseUrl, track.RoadieId), track, track.ReleaseMedia.MediaNumber, track.ReleaseMedia.Release, track.ReleaseMedia.Release.Artist, track.TrackArtist, HttpContext.BaseUrl, ImageHelper.MakeTrackThumbnailImage(Configuration, HttpContext, track.RoadieId), ImageHelper.MakeReleaseThumbnailImage(Configuration, HttpContext, track.ReleaseMedia.Release.RoadieId), ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, track.ReleaseMedia.Release.Artist.RoadieId), ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, track.TrackArtist == null ? null : (Guid?)track.TrackArtist.RoadieId)); row.Track.TrackPlayUrl = MakeTrackPlayUrl(user, HttpContext.BaseUrl, track.RoadieId); row.Thumbnail = ImageHelper.MakeTrackThumbnailImage(Configuration, HttpContext, track.RoadieId); row.SortName = track.Title; break; case BookmarkType.Playlist: var playlist = DbContext.Playlists .Include(x => x.User) .FirstOrDefault(x => x.Id == row.BookmarkTargetId); if (playlist == null) { continue; } row.Bookmark = new models.DataToken { Text = playlist.Name, Value = playlist.RoadieId.ToString() }; row.Playlist = PlaylistList.FromDataPlaylist(playlist, playlist.User, ImageHelper.MakePlaylistThumbnailImage(Configuration, HttpContext, playlist.RoadieId), ImageHelper.MakeUserThumbnailImage(Configuration, HttpContext, playlist.User.RoadieId)); row.Thumbnail = ImageHelper.MakePlaylistThumbnailImage(Configuration, HttpContext, playlist.RoadieId); row.SortName = playlist.Name; break; case BookmarkType.Collection: var collection = DbContext.Collections.FirstOrDefault(x => x.Id == row.BookmarkTargetId); if (collection == null) { continue; } row.Bookmark = new models.DataToken { Text = collection.Name, Value = collection.RoadieId.ToString() }; row.Collection = CollectionList.FromDataCollection(collection, (from crc in DbContext.CollectionReleases where crc.CollectionId == collection.Id select crc.Id).Count(), ImageHelper.MakeCollectionThumbnailImage(Configuration, HttpContext, collection.RoadieId)); row.Thumbnail = ImageHelper.MakeCollectionThumbnailImage(Configuration, HttpContext, collection.RoadieId); row.SortName = collection.SortName ?? collection.Name; break; case BookmarkType.Label: var label = DbContext.Labels.FirstOrDefault(x => x.Id == row.BookmarkTargetId); if (label == null) { continue; } row.Bookmark = new models.DataToken { Text = label.Name, Value = label.RoadieId.ToString() }; row.Label = models.LabelList.FromDataLabel(label, ImageHelper.MakeLabelThumbnailImage(Configuration, HttpContext, label.RoadieId)); row.Thumbnail = ImageHelper.MakeLabelThumbnailImage(Configuration, HttpContext, label.RoadieId); row.SortName = label.SortName ?? label.Name; break; } } ; sw.Stop(); return(new Library.Models.Pagination.PagedResult <models.BookmarkList> { TotalCount = rowCount, CurrentPage = request.PageValue, TotalPages = (int)Math.Ceiling((double)rowCount / request.LimitValue), OperationTime = sw.ElapsedMilliseconds, Rows = rows }); }
private Task <OperationResult <Track> > TrackByIdAction(Guid id, IEnumerable <string> includes) { var sw = Stopwatch.StartNew(); sw.Start(); var track = this.GetTrack(id); if (track == null) { return(Task.FromResult(new OperationResult <Track>(true, string.Format("Track Not Found [{0}]", id)))); } var result = track.Adapt <Track>(); result.IsLocked = (track.IsLocked ?? false) || (track.ReleaseMedia.IsLocked ?? false) || (track.ReleaseMedia.Release.IsLocked ?? false) || (track.ReleaseMedia.Release.Artist.IsLocked ?? false); result.Thumbnail = base.MakeTrackThumbnailImage(id); result.MediumThumbnail = base.MakeThumbnailImage(id, "track", this.Configuration.MediumImageSize.Width, this.Configuration.MediumImageSize.Height); result.ReleaseMediaId = track.ReleaseMedia.RoadieId.ToString(); result.Artist = ArtistList.FromDataArtist(track.ReleaseMedia.Release.Artist, this.MakeArtistThumbnailImage(track.ReleaseMedia.Release.Artist.RoadieId)); result.ArtistThumbnail = this.MakeArtistThumbnailImage(track.ReleaseMedia.Release.Artist.RoadieId); result.Release = ReleaseList.FromDataRelease(track.ReleaseMedia.Release, track.ReleaseMedia.Release.Artist, this.HttpContext.BaseUrl, this.MakeArtistThumbnailImage(track.ReleaseMedia.Release.Artist.RoadieId), this.MakeReleaseThumbnailImage(track.ReleaseMedia.Release.RoadieId)); result.ReleaseThumbnail = this.MakeReleaseThumbnailImage(track.ReleaseMedia.Release.RoadieId); if (track.ArtistId.HasValue) { var trackArtist = this.DbContext.Artists.FirstOrDefault(x => x.Id == track.ArtistId); if (trackArtist == null) { this.Logger.LogWarning($"Unable to find Track Artist [{ track.ArtistId }"); } else { result.TrackArtist = ArtistList.FromDataArtist(trackArtist, this.MakeArtistThumbnailImage(trackArtist.RoadieId)); result.TrackArtistToken = result.TrackArtist.Artist; result.TrackArtistThumbnail = this.MakeArtistThumbnailImage(trackArtist.RoadieId); } } if (includes != null && includes.Any()) { if (includes.Contains("stats")) { result.Statistics = new Library.Models.Statistics.TrackStatistics { FileSizeFormatted = ((long?)track.FileSize).ToFileSize(), Time = new TimeInfo((decimal)track.Duration).ToFullFormattedString(), PlayedCount = track.PlayedCount }; var userTracks = (from t in this.DbContext.Tracks join ut in this.DbContext.UserTracks on t.Id equals ut.TrackId where t.Id == track.Id select ut).ToArray(); if (userTracks != null && userTracks.Any()) { result.Statistics.DislikedCount = userTracks.Count(x => x.IsDisliked ?? false); result.Statistics.FavoriteCount = userTracks.Count(x => x.IsFavorite ?? false); } } } sw.Stop(); return(Task.FromResult(new OperationResult <Track> { Data = result, IsSuccess = result != null, OperationTime = sw.ElapsedMilliseconds })); }
private Task <OperationResult <User> > UserByIdAction(Guid id, IEnumerable <string> includes) { var user = GetUser(id); if (user == null) { return(Task.FromResult(new OperationResult <User>(true, string.Format("User Not Found [{0}]", id)))); } var model = user.Adapt <User>(); if (includes != null && includes.Any()) { if (includes.Contains("stats")) { var userArtists = DbContext.UserArtists.Include(x => x.Artist).Where(x => x.UserId == user.Id).ToArray() ?? new data.UserArtist[0]; var userReleases = DbContext.UserReleases.Include(x => x.Release).Where(x => x.UserId == user.Id).ToArray() ?? new data.UserRelease[0]; var userTracks = DbContext.UserTracks.Include(x => x.Track).Where(x => x.UserId == user.Id).ToArray() ?? new data.UserTrack[0]; var mostPlayedArtist = (from a in DbContext.Artists join r in DbContext.Releases on a.Id equals r.ArtistId join rm in DbContext.ReleaseMedias on r.Id equals rm.ReleaseId join t in DbContext.Tracks on rm.Id equals t.ReleaseMediaId join ut in DbContext.UserTracks on t.Id equals ut.TrackId where ut.UserId == user.Id select new { a, ut.PlayedCount }) .GroupBy(a => a.a) .Select(x => new { Artist = x.Key, Played = x.Sum(t => t.PlayedCount) }) .OrderByDescending(x => x.Played) .FirstOrDefault(); var mostPlayedReleaseId = (from r in DbContext.Releases join rm in DbContext.ReleaseMedias on r.Id equals rm.ReleaseId join t in DbContext.Tracks on rm.Id equals t.ReleaseMediaId join ut in DbContext.UserTracks on t.Id equals ut.TrackId where ut.UserId == user.Id select new { r, ut.PlayedCount }) .GroupBy(r => r.r) .Select(x => new { Release = x.Key, Played = x.Sum(t => t.PlayedCount) }) .OrderByDescending(x => x.Played) .Select(x => x.Release.RoadieId) .FirstOrDefault(); var mostPlayedRelease = GetRelease(mostPlayedReleaseId); var mostPlayedTrackUserTrack = userTracks .OrderByDescending(x => x.PlayedCount) .FirstOrDefault(); var mostPlayedTrack = mostPlayedTrackUserTrack == null ? null : DbContext.Tracks .Include(x => x.TrackArtist) .Include(x => x.ReleaseMedia) .Include("ReleaseMedia.Release") .Include("ReleaseMedia.Release.Artist") .FirstOrDefault(x => x.Id == mostPlayedTrackUserTrack.TrackId); model.Statistics = new UserStatistics { MostPlayedArtist = mostPlayedArtist == null ? null : models.ArtistList.FromDataArtist(mostPlayedArtist.Artist, MakeArtistThumbnailImage(mostPlayedArtist.Artist.RoadieId)), MostPlayedRelease = mostPlayedRelease == null ? null : ReleaseList.FromDataRelease(mostPlayedRelease, mostPlayedRelease.Artist, HttpContext.BaseUrl, MakeArtistThumbnailImage(mostPlayedRelease.Artist.RoadieId), MakeReleaseThumbnailImage(mostPlayedRelease.RoadieId)), MostPlayedTrack = mostPlayedTrack == null ? null : models.TrackList.FromDataTrack( MakeTrackPlayUrl(user, mostPlayedTrack.Id, mostPlayedTrack.RoadieId), mostPlayedTrack, mostPlayedTrack.ReleaseMedia.MediaNumber, mostPlayedTrack.ReleaseMedia.Release, mostPlayedTrack.ReleaseMedia.Release.Artist, mostPlayedTrack.TrackArtist, HttpContext.BaseUrl, MakeTrackThumbnailImage(mostPlayedTrack.RoadieId), MakeReleaseThumbnailImage(mostPlayedTrack.ReleaseMedia.Release.RoadieId), MakeArtistThumbnailImage(mostPlayedTrack.ReleaseMedia.Release.Artist.RoadieId), MakeArtistThumbnailImage(mostPlayedTrack.TrackArtist == null ? null : (Guid?)mostPlayedTrack.TrackArtist.RoadieId)), RatedArtists = userArtists.Where(x => x.Rating > 0).Count(), FavoritedArtists = userArtists.Where(x => x.IsFavorite ?? false).Count(), DislikedArtists = userArtists.Where(x => x.IsDisliked ?? false).Count(), RatedReleases = userReleases.Where(x => x.Rating > 0).Count(), FavoritedReleases = userReleases.Where(x => x.IsFavorite ?? false).Count(), DislikedReleases = userReleases.Where(x => x.IsDisliked ?? false).Count(), RatedTracks = userTracks.Where(x => x.Rating > 0).Count(), PlayedTracks = userTracks.Where(x => x.PlayedCount.HasValue).Select(x => x.PlayedCount).Sum(), FavoritedTracks = userTracks.Where(x => x.IsFavorite ?? false).Count(), DislikedTracks = userTracks.Where(x => x.IsDisliked ?? false).Count() }; } } return(Task.FromResult(new OperationResult <User> { IsSuccess = true, Data = model })); }
public static void Start(ReleaseList releaseList, bool exception) { Process.Start(releaseList.ApplicationStart, (exception ? "exception" : "ok")); }
public static void Start(ReleaseList releaseList) { Start(releaseList, false); }
public static IUpdateProxy GetUpdateProxy(ReleaseList releaseList) { //todo:implement it by yourself return(null); }
public ReleaseListTests() { this.data = TestHelper.GetJson <ReleaseList>("release-search.json"); }
private Task <OperationResult <Track> > TrackByIdAction(Guid id, IEnumerable <string> includes) { var sw = Stopwatch.StartNew(); sw.Start(); var track = GetTrack(id); if (track == null) { return(Task.FromResult(new OperationResult <Track>(true, string.Format("Track Not Found [{0}]", id)))); } var result = track.Adapt <Track>(); result.IsLocked = (track.IsLocked ?? false) || (track.ReleaseMedia.IsLocked ?? false) || (track.ReleaseMedia.Release.IsLocked ?? false) || (track.ReleaseMedia.Release.Artist.IsLocked ?? false); result.Thumbnail = MakeTrackThumbnailImage(id); result.MediumThumbnail = MakeThumbnailImage(id, "track", Configuration.MediumImageSize.Width, Configuration.MediumImageSize.Height); result.ReleaseMediaId = track.ReleaseMedia.RoadieId.ToString(); result.Artist = ArtistList.FromDataArtist(track.ReleaseMedia.Release.Artist, MakeArtistThumbnailImage(track.ReleaseMedia.Release.Artist.RoadieId)); result.ArtistThumbnail = MakeArtistThumbnailImage(track.ReleaseMedia.Release.Artist.RoadieId); result.Release = ReleaseList.FromDataRelease(track.ReleaseMedia.Release, track.ReleaseMedia.Release.Artist, HttpContext.BaseUrl, MakeArtistThumbnailImage(track.ReleaseMedia.Release.Artist.RoadieId), MakeReleaseThumbnailImage(track.ReleaseMedia.Release.RoadieId)); result.ReleaseThumbnail = MakeReleaseThumbnailImage(track.ReleaseMedia.Release.RoadieId); if (track.ArtistId.HasValue) { var trackArtist = DbContext.Artists.FirstOrDefault(x => x.Id == track.ArtistId); if (trackArtist == null) { Logger.LogWarning($"Unable to find Track Artist [{track.ArtistId}"); } else { result.TrackArtist = ArtistList.FromDataArtist(trackArtist, MakeArtistThumbnailImage(trackArtist.RoadieId)); result.TrackArtistToken = result.TrackArtist.Artist; result.TrackArtistThumbnail = MakeArtistThumbnailImage(trackArtist.RoadieId); } } if (includes != null && includes.Any()) { if (includes.Contains("stats")) { result.Statistics = new TrackStatistics { FileSizeFormatted = ((long?)track.FileSize).ToFileSize(), Time = new TimeInfo((decimal)track.Duration).ToFullFormattedString(), PlayedCount = track.PlayedCount }; var userTracks = (from t in DbContext.Tracks join ut in DbContext.UserTracks on t.Id equals ut.TrackId where t.Id == track.Id select ut).ToArray(); if (userTracks != null && userTracks.Any()) { result.Statistics.DislikedCount = userTracks.Count(x => x.IsDisliked ?? false); result.Statistics.FavoriteCount = userTracks.Count(x => x.IsFavorite ?? false); } } if (includes.Contains("comments")) { var trackComments = DbContext.Comments.Include(x => x.User).Where(x => x.TrackId == track.Id) .OrderByDescending(x => x.CreatedDate).ToArray(); if (trackComments.Any()) { var comments = new List <Comment>(); var commentIds = trackComments.Select(x => x.Id).ToArray(); var userCommentReactions = (from cr in DbContext.CommentReactions where commentIds.Contains(cr.CommentId) select cr).ToArray(); foreach (var trackComment in trackComments) { var comment = trackComment.Adapt <Comment>(); comment.DatabaseId = trackComment.Id; comment.User = UserList.FromDataUser(trackComment.User, MakeUserThumbnailImage(trackComment.User.RoadieId)); comment.DislikedCount = userCommentReactions.Count(x => x.CommentId == trackComment.Id && x.ReactionValue == CommentReaction.Dislike); comment.LikedCount = userCommentReactions.Count(x => x.CommentId == trackComment.Id && x.ReactionValue == CommentReaction.Like); comments.Add(comment); } result.Comments = comments; } } } sw.Stop(); return(Task.FromResult(new OperationResult <Track> { Data = result, IsSuccess = result != null, OperationTime = sw.ElapsedMilliseconds })); }
private void GetFilesVersion() { if (chkZip.Checked) { return; } if (PackSettings.Default.QueryFilesVersionFromReleaseServer) { var url = txtRelaseUrl.Text.Trim(); _remoteList = null; if (url.Length > 0) { if (!url.EndsWith("/")) { url += "/"; } url += Constants.ReleaseConfigFileName; try { _remoteList = FileUtil.ReadReleaseList(url); } catch { _remoteList = null; } } } foreach (DataGridViewRow gr in gridFileList.Rows) { var fileName = gr.Cells[ColFileName.Name].Value.ToString().ToLower(); if (fileName.EndsWith(".exe") || fileName.EndsWith(".dll") || fileName.StartsWith("[")) { continue; } var got = false; if (_remoteList != null) { foreach (var file in _remoteList.Files) { if (string.Compare(file.FileName, fileName, true) == 0 && !string.IsNullOrEmpty(file.Version)) { gr.Cells[ColFileVersion.Name].Value = file.Version; got = true; break; } } if (got) { continue; } } if (_releaseList != null) { foreach (var file in _releaseList.Files) { if (string.Compare(file.FileName, fileName, true) == 0 && !string.IsNullOrEmpty(file.Version)) { gr.Cells[ColFileVersion.Name].Value = file.Version; got = true; break; } } if (!got) { gr.Cells[ColFileVersion.Name].Value = _releaseList.ReleaseVersion; } } } _filesVersionGot = true; }
private async Task <OperationResult <User> > UserByIdAction(Guid id, IEnumerable <string> includes) { var timings = new Dictionary <string, long>(); var tsw = new Stopwatch(); tsw.Restart(); var user = await GetUser(id).ConfigureAwait(false); tsw.Stop(); timings.Add("getUser", tsw.ElapsedMilliseconds); if (user == null) { return(new OperationResult <User>(true, string.Format("User Not Found [{0}]", id))); } tsw.Restart(); var model = user.Adapt <User>(); model.MediumThumbnail = ImageHelper.MakeThumbnailImage(Configuration, HttpContext, id, "user", Configuration.MediumImageSize.Width, Configuration.MediumImageSize.Height); model.IsAdmin = user.UserRoles?.Any(x => x.Role?.NormalizedName == "ADMIN") ?? false; model.IsEditor = model.IsAdmin || (user.UserRoles?.Any(x => x.Role?.NormalizedName == "EDITOR") ?? false); tsw.Stop(); timings.Add("adapt", tsw.ElapsedMilliseconds); if (includes?.Any() == true && includes.Contains("stats")) { tsw.Restart(); var userArtists = DbContext.UserArtists.Include(x => x.Artist).Where(x => x.UserId == user.Id).ToArray() ?? new data.UserArtist[0]; var userReleases = DbContext.UserReleases.Include(x => x.Release).Where(x => x.UserId == user.Id).ToArray() ?? new data.UserRelease[0]; var userTracks = DbContext.UserTracks.Include(x => x.Track).Where(x => x.UserId == user.Id).ToArray() ?? new data.UserTrack[0]; var mostPlayedArtist = await DbContext.MostPlayedArtist(user.Id).ConfigureAwait(false); var mostPlayedRelease = await DbContext.MostPlayedRelease(user.Id).ConfigureAwait(false); var lastPlayedTrack = await GetTrack((await DbContext.MostPlayedTrack(user.Id).ConfigureAwait(false))?.RoadieId ?? Guid.Empty).ConfigureAwait(false); var mostPlayedTrack = await GetTrack((await DbContext.LastPlayedTrack(user.Id).ConfigureAwait(false))?.RoadieId ?? Guid.Empty).ConfigureAwait(false); model.Statistics = new UserStatistics { LastPlayedTrack = lastPlayedTrack == null ? null : models.TrackList.FromDataTrack( MakeTrackPlayUrl(user, HttpContext.BaseUrl, lastPlayedTrack.RoadieId), lastPlayedTrack, lastPlayedTrack.ReleaseMedia.MediaNumber, lastPlayedTrack.ReleaseMedia.Release, lastPlayedTrack.ReleaseMedia.Release.Artist, lastPlayedTrack.TrackArtist, HttpContext.BaseUrl, ImageHelper.MakeTrackThumbnailImage(Configuration, HttpContext, lastPlayedTrack.RoadieId), ImageHelper.MakeReleaseThumbnailImage(Configuration, HttpContext, lastPlayedTrack.ReleaseMedia.Release.RoadieId), ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, lastPlayedTrack.ReleaseMedia.Release.Artist.RoadieId), ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, lastPlayedTrack.TrackArtist == null ? null : (Guid?)lastPlayedTrack.TrackArtist.RoadieId)), MostPlayedArtist = mostPlayedArtist == null ? null : models.ArtistList.FromDataArtist(mostPlayedArtist, ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, mostPlayedArtist.RoadieId)), MostPlayedRelease = mostPlayedRelease == null ? null : ReleaseList.FromDataRelease(mostPlayedRelease, mostPlayedRelease.Artist, HttpContext.BaseUrl, ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, mostPlayedRelease.Artist.RoadieId), ImageHelper.MakeReleaseThumbnailImage(Configuration, HttpContext, mostPlayedRelease.RoadieId)), MostPlayedTrack = mostPlayedTrack == null ? null : models.TrackList.FromDataTrack( MakeTrackPlayUrl(user, HttpContext.BaseUrl, mostPlayedTrack.RoadieId), mostPlayedTrack, mostPlayedTrack.ReleaseMedia.MediaNumber, mostPlayedTrack.ReleaseMedia.Release, mostPlayedTrack.ReleaseMedia.Release.Artist, mostPlayedTrack.TrackArtist, HttpContext.BaseUrl, ImageHelper.MakeTrackThumbnailImage(Configuration, HttpContext, mostPlayedTrack.RoadieId), ImageHelper.MakeReleaseThumbnailImage(Configuration, HttpContext, mostPlayedTrack.ReleaseMedia.Release.RoadieId), ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, mostPlayedTrack.ReleaseMedia.Release.Artist.RoadieId), ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, mostPlayedTrack.TrackArtist == null ? null : (Guid?)mostPlayedTrack.TrackArtist.RoadieId)), RatedArtists = userArtists.Count(x => x.Rating > 0), FavoritedArtists = userArtists.Count(x => x.IsFavorite ?? false), DislikedArtists = userArtists.Count(x => x.IsDisliked ?? false), RatedReleases = userReleases.Count(x => x.Rating > 0), FavoritedReleases = userReleases.Count(x => x.IsFavorite ?? false), DislikedReleases = userReleases.Count(x => x.IsDisliked ?? false), RatedTracks = userTracks.Count(x => x.Rating > 0), PlayedTracks = userTracks.Where(x => x.PlayedCount.HasValue).Select(x => x.PlayedCount).Sum(), FavoritedTracks = userTracks.Count(x => x.IsFavorite ?? false), DislikedTracks = userTracks.Count(x => x.IsDisliked ?? false) }; tsw.Stop(); timings.Add("stats", tsw.ElapsedMilliseconds); } Logger.LogInformation($"ByIdAction: User `{ user }`: includes [{includes.ToCSV()}], timings: [{ timings.ToTimings() }]"); return(new OperationResult <User> { IsSuccess = true, Data = model }); }
private async Task <OperationResult <Collection> > CollectionByIdAction(Guid id, IEnumerable <string> includes = null) { var timings = new Dictionary <string, long>(); var tsw = new Stopwatch(); var sw = Stopwatch.StartNew(); sw.Start(); tsw.Restart(); var collection = await GetCollection(id); tsw.Stop(); timings.Add("getCollection", tsw.ElapsedMilliseconds); if (collection == null) { return(new OperationResult <Collection>(true, string.Format("Collection Not Found [{0}]", id))); } var result = collection.Adapt <Collection>(); var maintainer = DbContext.Users.FirstOrDefault(x => x.Id == collection.MaintainerId); result.Maintainer = new DataToken { Text = maintainer.UserName, Value = maintainer.RoadieId.ToString() }; result.AlternateNames = collection.AlternateNames; result.Tags = collection.Tags; result.URLs = collection.URLs; result.Thumbnail = ImageHelper.MakeCollectionThumbnailImage(Configuration, HttpContext, collection.RoadieId); result.MediumThumbnail = ImageHelper.MakeThumbnailImage(Configuration, HttpContext, id, "collection", Configuration.MediumImageSize.Width, Configuration.MediumImageSize.Height); result.CollectionFoundCount = (from crc in DbContext.CollectionReleases where crc.CollectionId == collection.Id select crc.Id).Count(); tsw.Stop(); timings.Add("adapt", tsw.ElapsedMilliseconds); if (includes != null && includes.Any()) { if (includes.Contains("list")) { result.ListInCSVFormat = collection.ListInCSVFormat; result.ListInCSV = collection.ListInCSV; } else { result.ListInCSV = null; result.ListInCSVFormat = null; } if (includes.Contains("releases")) { tsw.Restart(); result.Releases = (from crc in DbContext.CollectionReleases join r in DbContext.Releases.Include(x => x.Artist) on crc.ReleaseId equals r.Id where crc.CollectionId == collection.Id orderby crc.ListNumber select new CollectionRelease { ListNumber = crc.ListNumber, Release = ReleaseList.FromDataRelease(r, r.Artist, HttpContext.BaseUrl, ImageHelper.MakeArtistThumbnailImage(Configuration, HttpContext, r.Artist.RoadieId), ImageHelper.MakeReleaseThumbnailImage(Configuration, HttpContext, r.RoadieId)) }).ToArray(); tsw.Stop(); timings.Add("releases", tsw.ElapsedMilliseconds); } if (includes.Contains("stats")) { tsw.Restart(); var collectionReleases = from crc in DbContext.CollectionReleases join r in DbContext.Releases on crc.ReleaseId equals r.Id where crc.CollectionId == collection.Id select r; var collectionTracks = from crc in DbContext.CollectionReleases join r in DbContext.Releases on crc.ReleaseId equals r.Id join rm in DbContext.ReleaseMedias on r.Id equals rm.ReleaseId join t in DbContext.Tracks on rm.Id equals t.ReleaseMediaId where crc.CollectionId == collection.Id select t; result.Statistics = new CollectionStatistics { ArtistCount = collectionReleases.Select(x => x.ArtistId).Distinct().Count(), FileSize = collectionTracks.Sum(x => (long?)x.FileSize).ToFileSize(), MissingTrackCount = collectionTracks.Count(x => x.Hash != null), ReleaseCount = collectionReleases.Count(), ReleaseMediaCount = collectionReleases.Sum(x => x.MediaCount), Duration = collectionReleases.Sum(x => (long?)x.Duration), TrackCount = collectionReleases.Sum(x => x.TrackCount), TrackPlayedCount = collectionReleases.Sum(x => x.PlayedCount) }; tsw.Stop(); timings.Add("stats", tsw.ElapsedMilliseconds); } if (includes.Contains("comments")) { tsw.Restart(); var collectionComments = DbContext.Comments.Include(x => x.User) .Where(x => x.CollectionId == collection.Id) .OrderByDescending(x => x.CreatedDate) .ToArray(); if (collectionComments.Any()) { var comments = new List <Comment>(); var commentIds = collectionComments.Select(x => x.Id).ToArray(); var userCommentReactions = (from cr in DbContext.CommentReactions where commentIds.Contains(cr.CommentId) select cr).ToArray(); foreach (var collectionComment in collectionComments) { var comment = collectionComment.Adapt <Comment>(); comment.DatabaseId = collectionComment.Id; comment.User = UserList.FromDataUser(collectionComment.User, ImageHelper.MakeUserThumbnailImage(Configuration, HttpContext, collectionComment.User.RoadieId)); comment.DislikedCount = userCommentReactions.Count(x => x.CommentId == collectionComment.Id && x.ReactionValue == CommentReaction.Dislike); comment.LikedCount = userCommentReactions.Count(x => x.CommentId == collectionComment.Id && x.ReactionValue == CommentReaction.Like); comments.Add(comment); } result.Comments = comments; } tsw.Stop(); timings.Add("comments", tsw.ElapsedMilliseconds); } } Logger.LogInformation($"ByIdAction: Collection `{ collection }`: includes [{includes.ToCSV()}], timings: [{ timings.ToTimings() }]"); sw.Stop(); return(new OperationResult <Collection> { Data = result, IsSuccess = result != null, OperationTime = sw.ElapsedMilliseconds }); }