using NAudio.Wave;
using NFCSharp;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using System.Media;
using System.Threading;
using System.Net;
using Newtonsoft.Json;
//20190807 - kill all timers when going to settings - maanie
//20190808 - run update function in a separate thread - maanie
namespace MagusEvents
{
///
/// Interaction logic for Scan.xaml
///
public partial class Scan : Page
{
DispatcherTimer Timer = new DispatcherTimer();
SoundPlayer OK_Mplayer = new System.Media.SoundPlayer();
SoundPlayer No_Mplayer = new System.Media.SoundPlayer();
DispatcherTimer UpdateImage = new DispatcherTimer();
DispatcherTimer UpdateCheck = new DispatcherTimer();
public Frame main;
public Frame Header;
Database DATA = new Database();
Webservices online = new Webservices();
//bool nfcBusy = false;
private int nfcBusy = 0;
int AID;
public int BUSY = 0;
private string currentDirectory;
string IMAGE = "";
public Scan()
{
InitializeComponent();
AID = DATA.GetAccreditationID();
string path = @"c:\temp_acc\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
Events Eventsprofile = DATA.GetEvent(AID.ToString());
if (Eventsprofile.Logo != "")
{
IMAGE = Eventsprofile.Logo;
ProfileImage.Source = Base64StringToBitmap(IMAGE);
}
else
{
IMAGE = "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBw8ODg4PDhEQDQ4PDw0QDQ8ODQ8PDQ0PFREWFhYRExMYHSggGBolGxUTITEhJSkrLi4uFx8zODMsNygtLisBCgoKDg0NFQ8PFSsZFRkrLTcrKy0rKys3Ny0tNzcrKzctLSsrKysrKysrKysrKysrKysrKysrKysrKysrKysrK//AABEIAOEA4QMBIgACEQEDEQH/xAAaAAEAAwEBAQAAAAAAAAAAAAAAAwQFAQIH/8QAMRABAAECBAQFAgUFAQAAAAAAAAECEQMEITESMlFxQWGBkbEiwUJScqHRgpLh8PEF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/8QAFhEBAQEAAAAAAAAAAAAAAAAAAAER/9oADAMBAAIRAxEAPwD7UAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhzGZpo0nWqdqY3UsTHxKt54Y6U6e8pq40aq4jeYjvMI5zWH+aP3lm8EdL99XqIjomri/Gcw/zR7T/D3Tj0TtVT7s0mmOhpjWGTTM08szT2nT2WsLOTGlf90feF1MXAjW0xrEioAAAAAAAAAAAAAAAAAAIM1j8Eaa1Tyx907Lrr46pqnx0p8oS1Y8RG8zrM7z1ehxloAAAB0cAT5bG4Jt+Gd/LzX2UvZPEvTad6fhZWbE4DSAAAAAAAAAAAAAAAAK+erthzEb1Wp91Fb/8AQ2o7zP7KrNajgCKAAAAAAJ8pVauPPRA94fNT3j5IjTAbZAAAAAAAAAAAAAAAAVM/+DvV8Qqref2p7z8KjNajgCKAAAAAAPeHzU94+XhJhc1PeAaQDbAAAAAAAAAAAAAAAACrn+Wn9X2lTXM/y0/q+0qbNagAigAAAAACTB5qe8I0mDzU94EaQDbIAAAAAAAAAAAAAAACvno+iJ6VRP2UmljUcVNUdY07sxmtQARQAAAAABLlovXT3RLWSp1mekERcAbZAAAAAAAAAAAAAAAAGfmaOGqek6x2aCvnKL038afhKsUQGWgAAAAABpZajhpjrOsqWXo4qo6by0VjNAGkAAAAAAAAAAAAAAAACYAGZi0cNUx7dnhfzeFxReN4+OiixWo4AKAAOiXLYXFV5Rv/AAIs5TDtTed5+E4NsgAAAAAAAAAAAAAAAAI8bHpo5pt5bz7AkFCvO1TyRaOtW/pCCviq5qpq8r6eyauNCvNYdO9UX6RrKliV01TemJiPOLPEUxG0WdTVxwBFAAFvBzOHTFtaeszGk+qo6I06MSmrlmJ7TD1ZkTTH/N0tGPXTtPFHSrX911MaQrYedpnmiaJ96fdYib6xq0joAAAAAAAAAAPNdcUxeqYiPMHpHjY1NEfVNukeM+iri52Z0w4tH5p39IVuHW86zPjOspq4mxM3XVy/RT1/FP8ACGKIjXees6y6Mq6OAoAAAAAAAA64AO4dU08s28vCfRwEXMLORtX9M9fw/wCFqGU9YWJVRyzp+WdpXTGmIMLNU1aT9NXSdp7SnaZAAAAHKqoiLzNojxl4x8aKIvPpHjLOxK6q5vX6UxtCWrIsY2dmdMOP6qvtCrVF5vVM1T5+Ho9OM2qACgAAAAAAAAAAAAAAAAAEveHjV07TeOlWvtPg8ANDBzNNWnLV0nx7T4pmTKzl81MWiqbx4T08pWVnF0OKOse40jKqrmueKfHljpA4MNgAAAAAAAAAAAAAAAAAAAAAAAAAFv8AbgABcuAFy4AXLgBcuAFy4AXLgBcuAFy4AXLgBcuAFy4AXLgBcuAFy4AXAX4dBQAQAAAAAAAAAAAAAAAAAAAAAAAAAAf/2Q==";
ProfileImage.Source = Base64StringToBitmap(IMAGE);
}
Scanning.Focus();
InitializeComponent();
Timer = new DispatcherTimer();
Timer.Interval = TimeSpan.FromSeconds(10);
Timer.Tick += new EventHandler(reset);
//20190716 - this has been moved to the "Download Data" button - maanie
//20190711 - added back updating of image and details - maanie
//20190802 - added flag to work offline - maanie
string WorkMode = (string) App.Current.Properties["WorkMode"];
if (WorkMode == "ON")
{
UpdateImage = new DispatcherTimer();
UpdateImage.Interval = TimeSpan.FromSeconds(120); //120
UpdateImage.Tick += new EventHandler(Download_Image);
UpdateImage.Start();
UpdateCheck = new DispatcherTimer();
UpdateCheck.Interval = TimeSpan.FromSeconds(240); //240
UpdateCheck.Tick += new EventHandler(Download_UpdateAsync);
UpdateCheck.Start();
WorkModeMessage.Content = "You are working online";
WorkModeMessage.Foreground = Brushes.Green;
}
else
{
WorkModeMessage.Content = "You are working offline";
WorkModeMessage.Foreground = Brushes.Red;
}
currentDirectory = System.IO.Directory.GetCurrentDirectory();
OK_Mplayer.SoundLocation = currentDirectory + "\\images\\ok.wav";
OK_Mplayer.Load();
No_Mplayer.SoundLocation = currentDirectory + "\\images\\Bazz.wav";
No_Mplayer.Load();
// Load the .wav file.
/*if (!NFCHandler.IsInitialized)
{
NFCHandler.Init();
startpulling();
}
else
{
startpulling();
}*/
}
Thread thread_Update;
private void Download_UpdateAsync(object sender, EventArgs e)
{
try
{
bool is_online = online.CheckForInternetConnection();
if (is_online == true)
{
if (DownloadingImg == 0)
{
//20190808 - run update function in a separate thread - maanie
thread_Update = new Thread(() =>
{
Webservices Service = new Webservices();
Service.CheckUpdates();
});
thread_Update.Start();
}
}
}
catch //(Exception error)
{
thread_Update.Abort();
//MessageBox.Show(error.ToString());
}
}
//------------------------------NFC SCANNOR--------------------------------------
// GET NEW UPDATES
Thread thread_Image;
Thread thread;
Thread thread_new;
public int Busy_downloading = 0;
public int DownloadingImg = 0;
private void Download_Image(object sender, EventArgs e)
{
try
{
bool is_online = online.CheckForInternetConnection();
if (is_online == true)
{
Console.WriteLine("Download ..");
Person PersonDb = new Person();
Person profile = PersonDb.GetImagesUpdates();
if (DownloadingImg == 0 && profile.AAID > 0)
{
if (AID > 0)
{
DownloadingImg = 1;
thread_Image = new Thread(() =>
{
using (var client = new WebClient())
{
string url = "https://footprintapp.net/api/accreditation/getimages/ac/" + AID + "/id/" + profile.AAID;
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadPicProgressChanged);
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadPicFileCompleted);
client.DownloadStringAsync(new Uri(url));
}
});
thread_Image.Start();
}
}
else
{
UpdateImage.Stop();
}
}
}
catch //(Exception error)
{
thread_Image.Abort();
//MessageBox.Show(error.ToString());
}
}
private void DownloadPicFileCompleted(object sender, DownloadStringCompletedEventArgs e)
{
Dispatcher.BeginInvoke(new Action(delegate
{
try
{
string htmldoc = e.Result;
string Web_Data = Convert.ToString(htmldoc);
Web_Data = Web_Data.Replace("'", "\'");
var JsonObjects = JsonConvert.DeserializeObject(Web_Data);
Database SQL = new Database();
int i = 0;
foreach (var Services in JsonObjects)
{
if (Services.User_pic != "NULL")
{
string path = @"c:\temp_acc\" + Services.AAID + ".txt";
//Console.WriteLine("Saving .."+ path);
try
{
string IMG = Services.User_pic.ToString();
System.IO.File.WriteAllText(path, IMG);
}
catch
{
}
}
string sql = "UPDATE Persons SET " +
" User_pic = '1' " +
" WHERE AAID = '" + Services.AAID + "'; ";
Console.WriteLine("Saving .." + sql);
bool updated = SQL.ExecuteData(sql);
i++;
}
}
catch { }
}));
DownloadingImg = 0;
thread_Image.Abort();
}
private void DownloadPicProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
}
private void startpulling()
{
if (!NFCHandler.IsInitialized) return;
if (NFCHandler.Readers.Count() > 0)
{
NFCHandler.Readers[0].TagFound += Snapscan;
NFCHandler.Readers[0].StartPolling();
}
}
private void Snapscan(NFCTag Tag)
{
if (Tag != null)
{
BUSY = 1;
string code = "";
if (nfcBusy == 0)
{
code = Tag.UID.ToString();
if (code.Length == 11)
{
this.Dispatcher.Invoke(() =>
{
nfcBusy = 1;
Timer.Stop();
UserProfile(code, 1);
});
}
}
}
}
private void reset(object sender, EventArgs e)
{
Console.WriteLine("REST:");
Timer.Stop();
Scan Page = new Scan();
main.Content = Page;
Page.main = main;
Page.Header = Header;
}
private void GoToSettings(object sender, MouseButtonEventArgs e)
{
Timer.Stop();
//20190807 - kill all timers when going to settings - maanie
UpdateImage.Stop();
UpdateCheck.Stop();
Setup Page = new Setup();
main.Content = Page;
Page.main = main;
Page.Header = Header;
}
private string Barcode = string.Empty; //TO DO use a StringBuilder instead
Stopwatch sw = new Stopwatch();
DispatcherTimer ST = new DispatcherTimer();
bool busy_scanning = false;
private void ScanninAcc(object sender, KeyEventArgs e)
{
try
{
Timer.Stop();
Barcode = Scanning.Text;
if (e.Key == Key.Tab || e.Key == Key.Return)
{
ST = new DispatcherTimer();
ST.Tick += new EventHandler(Scaning);
ST.Start();
Scanning.Text = "";
}
}
catch { }
}
private void Scaning(object sender, EventArgs e)
{
try
{
if (busy_scanning == false)
{
Timer.Stop();
busy_scanning = true;
ST.Stop();
Scanning.Focus();
/*Profile Page = new Profile();
main.Content = Page;
Page.main = main;
Page.barcode = Barcode;
Page.UserProfile();*/
UserProfile(Barcode);
Console.WriteLine(Barcode);
Barcode = "";
busy_scanning = false;
}
else
{
Barcode = "";
}
}
catch { }
}
public void UserProfile(string Bar_code, int nfc = 0)
{
Timer.Start();
this.Dispatcher.Invoke(() =>
{
if (AID > 0 && Barcode != "")
{
// Default.Visibility = Visibility.Hidden;
try
{
Person ProfleDb = new Person();
Person Profile;
if (nfc == 1)
{
Profile = ProfleDb.GetByNFC(Bar_code, AID);
}
else
{
Profile = ProfleDb.GetRow(Bar_code, AID);
}
int Active = 0;
if (Profile.AASID > 0)
{
foundData.Visibility = Visibility.Visible;
NotfoundData.Visibility = Visibility.Hidden;
try
{
string path = @"c:\temp_acc\" + Profile.AAID + ".txt";
if (File.Exists(path))
{
string img = System.IO.File.ReadAllText(path);
string[] imgPlit = img.Split(',');
ProfileImage.Source = Base64StringToBitmap(imgPlit[1]); ;
}
else
{
ProfileImage.Source = Base64StringToBitmap(IMAGE);
}
}
catch { }
FullName.Text = Profile.FirstName + " " + Profile.Surname;
CompanyName.Text = Profile.organisation;
CategoryName.Text = Profile.Category;
Role_Name.Text = Profile.Role;
if (Profile.RoleColor != "")
{
Role_Name_color.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString(Profile.RoleColor));
}
else
{
Role_Name_color.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00981E"));
}
int AllAccess = 0;
string ZONES = Profile.aZones;
string newstr = ZONES.Replace("\"", "");
string newstr1 = newstr.Replace("[", "");
string newstr2 = newstr1.Replace("]", "");
bool FULLACCESS = newstr2.Contains("312");
string TIME_Split = DateTime.Now.ToString("HHmm");
int TIME_int = Convert.ToInt32(TIME_Split);
Zones ActivezonesDb = new Zones();
List ActiveZones = new List();
int CountLocked = DATA.GetLockedCount(AID.ToString());
if (CountLocked > 0)
{
ActiveZones = ActivezonesDb.GetActiveByArrayLocked(newstr2, AID.ToString());
}
else
{
ActiveZones = ActivezonesDb.GetActiveByArray(newstr2, AID.ToString());
}
if (FULLACCESS == true)
{
AllAccess = 1;
ActiveZones = ActivezonesDb.GetActiveByArray(newstr2, AID.ToString());
}
List ActiveZonesNew = new List();
foreach (Zones row in ActiveZones)
{
Console.WriteLine("Zone Number:" + row.Number);
string FromTime = row.FromTime;
string ToTime = row.ToTime;
string FromTime_Spling = FromTime.Replace(":", "");
string ToTime_Spling = ToTime.Replace(":", "");
int FromTime_int = Convert.ToInt32(FromTime_Spling);
int ToTime_int = Convert.ToInt32(ToTime_Spling);
if (FromTime_int == 0 && ToTime_int == 0)
{
ActiveZonesNew.Add(row);
}
else
{
if (TIME_int >= FromTime_int && TIME_int <= ToTime_int)
{
ActiveZonesNew.Add(row);
}
}
}
string base64 = "";
foreach (Zones row in ActiveZonesNew)
{
Active = 1;
if (row.ZTID == 24)
{
AllAccess = 1;
base64 = row.Icon;
}
}
pycons.Children.Clear();
ResetZones();
if (AllAccess == 1)
{
Active = 1;
AllAccessWrapa.Visibility = Visibility.Visible;
ResetZonesIcons(base64);
}
else
{
getZones(newstr2);
}
//check if he has all access
}
else
{
foundData.Visibility = Visibility.Hidden;
NotfoundData.Visibility = Visibility.Visible;
FullName.Text = "Invalid";
CompanyName.Text = "N/A";
CategoryName.Text = "N/A";
Role_Name.Text = "N/A";
ProfileImage.Source = Base64StringToBitmap(IMAGE);
}
if (Active == 1)
{
Allowed();
string file = @"c:\temp_acc\scan.txt";
string report = System.IO.File.ReadAllText(file);
string date = DateTime.Now.ToString("yyyy-MM-dd");
string TIME_Split = DateTime.Now.ToString("HHmm");
string newReport = report + Profile.AASID + "|" + date + "|" + TIME_Split + "|" + Profile.FirstName + " " + Profile.Surname + "|1|0|;";
System.IO.File.WriteAllText(file, newReport);
ScanningWrapa.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00981E"));
ScanningText.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ffffff"));
ScanningText.Text = "GRANTED";
}
else
{
NotAllowed();
string file = @"c:\temp_acc\scan.txt";
string report = System.IO.File.ReadAllText(file);
string date = DateTime.Now.ToString("yyyy-MM-dd");
string TIME_Split = DateTime.Now.ToString("HHmm");
string newReport = report + Profile.AASID + "|" + date + "|" + TIME_Split + "|" + Profile.FirstName + ";";
System.IO.File.WriteAllText(file, newReport);
ScanningWrapa.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#BF360C"));
ScanningText.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ffffff"));
ScanningText.Text = "DENIED";
}
}
catch (Exception error)
{
MessageBox.Show(error.ToString());
}
nfcBusy = 0;
}
});
}
private void ResetZonesIcons(string base64 = "")
{
try
{
pycons.Children.Clear();
int i = 0;
while (i < 4)
{
Border B = new Border();
B.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#6193AF"));
B.Height = 120;
B.Width = 120;
B.Margin = new Thickness(0, 0, 15, 0);
if (base64 != "" && i == 0)
{
ImageBrush ib = new ImageBrush();
ib.ImageSource = Base64StringToBitmap(base64);
ib.Stretch = Stretch.UniformToFill;
B.Background = ib;
Image_0.CornerRadius = new CornerRadius(15);
}
else
{
B.CornerRadius = new CornerRadius(120);
}
pycons.Children.Add(B);
i++;
}
}
catch { }
}
private void ResetZones()
{
try
{
AllAccessWrapa.Visibility = Visibility.Hidden;
ZonesWrapa.Children.Clear();
int r = 0;
int index = 0;
while (r < 3)
{
StackPanel zSTK = new StackPanel();
zSTK.HorizontalAlignment = HorizontalAlignment.Left;
zSTK.Orientation = Orientation.Horizontal;
int c = 0;
while (c < 5)
{
Border border = new Border();
border.Height = 120;
border.Width = 120;
border.Margin = new Thickness(0, 15, 15, 0);
border.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#6193AF")); ;
zSTK.Children.Add(border);
c++;
index++;
}
ZonesWrapa.Children.Add(zSTK);
r++;
}
}
catch { }
}
private void getZones(string Zones)
{
try
{
AllAccessWrapa.Visibility = Visibility.Hidden;
Zones DB = new Zones();
List ZonesObjects = DB.GetByArray(Zones, 0);
ZonesWrapa.Children.Clear();
int r = 0;
int index = 0;
while (r < 3)
{
StackPanel zSTK = new StackPanel();
zSTK.HorizontalAlignment = HorizontalAlignment.Left;
zSTK.Orientation = Orientation.Horizontal;
List ICONS = new List();
int c = 0;
while (c < 5)
{
Border border = new Border();
border.Height = 120;
border.Width = 120;
border.Margin = new Thickness(0, 15, 15, 0);
if (index < ZonesObjects.Count)
{
if (ZonesObjects[index].Hidden == 1)
{
if (ZonesObjects[index].Icon != "")
{
border.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#6193AF"));
ICONS.Add(ZonesObjects[index].Icon);
}
}
else
{
border.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#fff")); ;
TextBlock Txt = new TextBlock();
Txt.HorizontalAlignment = HorizontalAlignment.Center;
Txt.TextWrapping = TextWrapping.Wrap;
Txt.Text = ZonesObjects[index].Number.ToString();
Txt.VerticalAlignment = VerticalAlignment.Center;
Txt.TextAlignment = TextAlignment.Center;
Txt.FontSize = 60;
Txt.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#505050"));
Txt.FontWeight = FontWeights.Bold;
Txt.FontFamily = new FontFamily("Segoe UI Semibold");
border.Child = Txt;
}
}
else
{
border.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#6193AF"));
}
zSTK.Children.Add(border);
c++;
index++;
}
//ADD ICONS
int j = 0;
foreach (string icon in ICONS)
{
AddZonesIcons(icon);
j++;
}
ZonesWrapa.Children.Add(zSTK);
r++;
}
}
catch { }
}
private void AddZonesIcons(string base64 = "")
{
try
{
Border B = new Border();
B.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#6193AF"));
B.Height = 120;
B.Width = 120;
B.Margin = new Thickness(0, 0, 15, 0);
if (base64 != "")
{
ImageBrush ib = new ImageBrush();
ib.ImageSource = Base64StringToBitmap(base64);
ib.Stretch = Stretch.UniformToFill;
B.Background = ib;
B.CornerRadius = new CornerRadius(15);
}
else
{
B.CornerRadius = new CornerRadius(120);
}
pycons.Children.Add(B);
}
catch { }
}
private void NotAllowed()
{
try
{
this.Dispatcher.Invoke(() =>
{
No_Mplayer.Play();
});
//Scanning.Text = string.Empty;
//Scanning.Focus();
}
catch { }
}
private void playSound_OK()
{
try
{
SystemSounds.Beep.Play();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
private void playSound_No()
{
try
{
No_Mplayer.PlaySync();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
private void Allowed()
{
try
{
this.Dispatcher.Invoke(() =>
{
SystemSounds.Asterisk.Play();
//OK_Mplayer.Play();
});
}
catch { }
}
public static BitmapImage Base64StringToBitmap(string base64String)
{
var imgBytes = Convert.FromBase64String(base64String);
BitmapImage bitmapImage = new BitmapImage();
MemoryStream ms = new MemoryStream(imgBytes);
bitmapImage.BeginInit();
bitmapImage.StreamSource = ms;
bitmapImage.EndInit();
return bitmapImage;
}
}
}