Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
f80e8d3
fix: try to fix linux EACCES error
foreA-adoxid Feb 10, 2026
c738b91
fix: add fallback to unpacked copy
foreA-adoxid Feb 10, 2026
3aeccbe
fix: Fix some css issues with linux modal
TheKing-OfTime Feb 11, 2026
cb65bed
fix: Fix some css issues with modals
TheKing-OfTime Feb 11, 2026
e92c896
fix: migrate all classnames to cn from clsx
TheKing-OfTime Feb 11, 2026
2541cec
feat: refactor socket and add user_update event
foreA-adoxid Feb 12, 2026
5a855f2
fix: try to fix mod install on linux
foreA-adoxid Feb 12, 2026
0df7ca6
feat: refactor mod manager
foreA-adoxid Feb 12, 2026
a18b4aa
fix: remove copy dir elevation
foreA-adoxid Feb 12, 2026
dbc0edc
fix: Make primary buttons on the left corner of modals and add delay …
TheKing-OfTime Feb 13, 2026
1aa7c85
fix: Fix some css on buttons
TheKing-OfTime Feb 13, 2026
83b74ad
feat: Add premiumPromo Modal
TheKing-OfTime Feb 13, 2026
b1da5bf
fix: hideOnClose handling on quit
foreA-adoxid Feb 13, 2026
13fc770
fix: Change delay on modal close allow
TheKing-OfTime Feb 13, 2026
614db60
feat: move socket to context
foreA-adoxid Feb 13, 2026
ae583e7
fix: button css
foreA-adoxid Feb 13, 2026
ac51a0f
fix: rpc locale
foreA-adoxid Feb 13, 2026
de6e999
feat: add MacPermissionsModal
foreA-adoxid Feb 13, 2026
6a34187
feat: remove sentry
foreA-adoxid Feb 13, 2026
7df0063
chore: upload appConfig
foreA-adoxid Feb 13, 2026
64ae28b
fix: remove Flatpak check in rpc
foreA-adoxid Feb 13, 2026
93395fe
fix: remove flatpak string from locale
foreA-adoxid Feb 13, 2026
b09700b
chore: bump deps
foreA-adoxid Feb 13, 2026
9add070
fix: try to fix encoding on linux
foreA-adoxid Feb 13, 2026
c4b8b2d
Revert "fix: try to fix encoding on linux"
foreA-adoxid Feb 13, 2026
e781dd9
feat: move modals to useContext
foreA-adoxid Feb 14, 2026
cc73518
feat: add openModal event
foreA-adoxid Feb 14, 2026
ea391c2
feat: add premium unlocked modal
foreA-adoxid Feb 14, 2026
a97f01b
feat: add linux permissions modal
foreA-adoxid Feb 14, 2026
52ce7c8
fix: fallback albumArt get
foreA-adoxid Feb 16, 2026
865ba5d
feat: add socket event for mod
foreA-adoxid Feb 16, 2026
a151d8e
feat: update tray field in context menu
foreA-adoxid Feb 16, 2026
5aba3a6
fix: fallback logo on track info page
foreA-adoxid Feb 16, 2026
36d0006
chore: bump dependencies
foreA-adoxid Feb 16, 2026
139cfb0
chore: prepare to release
foreA-adoxid Feb 16, 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
6 changes: 1 addition & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ out/
.idea
yarn.lock

appConfig.ts
release


Expand All @@ -110,10 +109,7 @@ src/main/modules/YMusic-DRPC.code-workspace
uploadToS3.ts
pnpm-lock.yaml

# Sentry Config File
.env.sentry-build-plugin

Release
Debug
build
*.node
*.node
13 changes: 7 additions & 6 deletions PATCHNOTES.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
### Добавлено
- Модальное окно на случай, если у пользователя на MacOS/Linux будет недостаточно прав для установки мода
Модальное окно, уведомляющее о том, что у пользователя теперь есть подписка
### Изменено
- Изменен дизайн у модального окна установки/обновления мода
- Изменен дизайн страницы авторизации
- Улучшены сообщения в некоторых тостаx.
- Теперь баннеры и аватары загружаются на фоне, а также под занимаемый размер на экране. (Раньше ваш ултра 4к баннер мог загружаться в картинку 200x300px)
- Изменен дизайн у модальных окон. Теперь они более соответствуют дизайну приложения
### Исправлено
- Теперь автозапуск яндекс музыки работает корректно
- Из прогресс бара уровней убраны лишние элементы. Теперь он выглядит не перегружено
- Локализация в Discord RPC
- Баг, из-за которого обложка трека не менялась на заглушку, если у трека ее нет
- Установка и удаление мода на Linux
30 changes: 13 additions & 17 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"author": "PulseSync <contact@pulsesync.dev>",
"description": "PulseSync app for desktops",
"homepage": "https://pulsesync.dev",
"version": "2.10.2-beta",
"version": "2.10.3-beta",
"main": ".vite/main/index.js",
"scripts": {
"start": "electron-forge start",
Expand All @@ -24,23 +24,22 @@
"keywords": [],
"license": "GPL-3.0+",
"devDependencies": {
"@aws-sdk/client-s3": "^3.986.0",
"@aws-sdk/client-s3": "^3.990.0",
"@electron-forge/cli": "^7.11.1",
"@electron-forge/maker-deb": "^7.11.1",
"@electron-forge/maker-dmg": "^7.11.1",
"@electron-forge/maker-rpm": "^7.11.1",
"@electron-forge/maker-squirrel": "^7.11.1",
"@electron-forge/maker-zip": "^7.11.1",
"@electron-forge/plugin-vite": "^7.11.1",
"@sentry/vite-plugin": "^4.9.1",
"@types/adm-zip": "^0.5.7",
"@types/electron": "^1.6.12",
"@types/fs-extra": "^11.0.4",
"@types/glob": "^9.0.0",
"@types/lodash.debounce": "^4.0.9",
"@types/node": "^25.2.3",
"@types/plist": "^3.0.5",
"@types/react": "^19.2.13",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@types/react-modal": "^3.16.3",
"@types/react-transition-group": "^4.4.12",
Expand All @@ -54,10 +53,10 @@
"@types/unzipper": "^0.10.11",
"@types/uuid": "^11.0.0",
"@types/yazl": "^3.3.0",
"@typescript-eslint/eslint-plugin": "^8.55.0",
"@typescript-eslint/parser": "^8.55.0",
"@typescript-eslint/eslint-plugin": "^8.56.0",
"@typescript-eslint/parser": "^8.56.0",
"@vitejs/plugin-react-swc": "^4.2.3",
"electron": "40.2.1",
"electron": "40.4.1",
"electron-builder": "^26.7.0",
"eslint": "^10.0.0",
"eslint-plugin-import": "^2.32.0",
Expand All @@ -80,8 +79,6 @@
"@emotion/styled": "^11.14.1",
"@mui/joy": "^5.0.0-beta.52",
"@radix-ui/react-tooltip": "^1.2.8",
"@reduxjs/toolkit": "^2.11.2",
"@sentry/electron": "^7.7.1",
"@xhayper/discord-rpc": "^1.3.0",
"acorn": "^8.15.0",
"acorn-walk": "^8.3.4",
Expand All @@ -98,10 +95,10 @@
"formik": "^2.4.9",
"framer-motion": "^12.34.0",
"fs-extra": "^11.3.3",
"glob": "^13.0.1",
"glob": "^13.0.3",
"graphql": "^16.12.0",
"graphql-ws": "^6.0.7",
"i18next": "^25.8.4",
"i18next": "^25.8.10",
"lodash.debounce": "^4.0.8",
"log4js": "^6.9.1",
"net": "^1.0.2",
Expand All @@ -115,7 +112,6 @@
"react-loading-skeleton": "^3.5.0",
"react-markdown": "^10.1.0",
"react-modal": "^3.16.3",
"react-redux": "^9.2.0",
"react-router-dom": "^7.13.0",
"react-transition-group": "^4.4.5",
"rehype-raw": "^7.0.0",
Expand All @@ -129,8 +125,8 @@
"source-map-support": "^0.5.21",
"stream-browserify": "^3.0.0",
"string-similarity": "^4.0.4",
"systeminformation": "^5.30.7",
"tar": "^7.5.7",
"systeminformation": "^5.31.0",
"tar": "^7.5.9",
"url": "^0.11.4",
"uuid": "^13.0.0",
"yaml": "^2.8.2",
Expand All @@ -146,9 +142,9 @@
"forge": "./forge.config.ts"
},
"buildInfo": {
"VERSION": "2.10.2-beta",
"BRANCH": "897313a",
"BUILD_TIME": "10.02.2026, 18:09:31"
"VERSION": "2.10.3-beta",
"BRANCH": "1247fa6",
"BUILD_TIME": "16.02.2026, 21:24:59"
},
"optionalDependencies": {
"bufferutil": "^4.1.0",
Expand Down
24 changes: 24 additions & 0 deletions src/common/appConfig.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
export const isDev = false
export const isDevmark = true
export const branch = "beta"

const PORT = '2007'
const MAIN_PORT = 2007

const config = {
PORT,
CLIENT_ID: '1270726237605855395',
ENG_CLIENT_ID: '1270726237605855395',
RU_CLIENT_ID: '1290778445370097674',
RESERVE_CLIENT_ID: '1256145977056821248',
UPDATE_URL: 'https://s3.pulsesync.dev',
SERVER_URL: isDev ? 'http://localhost:4000' : 'https://ru-node-1.pulsesync.dev',
WEBSITE_URL: isDev ? 'http://localhost:3100' : 'https://pulsesync.dev',
S3_URL: 'https://s3.pulsesync.dev',
SOCKET_URL: isDev ? 'http://localhost:1337/' : 'https://ru-node-1.pulsesync.dev/',
RETRY_INTERVAL_MS: 15000,
MAX_RETRY_COUNT: 15,
MAIN_PORT,
}

export default config
1 change: 1 addition & 0 deletions src/common/types/mainEvents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ const Events = {
PULSESYNC_DISMISS: 'PULSESYNC_DISMISS',

CLEAR_MOD_CACHE: 'CLEAR_MOD_CACHE',
FIX_LINUX_MUSIC_PERMISSIONS: 'FIX_LINUX_MUSIC_PERMISSIONS',
} as const

export default Events
Expand Down
2 changes: 2 additions & 0 deletions src/common/types/rendererEvents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const Events = {
DOWNLOAD_UPDATE_FAILED: 'DOWNLOAD_UPDATE_FAILED',
UPDATE_AVAILABLE: 'UPDATE_AVAILABLE',
MAC_UPDATE_READY: 'MAC_UPDATE_READY',
REQUEST_MAC_PERMISSIONS: 'REQUEST_MAC_PERMISSIONS',

DOWNLOAD_MUSIC_PROGRESS: 'DOWNLOAD_MUSIC_PROGRESS',
DOWNLOAD_MUSIC_FAILURE: 'DOWNLOAD_MUSIC_FAILURE',
Expand All @@ -52,6 +53,7 @@ const Events = {

CLEAR_MOD_CACHE_SUCCESS: 'CLEAR_MOD_CACHE_SUCCESS',
CLEAR_MOD_CACHE_FAILURE: 'CLEAR_MOD_CACHE_FAILURE',
OPEN_MODAL: 'OPEN_MODAL',
} as const

export default Events
Expand Down
25 changes: 1 addition & 24 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@ import process from 'process'
import path from 'path'
import * as fs from 'original-fs'
import createTray from './main/modules/tray'
import config from './common/appConfig'
import { checkForSingleInstance } from './main/modules/singleInstance'
import * as Sentry from '@sentry/electron/main'
import { setAddon } from './main/modules/httpServer'
import { checkAsar, findAppByName, getPathToYandexMusic, isLinux, isMac, isWindows } from './main/utils/appUtils'
import logger from './main/modules/logger'
Expand Down Expand Up @@ -80,28 +78,7 @@ const initializeMusicPath = async () => {
}
initializeMusicPath()

const sentryPrefix = 'app:///'
const sentryRoot = app.isPackaged ? path.join(process.resourcesPath, 'app.asar') : path.resolve(__dirname, '..', '..')

if (!isAppDev) {
logger.main.info('Sentry enabled')
Sentry.init({
dsn: config.SENTRY_DSN,
debug: isAppDev,
release: `pulsesync@${app.getVersion()}`,
environment: isAppDev ? 'development' : 'production',
attachStacktrace: true,
enableRendererProfiling: true,
attachScreenshot: true,
integrations: [
Sentry.rewriteFramesIntegration({
root: sentryRoot,
prefix: sentryPrefix,
}),
],
})
Sentry.setTag('process', 'main')
} else if (isWindows() || isMac()) {
if (isAppDev && (isWindows() || isMac())) {
const openAtLogin = app.getLoginItemSettings().openAtLogin
if (openAtLogin) {
app.setLoginItemSettings({
Expand Down
2 changes: 1 addition & 1 deletion src/locales/en/main.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@
"states": {
"administrator": "Discord appears to be running as administrator. Please run PulseSync as administrator.",
"closed": "Could not detect a running Discord instance!",
"flatpak": "Discord appears to be running from the Flatpak package. This likely prevents RPC connection.",
"snap": "Discord appears to be running from the Snap package. This likely prevents RPC connection.",
"success": ""
},
Expand Down Expand Up @@ -134,6 +133,7 @@
"closingMusic": "Closing Yandex Music...",
"fullDiskAccessRequired": "Please grant full disk access to the app.",
"incompatibleMod": "The mod is not compatible with the current Yandex Music version.",
"linuxPermissionsRequired": "Not enough permissions to modify Yandex Music files. Grant access and retry.",
"modAlreadyInstalled": "Mod is already installed.",
"modAsarNotFound": "{{name}} not found. Please reinstall Yandex Music.",
"usingCache": "Using mod cache..."
Expand Down
Loading