Исходный код утилиты
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.28010.2041
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Send_multimedia", "Send_multimedia\Send_multimedia.csproj", "{9C2C0CC0-55A7-481D-A6B5-FFB7DF03B7F8}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{9C2C0CC0-55A7-481D-A6B5-FFB7DF03B7F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9C2C0CC0-55A7-481D-A6B5-FFB7DF03B7F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9C2C0CC0-55A7-481D-A6B5-FFB7DF03B7F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9C2C0CC0-55A7-481D-A6B5-FFB7DF03B7F8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {F22D503B-17F9-4B33-A947-01BA94C840AA}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
@@ -0,0 +1,40 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Send_multimedia
|
||||
{
|
||||
class Config
|
||||
{
|
||||
public string path;
|
||||
|
||||
[DllImport("kernel32")]
|
||||
private static extern long WritePrivateProfileString(string section,
|
||||
string key, string val, string filePath);
|
||||
[DllImport("kernel32")]
|
||||
private static extern int GetPrivateProfileString(string section,
|
||||
string key, string def, StringBuilder retVal,
|
||||
int size, string filePath);
|
||||
|
||||
public Config(string INIPath)
|
||||
{
|
||||
path = INIPath;
|
||||
}
|
||||
|
||||
public void Write(string Section, string Key, string Value)
|
||||
{
|
||||
WritePrivateProfileString(Section, Key, Value, this.path);
|
||||
}
|
||||
|
||||
public string Read(string Section, string Key)
|
||||
{
|
||||
StringBuilder temp = new StringBuilder(255);
|
||||
int i = GetPrivateProfileString(Section, Key, "", temp,
|
||||
255, this.path);
|
||||
return temp.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
namespace Send_multimedia
|
||||
{
|
||||
partial class Form1
|
||||
{
|
||||
/// <summary>
|
||||
/// Обязательная переменная конструктора.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Освободить все используемые ресурсы.
|
||||
/// </summary>
|
||||
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Код, автоматически созданный конструктором форм Windows
|
||||
|
||||
/// <summary>
|
||||
/// Требуемый метод для поддержки конструктора — не изменяйте
|
||||
/// содержимое этого метода с помощью редактора кода.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
|
||||
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.lab_versionPO = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// notifyIcon1
|
||||
//
|
||||
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
|
||||
this.notifyIcon1.Text = "Tele2Med";
|
||||
this.notifyIcon1.Visible = true;
|
||||
this.notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick);
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Font = new System.Drawing.Font("Roboto", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
|
||||
this.label1.Location = new System.Drawing.Point(12, 9);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(172, 15);
|
||||
this.label1.TabIndex = 0;
|
||||
this.label1.Text = "Отправка медиа файлов ...";
|
||||
//
|
||||
// lab_versionPO
|
||||
//
|
||||
this.lab_versionPO.AutoSize = true;
|
||||
this.lab_versionPO.Location = new System.Drawing.Point(1, 53);
|
||||
this.lab_versionPO.Name = "lab_versionPO";
|
||||
this.lab_versionPO.Size = new System.Drawing.Size(63, 13);
|
||||
this.lab_versionPO.TabIndex = 1;
|
||||
this.lab_versionPO.Text = "Версия ПО";
|
||||
//
|
||||
// Form1
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(294, 78);
|
||||
this.Controls.Add(this.lab_versionPO);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximizeBox = false;
|
||||
this.Name = "Form1";
|
||||
this.Text = "Отправка мультимедии";
|
||||
this.TopMost = true;
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
|
||||
this.Load += new System.EventHandler(this.Form1_Load);
|
||||
this.Resize += new System.EventHandler(this.Form1_Resize);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.NotifyIcon notifyIcon1;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label lab_versionPO;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,862 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using NReco.VideoConverter;
|
||||
using System.Reflection;
|
||||
|
||||
namespace Send_multimedia
|
||||
{
|
||||
public partial class Form1 : Form
|
||||
{
|
||||
#region Переменные
|
||||
string uniq = ""; //идентификатор арма
|
||||
string typeDataBase; //тип базы данных
|
||||
public string apiway = ""; //адрес куда отправляем данные
|
||||
string path_file;//ссылка до папки, где лежат фото и видео осмотров
|
||||
TimeSpan ts;//переменная для времени, через которое делается запрос на наличие нового файла
|
||||
|
||||
string link_DB; //ссылка на файл с БД
|
||||
string path_folderDB = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), @"tele2med\DB"); //ссылка на папку с БД
|
||||
private Config cfg; //для чтения из класса Config ini файлы
|
||||
private Config configuration; //для чтения из класса Config2 ini файлы
|
||||
|
||||
//Server srv;
|
||||
LogFiles logF = LogFiles.shared; //экземпляр класса записи логов в файл
|
||||
Server srv;
|
||||
|
||||
System.Net.Security.RemoteCertificateValidationCallback mIgnoreBadCertificates = new System.Net.Security.RemoteCertificateValidationCallback(delegate { return true; }); //отключаем проверку доверительных сертификатов
|
||||
#endregion
|
||||
|
||||
|
||||
public Form1()
|
||||
{
|
||||
InitializeComponent();
|
||||
srv = new Server(); //объект класса
|
||||
logF.write_logLinkSRV(); //запуск цикла с записью логов
|
||||
folderDB(); //проверяем есть ли папка для базы данных
|
||||
Read_ini_config2();//чтение ини файла config 2
|
||||
}
|
||||
|
||||
void folderDB()
|
||||
{
|
||||
if (!Directory.Exists(path_folderDB))
|
||||
{
|
||||
Directory.CreateDirectory(path_folderDB); //создаем папку для базы данных если ее нет
|
||||
}
|
||||
}
|
||||
|
||||
void Read_ini()
|
||||
{
|
||||
#region Чтение ini файла
|
||||
try
|
||||
{
|
||||
logF.writeLog_toFile("Read_ini", "Start read", "success", "Начало чтения файла ini"); //запись лога
|
||||
string Path_config = new FileInfo("config.ini").FullName.ToString(); //открытие ини файла
|
||||
|
||||
cfg = new Config(Path_config);
|
||||
|
||||
if (File.Exists("config.ini")) //Если фаил конфигурации существует
|
||||
{
|
||||
uniq = cfg.Read("Setting", "uniq_id"); //Читает параметр Username
|
||||
apiway = cfg.Read("Setting", "apiwaycheckup");
|
||||
srv.Data_ini(apiway, uniq);
|
||||
}
|
||||
else
|
||||
{
|
||||
logF.writeLog_toFile("Read_ini", "Finish read", "error", "Ошибка чтения файла ini, файл не найден"); //запись лога
|
||||
}
|
||||
|
||||
logF.writeLog_toFile("Read_ini", "Finish read", "success", "Чтение файла ini завершено: " + "uniq = " + uniq + " apiway = " + apiway); //запись лога
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logF.writeLog_toFile("Read_ini", "Finish read", "error", "Ошибка чтения файла ini " + ex.ToString()); //запись лога
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
void Read_ini_config2() //чтение ини файла config 2
|
||||
{
|
||||
#region Чтение файла config2.ini
|
||||
try
|
||||
{
|
||||
logF.writeLog_toFile("Read_ini_config2", "Start read ini_config2", "success", "Начало чтения файла config2.ini"); //запись лога
|
||||
string Path_config2_ini = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), @"tele2med\config2.ini"); //ссылка на файл с ини файлом
|
||||
|
||||
configuration = new Config(Path_config2_ini);
|
||||
|
||||
if (File.Exists(Path_config2_ini)) //Если фаил конфигурации существует
|
||||
{
|
||||
typeDataBase = configuration.Read("Setting", "typeDB"); //Читает параметр typeDB
|
||||
srv.Data_ini_config2(typeDataBase);
|
||||
}
|
||||
else
|
||||
{
|
||||
logF.writeLog_toFile("Read_ini_config2", "Finish read", "error", "Ошибка чтения файла config2.ini, файл не найден"); //запись лога
|
||||
}
|
||||
|
||||
logF.writeLog_toFile("Read_ini_config2", "Finish read", "success", "Чтение файла config2.ini завершено: " + "typeDataBase = " + typeDataBase); //запись лога
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logF.writeLog_toFile("Read_ini_config2", "Finish read", "error", "Ошибка чтения файла config2.ini " + ex.ToString()); //запись лога
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
void choose_file()
|
||||
{
|
||||
#region Проверка наличия файла на отправку
|
||||
|
||||
DataBase valueDB = new DataBase();
|
||||
|
||||
//////////////////////////////////////
|
||||
// запрос
|
||||
string sql_select = "select top 1 * from [tab_FilesForSend] where type=0 order by id";
|
||||
|
||||
try
|
||||
{
|
||||
using (SqlConnection connection = new SqlConnection(link_DB))
|
||||
{
|
||||
SqlCommand command = new SqlCommand(sql_select, connection);
|
||||
connection.Open();
|
||||
|
||||
try
|
||||
{
|
||||
using (SqlDataReader Reader = command.ExecuteReader())
|
||||
{
|
||||
while (Reader.Read())
|
||||
{
|
||||
valueDB.idDB = Reader["id"].ToString();
|
||||
valueDB.numDB = Reader["num"].ToString();
|
||||
valueDB.sessionDB = Reader["session"].ToString();
|
||||
valueDB.filenameDB = Reader["filename"].ToString();
|
||||
valueDB.checkup_idDB = Reader["checkup_id"].ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logF.writeLog_toFile("choose_file", "Select data", "error", "Ошибка поиска " + ex.ToString()); //запись лога
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logF.writeLog_toFile("choose_file", "Select data", "error", "Ошибка соединения с БД " + ex.ToString()); //запись лога
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
|
||||
#region Существует ли файл
|
||||
|
||||
if (valueDB.filenameDB != null) //Проверяем, а в базе данных вообще есть файлы
|
||||
{
|
||||
string linkPh = Path.Combine(path_file, valueDB.filenameDB + ".jpg"); //фото
|
||||
string linkVid = Path.Combine(path_file, valueDB.filenameDB + ".avi");//видео
|
||||
|
||||
if (File.Exists(linkPh) || File.Exists(linkVid)) //проверяем существует ли такой файл (возможно его уже кто-то удалил)
|
||||
{
|
||||
try
|
||||
{
|
||||
srv.AddFileToQueue(valueDB); //добавляем данные медиа файла в очередь
|
||||
logF.writeLog_toFile("choose_file", "Add file in DB", "success", "Медиа файл добавлен в очередь: " + valueDB.filenameDB + " тип файла: " + valueDB.numDB); //запись лога
|
||||
change_type(valueDB); //меняем в бд переменную на 1, чтобы понимать, что файл уже передан в очередь
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logF.writeLog_toFile("choose_file", "Add file in DB", "error", "Произошла ошибка добавления медиа файла в очередь: " + "строка: " + valueDB.idDB + " имя: " + valueDB.filenameDB + " сессия: " + valueDB.sessionDB + " " + ex.ToString()); //запись лога
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
logF.writeLog_toFile("choose_file", "File.Exists", "error", "На компьютере не существует выбранный из БД файл для отправки"); //запись лога
|
||||
delete_string(valueDB); //если файла нет, то удаляем эту строку из базы данных, т.к. нечего отправлять
|
||||
}
|
||||
}
|
||||
//else //для теста!!!
|
||||
//{
|
||||
// logF.writeLog_toFile("choose_file", "check", "success", "В БД сейчас нет новых файлов для добавления их в очередь!!!"); //запись лога
|
||||
//}
|
||||
#endregion
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
void change_type(DataBase file)
|
||||
{
|
||||
#region Отмечаем, что файл уже отправили в очередь
|
||||
string sql_update = "update [tab_FilesForSend] set type=type+1 where id=@Id_RowsBD";
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
try
|
||||
{
|
||||
using (SqlConnection connection = new SqlConnection(link_DB))
|
||||
{
|
||||
SqlCommand command = new SqlCommand(sql_update, connection);
|
||||
command.Parameters.AddWithValue("@Id_RowsBD", file.idDB);
|
||||
connection.Open();
|
||||
|
||||
try
|
||||
{
|
||||
// выполняем запрос и получаем ответ
|
||||
int count_send = command.ExecuteNonQuery();
|
||||
// выводим ответ в консоль
|
||||
if (count_send == 1)
|
||||
{
|
||||
logF.writeLog_toFile("choose_file", "change_type", "success", "type увеличен у строки: " + file.idDB + " Название файла: " + file.filenameDB); //запись лога
|
||||
}
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
logF.writeLog_toFile("choose_file", "change_type", "error", "Ошибка увеличения переменной type: " + " Название файла: " + file.filenameDB + " " + err.ToString()); //запись лога
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logF.writeLog_toFile("choose_file", "change_type", "error", "Ошибка соединения с БД: " + ex.ToString()); //запись лога
|
||||
}
|
||||
/////////////////////////////////////////////////////////
|
||||
#endregion
|
||||
}
|
||||
|
||||
void update_type() //изменить при новом включении утилиты type из 1 в 0, необходимо для того чтобы отправить все данные даже, если утилиту экстренно выключили
|
||||
{
|
||||
#region Сбрасываем при включении утилиты переменную type
|
||||
// запрос
|
||||
string sql_delete = "update [tab_FilesForSend] set type=0 where type=1";
|
||||
////////////////////////////////////////////
|
||||
|
||||
try
|
||||
{
|
||||
using (SqlConnection connection = new SqlConnection(link_DB))
|
||||
{
|
||||
SqlCommand command = new SqlCommand(sql_delete, connection);
|
||||
connection.Open();
|
||||
try
|
||||
{
|
||||
// выполняем запрос и получаем ответ
|
||||
int count_send = command.ExecuteNonQuery();
|
||||
logF.writeLog_toFile("update_type", "update", "success", "Количество затронутых строк: " + count_send); //запись лога
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
logF.writeLog_toFile("update_type", "update", "error", "Во время запроса произошла ошибка: " + err.ToString()); //запись лога
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logF.writeLog_toFile("update_type", "update", "error", "Ошибка соединения с БД: " + ex.ToString()); //запись лога
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////
|
||||
#endregion
|
||||
}
|
||||
|
||||
void delete_string(DataBase file)
|
||||
{
|
||||
#region Удаляем строку с данными в БД, если файла уже не существует
|
||||
string sql_delete = "delete from [tab_FilesForSend] where id=@Id_RowsBD";
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
try
|
||||
{
|
||||
using (SqlConnection connection = new SqlConnection(link_DB))
|
||||
{
|
||||
SqlCommand command = new SqlCommand(sql_delete, connection);
|
||||
command.Parameters.AddWithValue("@Id_RowsBD", file.idDB);
|
||||
connection.Open();
|
||||
|
||||
try
|
||||
{
|
||||
// выполняем запрос и получаем ответ
|
||||
int count_send = command.ExecuteNonQuery();
|
||||
// выводим ответ в консоль
|
||||
if (count_send == 1)
|
||||
{
|
||||
logF.writeLog_toFile("choose_file", "delete_string", "success", "Удалена строка в БД, т.к. файла уже не существует: " + file.idDB); //запись лога
|
||||
}
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
logF.writeLog_toFile("choose_file", "delete_string", "error", "Ошибка удаления строки из БД: " + err.ToString()); //запись лога
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logF.writeLog_toFile("choose_file", "delete_string", "error", "Ошибка соединения с БД: " + ex.ToString()); //запись лога
|
||||
}
|
||||
/////////////////////////////////////////////////////
|
||||
#endregion
|
||||
}
|
||||
|
||||
void StartTimer() //запуск таймера
|
||||
{
|
||||
#region Таймер для проверки наличия нового файла в бд
|
||||
logF.write_logLinkSRV(); //запуск цикла с записью логов, открываем новый файл для логов каждый день
|
||||
Task.Factory.StartNew(() =>
|
||||
{
|
||||
while (ts.Seconds != -1)
|
||||
{
|
||||
Thread.Sleep(1000);
|
||||
ts = ts.Subtract(new TimeSpan(0, 0, 1));
|
||||
|
||||
}
|
||||
if (ts.Minutes == -0 && ts.Seconds == -1)
|
||||
{
|
||||
choose_file(); //Проверка наличия файла на отправку
|
||||
ts = new TimeSpan(0, 0, 3);
|
||||
StartTimer(); //запуск таймера для проверки наличия нового файла в бд
|
||||
}
|
||||
});
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
// возвращаем отображение окна в панели
|
||||
this.ShowInTaskbar = true;
|
||||
//разворачиваем окно
|
||||
WindowState = FormWindowState.Minimized;
|
||||
}
|
||||
|
||||
private void Form1_Resize(object sender, EventArgs e)
|
||||
{
|
||||
// проверяем наше окно, и если оно было свернуто, делаем событие
|
||||
if (WindowState == FormWindowState.Minimized)
|
||||
{
|
||||
// прячем наше окно из панели
|
||||
this.ShowInTaskbar = false;
|
||||
// делаем нашу иконку в трее активной
|
||||
notifyIcon1.Visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void Form1_Load(object sender, EventArgs e)
|
||||
{
|
||||
#region То что загружается при открытии формы
|
||||
link_DB = @"Data Source=(LocalDB)\" + typeDataBase + ";AttachDbFilename=" + System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "\\tele2med\\DB\\DB1.mdf;Integrated Security=SSPI"; //ссылка на файл с БД
|
||||
Read_ini(); //чтение ini файла
|
||||
ServicePointManager.ServerCertificateValidationCallback += mIgnoreBadCertificates; //отключаем проверку доверительных сертификатов
|
||||
path_file = Path.Combine(Path.GetTempPath(), "session_tele2med");//ссылка до папки, где лежат фото и видео осмотров
|
||||
this.WindowState = FormWindowState.Minimized;
|
||||
this.Hide();
|
||||
srv.CheckAndSend(); //цикл очереди фото
|
||||
update_type(); //изменить при новом включении утилиты type из 1 в 0, необходимо для того чтобы отправить все данные даже, если утилиту экстренно выключили
|
||||
ts = new TimeSpan(0, 0, 5); //время, через которое делается запрос на наличие нового файла
|
||||
StartTimer(); //запуск таймера для проверки наличия нового файла в бд
|
||||
logF.writeLog_toFile("Form1_Load", "Start work", "success", "Утилита запущена"); //запись лога
|
||||
lab_versionPO.Text = "Версия утилиты: " + Assembly.GetExecutingAssembly().GetName().Version.ToString(); //пример вывода номера сборки в текстовую надпись
|
||||
#endregion
|
||||
}
|
||||
|
||||
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
#region То что происходит когда закрывается форма
|
||||
notifyIcon1.Visible = false;
|
||||
notifyIcon1.Icon = null;
|
||||
logF.writeLog_toFile("FormClosing", "Finish work", "success", "Утилита закрыта"); //запись лога
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace Send_multimedia
|
||||
{
|
||||
public class Server
|
||||
{
|
||||
#region Переменные
|
||||
NetworkService networkService = NetworkService.shared;
|
||||
|
||||
private readonly Queue<DataBase> que = new Queue<DataBase>(); // общая очередь файлов
|
||||
private bool isWorkMehodCheckAndSend = false;
|
||||
|
||||
string path_file = Path.Combine(Path.GetTempPath(), "session_tele2med"); // папка темп юзера, в ней хранятся данные мультимедии
|
||||
string connectionString; //ссылка на файл с БД
|
||||
bool IsCancel; //отмена отправки данных
|
||||
string uniq = " ";
|
||||
string apiway = " ";
|
||||
string DateBase; //тип базы данных
|
||||
|
||||
LogFiles logSrv = LogFiles.shared; //экземпляр класса записи логов в файл
|
||||
|
||||
#endregion
|
||||
|
||||
public void Data_ini(string APIpath, string Uniq_ARM)//пробная отправка данных в другой класс
|
||||
{
|
||||
apiway = APIpath;
|
||||
uniq = Uniq_ARM;
|
||||
}
|
||||
|
||||
|
||||
public void Data_ini_config2(string typeDBase)//отправка данных в другой класс
|
||||
{
|
||||
DateBase = typeDBase;
|
||||
connectionString = @"Data Source=(LocalDB)\" + DateBase + ";AttachDbFilename=" + System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "\\tele2med\\DB\\DB1.mdf; Integrated Security=SSPI"; //ссылка на файл с БД
|
||||
}
|
||||
|
||||
|
||||
public void AddFileToQueue(DataBase dataFromDB) // добавить в очередь медиа файл из БД
|
||||
{
|
||||
try
|
||||
{
|
||||
que.Enqueue(dataFromDB);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logSrv.writeLog_toFile("choose_file", "AddPhoto", "error", "Ошибка добавления медиа файла в очередь. Название файла: " + dataFromDB.filenameDB + " " + ex.ToString()); //запись лога
|
||||
}
|
||||
}
|
||||
|
||||
public void CheckAndSend()
|
||||
{
|
||||
#region Цикл очереди для отправки медиафайлов
|
||||
if (isWorkMehodCheckAndSend)
|
||||
throw new Exception("НЕЛЬЗЯ 2 РАЗА ЗАПУСКАТЬ ЦИКЛ");
|
||||
|
||||
isWorkMehodCheckAndSend = true;
|
||||
|
||||
Task.Factory.StartNew(async () =>
|
||||
{
|
||||
while (!IsCancel) // цикл работает пока нет отмены
|
||||
{
|
||||
if (que.Any() == true) // проверяем есть ли данные для загрузки
|
||||
{
|
||||
var data = que.Dequeue(); // берем DataBase из очереди
|
||||
switch (data.numDB)
|
||||
{
|
||||
case "1":
|
||||
logSrv.writeLog_toFile("CheckAndSend", "Get photo", "success", "Взяли фото с очереди filenameDB: " + data.filenameDB); //запись лога
|
||||
SendPhoto(data); // отправляем и ожидаем завершения отправки
|
||||
break;
|
||||
case "2":
|
||||
logSrv.writeLog_toFile("CheckAndSend", "Get video", "success", "Взяли видео с очереди filenameDB: " + data.filenameDB); //запись лога
|
||||
SendVideo(data); // отправляем и ожидаем завершения отправки
|
||||
break;
|
||||
case "3":
|
||||
logSrv.writeLog_toFile("CheckAndSend", "Get photoDetect", "success", "Взяли детектированное фото с очереди filenameDB: " + data.filenameDB); //запись лога
|
||||
SendPhotoDetect(data); // отправляем и ожидаем завершения отправки
|
||||
break;
|
||||
case "4":
|
||||
logSrv.writeLog_toFile("CheckAndSend", "Get firstPhoto", "success", "Взяли первое фото водителя с очереди filenameDB: " + data.filenameDB); //запись лога
|
||||
SendFirstPhoto(data); // отправляем и ожидаем завершения отправки
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
await Task.Delay(5000); // спим 5 сек если медиа для отправки нет
|
||||
}
|
||||
}
|
||||
});
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
private async void SendPhoto(DataBase dataPhoto)
|
||||
{
|
||||
#region Отправка фото на сервер
|
||||
|
||||
try
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhoto", "Send photo start", "success", "Начало отправки фото: " + dataPhoto.filenameDB); //запись лога
|
||||
RootObject account = new RootObject(); // ссылка на класс для приема сообщений с сервера
|
||||
string photoURL = Path.Combine(@path_file, dataPhoto.filenameDB + ".jpg");
|
||||
|
||||
string URL_sendPhoto = Path.Combine(apiway, "upload_photo", uniq, dataPhoto.sessionDB); //url запроса
|
||||
var responseBeginSession = await networkService.sendFileToServer(dataPhoto.filenameDB, photoURL, URL_sendPhoto, "upload_photo");
|
||||
|
||||
var resultRequestPhoto = await responseBeginSession.Content.ReadAsStringAsync();
|
||||
logSrv.writeLog_toFile("upload_photo", "ReadAsStringAsync", "success", "Получен с сервера результат: " + resultRequestPhoto.ToString()); //запись лога
|
||||
|
||||
account = JsonConvert.DeserializeObject<RootObject>(resultRequestPhoto);
|
||||
|
||||
if (account.status == "success")
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhoto", "Send", "success", "Фото отправлено: " + dataPhoto.filenameDB); //запись лога
|
||||
try
|
||||
{
|
||||
File.Delete(photoURL); //удалить отправленный файл с фото
|
||||
logSrv.writeLog_toFile("SendPhoto", "Delete", "success", "Фото удалено с носителя: " + dataPhoto.filenameDB + " status: " + account.status + " message: " + account.message); //запись лога
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhoto", "Delete", "error", "Ошибка удаления фото с носителя: " + dataPhoto.filenameDB + " " + ex.ToString());
|
||||
}
|
||||
Delete_stringFromDB(dataPhoto);//Удаляем строку с данными в БД, т.к. файл уже отправили
|
||||
}
|
||||
|
||||
if (account.status == "error")
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhoto", "Send", "error", "Фото не отправлено " + dataPhoto.filenameDB + " " + account.message); //запись лога
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhoto", "SendtoServer", "error", "Ошибка отправки фото на сервер: " + dataPhoto.filenameDB + " " + ex.ToString()); //запись лога
|
||||
|
||||
if (!ex.ToString().Contains("не найден"))
|
||||
{
|
||||
ChangeStatusPhotoInDB(dataPhoto);
|
||||
}
|
||||
else
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhoto", "delete_stringDBPhoto", "success", "Удаляем строку с этим фото: " + dataPhoto.filenameDB); //запись лога
|
||||
Delete_stringFromDB(dataPhoto);//Удаляем строку с данными в БД, т.к. его нет
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
private void ChangeStatusPhotoInDB(DataBase dataPhoto)
|
||||
{
|
||||
#region Сбрасываем переменную type для повторной отправки фото
|
||||
logSrv.writeLog_toFile("ChangeStatusPhotoInDB", "sql_updatePhoto", "success", "Сбрасываем переменную type для повторной отправки фото: " + dataPhoto.filenameDB); //запись лога
|
||||
|
||||
// запрос
|
||||
string sql_update = "update [tab_FilesForSend] set type=0 where id=@Id_RowsBD";
|
||||
////////////////////////////////////////////
|
||||
|
||||
try
|
||||
{
|
||||
using (SqlConnection connection_update = new SqlConnection(connectionString))
|
||||
{
|
||||
SqlCommand command = new SqlCommand(sql_update, connection_update);
|
||||
command.Parameters.AddWithValue("@Id_RowsBD", dataPhoto.idDB);
|
||||
connection_update.Open();
|
||||
try
|
||||
{
|
||||
// выполняем запрос и получаем ответ
|
||||
int count_upPh = command.ExecuteNonQuery();
|
||||
|
||||
if (count_upPh == 1)
|
||||
{
|
||||
logSrv.writeLog_toFile("ChangeStatusPhotoInDB", "change_type", "success", "type сброшен у строки фото: " + dataPhoto.idDB + " Название файла: " + dataPhoto.filenameDB); //запись лога
|
||||
}
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
logSrv.writeLog_toFile("ChangeStatusPhotoInDB", "update", "error", "Во время запроса type у фото произошла ошибка: " + err.ToString()); //запись лога
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
logSrv.writeLog_toFile("ChangeStatusPhotoInDB", "update", "error", "Ошибка соединения с БД: " + err.ToString()); //запись лога
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
private async void SendPhotoDetect(DataBase dataPhotoDetect)
|
||||
{
|
||||
#region Отправка фото с лицом на сервер
|
||||
try
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhotoDetect", "Send photo face start", "success", "Начало отправки фото с лицом: " + dataPhotoDetect.filenameDB); //запись лога
|
||||
|
||||
RootObject account = new RootObject(); // ссылка на класс для приема сообщений с сервера
|
||||
string photoDetectURL = Path.Combine(@path_file, dataPhotoDetect.filenameDB + ".jpg");
|
||||
|
||||
string URL_sendPhoto = Path.Combine(apiway, "upload_photo", uniq, dataPhotoDetect.sessionDB); //url запроса
|
||||
var responseBeginSession = await networkService.sendFileToServer(dataPhotoDetect.filenameDB, photoDetectURL, URL_sendPhoto, "upload_photo");
|
||||
|
||||
var resultRequestPhoto = await responseBeginSession.Content.ReadAsStringAsync();
|
||||
logSrv.writeLog_toFile("upload_photo", "ReadAsStringAsync", "success", "Получен с сервера результат: " + resultRequestPhoto.ToString()); //запись лога
|
||||
|
||||
account = JsonConvert.DeserializeObject<RootObject>(resultRequestPhoto);
|
||||
|
||||
|
||||
if (account.status == "success")
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhotoDetect", "Send", "success", "Фото с лицом отправлено: " + dataPhotoDetect.filenameDB); //запись лога
|
||||
try
|
||||
{
|
||||
File.Delete(photoDetectURL); //удалить отправленный файл с фото
|
||||
logSrv.writeLog_toFile("SendPhotoDetect", "Delete", "success", "Фото с лицом удалено с носителя: " + dataPhotoDetect.filenameDB + " status: " + account.status + " message: " + account.message); //запись лога
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhotoDetect", "Delete", "error", "Ошибка удаления фото с лицом с носителя: " + dataPhotoDetect.filenameDB + " " + ex.ToString());
|
||||
}
|
||||
Delete_stringFromDB(dataPhotoDetect);//Удаляем строку с данными в БД, т.к. файл уже отправили
|
||||
}
|
||||
|
||||
if (account.status == "error")
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhotoDetect", "Send", "error", "Фото с лицом не отправлено " + dataPhotoDetect.filenameDB + " " + account.message); //запись лога
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhotoDetect", "SendtoServer", "error", "Ошибка отправки фото с лицом на сервер: " + dataPhotoDetect.filenameDB + " " + ex.ToString()); //запись лога
|
||||
|
||||
if (!ex.ToString().Contains("не найден"))
|
||||
{
|
||||
ChangeStatusPhotoDetectInDB(dataPhotoDetect);
|
||||
}
|
||||
else
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhotoDetect", "delete_stringDBPhoto", "success", "Удаляем строку с этим фото: " + dataPhotoDetect.filenameDB); //запись лога
|
||||
Delete_stringFromDB(dataPhotoDetect);//Удаляем строку с данными в БД, т.к. его нет
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
private void ChangeStatusPhotoDetectInDB(DataBase dataPhotoDetect)
|
||||
{
|
||||
#region Сбрасываем переменную type для повторной отправки фото
|
||||
logSrv.writeLog_toFile("ChangeStatusPhotoDetectInDB", "sql_updatePhotoDetect", "success", "Сбрасываем переменную type для повторной отправки детектированного фото: " + dataPhotoDetect.filenameDB); //запись лога
|
||||
// запрос
|
||||
string sql_update = "update [tab_FilesForSend] set type=0 where id=@Id_RowsBD";
|
||||
////////////////////////////////////////////
|
||||
|
||||
try
|
||||
{
|
||||
using (SqlConnection connection_update = new SqlConnection(connectionString))
|
||||
{
|
||||
SqlCommand command = new SqlCommand(sql_update, connection_update);
|
||||
command.Parameters.AddWithValue("@Id_RowsBD", dataPhotoDetect.idDB);
|
||||
connection_update.Open();
|
||||
try
|
||||
{
|
||||
// выполняем запрос и получаем ответ
|
||||
int count_upPh = command.ExecuteNonQuery();
|
||||
|
||||
if (count_upPh == 1)
|
||||
{
|
||||
logSrv.writeLog_toFile("ChangeStatusPhotoDetectInDB", "change_type", "success", "type сброшен у строки детектированного фото: " + dataPhotoDetect.idDB + " Название файла: " + dataPhotoDetect.filenameDB); //запись лога
|
||||
}
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
logSrv.writeLog_toFile("ChangeStatusPhotoDetectInDB", "update", "error", "Во время запроса сброса type у детектированного фото произошла ошибка: " + err.ToString()); //запись лога
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
logSrv.writeLog_toFile("ChangeStatusPhotoDetectInDB", "update", "error", "Ошибка соединения с БД: " + err.ToString()); //запись лога
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
private async void SendVideo(DataBase dataVideo)
|
||||
{
|
||||
#region Отправка видео на сервер
|
||||
|
||||
try
|
||||
{
|
||||
logSrv.writeLog_toFile("SendVideo", "Send video start", "success", "Начало отправки видео: " + dataVideo.filenameDB); //запись лога
|
||||
|
||||
RootObject account = new RootObject(); // ссылка на класс для приема сообщений с сервера
|
||||
string videoURL = Path.Combine(@path_file, dataVideo.filenameDB + ".avi");
|
||||
|
||||
string URL_sendVideo = Path.Combine(apiway, "upload_video", uniq, dataVideo.sessionDB); //url-запрос
|
||||
|
||||
var responseBeginSession = await networkService.sendFileToServer(dataVideo.filenameDB, videoURL, URL_sendVideo, "upload_video");
|
||||
|
||||
var resultRequestVideo = await responseBeginSession.Content.ReadAsStringAsync();
|
||||
logSrv.writeLog_toFile("upload_photo", "ReadAsStringAsync", "success", "Получен с сервера результат: " + resultRequestVideo.ToString()); //запись лога
|
||||
|
||||
account = JsonConvert.DeserializeObject<RootObject>(resultRequestVideo);
|
||||
|
||||
|
||||
if (account.status == "success")
|
||||
{
|
||||
logSrv.writeLog_toFile("SendVideo", "Send", "success", "Видео успешно отправлено: " + dataVideo.filenameDB); //запись лога
|
||||
try
|
||||
{
|
||||
File.Delete(videoURL); //удалить отправленный файл с видео .avi
|
||||
logSrv.writeLog_toFile("SendVideo", "Delete", "success", "Видео удалено с носителя (т.к. отправили его на сервер): " + dataVideo.filenameDB + " status: " + account.status + " message: " + account.message); //запись лога
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhoto", "Delete", "error", "Ошибка удаления видео с носителя: " + dataVideo.filenameDB + " " + ex.ToString());
|
||||
}
|
||||
Delete_stringFromDB(dataVideo);//Удаляем строку с данными в БД, т.к. файл уже отправили
|
||||
}
|
||||
|
||||
if (account.status == "error")
|
||||
{
|
||||
logSrv.writeLog_toFile("SendVideo", "Send", "error", "Ошибка отправки видео: " + dataVideo.filenameDB + " " + account.message); //запись лога
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logSrv.writeLog_toFile("SendVideo", "SendtoServer", "error", "Произошла ошибка отправки файла видео: " + dataVideo.filenameDB + " " + ex.ToString()); //запись лога
|
||||
|
||||
if (!ex.ToString().Contains("Request Entity Too Large") && !ex.ToString().Contains("не найден") && !ex.ToString().Contains("Не удается записать данные в транспортное соединение"))//если не содержит эту ошибку
|
||||
{
|
||||
ChangeStatusVideoInDB(dataVideo);
|
||||
}
|
||||
else
|
||||
{
|
||||
logSrv.writeLog_toFile("SendVideo", "delete_stringDBVideo", "success", "Удаляем строку в БД с этим видео, т.к. этого файла уже нет или оно имеет очень большой вес: " + dataVideo.filenameDB); //запись лога
|
||||
Delete_stringFromDB(dataVideo);//Удаляем строку с данными в БД, т.к. файл уже отправили
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
void ChangeStatusVideoInDB(DataBase dataVideo)
|
||||
{
|
||||
#region Сбрасываем переменную type для повторной отправки видео
|
||||
// запрос
|
||||
logSrv.writeLog_toFile("changeStatusVideoInDB", "sql_updateVideo", "success", "Сбрасываем переменную type для повторной отправки видео: " + dataVideo.filenameDB); //запись лога
|
||||
string sql_updateVideo = "update [tab_FilesForSend] set type=0 where id=@Id_RowsBD";
|
||||
////////////////////////////////////////////
|
||||
|
||||
try
|
||||
{
|
||||
using (SqlConnection connection_updateVideo = new SqlConnection(connectionString))
|
||||
{
|
||||
SqlCommand command = new SqlCommand(sql_updateVideo, connection_updateVideo);
|
||||
command.Parameters.AddWithValue("@Id_RowsBD", dataVideo.idDB);
|
||||
connection_updateVideo.Open();
|
||||
try
|
||||
{
|
||||
// выполняем запрос и получаем ответ
|
||||
int count_upVid = command.ExecuteNonQuery();
|
||||
|
||||
if (count_upVid == 1)
|
||||
{
|
||||
logSrv.writeLog_toFile("changeStatusVideoInDB", "change_type", "success", "type сброшен у строки видео: " + dataVideo.idDB + " Название файла: " + dataVideo.filenameDB); //запись лога
|
||||
}
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
logSrv.writeLog_toFile("changeStatusVideoInDB", "update_try", "error", "Во время запроса сброса type у видео произошла ошибка: " + err.ToString()); //запись лога
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
logSrv.writeLog_toFile("changeStatusVideoInDB", "update", "error", "Ошибка соединения с БД: " + err.ToString()); //запись лога
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
void Delete_stringFromDB(DataBase dataForDelete)
|
||||
{
|
||||
#region Удаляем строку с данными в БД, т.к. файл фото уже отправили
|
||||
string sql_delSendPh = "delete from [tab_FilesForSend] where id=@Id_RowsDB";
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
try
|
||||
{
|
||||
using (SqlConnection connection = new SqlConnection(connectionString))
|
||||
{
|
||||
SqlCommand command = new SqlCommand(sql_delSendPh, connection);
|
||||
command.Parameters.AddWithValue("@Id_RowsDB", dataForDelete.idDB);
|
||||
connection.Open();
|
||||
|
||||
try
|
||||
{
|
||||
int count_send = command.ExecuteNonQuery();// выполняем запрос и получаем ответ
|
||||
if (count_send == 1)
|
||||
{
|
||||
logSrv.writeLog_toFile("Delete_stringFromDB", "string delete", "success", "Удалена строка в БД, т.к. фото уже отправлено: " + dataForDelete.filenameDB + " строка: " + dataForDelete.idDB); //запись лога
|
||||
}
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
logSrv.writeLog_toFile("Delete_stringFromDB", "string delete", "error", "Ошибка удаления строки фото из БД: " + dataForDelete.filenameDB + " строка: " + dataForDelete.idDB + " " + err.ToString()); //запись лога
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logSrv.writeLog_toFile("Delete_stringFromDB", "string delete", "error", "Ошибка соединения с БД: " + ex.ToString()); //запись лога
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
private async void SendFirstPhoto(DataBase dataFirstPhoto)
|
||||
{
|
||||
#region Отправка первого фото на сервер
|
||||
|
||||
try
|
||||
{
|
||||
logSrv.writeLog_toFile("SendFirstPhoto", "Send first photo start", "success", "Начало отправки первого фото водителя: " + dataFirstPhoto.filenameDB); //запись лога
|
||||
RootObject account = new RootObject(); // ссылка на класс для приема сообщений с сервера
|
||||
string firstPhotoURL = Path.Combine(@path_file, dataFirstPhoto.filenameDB + ".jpg");
|
||||
|
||||
string URL_sendFirstPhoto = Path.Combine(apiway, "profile_photo", dataFirstPhoto.checkup_idDB); //url запроса
|
||||
var responseBeginSession = await networkService.sendFileToServer(dataFirstPhoto.filenameDB, firstPhotoURL, URL_sendFirstPhoto, "profile_photo");
|
||||
|
||||
var resultRequestFirstPhoto = await responseBeginSession.Content.ReadAsStringAsync();
|
||||
logSrv.writeLog_toFile("upload_FirstPhoto", "ReadAsStringAsync", "success", "Получен с сервера результат: " + resultRequestFirstPhoto.ToString()); //запись лога
|
||||
|
||||
account = JsonConvert.DeserializeObject<RootObject>(resultRequestFirstPhoto);
|
||||
|
||||
if (account.status == "success")
|
||||
{
|
||||
logSrv.writeLog_toFile("upload_FirstPhoto", "Send", "success", "Первое фото водителя отправлено: " + dataFirstPhoto.filenameDB); //запись лога
|
||||
try
|
||||
{
|
||||
File.Delete(firstPhotoURL); //удалить отправленный файл с фото
|
||||
logSrv.writeLog_toFile("upload_FirstPhoto", "Delete", "success", "Первое фото водителя удалено с носителя: " + dataFirstPhoto.filenameDB + " status: " + account.status + " message: " + account.message); //запись лога
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logSrv.writeLog_toFile("upload_FirstPhoto", "Delete", "error", "Ошибка удаления первого фото водителя с носителя: " + dataFirstPhoto.filenameDB + " " + ex.ToString());
|
||||
}
|
||||
Delete_stringFromDB(dataFirstPhoto);//Удаляем строку с данными в БД, т.к. файл уже отправили
|
||||
}
|
||||
|
||||
if (account.status == "error")
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhoto", "Send", "error", "Фото не отправлено " + dataFirstPhoto.filenameDB + " " + account.message); //запись лога
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhoto", "SendtoServer", "error", "Ошибка отправки фото на сервер: " + dataFirstPhoto.filenameDB + " " + ex.ToString()); //запись лога
|
||||
|
||||
if (!ex.ToString().Contains("не найден"))
|
||||
{
|
||||
ChangeStatusPhotoInDB(dataFirstPhoto);
|
||||
}
|
||||
else
|
||||
{
|
||||
logSrv.writeLog_toFile("SendPhoto", "delete_stringDBPhoto", "success", "Удаляем строку с этим фото: " + dataFirstPhoto.filenameDB); //запись лога
|
||||
Delete_stringFromDB(dataFirstPhoto);//Удаляем строку с данными в БД, т.к. его нет
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,58 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Send_multimedia
|
||||
{
|
||||
public class LogFiles
|
||||
{
|
||||
public static LogFiles shared = new LogFiles();
|
||||
string path_logFile; //ссылка на файл с логами
|
||||
FileInfo fail_log; //экземпляр для записи текста в файл тхт
|
||||
DateTime time_log; // время записи лога
|
||||
|
||||
public void write_logLinkSRV() //открываем новый файл для логов каждый день
|
||||
{
|
||||
#region Логи
|
||||
string link_log = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), @"tele2med\LogUtility"); //создаем папку
|
||||
|
||||
if (!Directory.Exists(link_log))
|
||||
{
|
||||
Directory.CreateDirectory(link_log);
|
||||
}
|
||||
|
||||
time_log = DateTime.Now;//текущее время для записи в логи
|
||||
|
||||
path_logFile = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), @"tele2med\LogUtility", time_log.ToString("dd.MM.yyyy") + ".log");//ссылка на файл с логами
|
||||
|
||||
fail_log = new FileInfo(path_logFile);
|
||||
if (!File.Exists(path_logFile))
|
||||
{
|
||||
using (StreamWriter sw = fail_log.CreateText())
|
||||
{
|
||||
sw.WriteLine("DateTime, Funсtion, Step, Result, Comment");
|
||||
}
|
||||
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
public void writeLog_toFile(string Funсtion, string Step, string Result, string Comment)
|
||||
{
|
||||
#region Запись лога
|
||||
try
|
||||
{
|
||||
time_log = DateTime.Now;//текущее время для записи в логи
|
||||
using (StreamWriter sw = new StreamWriter(path_logFile, true, System.Text.Encoding.GetEncoding(866))) //запись логов
|
||||
{
|
||||
sw.WriteLine(time_log + ", " + Funсtion + ", " + Step + ", " + Result + ", " + Comment);
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Send_multimedia
|
||||
{
|
||||
|
||||
public class DataBase
|
||||
{
|
||||
public string idDB { get; set; }
|
||||
public string uniq_idDB { get; set; }
|
||||
public string checkup_idDB { get; set; }
|
||||
public string sessionDB { get; set; }
|
||||
public string datetimeDB { get; set; }
|
||||
public string typeDB { get; set; }
|
||||
public string numDB { get; set; }
|
||||
public string filenameDB { get; set; }
|
||||
}
|
||||
|
||||
public class RootObject
|
||||
{
|
||||
public string status { get; set; }
|
||||
public string message { get; set; }
|
||||
public string result_auto { get; set; }
|
||||
public string key_id { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Globalization;
|
||||
using System.Net;
|
||||
using System.IO;
|
||||
using System.Net.Http.Headers;
|
||||
|
||||
namespace Send_multimedia
|
||||
{
|
||||
public class NetworkService
|
||||
{
|
||||
public static NetworkService shared = new NetworkService();
|
||||
HttpClient httpClient = new HttpClient();
|
||||
LogFiles logFile = LogFiles.shared; //экземпляр класса записи логов в файл
|
||||
|
||||
private Stream stream = new MemoryStream();
|
||||
|
||||
|
||||
public async Task<HttpResponseMessage> sendFileToServer(string fileName, string fileURL, string url, string nameMethod)
|
||||
{
|
||||
try
|
||||
{
|
||||
// считываем данные файла в массив байтов
|
||||
byte[] fileToBytes;
|
||||
using (FileStream stream = File.Open(@fileURL, FileMode.Open))
|
||||
{
|
||||
fileToBytes = new byte[stream.Length];
|
||||
await stream.ReadAsync(fileToBytes, 0, (int)stream.Length);
|
||||
}
|
||||
|
||||
// формируем отправляемое содержимое
|
||||
var content = new ByteArrayContent(fileToBytes);
|
||||
|
||||
// Отправляем файл
|
||||
var response = await httpClient.PostAsync(url, content);
|
||||
logFile.writeLog_toFile(nameMethod, "PostAsync", "success", "Запрос " + nameMethod + " отправлен на сервер"); //запись лога
|
||||
|
||||
return response;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
logFile.writeLog_toFile(nameMethod, "Send data", "error", "Не удалось отправить запрос на сервер: " + e.ToString()); //запись лога
|
||||
var response = new HttpResponseMessage();
|
||||
response.Content = new StringContent(e.ToString());
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace Send_multimedia
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
static readonly string guid = Marshal.GetTypeLibGuidForAssembly(Assembly.GetExecutingAssembly()).ToString();
|
||||
static readonly TimeSpan Timeout = TimeSpan.FromMilliseconds(200);
|
||||
static bool isFirstInstance;
|
||||
|
||||
/// <summary>
|
||||
/// Главная точка входа для приложения.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
using (var mutex = new Mutex(true, guid, out isFirstInstance))
|
||||
{
|
||||
if (isFirstInstance || mutex.WaitOne(Timeout))
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
||||
try { Application.Run(new Form1()); }
|
||||
finally { mutex.ReleaseMutex(); }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Общие сведения об этой сборке предоставляются следующим набором
|
||||
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
|
||||
// связанные со сборкой.
|
||||
[assembly: AssemblyTitle("Send_multimedia")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Send_multimedia")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019-2021")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
|
||||
// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
|
||||
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
|
||||
[assembly: Guid("9c2c0cc0-55a7-481d-a6b5-ffb7df03b7f8")]
|
||||
|
||||
// Сведения о версии сборки состоят из следующих четырех значений:
|
||||
//
|
||||
// Основной номер версии
|
||||
// Дополнительный номер версии
|
||||
// Номер сборки
|
||||
// Редакция
|
||||
//
|
||||
// Можно задать все значения или принять номер сборки и номер редакции по умолчанию.
|
||||
// используя "*", как показано ниже:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.3.0.1")]
|
||||
[assembly: AssemblyFileVersion("1.3.0.1")]
|
||||
@@ -0,0 +1,73 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Этот код создан программой.
|
||||
// Исполняемая версия:4.0.30319.42000
|
||||
//
|
||||
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
|
||||
// повторной генерации кода.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Send_multimedia.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
|
||||
/// </summary>
|
||||
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
|
||||
// с помощью такого средства, как ResGen или Visual Studio.
|
||||
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
|
||||
// с параметром /str или перестройте свой проект VS.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Send_multimedia.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
|
||||
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Поиск локализованного ресурса типа System.Drawing.Icon, аналогичного (Значок).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon tele2med_ {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("tele2med_", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="tele2med_" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\tele2med_.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,26 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Этот код создан программой.
|
||||
// Исполняемая версия:4.0.30319.42000
|
||||
//
|
||||
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
|
||||
// повторной генерации кода.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Send_multimedia.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.6.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 393 KiB |
@@ -0,0 +1,99 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{9C2C0CC0-55A7-481D-A6B5-FFB7DF03B7F8}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>Send_multimedia</RootNamespace>
|
||||
<AssemblyName>Send_multimedia</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NReco.VideoConverter, Version=1.1.3.0, Culture=neutral, PublicKeyToken=395ccb334978a0cd, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NReco.VideoConverter.1.1.3\lib\net20\NReco.VideoConverter.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Config.cs" />
|
||||
<Compile Include="Form1.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Form1.Designer.cs">
|
||||
<DependentUpon>Form1.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="LogFiles.cs" />
|
||||
<Compile Include="Model.cs" />
|
||||
<Compile Include="NetworkService.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="Form1.resx">
|
||||
<DependentUpon>Form1.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\tele2med_.ico" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net461" />
|
||||
<package id="NReco.VideoConverter" version="1.1.3" targetFramework="net461" />
|
||||
</packages>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 393 KiB |
Reference in New Issue
Block a user