Kaynağa Gözat

Much better photo handling

Kenneth van Ewijk 10 yıl önce
ebeveyn
işleme
f9db2b1479

+ 14 - 0
YJMPD-UWP/Helpers/EventArgs/PhotoStatusUpdatedEventArgs.cs

@@ -0,0 +1,14 @@
+using Windows.UI.Xaml.Media.Imaging;
+
+namespace YJMPD_UWP.Helpers.EventArgs
+{
+    public class PhotoStatusUpdatedEventArgs : System.EventArgs
+    {
+        public Model.PhotoHandler.PhotoStatus Status { get; private set; }
+
+        public PhotoStatusUpdatedEventArgs(Model.PhotoHandler.PhotoStatus status)
+        {
+            Status = status;
+        }
+    }
+}

+ 0 - 14
YJMPD-UWP/Helpers/EventArgs/PhotoTakenEventArgs.cs

@@ -1,14 +0,0 @@
-using Windows.UI.Xaml.Media.Imaging;
-
-namespace YJMPD_UWP.Helpers.EventArgs
-{
-    public class PhotoTakenEventArgs : System.EventArgs
-    {
-        public string Photo { get; private set; }
-
-        public PhotoTakenEventArgs(string photo)
-        {
-            Photo = photo;
-        }
-    }
-}

+ 6 - 5
YJMPD-UWP/Model/ApiHandler.cs

@@ -48,18 +48,17 @@ namespace YJMPD_UWP.Model
                 case Command.Picture:
                     if (o["selected"].ToObject<bool>() == true)
                     {
-                        Debug.WriteLine("Selected player taking picture");
                         App.Game.SetSelected(true);
                         App.Navigate(typeof(PhotoView));
                     }
                     else
-                        App.Navigate(typeof(WaitingView));
+                        App.Navigate(typeof(WaitingView), "Waiting on photo...");
 
                     App.Game.MoveToWaiting();
                     break;
                 case Command.PictureUrl:
                     if (!App.Game.Selected)
-                        App.Photo.UpdatePhotoTaken(o[Command.PictureUrl.ToString()].ToString());
+                        App.Photo.SetPhoto(o[Command.PictureUrl.ToString()].ToString());
 
                     App.Game.MoveToStarted();
                     break;
@@ -118,12 +117,14 @@ namespace YJMPD_UWP.Model
             return true;
         }
 
-        public async Task<bool> SendPicture(string url)
+        public async Task<bool> SendPhoto(string url)
         {
             JObject obj = JObject.FromObject(new
             {
                 command = Command.PictureUrl.ToString(),
-                pictureurl = url
+                pictureurl = url,
+                lon = App.Geo.Position.Coordinate.Point.Position.Longitude,
+                lat = App.Geo.Position.Coordinate.Point.Position.Latitude
             });
             await App.Network.Write(obj.ToString(Formatting.None));
 

+ 12 - 3
YJMPD-UWP/Model/GameHandler.cs

@@ -53,12 +53,21 @@ namespace YJMPD_UWP.Model
         {
             Players = new List<Player>();
             Status = GameStatus.STOPPED;
-            App.Photo.OnPhotoTaken += Photo_OnPhotoTaken;
+            App.Photo.OnStatusUpdate += Photo_OnStatusUpdate;
         }
 
-        private void Photo_OnPhotoTaken(object sender, PhotoTakenEventArgs e)
+        private void Photo_OnStatusUpdate(object sender, PhotoStatusUpdatedEventArgs e)
         {
-            App.Api.SendPicture(e.Photo);
+            switch(e.Status)
+            {
+                case PhotoHandler.PhotoStatus.UPLOADING:
+                    App.Navigate(typeof(WaitingView), "Uploading...");
+                    break;
+                case PhotoHandler.PhotoStatus.DONE:
+                    if(Selected)
+                        App.Api.SendPhoto(App.Photo.Photo);
+                    break;
+            }
         }
 
         public void AddPlayer(string username)

+ 2 - 2
YJMPD-UWP/Model/NetworkHandler.cs

@@ -18,8 +18,8 @@ namespace YJMPD_UWP.Model
 {
     public class NetworkHandler
     {
-        public delegate void OnStatusUpdatedHandler(object sender, NetworkStatusUpdatedEventArgs e);
-        public event OnStatusUpdatedHandler OnStatusUpdate;
+        public delegate void OnStatusUpdateHandler(object sender, NetworkStatusUpdatedEventArgs e);
+        public event OnStatusUpdateHandler OnStatusUpdate;
 
         public enum NetworkStatus { DISCONNECTED, CONNECTING, CONNECTED }
         public NetworkStatus Status { get; private set; }

+ 23 - 7
YJMPD-UWP/Model/PhotoHandler.cs

@@ -16,32 +16,43 @@ namespace YJMPD_UWP.Model
 {
     public class PhotoHandler
     {
-        public delegate void OnPhotoTakenHandler(object sender, PhotoTakenEventArgs e);
-        public event OnPhotoTakenHandler OnPhotoTaken;
+        public delegate void OnStatusUpdateHandler(object sender, PhotoStatusUpdatedEventArgs e);
+        public event OnStatusUpdateHandler OnStatusUpdate;
 
+        public enum PhotoStatus { NOPHOTO, TAKING, UPLOADING, DONE}
+        public PhotoStatus Status;
         public string Photo { get; private set; }
 
         public PhotoHandler()
         {
-
+            Status = PhotoStatus.NOPHOTO;
         }
 
         public void Reset()
         {
             Photo = null;
+            Status = PhotoStatus.NOPHOTO;
         }
 
-        public void UpdatePhotoTaken(string photo)
+        public void SetPhoto(string photo)
         {
             Photo = photo;
+            UpdateStatus(PhotoStatus.DONE);
+        }
+
+        private void UpdateStatus(PhotoStatus status)
+        {
+            Status = status;
 
-            if (OnPhotoTaken == null) return;
+            if (OnStatusUpdate == null) return;
 
-            OnPhotoTaken(this, new PhotoTakenEventArgs(photo));
+            OnStatusUpdate(this, new PhotoStatusUpdatedEventArgs(status));
         }
 
         public async void Take()
         {
+            UpdateStatus(PhotoStatus.TAKING);
+
             CameraCaptureUI captureUI = new CameraCaptureUI();
             captureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Png;
             captureUI.PhotoSettings.AllowCropping = false;
@@ -51,6 +62,7 @@ namespace YJMPD_UWP.Model
 
             if (photo == null)
             {
+                UpdateStatus(PhotoStatus.NOPHOTO);
                 return;
             }
 
@@ -65,9 +77,13 @@ namespace YJMPD_UWP.Model
             SoftwareBitmapSource bitmapSource = new SoftwareBitmapSource();
             await bitmapSource.SetBitmapAsync(softwareBitmapBGR8);
 
+            UpdateStatus(PhotoStatus.UPLOADING);
+
             string photoURL = await UploadImage(stream.AsStream());
 
-            UpdatePhotoTaken(photoURL);
+            Photo = photoURL;
+
+            UpdateStatus(PhotoStatus.DONE);
         }
 
         public async Task<string> UploadImage(Stream file)

+ 12 - 1
YJMPD-UWP/ViewModels/GameVM.cs

@@ -1,4 +1,7 @@
-namespace YJMPD_UWP.ViewModels
+using Windows.UI.Xaml.Media;
+using Windows.UI.Xaml.Media.Imaging;
+
+namespace YJMPD_UWP.ViewModels
 {
     public class GameVM : TemplateVM
     {
@@ -6,5 +9,13 @@
         {
 
         }
+
+        public ImageSource Photo
+        {
+            get
+            {
+                return new BitmapImage(new System.Uri(App.Photo.Photo));
+            }
+        }
     }
 }

+ 1 - 47
YJMPD-UWP/ViewModels/PhotoVM.cs

@@ -8,22 +8,17 @@ namespace YJMPD_UWP.ViewModels
 {
     public class PhotoVM : TemplateVM
     {
-        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();
+            timer.Start();
         }
 
         private void Timer_Tick(object sender, object e)
@@ -37,36 +32,6 @@ namespace YJMPD_UWP.ViewModels
             }
         }
 
-        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));
-                NotifyPropertyChanged(nameof(ControlsVisible));
-            });
-        }
-
-        public bool PhotoVisible
-        {
-            get
-            {
-                return photo != null;
-            }
-        }
-
-        public bool ControlsVisible
-        {
-            get
-            {
-                return !PhotoVisible;
-            }
-        }
-
         public string TimeOut
         {
             get
@@ -74,16 +39,5 @@ namespace YJMPD_UWP.ViewModels
                 return "Take a photo within " + secondsleft + " seconds";
             }
         }
-
-        public ImageSource Photo
-        {
-            get
-            {
-                if (photo == null || photo == "")
-                    return new BitmapImage(new Uri("ms-appx:///Assets/Error.png"));
-
-                return new BitmapImage(new Uri(photo));
-            }
-        }
     }
 }

+ 5 - 5
YJMPD-UWP/Views/GameView.xaml

@@ -7,9 +7,9 @@
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     mc:Ignorable="d">
 
-    <ScrollViewer>
-        <StackPanel Style="{StaticResource BaseStackPanel}">
-
-        </StackPanel>
-    </ScrollViewer>
+    <Grid Style="{StaticResource BaseGrid}">
+        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" ZoomMode="Enabled">
+            <Image Name="Photo" Source="{Binding Photo}"/>
+        </ScrollViewer>
+    </Grid>
 </Page>

+ 4 - 13
YJMPD-UWP/Views/PhotoView.xaml

@@ -8,17 +8,8 @@
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     mc:Ignorable="d">
 
-    <Page.Resources>
-        <convert:BoolToVisibilityConverter x:Key="BoolToVisConverter" />
-    </Page.Resources>
-
-    <Grid Style="{StaticResource BaseGrid}">
-        <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" ZoomMode="Enabled" Visibility="{Binding PhotoVisible, Converter={StaticResource BoolToVisConverter}}">
-            <Image Name="Photo" Source="{Binding Photo}"/>
-        </ScrollViewer>
-        <StackPanel Visibility="{Binding ControlsVisible, Converter={StaticResource BoolToVisConverter}}">
-            <TextBlock Text="{Binding TimeOut}" />
-            <Button Content="Take Photo" Style="{StaticResource Green}" Click="PhotoButton_Click" />
-        </StackPanel>
-    </Grid>
+    <StackPanel  Style="{StaticResource BaseStackPanel}">
+        <TextBlock Text="{Binding TimeOut}" Margin="0,5,0,10" />
+        <Button Content="Take Photo" Style="{StaticResource Green}" Click="PhotoButton_Click" />
+    </StackPanel>
 </Page>

+ 1 - 1
YJMPD-UWP/Views/WaitingView.xaml

@@ -10,7 +10,7 @@
     <RelativePanel Style="{StaticResource BaseRelativePanel}">
         <StackPanel RelativePanel.AlignHorizontalCenterWithPanel="True" RelativePanel.AlignVerticalCenterWithPanel="True" Margin="0,-50,0,0">
             <ProgressRing Width="80" Height="80" HorizontalAlignment="Center" IsActive="True" />
-            <TextBlock Text="Waiting on other players..." FontSize="20" Margin="0,20,0,0"/>
+            <TextBlock Text="Waiting..." Name="WaitingMsg" FontSize="20" Margin="0,20,0,0"/>
         </StackPanel>
     </RelativePanel>
 </Page>

+ 9 - 0
YJMPD-UWP/Views/WaitingView.xaml.cs

@@ -2,6 +2,7 @@
 using System.Diagnostics;
 using System.Threading.Tasks;
 using Windows.UI.Xaml.Controls;
+using Windows.UI.Xaml.Navigation;
 
 namespace YJMPD_UWP.Views
 {
@@ -11,5 +12,13 @@ namespace YJMPD_UWP.Views
         {
             this.InitializeComponent();
         }
+
+        protected override void OnNavigatedTo(NavigationEventArgs e)
+        {
+            string s = e.Parameter as string;
+
+            if (s != null)
+                WaitingMsg.Text = s;
+        }
     }
 }

+ 1 - 1
YJMPD-UWP/YJMPD-UWP.csproj

@@ -100,7 +100,7 @@
     <Compile Include="Helpers\EventArgs\GameStatusUpdatedEventArgs.cs" />
     <Compile Include="Helpers\EventArgs\HeadingUpdatedEventArgs.cs" />
     <Compile Include="Helpers\EventArgs\NetworkStatusUpdatedEventArgs.cs" />
-    <Compile Include="Helpers\EventArgs\PhotoTakenEventArgs.cs" />
+    <Compile Include="Helpers\EventArgs\PhotoStatusUpdatedEventArgs.cs" />
     <Compile Include="Helpers\EventArgs\PositionStatusUpdatedEventArgs.cs" />
     <Compile Include="Helpers\EventArgs\PositionUpdatedEventArgs.cs" />
     <Compile Include="Helpers\Extensions.cs" />