Skip to content
Merged

Dev #116

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
756fad5
fix: Add questionmark next to secondary components
TheKing-OfTime May 30, 2026
e8a4822
fix: Remove extra dataSide props
TheKing-OfTime May 30, 2026
4dcdd8d
fix: Add user-select: text when necessary
TheKing-OfTime May 30, 2026
bf1b5bc
feat: notify subscription purchases and expiry
foreA-adoxid Jun 1, 2026
d4a2960
fix: context menu top action
foreA-adoxid Jun 1, 2026
71180f3
fix: Fix news padding
TheKing-OfTime Jun 2, 2026
84356ad
fix: Remove settings button
TheKing-OfTime Jun 2, 2026
9a68515
feat: add trafficLight on macOS
TheKing-OfTime Jun 2, 2026
b676281
fix: fix trafficLight position on macOS
TheKing-OfTime Jun 2, 2026
e6609e3
fix: fix trafficLight position on macOS
TheKing-OfTime Jun 2, 2026
0082cc8
fix: Change style of searchContainer
TheKing-OfTime Jun 6, 2026
ff7b948
fix: Rename "Каталог расширений" to "Каталог аддонов"
TheKing-OfTime Jun 6, 2026
da1a489
feat: Update profile layout
TheKing-OfTime Jun 6, 2026
51559cd
refactor: add worker to mod downloader
foreA-adoxid Jun 12, 2026
a79c4f6
feat: notify users about active giveaways
foreA-adoxid Jun 13, 2026
acca001
build: scaffold rust native module
foreA-adoxid Jun 13, 2026
1f9d4f4
refactor: replace native file operations with rust
foreA-adoxid Jun 13, 2026
c7f38e1
feat: process mod artifacts in rust
foreA-adoxid Jun 13, 2026
7e71624
feat: patch electron integrity in rust
foreA-adoxid Jun 13, 2026
20fdf71
refactor: use rust native artifact pipeline
foreA-adoxid Jun 13, 2026
4109d74
refactor: remove cpp native module
foreA-adoxid Jun 13, 2026
b3893f3
ci: build rust native module
foreA-adoxid Jun 13, 2026
2ee7791
fix: preserve native artifact error semantics
foreA-adoxid Jun 13, 2026
d75bb07
fix: release watcher with node event loop
foreA-adoxid Jun 13, 2026
48422c7
feat: move mac integrity patching to rust
foreA-adoxid Jun 13, 2026
dcb6b84
fix: gate mac integrity helpers by platform
foreA-adoxid Jun 13, 2026
b7af204
fix: update napi to v10
foreA-adoxid Jun 13, 2026
49fb953
chore: update license
foreA-adoxid Jun 17, 2026
59a3197
fix: allow obs widget without auth
foreA-adoxid Jun 18, 2026
fb455a9
fix: read ASAR metadata in native module
foreA-adoxid Jun 19, 2026
5af93cf
fix: disambiguate native JSON value type
foreA-adoxid Jun 19, 2026
fb384f8
fix: preserve addons across PulseSync restart
foreA-adoxid Jun 20, 2026
afc23ab
feat: add GlitchTip support
foreA-adoxid Jun 21, 2026
df9c033
fix: harden mod installation and error reporting
foreA-adoxid Jun 23, 2026
7e3132c
fix: show auth modal for autonomous mode
foreA-adoxid Jun 25, 2026
7757f8c
chore: prettier
foreA-adoxid Jun 26, 2026
1b27875
fix: isolate GlitchTip sourcemaps by dist
foreA-adoxid Jun 29, 2026
f74ecc2
chore: bump deps
foreA-adoxid Jun 29, 2026
92c1247
chore: replace buildInfo filter with node hook
foreA-adoxid Jun 29, 2026
7eb6075
feat: tag GlitchTip events with user identity
foreA-adoxid Jun 29, 2026
019dabb
chore: update patchnotes for 2.17.0
foreA-adoxid Jun 29, 2026
4e376c9
fix: scope dev build change detection
foreA-adoxid Jun 29, 2026
061bc90
fix: remove broad negation from dev build filter
foreA-adoxid Jun 29, 2026
181b239
Merge branch 'main' into dev
foreA-adoxid Jun 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#!/usr/bin/env node

import { spawnSync } from 'node:child_process'
import fs from 'node:fs'

const stagedPackageJson = spawnSync('git', ['diff', '--cached', '--name-only', '--', 'package.json'], {
encoding: 'utf8',
})

if (stagedPackageJson.status !== 0) {
process.stderr.write(stagedPackageJson.stderr || 'Failed to inspect staged package.json\n')
process.exit(stagedPackageJson.status ?? 1)
}

const hasStagedPackageJson = stagedPackageJson.stdout
.split(/\r?\n/u)
.map(line => line.trim())
.includes('package.json')

if (!hasStagedPackageJson) {
process.exit(0)
}

const packageJsonPath = 'package.json'
const packageJson = fs.readFileSync(packageJsonPath, 'utf8')
const strippedPackageJson = spawnSync(process.execPath, ['scripts/strip-package-buildinfo.cjs'], {
encoding: 'utf8',
input: packageJson,
})

if (strippedPackageJson.status !== 0) {
process.stderr.write(strippedPackageJson.stderr || 'Failed to strip package.json buildInfo\n')
process.exit(strippedPackageJson.status ?? 1)
}

if (strippedPackageJson.stdout !== packageJson) {
fs.writeFileSync(packageJsonPath, strippedPackageJson.stdout, 'utf8')
}

const addPackageJson = spawnSync('git', ['add', '--', packageJsonPath], {
stdio: 'inherit',
})

process.exit(addPackageJson.status ?? 1)
24 changes: 21 additions & 3 deletions .github/workflows/build-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ jobs:
- uses: dorny/paths-filter@v4.0.1
id: filter
with:
base: ${{ github.ref_name }}
list-files: shell
filters: |
build:
Expand All @@ -35,20 +36,19 @@ jobs:
- 'nativeModules/**'
- 'scripts/**'
- 'scriptsInstaller/**'
- '!packaging/**'
- 'package.json'
- 'yarn.lock'
- '.yarnrc.yml'
- 'forge.config.ts'
- 'vite.main.config.ts'
- 'vite.preload.config.ts'
- 'vite.renderer.config.ts'
- 'vite.worker.config.ts'
- 'electron-builder.yml'
- 'tsconfig*.json'
- 'Info.plist'
- 'graphql.config.yml'
- 'schema.graphql'
- '.github/workflows/build-dev-windows.yml'

- name: Report changed build-related files
shell: bash
Expand Down Expand Up @@ -121,12 +121,21 @@ jobs:
cache: yarn
cache-dependency-path: '**/yarn.lock'

- name: Set up Rust
shell: bash
run: |
rustup toolchain install 1.88.0 --profile minimal --no-self-update
rustup default 1.88.0

- uses: actions/cache@v5
with:
path: |
nativeModules/**/node_modules
nativeModules/**/build
key: native-modules-${{ runner.os }}-${{ runner.arch }}-node22-${{ hashFiles('nativeModules/**/package.json', 'nativeModules/**/yarn.lock', 'nativeModules/**/binding.gyp', 'nativeModules/**/*.c', 'nativeModules/**/*.cc', 'nativeModules/**/*.cpp', 'nativeModules/**/*.h', 'nativeModules/**/*.hpp') }}
nativeModules/**/target
~/.cargo/registry
~/.cargo/git
key: native-modules-${{ runner.os }}-${{ runner.arch }}-node22-rust188-${{ hashFiles('nativeModules/**/package.json', 'nativeModules/**/Cargo.toml', 'nativeModules/**/Cargo.lock', 'nativeModules/**/build.rs', 'nativeModules/**/*.rs') }}

- name: Create .env
shell: bash
Expand All @@ -140,11 +149,20 @@ jobs:
- name: Install deps
run: yarn install --frozen-lockfile

- name: Check Sentry CLI
run: yarn -s sentry-cli --version

- name: Build and publish dev
run: yarn build:package --nativeModules --publish dev
env:
BUILD_VERSION: ${{ needs.version.outputs.build_version }}
S3_KEEP_RECENT_VERSIONS: 3
GLITCHTIP_SOURCEMAPS: "1"
GLITCHTIP_SOURCEMAPS_UPLOAD: "1"
SENTRY_URL: https://issues.pulsesync.dev
SENTRY_AUTH_TOKEN: ${{ secrets.GLITCHTIP_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.GLITCHTIP_ORG }}
SENTRY_PROJECT: ${{ vars.GLITCHTIP_PROJECT }}

- name: Show release contents
shell: bash
Expand Down
11 changes: 10 additions & 1 deletion .github/workflows/build-manual.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,21 @@ jobs:
cache: yarn
cache-dependency-path: '**/yarn.lock'

- name: Set up Rust
shell: bash
run: |
rustup toolchain install 1.88.0 --profile minimal --no-self-update
rustup default 1.88.0

- uses: actions/cache@v5
with:
path: |
nativeModules/**/node_modules
nativeModules/**/build
key: native-modules-${{ runner.os }}-${{ runner.arch }}-node22-${{ hashFiles('nativeModules/**/package.json', 'nativeModules/**/yarn.lock', 'nativeModules/**/binding.gyp', 'nativeModules/**/*.c', 'nativeModules/**/*.cc', 'nativeModules/**/*.cpp', 'nativeModules/**/*.h', 'nativeModules/**/*.hpp') }}
nativeModules/**/target
~/.cargo/registry
~/.cargo/git
key: native-modules-${{ runner.os }}-${{ runner.arch }}-node22-rust188-${{ hashFiles('nativeModules/**/package.json', 'nativeModules/**/Cargo.toml', 'nativeModules/**/Cargo.lock', 'nativeModules/**/build.rs', 'nativeModules/**/*.rs') }}

- name: Create .env
shell: bash
Expand Down
11 changes: 10 additions & 1 deletion .github/workflows/build-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,21 @@ jobs:
cache: yarn
cache-dependency-path: '**/yarn.lock'

- name: Set up Rust
shell: bash
run: |
rustup toolchain install 1.88.0 --profile minimal --no-self-update
rustup default 1.88.0

- uses: actions/cache@v5
with:
path: |
nativeModules/**/node_modules
nativeModules/**/build
key: native-modules-${{ runner.os }}-${{ runner.arch }}-node22-${{ hashFiles('nativeModules/**/package.json', 'nativeModules/**/yarn.lock', 'nativeModules/**/binding.gyp', 'nativeModules/**/*.c', 'nativeModules/**/*.cc', 'nativeModules/**/*.cpp', 'nativeModules/**/*.h', 'nativeModules/**/*.hpp') }}
nativeModules/**/target
~/.cargo/registry
~/.cargo/git
key: native-modules-${{ runner.os }}-${{ runner.arch }}-node22-rust188-${{ hashFiles('nativeModules/**/package.json', 'nativeModules/**/Cargo.toml', 'nativeModules/**/Cargo.lock', 'nativeModules/**/build.rs', 'nativeModules/**/*.rs') }}

- name: Create .env
if: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository }}
Expand Down
20 changes: 19 additions & 1 deletion .github/workflows/build-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,21 @@ jobs:
cache: yarn
cache-dependency-path: '**/yarn.lock'

- name: Set up Rust
shell: bash
run: |
rustup toolchain install 1.88.0 --profile minimal --no-self-update
rustup default 1.88.0

- uses: actions/cache@v5
with:
path: |
nativeModules/**/node_modules
nativeModules/**/build
key: native-modules-${{ runner.os }}-${{ runner.arch }}-node22-${{ hashFiles('nativeModules/**/package.json', 'nativeModules/**/yarn.lock', 'nativeModules/**/binding.gyp', 'nativeModules/**/*.c', 'nativeModules/**/*.cc', 'nativeModules/**/*.cpp', 'nativeModules/**/*.h', 'nativeModules/**/*.hpp') }}
nativeModules/**/target
~/.cargo/registry
~/.cargo/git
key: native-modules-${{ runner.os }}-${{ runner.arch }}-node22-rust188-${{ hashFiles('nativeModules/**/package.json', 'nativeModules/**/Cargo.toml', 'nativeModules/**/Cargo.lock', 'nativeModules/**/build.rs', 'nativeModules/**/*.rs') }}

- name: Create .env
shell: bash
Expand All @@ -44,11 +53,20 @@ jobs:
- name: Install deps
run: yarn install --frozen-lockfile

- name: Check Sentry CLI
run: yarn -s sentry-cli --version

- name: Build (package)
run: yarn build:package --nativeModules ${{ startsWith(matrix.os, 'macos-') && runner.arch == 'X64' && '--mac-x64' || '' }}
env:
BUILD_VERSION: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || '' }}
PUBLISH_BRANCH_FROM_TAG: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || '' }}
GLITCHTIP_SOURCEMAPS: "1"
GLITCHTIP_SOURCEMAPS_UPLOAD: "1"
SENTRY_URL: https://issues.pulsesync.dev
SENTRY_AUTH_TOKEN: ${{ secrets.GLITCHTIP_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.GLITCHTIP_ORG }}
SENTRY_PROJECT: ${{ vars.GLITCHTIP_PROJECT }}

- name: Show release contents (debug)
shell: bash
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ typings/

# Vite
.vite/
.glitchtip-sourcemaps/

*.zip

Expand Down
32 changes: 19 additions & 13 deletions PATCHNOTES.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,27 @@
### Новое
- Добавили поддержку системного прокси. PulseSync теперь корректнее работает в сетях, где интернет идёт через прокси.
- Добавили окно розыгрышей подписок и уведомления по ним.
- Добавили нативные кнопки управления окном на macOS.
- Добавили поддержку системного прокси при загрузке и установке мода.
- Добавили уведомления о покупке подписки, окончании подписки и активных розыгрышах.
- Обновили внешний вид профиля пользователя.

### Улучшено
- Улучшили установку Yandex Music и порядок проверки прав на macOS.
- Улучшили публикацию аддонов: окно публикации стало стабильнее.
- Установка и обновление мода стали стабильнее и лучше восстанавливаются после ошибок.
- Улучшили импорт `.pext` и `.zip` аддонов: PulseSync теперь проверяет архив перед установкой и сохраняет настройки существующего аддона.
- Улучшили работу аддонов после перезапуска PulseSync: активные темы, скрипты и настройки синхронизируются корректнее.
- Улучшили сообщения об ошибках при установке мода и обновлении приложения.
- Обновили лицензионные файлы.

### Исправлено
- Настройки аддонов больше не сбрасываются при установке или обновлении аддона.
- Если у аддона нет README, но есть патчноуты, теперь по умолчанию открываются патчноуты, а не настройки.
- Toast-уведомления больше не оставляют невидимую область, которая мешает нажимать кнопки, и снова закрываются по клику.
- Исправили фокус окна после успешной авторизации.
- Исправили ошибку с форматом сообщения для `privacySettings`.
- Исправили отображение shimmer-блока новостей и таймаут проверки онлайна.
- Исправили несколько проблем в процессе установки мода и обновления приложения.
- Аддоны больше не пропадают и не сбрасываются после перезапуска PulseSync.
- OBS-виджет теперь может получать данные о треке без входа в аккаунт.
- В автономном режиме разделы, требующие авторизации, теперь показывают понятное окно входа вместо молчаливого отключения.
- Исправили определение версии и данных установленной Яндекс Музыки.
- Исправили верхнее действие контекстного меню.
- Исправили отступы новостей, стиль поиска пользователей и отображение подсказок на главной странице.
- В русской локализации заменили "Каталог расширений" на "Каталог аддонов".
- В нужных местах снова можно выделять текст.

### Техническое
- Убрали устаревший HTTP-эндпоинт `/get_handle`.
- Поправили CORS-обработку локального HTTP-сервера.
- Обновили внутренний модуль для работы с файлами, установкой мода и проверкой приложения.
- Улучшили автоматическую диагностику сбоев, чтобы ошибки было проще находить и исправлять.
- Обновили сборку и служебные инструменты релиза.
9 changes: 8 additions & 1 deletion forge.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { FuseV1Options, FuseVersion } from '@electron/fuses'
import path from 'path'
import fs from 'fs'
import { fileURLToPath } from 'node:url'
import { prepareGlitchTipSourceMaps } from './scripts/glitchtip-sourcemaps.js'

const __dirname = path.dirname(fileURLToPath(import.meta.url))

Expand Down Expand Up @@ -39,6 +40,7 @@ const copyNativeModules = (resourcesPath: string): void => {
for (const addonName of fs.readdirSync(nativeModulesRoot)) {
const addonPath = path.join(nativeModulesRoot, addonName)
if (!fs.statSync(addonPath).isDirectory()) continue
if (!fs.existsSync(path.join(addonPath, 'package.json'))) continue

const nodeFiles = collectNativeNodeFiles(addonPath)
if (nodeFiles.length === 0) continue
Expand All @@ -59,7 +61,7 @@ const forgeConfig: ForgeConfig = {
executableName: process.platform === 'linux' ? 'pulsesync' : 'PulseSync',
appCopyright: `Copyright (C) ${new Date().getFullYear()} Матвиенко Артём Евгеньевич`,
asar: {
unpack: '**/.vite/renderer/**/static/assets/icon/**',
unpack: '{**/.vite/renderer/**/static/assets/icon/**,**/.vite/worker/**}',
},
win32metadata: {
CompanyName: 'Матвиенко Артём Евгеньевич',
Expand All @@ -83,6 +85,10 @@ const forgeConfig: ForgeConfig = {
config: 'vite.preload.config.ts',
target: 'preload',
},
{
entry: 'src/main/modules/mod/network/artifactWorker.ts',
config: 'vite.worker.config.ts',
},
],
renderer: [
{
Expand Down Expand Up @@ -125,6 +131,7 @@ const forgeConfig: ForgeConfig = {
fs.writeFileSync(packageJsonPath, JSON.stringify(pkg, null, '\t'))
},
packageAfterCopy: async (_forgeConfig, buildPath, electronVersion, platform, arch) => {
prepareGlitchTipSourceMaps(buildPath, platform, arch)
const resourcesPath = path.resolve(buildPath, '..')
const iconSource = path.resolve(__dirname, 'static', 'assets', 'icon')
const iconDestination = path.join(resourcesPath, 'assets', 'icon')
Expand Down
38 changes: 0 additions & 38 deletions nativeModules/fileOperations/binding.gyp

This file was deleted.

21 changes: 0 additions & 21 deletions nativeModules/fileOperations/package.json

This file was deleted.

12 changes: 0 additions & 12 deletions nativeModules/fileOperations/src/addon.cc

This file was deleted.

Loading
Loading