| 
					
				 | 
			
			
				@@ -0,0 +1,193 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.Collections.Generic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+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.Shapes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.IO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.Net; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Newtonsoft.Json; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using Newtonsoft.Json.Linq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.Text.RegularExpressions; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.Data.SqlClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.Data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+using System.Configuration; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+namespace kursach.Windows 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// Логика взаимодействия для Search.xaml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public partial class Search : Window 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        string connectionString; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SqlDataAdapter adapter = new SqlDataAdapter(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DataTable usersTable = new DataTable(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public Search() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            InitializeComponent(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                string answer = Connect("https://opensky-network.org/api/states/all"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                planeGrid.ItemsSource = GetPlaneList(answer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catch 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MessageBox.Show("Проблемы с подключением..."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //получаем строку подключения из app.config 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //подключение к api 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public string Connect(string apiUrl) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            WebRequest request = WebRequest.Create(apiUrl); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            request.Method = "GET"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            WebResponse response = request.GetResponse(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            string answer = string.Empty; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            using (Stream s = response.GetResponseStream()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    answer = reader.ReadToEnd(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            response.Close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return answer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Plane> planeList = new List<Plane>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Plane> subPlaneList = new List<Plane>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //заполнение основного листа 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public List<Plane> GetPlaneList(string answer) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            JObject answerJson = JObject.Parse(answer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            IList<JToken> results = answerJson["states"].Children().ToList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            foreach (JToken result in results) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<string> resultString = result.ToString().TrimStart('[').TrimEnd(']').Split(',').ToList<string>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Plane plane = new Plane(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                plane.Icao24 = resultString[0].Trim().TrimStart('"').TrimEnd('"'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                plane.Callsign = resultString[1].Trim().TrimStart('"').TrimEnd('"'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                plane.Country = resultString[2].Trim().TrimStart('"').TrimEnd('"'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                plane.Longitude = resultString[5].Trim(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                plane.Latitude = resultString[6].Trim(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                plane.On_ground = resultString[8].Trim(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                plane.Velocity = resultString[9].Trim(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                plane.Altitude = resultString[13].Trim(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                planeList.Add(plane); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return planeList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //возврат к предыдущему окну 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private void Back(object sender, RoutedEventArgs e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //вернуться назад 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MainWindow main = new MainWindow(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            main.Show(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //поиск 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private void Find(object sender, RoutedEventArgs e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            planeGrid.ItemsSource = new List<Plane>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            subPlaneList.Clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Regex regex1 = new Regex(@"(\w*)" + SearchCountry.Text + @"(\w*)"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Regex regex2 = new Regex(@"(\w*)" + SearchCallsign.Text + @"(\w*)"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            foreach (Plane plane in planeList) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (regex1.IsMatch(plane.Country) && SearchCallsign.Text == "") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { subPlaneList.Add(plane); } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (regex2.IsMatch(plane.Callsign) && SearchCountry.Text == "") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { subPlaneList.Add(plane); } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (regex1.IsMatch(plane.Country) && regex2.IsMatch(plane.Callsign)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { subPlaneList.Add(plane); } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            planeGrid.ItemsSource = subPlaneList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //добавление в избранное 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private void Fav(object sender, RoutedEventArgs e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (Menu.UserId == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MessageBox.Show("Эта функция доступна только авторизированным пользователям"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(planeGrid.SelectedItem != null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Plane plane = (Plane)planeGrid.SelectedItem; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    MessageBox.Show(plane.Icao24); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SqlConnection connection = new SqlConnection(connectionString); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    connection.Open(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    SqlCommand command = new SqlCommand(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    command.CommandText = "INSERT INTO Favourites VALUES(" + Menu.UserId + ", '" + plane.Icao24 + "')"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    command.Connection = connection; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    adapter.SelectCommand = command; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    adapter.Fill(usersTable); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    connection.Close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    MessageBox.Show("Нет выделенной строки"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //обновление данных 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private void Upd(object sender, RoutedEventArgs e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            planeGrid.ItemsSource = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            planeList.Clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                string answer = Connect("https://opensky-network.org/api/states/all"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                planeGrid.ItemsSource = GetPlaneList(answer); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catch 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                MessageBox.Show("Проблемы с подключением..."); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public class Plane 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public string Icao24 { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public string Callsign { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public string Country { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public string Longitude { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public string Latitude { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public string Altitude { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public string Velocity { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        public string On_ground { get; set; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |