Общая структура файлов отталкивается от паттерна MVVM (Model-View-ViewModel) позволяет отделить логику приложения от визуальной части (представления). Wikipedia Паттерн MVVM.
- Папка
Fonts
содержит используемые шрифты приложения в формате.ttf
. Необходимо чтобы на любом компьютере шрифты были с приложением. - Папка
Images
содержит используемые картинки. Растровый формат.png
предпочтительней.jpg
из за потерь последнего и не поддержке прозрачности. - Файл
App.xaml
. Этот файл XAML определяет приложение WPF и все его ресурсы. Он также используется для определения пользовательского интерфейса, автоматически отображаемого при запуске приложения (в данном случае — MainWindow.xaml). - Файл
App.xaml.cs
. Этот файл содержит логику создания и настройки нашего окна изMainWindow.xaml
и обработку закрытие окна и приложения, также загрузку конфига приложения с помощью вызоваLoadConfig()
у классаConfigFile.cs
- Файл
MainWindow.xaml
. View из паттерна MVVM. Этот файл XAML представляет главное окно приложения, в котором отображается созданное содержимое страниц. Класс Window определяет свойства окна, такие как заголовок, размер и значок. - Файл
MainWindow.xaml.cs
. Этот файл содержит обработчики событий элементов окна (нажатия на кнопки, вставка в блок с кодом и т.д.) - Файл
PrinterViewModel.cs
. ViewModel из паттерна MVVM. Этот файл реализует интерфейсINotifyPropertyChanged
через классNotifyPropertyChangeBase.cs
и содержит поля, и свойства этих полей, которые используются для привязки к ним свойств графических элементов вMainWindow.xaml
- Файл
PrinterModel.cs
. Model из паттерна MVVM. Содержит основную логику программы и обновляет свойства вPrinterViewModel.cs
. Содержит обработку нажатия на печать, проводит запросы к print-api для валидации кода печати, скачивания файлов, отправки ихSumatra PDF
, работу c QR. - Файл
Marketing.cs
. Файл содержит методы для отправки сообщений на сервис маркетинга
За авто-обновления отвечает класс AutoUpdater.cs
.
Принцип проверки новых версий заключается в том что каждый час сверяется текущее время системы на соответствие промежутку времени с 22:00 до 06:00. Если в него попадаем то делаем запрос на https://github.com/profcomff/print-winapp/releases/latest
и в ответ получаем ссылку на последний выпуск https://github.com/profcomff/print-winapp/releases/tag/v2.0.7
. Номер версии полученной от гитхаба дополняем если требуется до шаблона число.число.число.число
сверяем с текущим номером версии программы
string githubVersion = "2.0.7.0";
string currentVersion = "2.0.6.0";
if (githubVersion != currentVersion)
{
//DO download
}
Если они отличаются то скачиваем новый архив PrinterApp_x86.zip
пример запроса https://github.com/profcomff/print-winapp/releases/download/v2.0.7/PrinterApp_x86.zip
и запускаем обновление. Распаковка архива происходит стандартными средствами windows. Подход в простом сравнении позволяет делать как обновление до новой версии, так и автоматический откат к старой версии.
Для автоматической сборки и публикации нового выпуска на github необходимо создать метку вида v*
например v2.0.7
(Не стоит создавать релизы иным способом).
Обновление можно запустить в ручном режиме, начиная с версии v2.0.11, введя в окно кода UPDATE
и нажав Alt+F4
.
При подготовке новой версии программы следует изменять версию программы согласно нумерации версии программного обеспечения в файле PrinterApp/PrinterApp.csproj
переменная <Version>2.0.7.0</Version>
.