This media is not supported in your browser
VIEW IN TELEGRAM
👋 Что же тут у нас, а это анимированные иконки, пост ранее это вчерашний прогресс в разработке, сегодня уже все намного лучше и иконки стабильно работают и корректно отображаются.
👴 История с этими анимированными иконками началась ещё в том году,
📦 но решили отложить в долгий ящик и вот спустя долгое время и мучения оно заработало.
👨🎨 Пришлось привести иконки к подходящему виду, а именно убрать фон и перекрасить в белый цвет. И дело это не быстрое так как работать приходилось не с обычной картинкой, а с Gif файлом ( это набор картинок).
📚 Со стороны кода перебрал уйму вариантов того, как можно добавить в мод данные иконки.
🛠️ Среди них были: Images, MediaElement, Bitmap.
🤹♂️ Вот жонглируя этими элементами, в основном использовался MediaElement, который всё-таки и не заработал, а выдает баг, как в посте выше.
💡 А решил данную проблему скачав пакет NuGet "WpfAnimatedGif".
🧠 Дальше будет теоретический пост, в котором покажу конкретнее как делал и как получилось сделать так чтобы все работало.
👴 История с этими анимированными иконками началась ещё в том году,
📦 но решили отложить в долгий ящик и вот спустя долгое время и мучения оно заработало.
👨🎨 Пришлось привести иконки к подходящему виду, а именно убрать фон и перекрасить в белый цвет. И дело это не быстрое так как работать приходилось не с обычной картинкой, а с Gif файлом ( это набор картинок).
📚 Со стороны кода перебрал уйму вариантов того, как можно добавить в мод данные иконки.
🛠️ Среди них были: Images, MediaElement, Bitmap.
🤹♂️ Вот жонглируя этими элементами, в основном использовался MediaElement, который всё-таки и не заработал, а выдает баг, как в посте выше.
💡 А решил данную проблему скачав пакет NuGet "WpfAnimatedGif".
🧠 Дальше будет теоретический пост, в котором покажу конкретнее как делал и как получилось сделать так чтобы все работало.
❤4👾3
🧠 Время теории.
Начнем с первого варианта который я пытался реализовать. 🤔
🎥 MediaElement, используется в WPF для воспроизведения медиа файлов.
Главные параметры Source = путь к файлу, LoadedBehavior = поведение для воспроизведения.
🤷♂️ Этот элемент работает для видеороликов, но отказывается корректно отображать .gif файлы, почему так не знаю, возможно имеет свои ограничения.
😕 Затем отчаявшись начал использовать элемент Image, данный элемент отображает gif картинку, но она статичная.
🙌 Поискав ещё инфы о том, как можно запихнуть эти иконки в мой проект и чтобы они нормально работали, я нашел спасение.
🎁 NuGet пакет "WpfAnimatedGif".
🤩 Эта библиотека позволяет расширить возможности Image. Она добавляет свойство ImageBehavior.AnimatedSource (и не только), которое позволяет указать путь к .gif файлу и данный файл будет анимироваться в интерфейсе вашего приложения.
🔗 Также поделюсь ссылкой на данную библиотеку с вами.
https://github.com/XamlAnimatedGif/WpfAnimatedGif?tab=readme-ov-file
Начнем с первого варианта который я пытался реализовать. 🤔
🎥 MediaElement, используется в WPF для воспроизведения медиа файлов.
Главные параметры Source = путь к файлу, LoadedBehavior = поведение для воспроизведения.
🤷♂️ Этот элемент работает для видеороликов, но отказывается корректно отображать .gif файлы, почему так не знаю, возможно имеет свои ограничения.
😕 Затем отчаявшись начал использовать элемент Image, данный элемент отображает gif картинку, но она статичная.
🙌 Поискав ещё инфы о том, как можно запихнуть эти иконки в мой проект и чтобы они нормально работали, я нашел спасение.
🎁 NuGet пакет "WpfAnimatedGif".
🤩 Эта библиотека позволяет расширить возможности Image. Она добавляет свойство ImageBehavior.AnimatedSource (и не только), которое позволяет указать путь к .gif файлу и данный файл будет анимироваться в интерфейсе вашего приложения.
🔗 Также поделюсь ссылкой на данную библиотеку с вами.
https://github.com/XamlAnimatedGif/WpfAnimatedGif?tab=readme-ov-file
👾6
🔥 Настал важный этап в разработке Xtreme Launcher.
🚀 А именно адекватное обновление мода. Вы можете подумать: "Чего? Он же уже сделал обновление.".
🔧 Это была первая версия, но так как в ней был большой недостаток, а именно скачивание всех файлов вместо тех, которые были обновлены.
😖 Чисто теоретически оставить можно, но думаю никто не будет рад каждый раз качать по несколько гигабайт ненужных файлов.
☁️ Ближе к сути, мы сошлись на том, что будем использовать GitHub как основное хранилище файлов модификации. И встал вопрос, а как решить проблему, которую описал выше.
✅ Решение есть - это библиотеки для работы с GitHub, сейчас стоит выбор между LibGit2Sharp и Octokit.net.
🤔 Что же выбрать?
🚀 А именно адекватное обновление мода. Вы можете подумать: "Чего? Он же уже сделал обновление.".
🔧 Это была первая версия, но так как в ней был большой недостаток, а именно скачивание всех файлов вместо тех, которые были обновлены.
😖 Чисто теоретически оставить можно, но думаю никто не будет рад каждый раз качать по несколько гигабайт ненужных файлов.
☁️ Ближе к сути, мы сошлись на том, что будем использовать GitHub как основное хранилище файлов модификации. И встал вопрос, а как решить проблему, которую описал выше.
✅ Решение есть - это библиотеки для работы с GitHub, сейчас стоит выбор между LibGit2Sharp и Octokit.net.
🤔 Что же выбрать?
🤔10
🥴 Никто не говорил, что будет легко.
⚙️ Выбрал я библиотеку Octokit, так как это официальная библиотека и на данный момент прогресс вроде и есть, но кривой.
🐞 Нужные файлы качаются, но при этом максимально некорректно отображаются сведения о загрузке.
🐞 А также есть проблема с производительностью проверка размера файлов идёт очень долго и при том, что файлы не такие уж и большие, менее 10 Мб, страшно представить, что будет если делать данную проверку на модификации.
На сегодня я пока прекращаю разработку.
🛠️ А так же раз уж данная библиотека меня пока не устраивает, то попробую воспользоваться LibGit2Sharp.
😁 Как сказали в комментариях профессиональные проекты +- так и называются, вот заодно и проверю так ли это.
⚙️ Выбрал я библиотеку Octokit, так как это официальная библиотека и на данный момент прогресс вроде и есть, но кривой.
🐞 Нужные файлы качаются, но при этом максимально некорректно отображаются сведения о загрузке.
🐞 А также есть проблема с производительностью проверка размера файлов идёт очень долго и при том, что файлы не такие уж и большие, менее 10 Мб, страшно представить, что будет если делать данную проверку на модификации.
На сегодня я пока прекращаю разработку.
🛠️ А так же раз уж данная библиотека меня пока не устраивает, то попробую воспользоваться LibGit2Sharp.
😁 Как сказали в комментариях профессиональные проекты +- так и называются, вот заодно и проверю так ли это.
❤🔥6🔥3
👊 Один хороший друг, подогнал мне тут три книжечки.
📖 "Основы информационной безопасности" - Нестеров С.А.
📖 "Новая большая книга CSS" - Дэвид Макфарланд.
📖 "Программирование для детей" - Авторов много 🤪
📚 Может с этих книг и начнется моя некая библиотека книжек по программированию...
... эх кто знает, кто знает.
📖 "Основы информационной безопасности" - Нестеров С.А.
📖 "Новая большая книга CSS" - Дэвид Макфарланд.
📖 "Программирование для детей" - Авторов много 🤪
📚 Может с этих книг и начнется моя некая библиотека книжек по программированию...
... эх кто знает, кто знает.
❤🔥4👾2
Решено!
Я остаюсь на библиотеке Octokit.
У данной библиотеки был минус в том, что она медленная при подсчете размера всех нужных файлов, из-за чего проверка обновлений длилась долго.
Теперь же будет другой подход, а точнее я создам свою собственную небольшую программку 💻 для внутренних нужд и будет использоваться мной и создателем модификации @Lg_corner. Она будет считать размер необходимых файлов, а точнее размер обновления.
И после этого мы просто скопируем инфу, вставим в файл на GitHub 🐙, и уже впоследствии лаунчер, скачав данный файлик, будет заранее знать размер обновления. 🚀
Из вышесказанного можно сделать вывод, что на данный момент есть первостепенные задачи, которые я буду решать:
❌ Создание утилиты. 🛠️
❌ Корректное отображение информации о загрузке. 📊
❌ Корректное скачивание, чтобы все скачивалось по нужным папкам. 📁
Я остаюсь на библиотеке Octokit.
У данной библиотеки был минус в том, что она медленная при подсчете размера всех нужных файлов, из-за чего проверка обновлений длилась долго.
Теперь же будет другой подход, а точнее я создам свою собственную небольшую программку 💻 для внутренних нужд и будет использоваться мной и создателем модификации @Lg_corner. Она будет считать размер необходимых файлов, а точнее размер обновления.
И после этого мы просто скопируем инфу, вставим в файл на GitHub 🐙, и уже впоследствии лаунчер, скачав данный файлик, будет заранее знать размер обновления. 🚀
Из вышесказанного можно сделать вывод, что на данный момент есть первостепенные задачи, которые я буду решать:
❌ Создание утилиты. 🛠️
❌ Корректное отображение информации о загрузке. 📊
❌ Корректное скачивание, чтобы все скачивалось по нужным папкам. 📁
👾8
😠 Я мучился с этим где-то час.
🐞 Нужный файл не скачивается, вот хоть убей.
🔗 Разные ссылки копировал с гитхаба, на необходимый файл, но он не качался.
👌 Хотя у меня в браузере все работало отлично.
💬 Даже для этого сделал вывод сообщения, как на скриншоте.
🤦♂️ Весь юмор в том, что репозиторий приватный и WebClient, который я использую для скачивания данного файла не имел к нему доступ...
🐞 Нужный файл не скачивается, вот хоть убей.
🔗 Разные ссылки копировал с гитхаба, на необходимый файл, но он не качался.
👌 Хотя у меня в браузере все работало отлично.
💬 Даже для этого сделал вывод сообщения, как на скриншоте.
🤦♂️ Весь юмор в том, что репозиторий приватный и WebClient, который я использую для скачивания данного файла не имел к нему доступ...
👾8
👨💻 Вот так вот выглядит мой экран.
🐙 Консоль с гитом
📁 Файлик с инфой об обновлении
🖥️ Программка, которая сократит ваши ожидания и облегчит разработчикам жизнь.
🙌 Ну и самое главное обновления🎉🎉🎉
✅ Они работают, все качается, туда куда надо и то что надо.
🧠 Разве это не успех, я считаю что это определенно успех.
Теперь время рефакторинга так как писал код, я так чтобы он хотябы работал 😁.
А ещё надо покушат 🍝, а потом снова посвящу вас в новости проекта, так как рассказал кратко, потому что все заработало наконец-то.
🎁 Я рад и захотел немедленно поделиться с вами.
🐙 Консоль с гитом
📁 Файлик с инфой об обновлении
🖥️ Программка, которая сократит ваши ожидания и облегчит разработчикам жизнь.
🙌 Ну и самое главное обновления🎉🎉🎉
✅ Они работают, все качается, туда куда надо и то что надо.
🧠 Разве это не успех, я считаю что это определенно успех.
Теперь время рефакторинга так как писал код, я так чтобы он хотябы работал 😁.
А ещё надо покушат 🍝, а потом снова посвящу вас в новости проекта, так как рассказал кратко, потому что все заработало наконец-то.
🎁 Я рад и захотел немедленно поделиться с вами.
👾10
Пришло время объяснить, как происходит обновление! 🆙️
После нажатия на кнопку "Проверить наличие обновлений", первое что происходит - это пинг до сайта google.com, чтобы проверить подключение к интернету. 🌐 Если пинг проходит удачно, то скачивается файл с информацией об обновлении. 📁 Пока имеет в себе 3 поля:
- Version - версия обновления
- Weight - размер в байтах
- Sha - это хэш код нужного коммита
Затем эта информация записывается в отдельный класс ModificationsUpdateInfo. 📝
Если все прошло успешно и обновление имеется, то появляется кнопка "Скачать"! 📥
Переходим к следующему этапу - это скачивание обновленных файлов. 💾
Используя библиотеку Octokit .net, получаем необходимые файлы из репозитория, здесь используется хэш коммита. 🔑 Достав все нужные файлы, перебираем этот список в цикле, чтобы для каждого файла получить его ссылку и имя. 🔗 Когда получили ссылку на файл, проверяем сможем ли мы его себе сохранить, т.е. есть ли у нас такая же папка, в которой лежит файл на GitHub, если нет, то создаём новые папки. 📁 Далее устанавливаем максимальное значение для прогресс бара, равное Weight. 📊
Остался последний шаг - используем WebClient, скачиваем каждый файл по его ссылке в нужную папку, как помним, мы уже их создали. 💻 В процессе скачивания изменяем значение прогресс бара на то количество байт, которое скачали. 📈 Попутно происходит вывод в виде текстового сообщения, где указывается процент и размер скачанных файлов. 💬
После нажатия на кнопку "Проверить наличие обновлений", первое что происходит - это пинг до сайта google.com, чтобы проверить подключение к интернету. 🌐 Если пинг проходит удачно, то скачивается файл с информацией об обновлении. 📁 Пока имеет в себе 3 поля:
- Version - версия обновления
- Weight - размер в байтах
- Sha - это хэш код нужного коммита
Затем эта информация записывается в отдельный класс ModificationsUpdateInfo. 📝
Если все прошло успешно и обновление имеется, то появляется кнопка "Скачать"! 📥
Переходим к следующему этапу - это скачивание обновленных файлов. 💾
Используя библиотеку Octokit .net, получаем необходимые файлы из репозитория, здесь используется хэш коммита. 🔑 Достав все нужные файлы, перебираем этот список в цикле, чтобы для каждого файла получить его ссылку и имя. 🔗 Когда получили ссылку на файл, проверяем сможем ли мы его себе сохранить, т.е. есть ли у нас такая же папка, в которой лежит файл на GitHub, если нет, то создаём новые папки. 📁 Далее устанавливаем максимальное значение для прогресс бара, равное Weight. 📊
Остался последний шаг - используем WebClient, скачиваем каждый файл по его ссылке в нужную папку, как помним, мы уже их создали. 💻 В процессе скачивания изменяем значение прогресс бара на то количество байт, которое скачали. 📈 Попутно происходит вывод в виде текстового сообщения, где указывается процент и размер скачанных файлов. 💬
❤🔥6❤2
🚀 За последние дни моя продуктивность выросла и сделал довольно много всего.
💻 Прошёл всего один день, с того момента, как сделал скачивание обновлений, а уже готово первоначальное скачивание файлов при самом первом запуске лаунчера.
🔄 Т.е. можно сказать, что реализованная полноценная логика скачивания мода и дальнейшее его обновление.
💿 Для того, чтобы реализовать первичную загрузку пришлось создать отдельный файл "*.conf", при запуске лаунчер производит его поиск, если его нет, то вместо кнопки "Играть" отображается кнопка "Загрузить" при нажатии на нее срабатывает FolderBrowserDialog, с помощью которого можно выбрать путь куда будет установлена игра. 📂 Далее я качаю весь репозиторий в виде архива, так как ссылка на него постоянная, что важно. 🗂
💬 Одновременно выводится информация о процессе загрузки. Скачав архив я использую класс ZipFile, чтобы разархивировать его. 🗜️ Вот и все мод у вас установлен. 🎉
💻 Прошёл всего один день, с того момента, как сделал скачивание обновлений, а уже готово первоначальное скачивание файлов при самом первом запуске лаунчера.
🔄 Т.е. можно сказать, что реализованная полноценная логика скачивания мода и дальнейшее его обновление.
💿 Для того, чтобы реализовать первичную загрузку пришлось создать отдельный файл "*.conf", при запуске лаунчер производит его поиск, если его нет, то вместо кнопки "Играть" отображается кнопка "Загрузить" при нажатии на нее срабатывает FolderBrowserDialog, с помощью которого можно выбрать путь куда будет установлена игра. 📂 Далее я качаю весь репозиторий в виде архива, так как ссылка на него постоянная, что важно. 🗂
💬 Одновременно выводится информация о процессе загрузки. Скачав архив я использую класс ZipFile, чтобы разархивировать его. 🗜️ Вот и все мод у вас установлен. 🎉
👾9
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ Ещё небольшое обновление, при скачивание обновлений, как бы забавно ни звучало.
™️ Теперь пока ждёте загрузку отображаются имена тех файлов, которые скачиваются.
📂 Ещё заметил, что обновления качаются немного не в ту подпапку, хорошо что фиксится это легко.
™️ Теперь пока ждёте загрузку отображаются имена тех файлов, которые скачиваются.
📂 Ещё заметил, что обновления качаются немного не в ту подпапку, хорошо что фиксится это легко.
👾7