// // GET: /Manage/Index public async Task <ActionResult> Index(ManageMessageId?message) { ViewBag.StatusMessage = message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed." : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set." : message == ManageMessageId.SetTwoFactorSuccess ? "Your two-factor authentication provider has been set." : message == ManageMessageId.Error ? "An error has occurred." : message == ManageMessageId.AddPhoneSuccess ? "Your phone number was added." : message == ManageMessageId.RemovePhoneSuccess ? "Your phone number was removed." : ""; var userId = User.Identity.GetUserId(); var model = new IndexViewModel { HasPassword = HasPassword(), PhoneNumber = await UserManager.GetPhoneNumberAsync(userId), TwoFactor = await UserManager.GetTwoFactorEnabledAsync(userId), Logins = await UserManager.GetLoginsAsync(userId), BrowserRemembered = await AuthenticationManager.TwoFactorBrowserRememberedAsync(userId), }; using (var db = new SoundFundingDbContext()) { var currentUser = db.Users.FirstOrDefault(u => u.Id == userId); if (currentUser != null) { model.MinutesContributed = currentUser.MinutesContributed; } } return(View(model)); }
public async Task <ActionResult> Join(int id) { var token = Session["SpotifyToken"] as AuthenticationToken; if (token == null) { throw new Exception("Not logged in against Spotify"); } using (var db = new SoundFundingDbContext()) { var cause = db.Causes.Find(id); if (cause.SpotifyPlaylistId != null) { var user = await PlaylistGenerator.AddToPlaylist(token, cause); var image = user.Images.FirstOrDefault(); if (image != null) { cause.Contributors = cause.Contributors ?? new List <Contributor>(); cause.Contributors.Add(new Contributor { ImageUrl = image.Url }); } } db.SaveChanges(); } return(RedirectToAction("Cause", new { id = id })); }
public ActionResult Cause(int id) { using (var db = new SoundFundingDbContext()) { var cause = db.Causes.Find(id); return(View(cause)); } }
public ActionResult Index() { using (var db = new SoundFundingDbContext()) { ViewBag.OtherCauses = db.Causes.ToList(); return(View()); } }
public async Task <ActionResult> Create(Cause cause) { var token = Session["SpotifyToken"] as AuthenticationToken; if (token == null) { throw new Exception("Not logged in against Spotify"); } if (ModelState.IsValid) { if (cause.PostedPicture != null) { var bh = new BlobHandler("soundfunding"); bh.Upload(new List <HttpPostedFileBase> { cause.PostedPicture }); var blobUri = bh.GetBlobs().FirstOrDefault(b => b.Contains(cause.PostedPicture.FileName)); cause.Picture = blobUri; } var playlist = await PlaylistGenerator.GeneratePlaylist(token, cause); cause.SpotifyPlaylistId = playlist.Id; cause.SpotifyPlaylistUri = playlist.Uri; cause.SpotifyUserId = playlist.Owner.Id; var image = playlist.Owner.Images.FirstOrDefault(); if (image != null) { cause.SpotifyUserAvatarUrl = image.Url; } using (var db = new SoundFundingDbContext()) { db.Causes.Add(cause); db.SaveChanges(); } return(RedirectToAction("Cause", "Cause", new { id = cause.Id })); } return(View("Create")); }
public static async Task <User> AddToPlaylist(AuthenticationToken token, Cause cause) { var user = await User.GetCurrentUserProfile(token); using (var db = new SoundFundingDbContext()) { var stored = db.Tracks.OrderByDescending(t => t.Id).FirstOrDefault(t => t.UserId == user.Id); if (stored == null) { return(user); } var newPlaylistTracks = await Track.GetTracks(stored.TrackIds.Split(',').ToList()); var playlist = await Playlist.GetPlaylist(cause.SpotifyUserId, cause.SpotifyPlaylistId, token); await playlist.AddTracks(newPlaylistTracks.OrderBy(t => t.Popularity).Take(5).ToList(), token); } return(user); }
public static async Task <Playlist> GeneratePlaylist(AuthenticationToken token, Cause cause, int attempt = 1) { var user = await User.GetCurrentUserProfile(token); using (var db = new SoundFundingDbContext()) { var stored = db.Tracks.OrderByDescending(t => t.Id).FirstOrDefault(t => t.UserId == user.Id); if (stored == null) { if (attempt <= 3) { // Might not be generated yet Thread.Sleep(TimeSpan.FromSeconds(10)); return(await GeneratePlaylist(token, cause, ++attempt)); } else { var filrPlaylist = GetStandardFiltrPlaylist(); return(new Playlist { Owner = user, Uri = filrPlaylist.spotifyUri }); } } var newPlaylistTracks = await Track.GetTracks(stored.TrackIds.Split(',').ToList()); var newPlaylist = await Playlist.CreatePlaylist(user.Id, "SoundFunding " + cause.Name, true, token); await newPlaylist.AddTracks(newPlaylistTracks.OrderBy(t => t.Popularity).Take(5).ToList(), token); newPlaylist = await Playlist.GetPlaylist(user.Id, newPlaylist.Id, token); return(newPlaylist); } }
public static async void GenerateAndStorePlaylistTracks(AuthenticationToken token) { var user = await User.GetCurrentUserProfile(token); var artists = new List <Artist>(); var savedTracks = await User.GetUsersSavedTracks(token); // Try getting artists from saved tracks if (savedTracks.Total > 0) { artists.AddRange(savedTracks.Items.SelectMany(t => t.Artists).ToList()); } // Try get by most popular user playlist if (artists.Count < 2) { var playlists = await Playlist.GetUsersPlaylists(user, token); var playlistTracks = new List <PlaylistTrack>(); var playlist = playlists.Items.FirstOrDefault(p => p.Tracks.Total > 0); if (playlist != null) { var tracks = await Playlist.GetPlaylistTracks(user.Id, playlist.Id, token); playlistTracks.AddRange(tracks.Items); artists.AddRange(playlistTracks.SelectMany(t2 => t2.Track.Artists)); } } if (artists.Count < 2) { return; //Give up } artists = artists.DistinctBy(a => a.Name).OrderByDescending(a => a.Popularity).Take(5).ToList(); var artistNames = artists.Select(a => a.Name).ToList(); var tracksPerArtist = 10 / artistNames.Count(); var newPlaylistTrackIds = new List <string>(); foreach (var artistName in artistNames) { var client = new RestClient("http://cdn.filtr.com/2.1"); var request = new RestRequest("/SE/SE/tracks"); request.AddParameter("artist", artistName); var result = client.Execute <List <FiltrTrack> >(request); newPlaylistTrackIds.AddRange( result.Data.OrderByDescending(t => t.hotness) .Take(tracksPerArtist) .Select(t => t.spotifyUri.Replace("spotify:track:", string.Empty))); } using (var db = new SoundFundingDbContext()) { db.Tracks.Add(new PlaylistTracks { UserId = user.Id, TrackIds = string.Join(",", newPlaylistTrackIds.Distinct()) }); db.SaveChanges(); } }