Much better photo handling
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
if (OnPhotoTaken == null) return;
|
||||
private void UpdateStatus(PhotoStatus status)
|
||||
{
|
||||
Status = status;
|
||||
|
||||
OnPhotoTaken(this, new PhotoTakenEventArgs(photo));
|
||||
if (OnStatusUpdate == null) return;
|
||||
|
||||
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)
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user