diff --git a/YJMPD-UWP/App.xaml.cs b/YJMPD-UWP/App.xaml.cs index f20b1ca..30a4bb3 100644 --- a/YJMPD-UWP/App.xaml.cs +++ b/YJMPD-UWP/App.xaml.cs @@ -20,23 +20,23 @@ namespace YJMPD_UWP // ======================= // SINGLETONS // ======================= - private static GeoHandler geohandler = new GeoHandler(); + private static PhotoHandler photohandler = new PhotoHandler(); - public static GeoHandler Geo + public static PhotoHandler Photo { get { - return geohandler; + return photohandler; } } - private static CompassHandler compasshandler = new CompassHandler(); + private static GameHandler gamehandler = new GameHandler(); - public static CompassHandler Compass + public static GameHandler Game { get { - return compasshandler; + return gamehandler; } } @@ -60,23 +60,23 @@ namespace YJMPD_UWP } } - private static GameHandler gamehandler = new GameHandler(); + private static GeoHandler geohandler = new GeoHandler(); - public static GameHandler Game + public static GeoHandler Geo { get { - return gamehandler; + return geohandler; } } - private static PhotoHandler photohandler = new PhotoHandler(); + private static CompassHandler compasshandler = new CompassHandler(); - public static PhotoHandler Photo + public static CompassHandler Compass { get { - return photohandler; + return compasshandler; } } diff --git a/YJMPD-UWP/Assets/Error.png b/YJMPD-UWP/Assets/Error.png new file mode 100644 index 0000000..ebbe972 Binary files /dev/null and b/YJMPD-UWP/Assets/Error.png differ diff --git a/YJMPD-UWP/Assets/about-button.png b/YJMPD-UWP/Assets/about-button.png deleted file mode 100644 index 1a3df8d..0000000 Binary files a/YJMPD-UWP/Assets/about-button.png and /dev/null differ diff --git a/YJMPD-UWP/Assets/settings-button.png b/YJMPD-UWP/Assets/settings-button.png deleted file mode 100644 index 07204cd..0000000 Binary files a/YJMPD-UWP/Assets/settings-button.png and /dev/null differ diff --git a/YJMPD-UWP/Assets/start-button2.png b/YJMPD-UWP/Assets/start-button2.png deleted file mode 100644 index 4e33871..0000000 Binary files a/YJMPD-UWP/Assets/start-button2.png and /dev/null differ diff --git a/YJMPD-UWP/Helpers/EventArgs/PhotoTakenEventArgs.cs b/YJMPD-UWP/Helpers/EventArgs/PhotoTakenEventArgs.cs index 861df96..7365938 100644 --- a/YJMPD-UWP/Helpers/EventArgs/PhotoTakenEventArgs.cs +++ b/YJMPD-UWP/Helpers/EventArgs/PhotoTakenEventArgs.cs @@ -4,9 +4,9 @@ namespace YJMPD_UWP.Helpers.EventArgs { public class PhotoTakenEventArgs : System.EventArgs { - public SoftwareBitmapSource Photo { get; private set; } + public string Photo { get; private set; } - public PhotoTakenEventArgs(SoftwareBitmapSource photo) + public PhotoTakenEventArgs(string photo) { Photo = photo; } diff --git a/YJMPD-UWP/Model/ApiHandler.cs b/YJMPD-UWP/Model/ApiHandler.cs index 1933938..d7f0019 100644 --- a/YJMPD-UWP/Model/ApiHandler.cs +++ b/YJMPD-UWP/Model/ApiHandler.cs @@ -58,7 +58,10 @@ namespace YJMPD_UWP.Model App.Game.MoveToWaiting(); break; case Command.PictureUrl: - //Download picture from URL and display to participants + if (!App.Game.Selected) + App.Photo.UpdatePhotoTaken(o[Command.PictureUrl.ToString()].ToString()); + + App.Game.MoveToStarted(); break; default: //Do nothing @@ -98,7 +101,6 @@ namespace YJMPD_UWP.Model lon = App.Geo.Position.Coordinate.Point.Position.Longitude, lat = App.Geo.Position.Coordinate.Point.Position.Latitude }); - Debug.WriteLine(obj.ToString(Formatting.None)); await App.Network.Write(obj.ToString(Formatting.None)); return true; @@ -111,7 +113,18 @@ namespace YJMPD_UWP.Model command = Command.PlayerRemoved.ToString(), name = Settings.Username }); - Debug.WriteLine(obj.ToString(Formatting.None)); + await App.Network.Write(obj.ToString(Formatting.None)); + + return true; + } + + public async Task SendPicture(string url) + { + JObject obj = JObject.FromObject(new + { + command = Command.PictureUrl.ToString(), + pictureurl = url + }); await App.Network.Write(obj.ToString(Formatting.None)); return true; diff --git a/YJMPD-UWP/Model/GameHandler.cs b/YJMPD-UWP/Model/GameHandler.cs index 84de13d..517c634 100644 --- a/YJMPD-UWP/Model/GameHandler.cs +++ b/YJMPD-UWP/Model/GameHandler.cs @@ -53,6 +53,12 @@ namespace YJMPD_UWP.Model { Players = new List(); Status = GameStatus.STOPPED; + App.Photo.OnPhotoTaken += Photo_OnPhotoTaken; + } + + private void Photo_OnPhotoTaken(object sender, PhotoTakenEventArgs e) + { + App.Api.SendPicture(e.Photo); } public void AddPlayer(string username) @@ -78,6 +84,12 @@ namespace YJMPD_UWP.Model UpdateGameStatus(GameStatus.WAITING); } + public void MoveToStarted() + { + App.Navigate(typeof(GameView)); + UpdateGameStatus(GameStatus.STARTED); + } + public void RemovePlayer(string username) { for(int i=Players.Count-1; i>=0; i--) @@ -179,10 +191,7 @@ namespace YJMPD_UWP.Model App.Navigate(typeof(WaitingView)); break; case GameStatus.STARTED: - if (Selected && App.Photo.Photo == null) - App.Navigate(typeof(PhotoView)); - else - App.Navigate(typeof(GameView)); + App.Navigate(typeof(GameView)); break; case GameStatus.ENDED: App.Navigate(typeof(ScoreView)); diff --git a/YJMPD-UWP/Model/NetworkHandler.cs b/YJMPD-UWP/Model/NetworkHandler.cs index 6ba5c3f..7ad9bd9 100644 --- a/YJMPD-UWP/Model/NetworkHandler.cs +++ b/YJMPD-UWP/Model/NetworkHandler.cs @@ -58,6 +58,8 @@ namespace YJMPD_UWP.Model if (Status != NetworkStatus.CONNECTED) return false; + Debug.WriteLine(data); + dout.WriteString(data + Environment.NewLine); await dout.StoreAsync(); await dout.FlushAsync(); diff --git a/YJMPD-UWP/Model/PhotoHandler.cs b/YJMPD-UWP/Model/PhotoHandler.cs index ce87dc0..50c86d0 100644 --- a/YJMPD-UWP/Model/PhotoHandler.cs +++ b/YJMPD-UWP/Model/PhotoHandler.cs @@ -1,6 +1,8 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Linq; using System.Net.Http; using System.Threading.Tasks; using Windows.Graphics.Imaging; @@ -17,7 +19,7 @@ namespace YJMPD_UWP.Model public delegate void OnPhotoTakenHandler(object sender, PhotoTakenEventArgs e); public event OnPhotoTakenHandler OnPhotoTaken; - public SoftwareBitmapSource Photo { get; private set; } + public string Photo { get; private set; } public PhotoHandler() { @@ -29,7 +31,7 @@ namespace YJMPD_UWP.Model Photo = null; } - private void UpdatePhotoTaken(SoftwareBitmapSource photo) + public void UpdatePhotoTaken(string photo) { Photo = photo; @@ -63,9 +65,9 @@ namespace YJMPD_UWP.Model SoftwareBitmapSource bitmapSource = new SoftwareBitmapSource(); await bitmapSource.SetBitmapAsync(softwareBitmapBGR8); - await UploadImage(stream.AsStream()); + string photoURL = await UploadImage(stream.AsStream()); - UpdatePhotoTaken(bitmapSource); + UpdatePhotoTaken(photoURL); } public async Task UploadImage(Stream file) @@ -79,8 +81,11 @@ namespace YJMPD_UWP.Model { var response = await hc.PostAsync(url, postdata); response.EnsureSuccessStatusCode(); - Debug.WriteLine(await response.Content.ReadAsStringAsync()); - return await response.Content.ReadAsStringAsync(); + string imageurl = await response.Content.ReadAsStringAsync(); + string imageid = new List(imageurl.Split('/')).Last(); + + return imageurl + "/" + imageid; + } catch { diff --git a/YJMPD-UWP/ViewModels/PhotoVM.cs b/YJMPD-UWP/ViewModels/PhotoVM.cs index 583a089..149a91a 100644 --- a/YJMPD-UWP/ViewModels/PhotoVM.cs +++ b/YJMPD-UWP/ViewModels/PhotoVM.cs @@ -1,20 +1,49 @@ -using Windows.UI.Xaml.Media; +using System; +using System.Diagnostics; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Imaging; namespace YJMPD_UWP.ViewModels { public class PhotoVM : TemplateVM { - private ImageSource photo; + private string photo; + + DispatcherTimer timer; + int secondsleft = 60; public PhotoVM() : base("Photo") { App.Photo.OnPhotoTaken += Photo_OnPhotoTaken; + photo = App.Photo.Photo; + + timer = new DispatcherTimer(); + timer.Interval = TimeSpan.FromSeconds(1); + timer.Tick += Timer_Tick; + + if (ControlsVisible) + timer.Start(); + } + + private void Timer_Tick(object sender, object e) + { + NotifyPropertyChanged(nameof(TimeOut)); + + secondsleft--; + if(secondsleft <= 0) + { + App.Game.Stop(); + } } private void Photo_OnPhotoTaken(object sender, Helpers.EventArgs.PhotoTakenEventArgs e) { dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { + timer.Stop(); + secondsleft = 60; + photo = e.Photo; NotifyPropertyChanged(nameof(Photo)); NotifyPropertyChanged(nameof(PhotoVisible)); @@ -42,7 +71,7 @@ namespace YJMPD_UWP.ViewModels { get { - return "Take a photo within 1 minute"; + return "Take a photo within " + secondsleft + " seconds"; } } @@ -50,7 +79,10 @@ namespace YJMPD_UWP.ViewModels { get { - return photo; + if (photo == null || photo == "") + return new BitmapImage(new Uri("ms-appx:///Assets/Error.png")); + + return new BitmapImage(new Uri(photo)); } } } diff --git a/YJMPD-UWP/Views/PhotoView.xaml b/YJMPD-UWP/Views/PhotoView.xaml index 08dfff9..4a5fe53 100644 --- a/YJMPD-UWP/Views/PhotoView.xaml +++ b/YJMPD-UWP/Views/PhotoView.xaml @@ -11,14 +11,14 @@ - - - - - - -