From be786e70aea04f14e3aa6bc2af9257358a167e72 Mon Sep 17 00:00:00 2001 From: Scream034 Date: Thu, 26 Feb 2026 04:26:51 +0500 Subject: [PATCH 1/2] Git flow 2 --- .github/workflows/ci.yml | 13 ++++-- .github/workflows/dev-build.yml | 78 +++++++++++++++++++++++++-------- .github/workflows/release.yml | 12 +++-- 3 files changed, 78 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 279bcc5..51231cb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,18 +8,23 @@ on: jobs: build: runs-on: windows-latest + steps: - uses: actions/checkout@v4 - with: { fetch-depth: 0 } + with: + fetch-depth: 0 - uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' cache: true - cache-dependency-path: packages.lock.json + cache-dependency-path: "**/packages.lock.json" + + - name: Restore + run: dotnet restore - name: Build Debug - run: ./build.bat debug + run: ./build.bat debug nopause - name: Build Optimized Debug - run: ./build.bat optimized \ No newline at end of file + run: ./build.bat optimized nopause \ No newline at end of file diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml index fa18cb6..823d081 100644 --- a/.github/workflows/dev-build.yml +++ b/.github/workflows/dev-build.yml @@ -11,42 +11,84 @@ permissions: jobs: build: runs-on: windows-latest + steps: - uses: actions/checkout@v4 - with: { fetch-depth: 0, submodules: recursive } + with: + fetch-depth: 0 + submodules: recursive - uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' cache: true - cache-dependency-path: packages.lock.json + cache-dependency-path: "**/packages.lock.json" + + # Получаем информацию о версии + - name: Get Git Version Info + id: version + shell: pwsh + run: | + $commitCount = git rev-list --count HEAD + $shortHash = git rev-parse --short=7 HEAD + $version = "1.0.$commitCount" + $fullVersion = "1.0.$commitCount+$shortHash" + + echo "VERSION=$version" >> $env:GITHUB_ENV + echo "FULL_VERSION=$fullVersion" >> $env:GITHUB_ENV + echo "COMMIT_HASH=$shortHash" >> $env:GITHUB_ENV + echo "COMMIT_COUNT=$commitCount" >> $env:GITHUB_ENV - - name: Build Debug - run: ./build.bat debug + - name: Build Debug Full + run: ./build.bat debug nopause - - name: Build Optimized Debug - run: ./build.bat optimized + - name: Build Release Full + Package + run: ./build.bat publish nopause - - name: Publish Release - run: ./build.bat publish + # Архивация Debug сборки + - name: Archive Debug Build + run: | + cd bin/Debug/net10.0 + 7z a -t7z -mx=9 "../../LMP-Debug-v${{ env.FULL_VERSION }}.7z" . + cd ../../.. - - name: Upload Artifacts + - name: Rename Release Archive + run: Move-Item -Path "LMP-v${{ env.FULL_VERSION }}.7z" -Destination "LMP-Release-v${{ env.FULL_VERSION }}.7z" -Force + + # Загрузка артефактов + - name: Upload Debug Artifact uses: actions/upload-artifact@v4 with: - name: LMP-Debug - path: bin/Debug/net10.0/ + name: LMP-Debug-v${{ env.FULL_VERSION }} + path: LMP-Debug-v${{ env.FULL_VERSION }}.7z - - name: Upload Optimized + - name: Upload Release Artifact uses: actions/upload-artifact@v4 with: - name: LMP-Optimized-Debug - path: bin/Debug/net10.0/ + name: LMP-Release-v${{ env.FULL_VERSION }} + path: LMP-Release-v${{ env.FULL_VERSION }}.7z + # Создание Pre-release с предупреждением - name: Create Pre-release - uses: softprops/action-gh-release@v2 if: github.ref == 'refs/heads/main' + uses: softprops/action-gh-release@v2 with: - tag_name: v1.0.${{ github.run_number }} - name: "Dev Build #${{ github.run_number }}" + tag_name: v${{ env.VERSION }}-dev.${{ github.run_number }} + name: "Dev Build #${{ github.run_number }} (v${{ env.FULL_VERSION }})" prerelease: true - files: LMP-*.7z \ No newline at end of file + files: | + LMP-Debug-v${{ env.FULL_VERSION }}.7z + LMP-Release-v${{ env.FULL_VERSION }}.7z + body: | + **Автоматическая dev-сборка #${{ github.run_number }}** + + - **Версия**: `v${{ env.FULL_VERSION }}` + - **Коммит**: `${{ env.COMMIT_HASH }}` + - **Всего коммитов**: ${{ env.COMMIT_COUNT }} + + ⚠️ **Это нестабильная автоматическая сборка!** + + Предназначена только для тестирования, показа друзьям и поиска багов. + + Не используйте как основную версию. + Если найдёте проблемы — создавайте Issue. \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 494fb63..e6afb37 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,14 +7,20 @@ on: jobs: publish: runs-on: windows-latest + steps: - uses: actions/checkout@v4 - with: { fetch-depth: 0 } + with: + fetch-depth: 0 - uses: actions/setup-dotnet@v4 - with: { dotnet-version: '10.0.x', cache: true, cache-dependency-path: packages.lock.json } + with: + dotnet-version: '10.0.x' + cache: true + cache-dependency-path: "**/packages.lock.json" - - run: ./build.bat publish + - name: Publish Release + run: ./build.bat publish nopause - name: Upload Release Asset uses: softprops/action-gh-release@v2 From 8a4e6dd51aa40b017f30dbca9ac1f7bbcfcc1e40 Mon Sep 17 00:00:00 2001 From: Scream034 Date: Thu, 26 Feb 2026 04:42:41 +0500 Subject: [PATCH 2/2] README --- README.md | 238 +++++++++++++----------------------------------------- 1 file changed, 56 insertions(+), 182 deletions(-) diff --git a/README.md b/README.md index 8bee50b..2f699c2 100644 --- a/README.md +++ b/README.md @@ -1,186 +1,60 @@ -# 🎵 Lite Music Player (LMP) - -**Легковесный клиент YouTube Music, который не жрёт гигабайт оперативки.** - -Официальный YTM на Windows — 600–1500 МБ RAM даже когда просто открыт. -Этот плеер — **250–350 МБ в среднем**. - -![Project Status](https://img.shields.io/badge/Status-Active-brightgreen) -![Platform](https://img.shields.io/badge/Platform-Windows-blue) -![Tech](https://img.shields.io/badge/Tech-Avalonia%20|%20.NET%2010%20|%20VLC-blueviolet) - ---- - -## ✨ Особенности - -- 🚀 **Экстремальная производительность** — .NET 10 + Avalonia UI, оптимизирован для слабых ПК -- 🎧 **Умный стриминг (Memory-First)** — мгновенный старт воспроизведения с параллельным кешированием -- 🖼️ **Spotify-inspired UI** — эстетичный интерфейс с плавными анимациями -- 📦 **Агрессивное кеширование** — изображения, поиск, аудио сохраняются локально -- 🔊 **Продвинутый звук** — LibVLC с Gain Control и плавным переключением треков -- 🌍 **Локализация** — русский и английский языки -- 📚 **Личная библиотека** — плейлисты, лайки, история (офлайн) - ---- - -## 🛠 Технологии - -| Компонент | Технология | -|-----------|------------| -| UI Framework | [Avalonia UI](https://avaloniaui.net/) (MVVM, ReactiveUI) | -| Audio Engine | [LibVLCSharp](https://github.com/videolan/libvlcsharp) | -| Database | SQLite + Entity Framework Core | -| DI | Microsoft.Extensions.DependencyInjection | -| Images | AsyncImageLoader + кастомный дисковый кеш | - ---- - -## 🔧 Сборка проекта - -### Требования - -| Требование | Версия | Примечание | -|------------|--------|------------| -| .NET SDK | **10.0+** | [Скачать](https://dotnet.microsoft.com/download/dotnet/10.0) (Preview) | -| OS | Windows 10/11 | x64 | -| RAM | 4+ GB | Рекомендуется | - -### Быстрый старт - +# Lite Music Player (LMP) + +Легковесный десктопный клиент YouTube Music для Windows. Написан на .NET 10 и Avalonia UI. +Главная цель проекта — экстремальная оптимизация ресурсов (CPU/RAM/Сеть). В отличие от официального PWA и Electron-клиентов, LMP потребляет в среднем **230 МБ RAM** (в свернутом виде падает до **160 МБ**). + +## ⚡ Под капотом +* **Свой аудио-пайплайн:** Отказ от LibVLC. Используется связка `NAudio` + `Concentus` (Opus) / `SharpJaad` (AAC) с ручным управлением PCM-буферами. +* **Умный стриминг:** Треки грузятся чанками с упреждающим чтением. Мгновенный старт без ожидания полной загрузки. +* **Агрессивный кэш:** Двойное кэширование (RAM + Диск) аудио, изображений и результатов поиска. +* **YT-Bypass:** Встроенные C#-дешифраторы `sig` и `n-token`, обход bot-detection через ротацию клиентов (Android VR, Web, iOS). +* **Offline-First БД:** SQLite + EF Core с поддержкой полнотекстового поиска (FTS5). + +## 🛠 Текущий статус (Февраль 2026) + +Проект в активной разработке. Базовый фундамент готов, идет наращивание UI-фич. + +**Что уже работает:** +* [x] Воспроизведение треков напрямую с серверов YouTube +* [x] Многопоточное кэширование аудио и обложек +* [x] Поиск по базе YT Music и локальной библиотеке +* [x] Авторизация через Google Cookies (SAPISID) +* [x] Двусторонняя синхронизация лайков и плейлистов +* [x] История прослушиваний (Recently Played) +* [x] Мониторинг памяти и управление GC + +## 🗺 Roadmap (Ближайшие планы) + +| Статус | Фича | Описание | +|:---:|---|---| +| 🔄 | **Полировка аудио** | Устранение микрощелчков при seek/переключении (micro fade-in/out). | +| 🔄 | **Радио (Mixes)** | Генерация бесконечного плейлиста "Похожее" на основе текущего трека. | +| 📅 | **Управление плейлистами** | UI для добавления/удаления треков в кастомные плейлисты. | +| 📅 | **Системный трей** | Сворачивание в трей с мини-управлением (Play/Pause, Next). | +| 📅 | **Глобальные хоткеи** | Управление плеером в фоновом режиме. | +| 🚀 | **Эквалайзер** | Базовый 5-полосный EQ (интеграция в пайплайн NAudio). | +| 🚀 | **Импорт плейлистов** | Парсинг и перенос ссылок из Spotify/Apple Music. | + +## 🔧 Сборка и запуск + +**Требования:** +* Windows 10/11 (x64) +* .NET 10.0 SDK + +**Быстрый старт из консоли:** ```bash -# Клонировать репозиторий -git clone https://github.com/Scream034/LiteYTMusicPlayer.git -cd LiteYTMusicPlayer - -# Запустить (автоматически восстановит зависимости) -dotnet run --project LMP.csproj -``` - -### Сборка через скрипты - -В корне проекта есть готовые `.bat` файлы: - -| Скрипт | Описание | -|--------|----------| -| `build-debug.bat` | Быстрая сборка для отладки | -| `build-release.bat` | Оптимизированная Release сборка | -| `publish.bat` | Полная публикация (self-contained) | -| `clean.bat` | Очистка bin/obj папок | - -```bash -# Примеры использования -build-debug.bat # Собрать Debug -build-release.bat # Собрать Release -publish.bat # Создать готовый дистрибутив в ./publish -clean.bat # Очистить проект +git clone https://github.com/Scream034/LMP.git +cd LMP +dotnet run --project LMP.csproj -c Debug ``` -### Настройка IDE - -
-Visual Studio 2022 - -1. Установить workload ".NET Desktop Development" -2. Установить расширение "Avalonia for Visual Studio" -3. Открыть `LMP.csproj` -4. F5 для запуска - -
- -
-JetBrains Rider - -1. Установить плагин "AvaloniaRider" -2. Открыть папку проекта -3. Shift+F10 для запуска - -
- -
-VS Code - -1. Установить расширения: C# Dev Kit, Avalonia for VS Code -2. Открыть папку проекта -3. F5 для отладки (конфигурация уже настроена) - -
- -### Решение проблем - -
-❌ ".NET 10 not found" - -```bash -# Проверить установленные SDK -dotnet --list-sdks - -# Скачать .NET 10: https://dotnet.microsoft.com/download/dotnet/10.0 -``` - -
- -
-❌ Ошибки сборки - -```bash -# Полная очистка и пересборка -clean.bat -dotnet restore --force -build-debug.bat -``` - -
- ---- - -## 📈 Статус разработки - -### ✅ Готово - -- [x] Воспроизведение треков (LibVLC) -- [x] Умный стриминг с кешированием -- [x] Поиск треков/видео -- [x] Кеширование (изображения, поиск, аудио) -- [x] Локализация (RU/EN) -- [x] История прослушиваний -- [x] Система лайков -- [x] Плейлисты -- [x] Синхронизация через Google Cookies - -### 🔄 В разработке - -- [ ] Расширенный поиск с фильтрами -- [ ] Страницы артистов/каналов -- [ ] Радио (Mixes) -- [ ] Discord RPC -- [ ] Эквалайзер -- [ ] Автообновление - ---- - -### Сборка проекта (рекомендуется) - -Используй центральный скрипт: - -```bat -build.bat debug # Обычная Debug сборка -build.bat optimized # Debug + максимальная оптимизация (для теста производительности) -build.bat release # Полная Release сборка -build.bat publish # Полная публикация + 7z архив -build.bat clean # Полная очистка проекта -``` - -**VS Code:** -- `Ctrl+Shift+P` → `Tasks: Run Task` → выбирай нужную задачу -- Рекомендую конфигурацию **"🎵 Watch + Hot Reload"** для повседневной разработки - -## 📜 Лицензия - -Проект для личного использования и обучения. -Весь аудиоконтент предоставляется YouTube. - ---- - -> Если тебе тоже надоело, что YTM превращает твой ноут в самолёт — попробуй этот. +**Скрипты сборки (в корне проекта):** +* `build.bat debug` — обычная сборка с Hot Reload. +* `build.bat optimized` — Debug-сборка с оптимизациями компилятора (для тестов производительности). +* `build.bat release` — релизная сборка. +* `build.bat publish` — собирает **Portable-версию** (Self-Contained) в папку `publish` и пакует в `.7z` (не требует установленного .NET на ПК). +* `build.bat clean` — очистка `bin` / `obj`. -### Made with ❤️ for music lovers \ No newline at end of file +## 📜 Заметка разработчикам +Если вы хотите помочь с разработкой или протестировать аудио-пайплайн: +В `Debug` конфигурации нажмите `F9` для открытия окна отладки (состояние кэшей, принудительный GC) или `F10` для запуска интеграционных тестов дешифраторов без UI. \ No newline at end of file