Much better photo handling

This commit is contained in:
2016-01-20 15:33:48 +01:00
parent ca793f7ff4
commit f9db2b1479
13 changed files with 90 additions and 99 deletions
@@ -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;
}
}
}
+6 -5
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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)
+12 -1
View 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));
}
}
}
}
+1 -47
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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" />