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
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 МБ в среднем**.
-
-
-
-
-
----
-
-## ✨ Особенности
-
-- 🚀 **Экстремальная производительность** — .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