Compare commits

...

180 commits

Author SHA1 Message Date
David Sultaniiazov
c17862f0c8 Update Russian translation 2025-06-28 16:35:13 +00:00
Luming Zh
b42a438cf2 Update Chinese (China) translation 2025-06-22 06:59:23 +00:00
Vladimir Vaskov
2672bf3253
cover: Fix covers 2025-06-10 19:49:51 +03:00
Ramal Rəhimov
51e2606bf1 Add Azerbaijani translation 2025-06-07 14:23:35 +00:00
Vladimir Vaskov
31be5c5e5b
cover-image: Fix covers 2025-06-04 12:17:46 +03:00
Ekaterine Papava
6efc85e5be Add Georgian translation 2025-03-20 03:07:10 +00:00
Vladimir Vaskov
2e72736c54
metainfo: Update component type 2025-03-18 00:51:01 +03:00
Vladimir Vaskov
6dec1c9403
metainfo: Fix spelling 2025-02-25 18:40:01 +03:00
Vladimir Vaskov
1551755b87
Bump version to 0.2.1 2025-02-25 18:38:50 +03:00
Vladimir Vaskov
ebc082c5b6
build: Bump meson min version to 1.0.0 2025-02-25 18:36:37 +03:00
Vladimir Vaskov
72795af62d
fix: Fix strange behavior of Gtk.FlowBox
https://t.me/RiruAndFriends/49936
2025-02-25 18:35:48 +03:00
Vladimir Vaskov
f004e40a5a
fix: Fix icon in pages 2025-02-25 16:35:57 +03:00
Vladimir Vaskov
57a5cf8ec1
about: Update sponsors 2025-02-25 02:35:47 +03:00
Daniel Mustieles
96c9f48a29 Update Spanish translation 2025-02-18 19:29:01 +00:00
Nahue Mantuani
5ba553f0d3 Update Spanish translation 2025-02-17 07:27:48 +00:00
Nahue Mantuani
8406280d31 Update Spanish translation 2025-02-13 07:19:23 +00:00
Nahue Mantuani
8ec4304daa Update Spanish translation 2025-02-12 09:33:21 +00:00
Nahue Mantuani
cc45f328de Update Spanish translation 2025-02-10 09:50:28 +00:00
Nahue Mantuani
988197631a Update Spanish translation 2025-02-06 10:22:40 +00:00
Vladimir Vaskov
a03c6a944a
ci: Fix manifest build dir 2025-02-02 17:23:39 +03:00
Vladimir Vaskov
6a5b25285e
po: Update POTFILES 2025-02-02 17:12:09 +03:00
Vladimir Vaskov
2b836b107f
Update devel ID 2025-02-02 17:11:46 +03:00
Vladimir Vaskov
e6f40cc4d0
flatpak: Bump blueprint-compiler version to 0.16.0 2025-01-20 22:42:28 +03:00
Vladimir Vaskov
d54f4e6e01
like-button: Create like-button to prevent theme problems 2025-01-20 22:42:28 +03:00
Vladimir Vaskov
92a6b55282
begin-view: Add strange uri handler 2025-01-20 22:42:28 +03:00
Vladimir Vaskov
4101cf3b10
about: Update sponsor list 2025-01-20 22:42:28 +03:00
Luming Zh
521909b883 Add Chinese (China) translation 2025-01-14 06:02:32 +00:00
Sabri Ünal
e733ed3b16 Update Turkish translation 2025-01-11 13:48:54 +00:00
Vladimir Vaskov
8edf54a357
fix: change page file dir 2024-12-05 22:32:06 +03:00
Vladimir Vaskov
82c6937c5c
submodule(vala-checkers): update 2024-11-26 12:07:27 +03:00
Vladimir Vaskov
705efe2f2b
submodule(flathub manifest): remove 2024-11-26 12:06:12 +03:00
Vladimir Vaskov
cc22187128
about: update sponsors 2024-11-23 14:49:29 +03:00
Vladimir Vaskov
3bed5759c8
licanse: change licnese according to gitlab repository 2024-11-12 21:09:54 +03:00
Vladimir Vaskov
b0e391d0b0
about: update sponsors 2024-11-12 21:04:21 +03:00
Vladimir Vaskov
20a992afe7
submodule(vala-checkers): update 2024-11-08 18:49:20 +03:00
Vladimir Vaskov
a31bad8095
flatpak: switch talk-name to own-name 2024-11-08 18:48:46 +03:00
Hugo Carvalho
51ee17f136 Add Portuguese translation 2024-10-23 12:48:35 +00:00
Artur S0
2959fca344 Update Russian translation 2024-10-08 09:09:18 +00:00
Vasil Pupkin
7a9d1e4c97 Update Belarusian translation 2024-10-07 15:22:52 +00:00
Anders Jonsson
c3f7609e6c Add Swedish translation 2024-10-05 09:50:54 +00:00
Vladimir Vaskov
9d58ec2a3f
ci: update 2024-10-04 10:10:54 +03:00
Vladimir Vaskov
82585b28a7
ci: update 2024-10-04 10:00:31 +03:00
Vladimir Vaskov
8239f621f8
ci: update 2024-10-04 09:41:37 +03:00
Vladimir Vaskov
d4a7cc6346
ci: fix 2024-10-02 13:22:52 +03:00
Vladimir Vaskov
2491909524
ci: fix 2024-10-02 13:21:08 +03:00
Vladimir Vaskov
cecf7b2ec5
ci: comment broken 2024-10-02 13:19:45 +03:00
Vladimir Vaskov
edb9442cb2
ci: update 2024-10-02 13:15:10 +03:00
Vladimir Vaskov
657d40d0f6
ci: fix update-repo stage 2024-10-02 13:11:26 +03:00
Vladimir Vaskov
0c155708f6
ci: update 2024-10-02 13:01:00 +03:00
Vladimir Vaskov
54e6756783
ci: update 2024-10-02 12:59:33 +03:00
Vladimir Vaskov
0d41f06e90
ci: update 2024-10-02 12:58:29 +03:00
Vladimir Vaskov
5eb78e721c
ci: update 2024-10-02 12:56:38 +03:00
Vladimir Vaskov
5692508986
cu: update 2024-10-02 12:49:43 +03:00
Rafael Fontenelle
f7b4ebd3ea Update Brazilian Portuguese translation 2024-10-02 01:04:10 +00:00
Vladimir Vaskov
98066a6b5a
style: fix formatting 2024-10-01 22:01:37 +03:00
Vladimir Vaskov
f89c981701
submodule(vala-checkers): update 2024-10-01 22:01:27 +03:00
Vladimir Vaskov
a0a1bcb42b
about: update sponsors 2024-10-01 16:31:09 +03:00
Vladimir Vaskov
ef0d08f5f6
docs: update cassette-nighty repo 2024-10-01 16:02:11 +03:00
Vladimir Vaskov
4585731b45
ci: update 2024-10-01 15:47:00 +03:00
Vladimir Vaskov
415c0daf0e
ci: add git emal and name 2024-10-01 15:44:37 +03:00
Vladimir Vaskov
09ce1e58c3
ci: fix 2024-10-01 15:34:37 +03:00
Vladimir Vaskov
c4129a3877
ci: remove update-repo 2024-10-01 15:26:52 +03:00
Vladimir Vaskov
4e42120750
ci: fix 2024-10-01 15:25:49 +03:00
Vladimir Vaskov
fd5ffa9754
ci: add update repo 2024-10-01 15:24:18 +03:00
Martin
2910a04637 Update Slovenian translation 2024-09-30 20:21:19 +00:00
Vladimir Vaskov
34ab362ee0
metainfo: update screenshots 2024-09-30 21:31:00 +03:00
Vladimir Vaskov
284370db48
docs: update READMEs 2024-09-30 21:22:52 +03:00
Vladimir Vaskov
959c28f67e
screenshots: update screenshots 2024-09-30 21:20:43 +03:00
Vladimir Vaskov
a5391b714e
ubmodules(space.rirusha.Cassette): update 2024-09-30 21:06:37 +03:00
Vladimir Vaskov
efc84cb2c7
ci: fix ci for MRs 2024-09-30 21:06:37 +03:00
Vladimir Vaskov
cd94c901bd Merge branch 'build-refactor' into 'main'
build: Remove unrequired vala arguments

See merge request Rirusha/Cassette!152
2024-09-30 17:57:05 +00:00
Vladimir Vaskov
cfb8819317 Merge branch 'main' into 'main'
docs: updated README files

See merge request Rirusha/Cassette!151
2024-09-30 17:46:13 +00:00
PaladinDev
67d6627e60
build: Remove unrequired vala arguments 2024-09-30 21:36:12 +04:00
Martin
f9e97f637d Update Slovenian translation 2024-09-30 13:23:04 +00:00
Kirill Unitsaev
90b01096ab
docs: updated README files 2024-09-30 14:06:02 +04:00
Vladimir Vaskov
5222dde495
metainfo: add screenshot captions 2024-09-30 12:18:01 +03:00
Vladimir Vaskov
c700812238
metainfo: fix launchable 2024-09-30 12:12:06 +03:00
Vladimir Vaskov
90e01c4491
submodules: update urls to https 2024-09-30 11:52:07 +03:00
Vladimir Vaskov
a2022dca00
submodule(space.rirusha.Cassette): add 2024-09-30 11:21:15 +03:00
Vladimir Vaskov
51e4c82e01
submodule(stable): remove 2024-09-30 11:10:42 +03:00
Vladimir Vaskov
fa07d469ec
manifest: update 2024-09-30 11:04:00 +03:00
Vladimir Vaskov
f0e02b22c9
submodules(vala-checkers): update 2024-09-30 10:53:34 +03:00
Rafael Fontenelle
335dcffd8b Update Brazilian Portuguese translation 2024-09-29 19:54:43 +00:00
Vladimir Vaskov
1819522ffc Merge branch 'main' into 'main'
docs: updated README files

See merge request Rirusha/Cassette!150
2024-09-29 14:46:31 +00:00
Vladimir Vaskov
3cc03cd546
ci: add arch 2024-09-29 17:44:29 +03:00
Kirill Unitsaev
dd3c18a094
docs: updated README files 2024-09-29 18:38:07 +04:00
Vladimir Vaskov
35b6b66c76 Merge branch 'main' into 'main'
docs: update CONTRIBUTING.md

See merge request Rirusha/Cassette!149
2024-09-29 14:35:12 +00:00
Vladimir Vaskov
5674e3da7b
ci: add APP_ID to test jobs 2024-09-29 17:30:01 +03:00
Kirill Unitsaev
ed93ba2613
docs: update CONTRIBUTING.md 2024-09-29 18:21:04 +04:00
Vladimir Vaskov
48028e5b30 Merge branch 'main' into 'main'
docs: updated README files

See merge request Rirusha/Cassette!148
2024-09-29 13:44:04 +00:00
Vladimir Vaskov
669a50a2da
ci: disable tests 2024-09-29 16:40:52 +03:00
Kirill Unitsaev
f1d32f625a
docs: updated README files 2024-09-29 17:35:42 +04:00
Vladimir Vaskov
fb7ab754da
ci: set APP_ID_DEVEL variable 2024-09-29 16:27:58 +03:00
Artur S0
1146058ae7 Update Russian translation 2024-09-29 13:03:17 +00:00
Vladimir Vaskov
82ef3431ce
ci: fix stages 2024-09-29 02:57:27 +03:00
Vladimir Vaskov
47a7163285
ci: fix stage names 2024-09-29 02:56:31 +03:00
Vladimir Vaskov
37c7eaf600
ci: add test for MR 2024-09-29 02:55:36 +03:00
Vladimir Vaskov
ccf3cc7027
manifest: remove --own-name 2024-09-28 09:08:02 +03:00
Vasil Pupkin
0e21189b46 Update Belarusian translation 2024-09-28 03:39:33 +00:00
Martin
916c5d458f Update Slovenian translation 2024-09-27 20:32:42 +00:00
Vladimir Vaskov
982978284d
manifest: add cleanup to blueprint-compiler module 2024-09-27 21:12:40 +03:00
Vladimir Vaskov
b61ad078e1
manifest: fix url 2024-09-27 18:49:20 +03:00
Vladimir Vaskov
8f81f72c3e
docs: fix README-ru 2024-09-27 18:28:05 +03:00
Vladimir Vaskov
2e6ab28181
po: update POTFILES
closes #146
2024-09-27 17:52:29 +03:00
Vladimir Vaskov
6aeadb6f48
desktop-file: fix 2024-09-27 15:34:47 +03:00
Vladimir Vaskov
399a8d980e
icon: try to fix icon 2024-09-27 15:34:24 +03:00
Vladimir Vaskov
04b6640148
ci: fix manifest path 2024-09-27 13:17:23 +03:00
Vladimir Vaskov
f04835eab3
chore: cahnge id to space.rirusha.Cassette 2024-09-27 13:15:11 +03:00
Vladimir Vaskov
576ce493a5
docs: translate commentary 2024-09-27 12:57:57 +03:00
Vladimir Vaskov
499510a01e
chore: fix Yandex Music name 2024-09-27 11:44:35 +03:00
Vladimir Vaskov
90cf520faa
flatpak: port manifests to .yml 2024-09-27 11:44:14 +03:00
Rafael Fontenelle
38df7c78a8 Add Brazilian Portuguese translation 2024-09-26 13:31:00 +00:00
Jürgen Benvenuti
8ed48ca339 Add German translation 2024-09-26 11:43:07 +00:00
Vladimir Vaskov
7b90979dc1
docs: fix assets location 2024-09-26 13:37:39 +03:00
Vladimir Vaskov
6d6f7f1e7d
docs: update RADME 2024-09-26 12:52:30 +03:00
Martin
b71e885663 Update Slovenian translation 2024-09-26 09:44:47 +00:00
Martin
7f3e250abf Update Slovenian translation 2024-09-26 09:43:27 +00:00
Sabri Ünal
92120a0fb1 Add Turkish translation 2024-09-26 04:30:08 +00:00
Vladimir Vaskov
476d06dd76
docs: update readmes 2024-09-25 19:25:39 +03:00
Vladimir Vaskov
5b1829088a
ci: fix flatpakrepo url 2024-09-25 18:46:15 +03:00
Vladimir Vaskov
7f0e427998
po: fix app name etc 2024-09-25 18:32:31 +03:00
Vladimir Vaskov
5e362993ec
po: udpate script and potfiles 2024-09-25 12:48:23 +03:00
Vladimir Vaskov
dc0a03ada1
fix: fix names 2024-09-25 12:47:36 +03:00
Vladimir Vaskov
3dc5d8c6d5
ci: add gitlab ci 2024-09-25 12:38:34 +03:00
Vladimir Vaskov
b404af2972
fix: fix id 2024-09-25 12:38:34 +03:00
Vladimir Vaskov
cc4d395f92 Merge branch 'main' into 'main'
lint: update vala-lint.conf

See merge request Rirusha/Cassette!145
2024-09-22 14:46:37 +00:00
Bebra Nuh
55cfc0d176 lint: update vala-lint.conf 2024-09-22 14:44:52 +00:00
Vladimir Vaskov
5f715a892a
build: iser config for autofill 2024-09-21 14:44:02 +03:00
Vladimir Vaskov
f17ae75b56 Merge branch 'readme' into 'main'
docs: update README files

See merge request Rirusha/Cassette!144
2024-09-19 19:54:13 +00:00
Kirill Unitsaev
37d65de374
docs: updated README files
EN - added content
RU - updated under gitlab md
2024-09-19 23:39:16 +04:00
Vladimir Vaskov
bb09169f65
change my name 2024-09-17 10:00:18 +03:00
Vladimir Vaskov
24bcbb0f32
docs: update README 2024-09-15 15:48:07 +03:00
Vladimir Vaskov
1e80c6ca5f
readme: add multilanguage 2024-09-15 15:45:45 +03:00
Vladimir Vaskov
01792186a4
gitignore: update 2024-09-15 15:05:23 +03:00
Vladimir Vaskov
f710f8443d
vscode: update .vscode 2024-09-15 15:02:58 +03:00
Vladimir Vaskov
7338123de2
update links 2024-09-15 14:59:28 +03:00
Vladimir Vaskov
529f0f968e
submodule: update stable manifest 2024-09-15 14:50:41 +03:00
Vladimir Vaskov
0d14e16bea
flatpak: update manifests 2024-09-15 14:50:29 +03:00
Vladimir Vaskov
bd13d27ba8
submodules: add vala-checkers 2024-09-15 14:33:04 +03:00
Vladimir Vaskov
72d76e03d7
metainfo: rename apddata with metainfo 2024-09-15 14:29:32 +03:00
Vladimir Vaskov
fd453e75e4 gitignore: remove unnecessary 2024-09-03 20:06:35 +03:00
Vladimir Vaskov
968669da07
Merge pull request #143 from filmsi/patch-1
Add Slovenian (sl) l10n
2024-09-03 07:25:42 +03:00
filmsi
d8e71b5d61
Create sl.po
Created sl.po, fully localized
2024-09-02 21:18:10 +02:00
filmsi
77ae8fad04
Update LINGUAS - add Slovenian
Add Slovenian l10n to Cassette
2024-09-02 21:15:34 +02:00
Vladimir Vaskov
c2a94d50fe
feat: improve content_info 2024-08-31 19:09:07 +03:00
Vladimir Vaskov
e21f3ff7e0
style: change func name 2024-08-31 18:20:27 +03:00
Vladimir Vaskov
8ffbee4b5a
translation: change n gettext to context gettext for genders
closes #138
2024-08-31 12:24:49 +03:00
Vladimir Vaskov
36669d0fea
Merge pull request #140 from Rirusha/fix-136
Fix 136
2024-08-31 12:04:41 +03:00
Vladimir Vaskov
0ceb499e57
translate: fix gettext string for other languages 2024-08-31 11:37:02 +03:00
Vladimir Vaskov
61f53b7cd9
translate: devide ". " from sequence the convenience of translators 2024-08-31 11:35:35 +03:00
Vladimir Vaskov
c38e8f4ab6
Merge pull request #139 from rffontenelle/patch-1
Set check to true in run_command
2024-08-31 11:31:19 +03:00
Rafael Fontenelle
ceeaa0a52a
Set check to true in run_command 2024-08-30 14:38:27 -03:00
Vladimir Vaskov
343ef1b591
translate: fix gettext string for other languages 2024-08-30 20:18:53 +03:00
Vladimir Vaskov
9cfd3eb205
Merge pull request #137 from rffontenelle/patch-1
Moved -> Move in cache-deletion-preferences.vala
2024-08-30 20:13:05 +03:00
Rafael Fontenelle
d45febabb8
Moved -> Move in cache-deletion-preferences.vala 2024-08-30 13:07:03 -03:00
Vladimir Vaskov
1d6640be63
Merge pull request #135 from rffontenelle/patch-1
Fix misspellings
2024-08-30 08:46:47 +03:00
Rafael Fontenelle
747ca19aa6 Fix misspellings 2024-08-29 23:20:30 -03:00
Vladimir Vaskov
bd0e6d7eac
ci: change main branch name 2024-08-23 11:48:37 +03:00
Vladimir Vaskov
4c1ddb7124
fix: change widget blocking behavior
closes: #130
2024-08-21 08:01:29 +03:00
Vladimir Vaskov
70721cb8bc
feat: use Gtk.UriLauncher instead of Process 2024-08-17 12:39:02 +03:00
Vladimir Vaskov
03ff77eccb
build: fix gtk version 2024-08-11 21:33:58 +03:00
Vladimir Vaskov
0237f61740
build: dump requared libadwaita and gtk version 2024-08-11 21:08:23 +03:00
Vladimir Vaskov
b2c0a3788f
style: fix .blp 2024-08-11 17:19:13 +03:00
Vladimir Vaskov
b07742a674
feat: use Adw.ButtonRow instead of pill buttons 2024-08-11 17:11:18 +03:00
Vladimir Vaskov
53778fec57
build: change literal name to meson method 2024-07-28 20:57:13 +03:00
Vladimir Vaskov
1cfefc999d
refactor: remove old const 2024-07-28 20:56:52 +03:00
Vladimir Vaskov
3b15be4b38
flake: replace option profile with is_devel 2024-07-28 17:55:35 +03:00
Vladimir Vaskov
19477c9bda
build: minor meson.build changes 2024-07-28 17:51:07 +03:00
Vladimir Vaskov
da69278875
build: replace 'profile' option with 'is_devel' flag 2024-07-28 17:43:16 +03:00
Vladimir Vaskov
5c21a4caf7
docs: remove comment 2024-07-28 17:42:47 +03:00
Vladimir Vaskov
74e83a507f
fix: fix redirect redirect url 2024-07-27 21:38:06 +03:00
Vladimir Vaskov
8f571b667d
fix: centerize track name
closes: #125
2024-07-25 19:09:25 +03:00
Vladimir Vaskov
d7457302ce
fix: sort alphabetically 2024-07-23 23:13:12 +03:00
Vladimir Vaskov
4ad3d9db12
about: update sponsors 2024-07-23 23:04:46 +03:00
Vladimir Vaskov
b1a54a37f9
docs: fix title 2024-07-23 23:02:15 +03:00
Vladimir Vaskov
27858157a0
fix: actualize milestones amount and description 2024-07-23 22:58:35 +03:00
Vladimir Vaskov
176d7542e8
Merge pull request #119 from averyanalex/nixos
feat: add devel nix package and devshell
2024-07-23 22:23:03 +03:00
AveryanAlex
6c12b87aa6
feat: add devel nix package and devshell 2024-07-11 21:54:03 +03:00
Vladimir Vaskov
3f29ea880a
fix: change action group name
source: https://t.me/CassetteGNOME_Discussion/17845
2024-07-10 22:45:03 +03:00
Vladimir Vaskov
64d69b9101
fix: fix categories 2024-07-10 12:49:09 +03:00
240 changed files with 16225 additions and 4258 deletions

1
.envrc Normal file
View file

@ -0,0 +1 @@
use flake

View file

@ -1,83 +0,0 @@
name: CI Pull Request
on:
pull_request:
permissions:
contents: read
pull-requests: read
jobs:
lint-vala:
name: Lint vala files
runs-on: ubuntu-latest
container:
image: valalang/lint
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Lint Vala
run: io.elementary.vala-lint -d . -c vala-lint.conf
lint-blp:
name: Lint blueprint ui files
runs-on: ubuntu-latest
needs: lint-vala
container:
image: ubuntu:latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Update apt cache
run: apt-get update
- name: Install blueprint-compiler Blueptint
run: apt-get install -y blueprint-compiler
- name: Lint Blueprint
run: blueprint-compiler format -s 2 data/ui/*.blp
checkers:
name: Run checkers
runs-on: ubuntu-latest
needs: lint-blp
container:
image: ubuntu:latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
# - name: Run indentation checker
# run: python3 .checkers/indentation_checker.py
# - name: Run empty lines checker
# run: python3 .checkers/empty_lines_checker.py
test-build:
name: Test Build
runs-on: ubuntu-latest
needs: checkers
container:
image: bilelmoussaoui/flatpak-github-actions:gnome-nightly
options: --privileged
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Run tests and lint
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: cassette.flatpak
manifest-path: build-aux/flatpak/nightly/io.github.Rirusha.Cassette-Devel.json
run-tests: true
cache-key: flatpak-builder-${{ github.sha }}

View file

@ -1,135 +0,0 @@
name: CI master
on:
workflow_dispatch:
push:
branches:
- 'master'
jobs:
lint-vala:
name: Lint vala files
runs-on: ubuntu-latest
container:
image: valalang/lint
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Lint Vala
run: io.elementary.vala-lint -d . -c vala-lint.conf
lint-blp:
name: Lint blueprint ui files
runs-on: ubuntu-latest
needs: lint-vala
container:
image: ubuntu:latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Update apt cache
run: apt-get update
- name: Install blueprint-compiler Blueptint
run: apt-get install -y blueprint-compiler
- name: Lint Blueprint
run: blueprint-compiler format -s 2 data/ui/*.blp
checkers:
name: Run checkers
runs-on: ubuntu-latest
needs: lint-blp
container:
image: ubuntu:latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
# - name: Run indentation checker
# run: python3 .checkers/indentation_checker.py
# - name: Run empty lines checker
# run: python3 .checkers/empty_lines_checker.py
flatter:
name: Build Repo
runs-on: ubuntu-latest
needs: checkers
container:
image: ghcr.io/andyholmes/flatter/gnome:master
options: --privileged
strategy:
matrix:
arch: [aarch64, x86_64]
fail-fast: false
max-parallel: 1
steps:
- name: Checkout
uses: actions/checkout@v4
# - name: Set up Flatpak
# run: |
# dnf update -y
# dnf install -y flatpak
# flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
# flatpak update -y
# - name: Install org.freedesktop.Sdk.Extension.vala-nightly
# run: |
# flatpak install -y org.freedesktop.Sdk.Extension.vala-nightly//23.08
- name: Setup QEMU
if: ${{ matrix.arch == 'aarch64' }}
id: qemu
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Setup GPG
id: gpg
uses: crazy-max/ghaction-import-gpg@v6
with:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Build
uses: andyholmes/flatter@main
with:
files: |
build-aux/flatpak/nightly/io.github.Rirusha.Cassette-Devel.json
arch: ${{ matrix.arch }}
gpg-sign: ${{ steps.gpg.outputs.fingerprint }}
upload-bundles: true
run-tests: true
upload-pages-artifact: ${{ matrix.arch == 'x86_64' }}
deploy:
name: Deploy
runs-on: ubuntu-latest
needs: flatter
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

16
.gitignore vendored
View file

@ -1,11 +1,13 @@
# build dir
builddir*
_build
# Workspaces
# nix
result
.direnv
# Codium
*.code-workspace
# Personal scripts
my.*
.vscode/settings.json
# Po
*.mo
@ -16,7 +18,3 @@ po/cassette.pot
build-dir
repo
.flatpak
_build
# gh
settings.json

201
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,201 @@
include:
- project: 'gnome/citemplates'
file: 'flatpak/flatpak_ci_initiative.yml'
- project: 'Rirusha/citemplates'
file: 'lints.yml'
- project: 'Rirusha/citemplates'
file: 'vala-checkers.yml'
variables:
APP_ID: 'space.rirusha.Cassette.Devel'
MANIFEST_PATH: $CI_PROJECT_DIR/build-aux/flatpak/${APP_ID}.yml
BUNDLE: "${APP_ID}.flatpak"
RUNTIME_REPO: "https://nightly.gnome.org/gnome-nightly.flatpakrepo"
FLATPAK_MODULE: "cassette"
stages:
- lint-vala
- lint-blp
- lint-checkers
- test-mr
- build-aarch64
- build-x86_64
- deploy
- deploy-sithyfus
- update-repo
# lint-vala:
# stage: 'lint-vala'
# extends: '.lint-vala'
# lint-blp:
# stage: 'lint-blp'
# extends: '.lint-blp'
# lint-checkers:
# stage: 'lint-checkers'
# extends: '.lint-checkers'
test-mr:
variables:
RUN_TESTS: "0"
stage: 'test-mr'
extends: '.flatpak'
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
.setup-gpg:
image: 'quay.io/gnome_infrastructure/gnome-runtime-images:gnome-master'
stage: 'setup-gpg'
tags:
- flatpak
before_script:
- mkdir -p ${GNUPGHOME}
- gpg --list-keys --with-keygrip
- touch ${GNUPGHOME}/gpg.conf
- touch ${GNUPGHOME}/gpg-agent.conf
- echo "allow-preset-passphrase" >> ${GNUPGHOME}/gpg-agent.conf
- echo "pinentry-mode loopback" >> ${GNUPGHOME}/gpg.conf
- echo "batch" >> ${GNUPGHOME}/gpg.conf
- echo "yes" >> ${GNUPGHOME}/gpg.conf
- echo "passphrase-file ${GPG_PASSPHRASE}" >> ${GNUPGHOME}/gpg.conf
- gpg-connect-agent reloadagent /bye
- cat ${GPG_PASSPHRASE} | /usr/libexec/gpg-preset-passphrase --preset ${GPG_KEY_GREP}
- base64 -d ${GPG_PRIVATE_KEY} | gpg --import
rules:
- if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == 'push'
.build:
extends: '.setup-gpg'
stage: 'build'
interruptible: true
variables:
GNUPGHOME: /build/.gnupg
LANG: "C.UTF-8"
RUN_TESTS: "0"
ARCH: x86_64
script:
- cat /etc/os-release
- flatpak --version
# Report the installed versions of the runtime
- flatpak info org.gnome.Platform
- flatpak info org.gnome.Sdk
# Print the date, since appstream depends on local timezone
- date && date -u
- |
export REWRITE_RUN_TESTS="--run-tests"
if [[ $RUN_TESTS != "1" ]]; then
export REWRITE_RUN_TESTS="--no-run-tests"
fi
rewrite-flatpak-manifest ${REWRITE_RUN_TESTS} ${MANIFEST_PATH} ${FLATPAK_MODULE} -- ${CONFIG_OPTS}
- |
if [ ${ARCH} = "x86_64" ]; then
tar xf repo.tar
rm -rf repo.tar
fi
- >-
xvfb-run -a -s "-screen 0 1024x768x24" --
dbus-run-session
flatpak-builder ${CI_FB_ARGS} --keep-build-dirs --arch=${ARCH} --user --gpg-sign=${GPG_KEY_ID} --gpg-homedir=${GNUPGHOME} --disable-rofiles-fuse flatpak_app --repo=repo ${BRANCH:+--default-branch=$BRANCH} ${MANIFEST_PATH}
# Generate a Flatpak bundle
- flatpak build-bundle --runtime-repo=${RUNTIME_REPO} --gpg-sign=${GPG_KEY_ID} --gpg-homedir=${GNUPGHOME} repo ${BUNDLE} ${APP_ID} ${BRANCH}
- echo "[Flatpak Repo]" > repo/index.flatpakrepo
- echo "Title=Cassette Nightly Repo" >> repo/index.flatpakrepo
- echo "Url=https://cassette-rirusha-7b5d032b879376545602ad6add1827529edccbba8e6c57.pages.gitlab.gnome.org/" >> repo/index.flatpakrepo
- echo "Homepage=https://https://gitlab.gnome.org/Rirusha/Cassette/" >> repo/index.flatpakrepo
- echo "Comment=Repository with development version of Cassette" >> repo/index.flatpakrepo
- echo "Description=Repository with development version of Cassette" >> repo/index.flatpakrepo
- echo "Icon=https://dl.flathub.org/repo/logo.svg" >> repo/index.flatpakrepo
- echo "GPGKey=$(gpg --export ${GPG_KEY_ID} | base64 --wrap=0)" >> repo/index.flatpakrepo
- flatpak build-update-repo --gpg-sign=${GPG_KEY_ID} --gpg-homedir=${GNUPGHOME} --generate-static-deltas --prune repo
- tar cf repo.tar repo/
- rm -rf .flatpak-builder
artifacts:
name: 'Flatpak artifacts'
when: 'always'
paths:
- $BUNDLE
- 'repo.tar'
- '.flatpak-builder/build/${FLATPAK_MODULE}/_flatpak_build/meson-logs/meson-log.txt'
- '.flatpak-builder/build/${FLATPAK_MODULE}/_flatpak_build/meson-logs/testlog.txt'
reports:
junit: '.flatpak-builder/build/${FLATPAK_MODULE}/_flatpak_build/meson-logs/testlog.junit.xml'
expire_in: 14 days
rules:
- if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == 'push'
build-x86_64:
extends: '.build'
variables:
ARCH: x86_64
dependencies:
- "build-aarch64"
tags:
- flatpak
stage: "build-x86_64"
rules:
- if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == 'push'
# Need to fix `Error: module cassette: Error removing file /builds/Rirusha/cassette-test-ci/.flatpak-builder/build/cassette: Directory not empty`
build-aarch64:
extends: '.build'
variables:
ARCH: aarch64
tags:
- flatpak-aarch64
stage: "build-aarch64"
rules:
- if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == 'push'
pages:
variables:
BUILD_OUTPUT_PATH: $CI_PROJECT_DIR/repo
stage: deploy
image: alpine:latest
dependencies:
- "build-x86_64"
script:
- apk add rsync
- tar xf repo.tar
- find $BUILD_OUTPUT_PATH \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i -e "s#href=\"\/#href=\"$CI_PAGES_URL/#g" -e "s#src=\"\/#src=\"$CI_PAGES_URL/#g"
- mkdir public || true
- rsync -av --exclude='public' --exclude='.git' $BUILD_OUTPUT_PATH/ public
rules:
- if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == 'push'
artifacts:
paths:
- public
expire_in: 14 days
update-repo:
stage: update-repo
image: alpine:latest
dependencies:
- "build-x86_64"
script:
- tar xf repo.tar
- apk add git
- git clone https://Rirusha:${GITHUB_TOKEN}@github.com/Rirusha/rirusha.space.git
- rm -f rirusha.space/repos/cassette-nightly.flatpakrepo && cp repo/index.flatpakrepo rirusha.space/repos/cassette-nightly.flatpakrepo
- cd rirusha.space
- git add .
- echo $(git status --porcelain)
- git config --global user.email "not-a@mail.com"
- git config --global user.name "Updater Bot"
- git commit -m "Update cassette-nightly repo" || true
- git push
- cd ..
rules:
- if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == 'push'

6
.gitmodules vendored
View file

@ -1,3 +1,3 @@
[submodule "build-aux/flatpak/stable"]
path = build-aux/flatpak/stable
url = git@github.com:flathub/io.github.Rirusha.Cassette.git
[submodule "vala-checkers"]
path = vala-checkers
url = https://gitlab.gnome.org/Rirusha/vala-checkers.git

3
.vscode/gdb.sh vendored
View file

@ -1,3 +0,0 @@
#!/bin/sh
flatpak build --with-appdir --allow=devel --bind-mount=/run/user/1000/doc=/run/user/1000/doc/by-app/io.github.Rirusha.Cassette-Devel --share=network --share=ipc --socket=fallback-x11 --socket=wayland --device=dri --socket=pulseaudio --filesystem=xdg-music:ro --filesystem=xdg-download:ro --talk-name=org.mpris.MediaPlayer2.Player --own-name=org.mpris.MediaPlayer2.cassette .flatpak/repo gdb "$@"

19
.vscode/launch.json vendored
View file

@ -1,19 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "gdb",
"request": "launch",
"preLaunchTask": "Flatpak launch build",
"gdbpath": "${workspaceRoot}/.vscode/gdb.sh",
"target": "${workspaceRoot}/_build/src/cassette",
"arguments": "",
"cwd": "${workspaceRoot}",
"valuesFormatting": "parseText"
},
]
}

12
.vscode/tasks.json vendored
View file

@ -12,19 +12,19 @@
{
"label": "Empty lines check",
"type": "shell",
"command": "python3 ${workspaceFolder}/checkers/empty_lines_checker.py .",
"command": "python3 ${workspaceFolder}/vala-checkers/empty_lines_checker.py .",
"problemMatcher": []
},
{
"label": "Indentation check",
"type": "shell",
"command": "python3 ${workspaceFolder}/checkers/indentation_checker.py .",
"command": "python3 ${workspaceFolder}/vala-checkers/indentation_checker.py .",
"problemMatcher": []
},
{
"label": "Full check",
"type": "shell",
"command": "io.elementary.vala-lint -d . -c vala-lint.conf && python3 ${workspaceFolder}/checkers/empty_lines_checker.py . && python3 ${workspaceFolder}/checkers/indentation_checker.py .",
"command": "echo 'Linter:' && io.elementary.vala-lint -d . -c vala-lint.conf && echo 'Empty lines:' && python3 ${workspaceFolder}/vala-checkers/empty_lines_checker.py . && echo 'Indentation:' && python3 ${workspaceFolder}/vala-checkers/indentation_checker.py .",
"problemMatcher": []
},
{
@ -39,12 +39,6 @@
"command": "blueprint-compiler format -f -s 2 data/ui/*.blp",
"problemMatcher": []
},
{
"label": "Generate .pot",
"type": "shell",
"command": "sh po/update_potfiles.sh && flatpak run --command=meson --filesystem=host org.gnome.Sdk compile -C _build cassette-pot",
"problemMatcher": []
},
{
"label": "Run tests",
"type": "shell",

61
CONTRIBUTING.md Normal file
View file

@ -0,0 +1,61 @@
## How to contribute
If you don't know what to do, then:
* All scheduled tasks are in the issue section and have the "enhancement" label.
* All known problems are in the same place and have a "bug" label.
Choose tasks from the nearest versions. You can find a list of them [here](https://github.com/Rirusha/Cassette/milestones). This will both speed up the release of the next version and facilitate the review, so you will not need to switch from one global problem to another.
Also, if you decide to fix some bug described in the issue, first make sure that it can still be reproduced in the `main` branch.
Also, if you think that the application is missing something or you have found a bug, then do not hesitate to create an issue.
## Naming commits
The message header should look like:
```
feat: add a play button to the `Widget name`
The button was missing, so it had to be added
```
This is an example. The rules are described in more detail [here](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional). Also, the message body is optional if the information in the header is exhaustive. Also here is a list of all types of commits with descriptions:
* `build`: Used for changes related to the system build or external dependencies.
* `chore`: Usually includes changes that are not directly related to the code or tests, for example, updating documentation, configuring the development environment, upgrading the version, etc.
* `ci`: Refers to changes related to configuring or improving CI.
* `docs`: Used for changes related only to documentation, such as correcting typos, updating the README, or adding comments to the code.
* `feat`: Indicates the addition of new functionality or features to the project.
* `fix`: Refers to fixing errors in the code or fixing problems in the project.
* `perf`: Used when changes are made to improve performance.
* `refactor`: Refers to changes that do not add new functionality, but only change the structure or organization of existing code.
* `revert`: Used to undo previous commits in the project history.
* `style`: Refers to changes in the formatting of the code, for example, edits of spaces, indents, line breaks, etc.
* `test`: Used to add or modify test code, for example, testing new functionality or correcting existing tests.
* `po`: Used to add or change a translation.
## Creating Pull Requests
All Pull Requests must be made in the `master` branch. If you close an issue, then link to it with the keyword "close" in the commit body, for example:
```
fix: fix incorrect behavior
close #123
```
## Formatting the code
If you are using Visual Studio Code, then there is a task to run the linter. Otherwise, use the configuration in the root of the repository in the linter: vala-lint.conf, CI uses it exactly.
## Development
Check the build using flatpak, as this is the only officially supported version.
## Testing
Writing or supplementing existing tests for the client is highly welcome.

227
README.md
View file

@ -1,56 +1,52 @@
<h1 align="center">
<img src="data/icons/hicolor/scalable/apps/io.github.Rirusha.Cassette.svg" alt="Cassette"/>
<br/>
Cassette
</h1>
README language: \
[![En](https://img.shields.io/badge/en-green)](README.md)
[![Ru](https://img.shields.io/badge/ru-gray)](docs/README-ru.md)
<p align="center">
GTK4/Adwaita приложение, которое позволит вам использовать Я.Музыку на Linux.
</p>
<div align="center">
<h1>
<img
src="data/icons/hicolor/scalable/apps/space.rirusha.Cassette.svg"
height="64"
/>
Cassette
</h1>
<br/>
<p align="center">
<a href="https://flathub.org/apps/details/io.github.Rirusha.Cassette">
<img width="200" src="https://flathub.org/assets/badges/flathub-badge-en.png" alt="Download on Flathub">
</a>
<br>
<br>
<a href="https://stopthemingmy.app">
<img src="https://stopthemingmy.app/badge.svg"/>
</a>
<br>
<a href="https://t.me/CassetteGNOME_Devlog">
<img alt="tg" src="https://img.shields.io/badge/Telegram-Channel-blue?style=flat&logo=telegram&label=%20&labelColor=blue">
<img alt="Static Badge" src="https://img.shields.io/badge/Channel-blue?style=flat&logo=telegram">
</a>
<br>
<a href="https://t.me/CassetteGNOME_Discussion">
<img alt="tg" src="https://img.shields.io/badge/Telegram-Chat-blue?style=flat&logo=telegram&label=%20&labelColor=blue">
<a href="https://t.me/CassetteGNOME_Devlog">
<img alt="Static Badge" src="https://img.shields.io/badge/Chat-blue?style=flat&logo=telegram">
</a>
</p>
</div>
<p align="center">
<img src="data/images/1-liked.png" alt="Screenshot"/>
</p>
<div align="center"><h4>GTK4/Adwaita application that allows you to use Yandex Music service on Linux operating systems.</h4></div>
<div align="center">
<img src="data/images/1-liked-view.png" alt="Preview"/>
</div>
## План основных версий
[![GitHub milestone details](https://img.shields.io/github/milestones/progress-percent/Rirusha/Cassette/2?label=0.2.0%20-%20%D0%9C%D0%BE%D1%8F%20%D0%B2%D0%BE%D0%BB%D0%BD%D0%B0)](https://github.com/Rirusha/Cassette/milestone/2) \
[![GitHub milestone details](https://img.shields.io/github/milestones/progress-percent/Rirusha/Cassette/5?label=0.2.1%20-%20%D0%A3%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%B1%D1%8D%D0%BA%D0%B5%D0%BD%D0%B4%D0%B0%20%D0%B8%20%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)](https://github.com/Rirusha/Cassette/milestone/5) \
[![GitHub milestone details](https://img.shields.io/github/milestones/progress-percent/Rirusha/Cassette/4?label=0.2.2%20-%20%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%20%D0%BD%D0%B0%D0%B4%20%D0%B0%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E)](https://github.com/Rirusha/Cassette/milestone/4) \
[![GitHub milestone details](https://img.shields.io/github/milestones/progress-percent/Rirusha/Cassette/6?label=0.3.0%20-%20%D0%9F%D0%BE%D0%BA%D0%B0%D0%B7%20%D0%B0%D0%BB%D1%8C%D0%B1%D0%BE%D0%BC%D0%BE%D0%B2%20%D0%B8%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9)](https://github.com/Rirusha/Cassette/milestone/6) \
[![GitHub milestone details](https://img.shields.io/github/milestones/progress-percent/Rirusha/Cassette/7?label=0.4.0%20-%20%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F%20%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0%20%D0%BF%D0%BE%20%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D1%83)](https://github.com/Rirusha/Cassette/milestone/7)
## Install
Все запланированные фичи можете [посмотреть в бэклоге](https://github.com/users/Rirusha/projects/2)
**Flathub:**
<a href="https://flathub.org/apps/details/space.rirusha.Cassette">
<img width='240' alt='Download on Flathub' src='https://flathub.org/assets/badges/flathub-badge-en.svg'/>
</a>
## Установка из репозитория
```shell
flatpak install space.rirusha.Cassette
```
Приложение Cassette доступно здесь:
**Distribution repositories:**
[![Packaging status](https://repology.org/badge/vertical-allrepos/cassette.svg)](https://repology.org/project/cassette/versions)
### ALT Sisyphus
### ALT Linux
```shell
su -
apt-get install cassette
@ -58,8 +54,7 @@ apt-get install cassette
### Arch Linux
> [!NOTE]
> Большинство AUR Helper'ов поддерживает Pacman-style флаги, например, yay.
> Most AUR Helpers support Pacman-style flags, for example, yay.
#### yay
```shell
@ -71,66 +66,15 @@ yay -S cassette
pamac install cassette
```
## Установка c помощью Flatpak
Вы можете скачать по [ссылке](https://flathub.org/apps/details/io.github.Rirusha.Cassette) или используя терминал
### NixOS Unstable
```shell
flatpak install io.github.Rirusha.Cassette
nix-shell -p cassette
```
## Building
## Nightly версия
#### Dependencies:
> [!WARNING]
> Данная версия собирается и обновляется при каждом изменение в коде, поэтому может оказаться нестабильной.
### Flatpak
#### Подключаем репозиторий `gnome-nightly` и устанавливаем GNOME Platform:
```shell
flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
flatpak install gnome-nightly org.gnome.Platform//master
```
#### Подключаем Nightly репозиторий и устанавливаем приложение:
```shell
flatpak remote-add --if-not-exists cassette-nightly https://rirusha.github.io/Cassette/index.flatpakrepo
flatpak install cassette-nightly io.github.Rirusha.Cassette-Devel
```
#### Для удаления репозитория нужно выполнить:
```shell
flatpak remote-delete cassette-nightly
```
### Arch Linux
> [!NOTE]
> При необходимости, в arch-подобных системах можно установить Nightly версию из репозитория AUR.
> По возможности рекомендуется использовать Flatpak версию.
>
> Большинство AUR Helper'ов поддерживает Pacman-style флаги, например, yay.
#### yay
```shell
yay -S cassette-git
```
#### pamac
```shell
pamac install cassette-git
```
## Установка в Windows
Способы установки приложения в Windows описаны [здесь](docs/INSTALLATION_ON_WINDOWS.md).
## Сборка из исходного кода
#### Зависимости:
* `gtk4`, version: `>= 4.14`
* `libadwaita-1`, version: `>= 1.5`
* `libsoup-3.0`
@ -142,9 +86,10 @@ pamac install cassette-git
* `gstreamer-1.0`
* `webkitgtk-6.0`
* `gio-2.0`, version: `>= 2.72`
* `git`, только для `devel`
* `git`, only for `devel`
#### Building utilities:
#### Утилиты для сборки:
* `meson`
* `ninja`
* `cmake`
@ -154,92 +99,96 @@ pamac install cassette-git
* `pkg`
* `appstream-utils`
### Сборка:
### PreRelease
#### latest
> [!NOTE]
> В данной версии будут недоступны нестабильные функции, находящиеся в разработке.
> Unstable features under development will not be available in this version.
```shell
meson setup builddir
meson setup _build
```
#### devel
> [!WARNING]
> В данной версии будут доступны все devel функции, приложение может работать нестабильно.
### `is_devel` flag
> In this version, all devel functions will be available.
```shell
meson setup builddir
meson configure -Dprofile=development builddir
meson setup _build -Dis_devel=true
```
### Тестирование
#### Install
```shell
ninja -C builddir test
sudo ninja install -C _build
```
### Установка:
#### Testing
```shell
sudo ninja -C builddir install
ninja -C _build test
```
### Удаление:
#### Uninstal
```shell
sudo ninja -C builddir uninstall
sudo ninja uninstall -C _build
```
## Devel version
## Решение проблем
> This version is built and updated with every commit, so it may be unstable.
Решение известных проблем описано на странице Cassette на [ALT Gnome Wiki](https://alt-gnome.wiki/cassette.html#решение-проблем).
You need to add `cassette-nightly` and `gnome-nightly` repositories:
Также загляните во вкладку [issues](https://github.com/Rirusha/Cassette/issues), если вашей проблемы нет и там, расскажите о ней, заведя новый [issue](https://github.com/Rirusha/Cassette/issues/new).
```shell
flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
flatpak remote-add --if-not-exists cassette-nightly https://rirusha.space/repos/cassette-nightly.flatpakrepo
```
Install application:
## Для разработчиков
```shell
flatpak install cassette-nightly space.rirusha.Cassette.Devel
```
### Использование Visual Studio Code
Репозиторий имеет рекомендуемые расширения для проверки и запуска приложения с gdb.
## For developers
### Зависимости
> The repository has recommended extensions for developing with Visual Studio Code.
#### репозиторий [gnome-nightly](https://wiki.gnome.org/Apps/Nightly):
### Dependencies
#### repository [gnome-nightly](https://wiki.gnome.org/Apps/Nightly):
```shell
flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
```
#### Для запуска
#### To run
`org.gnome.Platform//master`
```shell
flatpak install org.gnome.Platform//master
```
#### Для сборки
#### To build
`org.gnome.Sdk//master` \
`org.freedesktop.Sdk.Extension.vala//23.08beta`
```shell
flatpak install org.gnome.Sdk//master org.freedesktop.Sdk.Extension.vala//23.08beta
```
## Support
## Поддержка
Вы можете поддержать несколькими способами:
- Создать ишью с проблемой или предложением по улучшению
- Отправить pull request с фиксом или добавлением функционала
- Поддержать рублём (Просьба указывать в "Сообщении получателю" свой никнейм при отправлении через Тинькофф):
You can support in several ways:
- Create an issue with a problem or a suggestion for improvement
- Submit a merge request with a fix or new functionality
- Support financially (Please include your nickname in the "Message to the recipient" when sending via T-Bank)
<p>
<a href="https://www.tinkoff.ru/cf/21GCxLuFuE9">
<img height="36" src="https://github.com/Rirusha/Cassette/assets/95986183/87496207-aa1c-40fc-a511-57bac188bc72" alt="Tinkoff">
</a>
</p>
<p>
<a href="https://boosty.to/rirusha/donate">
<img height="36" src="https://github.com/Rirusha/Cassette/assets/95986183/313ee5af-d374-4f95-af62-9445d1c27347" alt="boosty.to">
</a>
</p>
<br>
<div align="center">
<a href="https://www.tbank.ru/cf/21GCxLuFuE9" style="margin-right: 100px;">
<img height="200" src="assets/tbank.png" alt="Tinkoff">
</a>
<a href="https://boosty.to/rirusha/donate">
<img height="200" src="assets/boosty.png" alt="boosty.to">
</a>
</div>
## Благодарность
Спасибо [MarshalX](https://github.com/MarshalX). Библиотека [yandex-music-api](https://github.com/MarshalX/yandex-music-api) была использована в качестве документации к api.
## Gratitude
Thank you [MarshalX](https://github.com/MarshalX ). The [yandex-music-api](https://github.com/MarshalX/yandex-music-api) library was used as api documentation.
> [!NOTE]
Cassette - неофициальный клиент, не связан с компанией Яндекс и не одобрен ей.
> Attention!
> Cassette is an unofficial client, not affiliated with Yandex and not approved by it.

BIN
assets/boosty.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

BIN
assets/tbank.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

View file

@ -1,61 +0,0 @@
{
"id" : "io.github.Rirusha.Cassette-Devel",
"runtime" : "org.gnome.Platform",
"runtime-version" : "master",
"sdk" : "org.gnome.Sdk",
"command" : "cassette",
"finish-args" : [
"--share=network",
"--share=ipc",
"--socket=fallback-x11",
"--device=dri",
"--socket=pulseaudio",
"--socket=wayland",
"--filesystem=xdg-music:ro",
"--filesystem=xdg-download:ro",
"--talk-name=org.mpris.MediaPlayer2.Player",
"--own-name=org.mpris.MediaPlayer2.cassette"
],
"build-options" : {
"append-path" : "/usr/lib/sdk/vala/bin",
"prepend-ld-library-path" : "/usr/lib/sdk/vala/lib"
},
"cleanup" : [
"/include",
"/lib/pkgconfig",
"/man",
"/share/doc",
"/share/gtk-doc",
"/share/man",
"/share/pkgconfig",
"/share/vala",
"*.la",
"*.a"
],
"modules" : [
{
"name": "blueprint-compiler",
"buildsystem": "meson",
"sources": [
{
"type": "git",
"url": "https://gitlab.gnome.org/jwestman/blueprint-compiler",
"tag": "v0.12.0",
"commit": "66b43c36cf1017c878762007373964a096b3d2a5"
}
]
},
{
"name" : "cassette",
"builddir" : true,
"buildsystem" : "meson",
"config-opts": [ "-Dprofile=development" ],
"sources" : [
{
"type" : "dir",
"path" : "../../../"
}
]
}
]
}

View file

@ -1,60 +0,0 @@
{
"id" : "io.github.Rirusha.Cassette",
"runtime" : "org.gnome.Platform",
"runtime-version" : "46",
"sdk" : "org.gnome.Sdk",
"command" : "cassette",
"finish-args" : [
"--share=network",
"--share=ipc",
"--socket=fallback-x11",
"--device=dri",
"--socket=pulseaudio",
"--socket=wayland",
"--filesystem=xdg-music:ro",
"--filesystem=xdg-download:ro",
"--talk-name=org.mpris.MediaPlayer2.Player",
"--own-name=org.mpris.MediaPlayer2.cassette"
],
"build-options" : {
"append-path" : "/usr/lib/sdk/vala/bin",
"prepend-ld-library-path" : "/usr/lib/sdk/vala/lib"
},
"cleanup" : [
"/include",
"/lib/pkgconfig",
"/man",
"/share/doc",
"/share/gtk-doc",
"/share/man",
"/share/pkgconfig",
"/share/vala",
"*.la",
"*.a"
],
"modules" : [
{
"name": "blueprint-compiler",
"buildsystem": "meson",
"sources": [
{
"type": "git",
"url": "https://gitlab.gnome.org/jwestman/blueprint-compiler",
"tag": "v0.12.0",
"commit": "66b43c36cf1017c878762007373964a096b3d2a5"
}
]
},
{
"name" : "cassette",
"builddir" : true,
"buildsystem" : "meson",
"sources" : [
{
"type" : "dir",
"path" : "../../../"
}
]
}
]
}

View file

@ -0,0 +1,68 @@
{
"id": "space.rirusha.Cassette.Devel",
"runtime": "org.gnome.Platform",
"runtime-version": "master",
"sdk": "org.gnome.Sdk",
"sdk-extensions": [
"org.freedesktop.Sdk.Extension.vala"
],
"command": "cassette",
"finish-args": [
"--share=network",
"--share=ipc",
"--socket=fallback-x11",
"--device=dri",
"--socket=pulseaudio",
"--socket=wayland",
"--filesystem=xdg-music:ro",
"--filesystem=xdg-download:ro",
"--own-name=org.mpris.MediaPlayer2.space.rirusha.Cassette.Devel"
],
"build-options": {
"append-path": "/usr/lib/sdk/vala/bin",
"prepend-ld-library-path": "/usr/lib/sdk/vala/lib"
},
"cleanup": [
"/include",
"/lib/pkgconfig",
"/man",
"/share/doc",
"/share/gtk-doc",
"/share/man",
"/share/pkgconfig",
"/share/vala",
"*.la",
"*.a"
],
"modules": [
{
"name": "blueprint-compiler",
"buildsystem": "meson",
"cleanup": [
"*"
],
"sources": [
{
"type": "git",
"url": "https://gitlab.gnome.org/jwestman/blueprint-compiler",
"commit": "04ef0944db56ab01307a29aaa7303df6067cb3c0",
"tag": "v0.16.0"
}
]
},
{
"name": "cassette",
"buildsystem": "meson",
"builddir": true,
"config-opts": [
"-Dis_devel=true"
],
"sources": [
{
"type": "dir",
"path": "../../"
}
]
}
]
}

View file

@ -0,0 +1,49 @@
id: space.rirusha.Cassette.Devel
runtime: org.gnome.Platform
runtime-version: 'master'
sdk: org.gnome.Sdk
sdk-extensions:
- org.freedesktop.Sdk.Extension.vala
command: cassette
finish-args:
- --share=network
- --share=ipc
- --socket=fallback-x11
- --device=dri
- --socket=pulseaudio
- --socket=wayland
- --filesystem=xdg-music:ro
- --filesystem=xdg-download:ro
- --own-name=org.mpris.MediaPlayer2.space.rirusha.Cassette.Devel
build-options:
append-path: /usr/lib/sdk/vala/bin
prepend-ld-library-path: /usr/lib/sdk/vala/lib
cleanup:
- /include
- /lib/pkgconfig
- /man
- /share/doc
- /share/gtk-doc
- /share/man
- /share/pkgconfig
- /share/vala
- '*.la'
- '*.a'
modules:
- name: blueprint-compiler
buildsystem: meson
cleanup:
- '*'
sources:
- type: git
url: https://gitlab.gnome.org/jwestman/blueprint-compiler
commit: 04ef0944db56ab01307a29aaa7303df6067cb3c0
tag: v0.16.0
- name: cassette
buildsystem: meson
builddir: true
config-opts:
- -Dis_devel=true
sources:
- type: dir
path: ../../

View file

@ -0,0 +1,47 @@
id: space.rirusha.Cassette
runtime: org.gnome.Platform
runtime-version: '47'
sdk: org.gnome.Sdk
sdk-extensions:
- org.freedesktop.Sdk.Extension.vala
command: cassette
finish-args:
- --share=network
- --share=ipc
- --socket=fallback-x11
- --device=dri
- --socket=pulseaudio
- --socket=wayland
- --filesystem=xdg-music:ro
- --filesystem=xdg-download:ro
- --own-name=org.mpris.MediaPlayer2.space.rirusha.Cassette
build-options:
append-path: /usr/lib/sdk/vala/bin
prepend-ld-library-path: /usr/lib/sdk/vala/lib
cleanup:
- /include
- /lib/pkgconfig
- /man
- /share/doc
- /share/gtk-doc
- /share/man
- /share/pkgconfig
- /share/vala
- '*.la'
- '*.a'
modules:
- name: blueprint-compiler
buildsystem: meson
cleanup:
- '*'
sources:
- type: git
url: https://gitlab.gnome.org/jwestman/blueprint-compiler
commit: 8e10fcf8692108b9d4ab78f41086c5d7773ef864
tag: v0.14.0
- name: cassette
buildsystem: meson
builddir: true
sources:
- type: dir
path: ../../

@ -1 +0,0 @@
Subproject commit 4e75fdfec4b810aa091a1365da824c904a7554d5

View file

@ -5,7 +5,6 @@
xmlns:gnome="http://api.gnome.org/doap-extensions#"
xmlns="http://usefulinc.com/ns/doap#">
<name xml:lang="en">Cassette</name>
<name xml:lang="es">Casete</name>
<name xml:lang="fr">Cassette</name>
<name xml:lang="de">Kassette</name>
@ -28,37 +27,38 @@
<name xml:lang="fi">Kasetti</name>
<name xml:lang="hu">Kazetta</name>
<name xml:lang="th">เทปคาสเซ็ท</name>
<name xml:lang="en">Cassette</name>
<shortdesc xml:lang="en">Unofficial Yandex.Music client</shortdesc>
<shortdesc xml:lang="es">Cliente no oficial de Yandex.Music</shortdesc>
<shortdesc xml:lang="fr">Client non officiel de Yandex.Music</shortdesc>
<shortdesc xml:lang="de">Inoffizieller Yandex.Music-Client</shortdesc>
<shortdesc xml:lang="it">Client non ufficiale di Yandex.Music</shortdesc>
<shortdesc xml:lang="pt">Cliente não oficial do Yandex.Music</shortdesc>
<shortdesc xml:lang="es">Cliente no oficial de Yandex Music</shortdesc>
<shortdesc xml:lang="fr">Client non officiel de Yandex Music</shortdesc>
<shortdesc xml:lang="de">Inoffizieller Yandex Music-Client</shortdesc>
<shortdesc xml:lang="it">Client non ufficiale di Yandex Music</shortdesc>
<shortdesc xml:lang="pt">Cliente não oficial do Yandex Music</shortdesc>
<shortdesc xml:lang="ru">Неофициальный клиент Яндекс.Музыки</shortdesc>
<shortdesc xml:lang="ja">非公式のYandex.Musicクライアント</shortdesc>
<shortdesc xml:lang="zh">非官方的Yandex.Music客户端</shortdesc>
<shortdesc xml:lang="ar">عميل غير رسمي لـ Yandex.Music</shortdesc>
<shortdesc xml:lang="hi">अनौपचारिक Yandex.Music क्लाइंट</shortdesc>
<shortdesc xml:lang="ko">비공식 Yandex.Music 클라이언트</shortdesc>
<shortdesc xml:lang="tr">Resmi olmayan Yandex.Music istemcisi</shortdesc>
<shortdesc xml:lang="he">לקוח לא רשמי של Yandex.Music</shortdesc>
<shortdesc xml:lang="el">Ανεπίσημος πελάτης του Yandex.Music</shortdesc>
<shortdesc xml:lang="nl">Onofficiële Yandex.Music-client</shortdesc>
<shortdesc xml:lang="sv">Inofficiell Yandex.Music-klient</shortdesc>
<shortdesc xml:lang="pl">Nieoficjalny klient Yandex.Music</shortdesc>
<shortdesc xml:lang="cs">Neoficiální klient Yandex.Music</shortdesc>
<shortdesc xml:lang="da">Uofficiel Yandex.Music-klient</shortdesc>
<shortdesc xml:lang="fi">Epävirallinen Yandex.Music-asiakas</shortdesc>
<shortdesc xml:lang="hu">Nem hivatalos Yandex.Music kliens</shortdesc>
<shortdesc xml:lang="th">ไคลเอนต์ Yandex.Music อย่างไม่เป็นทางการ</shortdesc>
<shortdesc xml:lang="ja">非公式のYandex Musicクライアント</shortdesc>
<shortdesc xml:lang="zh">非官方的Yandex Music客户端</shortdesc>
<shortdesc xml:lang="ar">عميل غير رسمي لـ Yandex Music</shortdesc>
<shortdesc xml:lang="hi">अनौपचारिक Yandex Music क्लाइंट</shortdesc>
<shortdesc xml:lang="ko">비공식 Yandex Music 클라이언트</shortdesc>
<shortdesc xml:lang="tr">Resmi olmayan Yandex Music istemcisi</shortdesc>
<shortdesc xml:lang="he">לקוח לא רשמי של Yandex Music</shortdesc>
<shortdesc xml:lang="el">Ανεπίσημος πελάτης του Yandex Music</shortdesc>
<shortdesc xml:lang="nl">Onofficiële Yandex Music-client</shortdesc>
<shortdesc xml:lang="sv">Inofficiell Yandex Music-klient</shortdesc>
<shortdesc xml:lang="pl">Nieoficjalny klient Yandex Music</shortdesc>
<shortdesc xml:lang="cs">Neoficiální klient Yandex Music</shortdesc>
<shortdesc xml:lang="da">Uofficiel Yandex Music-klient</shortdesc>
<shortdesc xml:lang="fi">Epävirallinen Yandex Music-asiakas</shortdesc>
<shortdesc xml:lang="hu">Nem hivatalos Yandex Music kliens</shortdesc>
<shortdesc xml:lang="th">ไคลเอนต์ Yandex Music อย่างไม่เป็นทางการ</shortdesc>
<shortdesc xml:lang="en">Unofficial Yandex Music client</shortdesc>
<description>
GTK/Adwaita application that allows you to use Yandex Music service on Linux operating systems
</description>
<homepage rdf:resource="https://github.com/Rirusha/Cassette" />
<download-page rdf:resource="https://github.com/Rirusha/Cassette/tags" />
<bug-database rdf:resource="https://github.com/Rirusha/Cassette/issues" />
<homepage rdf:resource="https://gitlab.gnome.org/Rirusha/Cassette" />
<download-page rdf:resource="https://gitlab.gnome.org/Rirusha/Cassette/-/tags" />
<bug-database rdf:resource="https://gitlab.gnome.org/Rirusha/Cassette/-/issues" />
<programming-language>Vala</programming-language>
<platform>GTK 4</platform>
@ -70,7 +70,7 @@
<foaf:mbox rdf:resource="mailto:rirusha@altlinux.org" />
<foaf:account>
<foaf:OnlineAccount>
<foaf:accountServiceHomepage rdf:resource="https://github.com"/>
<foaf:accountServiceHomepage rdf:resource="https://gitlab.gnome.org"/>
<foaf:accountName>Rirusha</foaf:accountName>
</foaf:OnlineAccount>
</foaf:account>

View file

@ -1,48 +0,0 @@
#!/bin/bash
import sys
import os
import re
def check_indentation (file_path, root_dir) -> list[str]:
file_err_list = []
with open (file_path, 'r') as file:
lines = file.readlines ()
empty_lines_count = 0
for i, line in enumerate (lines):
if line.strip () == "":
empty_line_count += 1
else:
empty_line_count = 0
if empty_line_count > 1:
file_err_list.append (f"To mant empty lines in file '{file_path.replace (root_dir, "", 1)}' at line {i + 1}: \"{line.rstrip ()}\".")
return file_err_list
def scan_directory (directory) -> list[str]:
err_list = []
for root, dirs, files in os.walk (directory):
for file in files:
if (file.endswith ('.vala') or file.endswith ('.blp')) and (("/data/ui" in root or "/src" in root or "/tests" in root) and "/.flatpak/" not in root):
file_path = os.path.join (root, file)
file_err_list = check_indentation (file_path, directory)
if (file_err_list):
err_list += file_err_list
return err_list
if __name__ == "__main__":
err_list = scan_directory (sys.argv[1])
print (*err_list, sep="\n", end="\n\n")
print (f"Total errors: {len (err_list)}")
if (len (err_list) != 0):
sys.exit (1)

View file

@ -1,47 +0,0 @@
#!/bin/bash
import sys
import os
import re
def check_indentation (file_path, root_dir) -> list[str]:
file_err_list = []
with open (file_path, 'r') as file:
lines = file.readlines ()
for i, line in enumerate (lines):
if "ind-check=skip-file" in line:
return
if re.match (r'^(?!.*(?:new|if|else| => |try|catch|switch|}|get |set |while|namespace|class|foreach|throws|ind-check=ignore| = {))(?=(?:.*?\s+\w+\s+\w+.*?){1}).*{', line):
indentation = len (re.match(r'^(\s*)', line).group(1))
if indentation != 4:
file_err_list.append (f"Indentation error in file '{file_path.replace (root_dir, "", 1)}' at line {i + 1}: \"{line.rstrip ()}\". {indentation} spaces instead of 4.")
return file_err_list
def scan_directory (directory) -> list[str]:
err_list = []
for root, dirs, files in os.walk (directory):
for file in files:
if file.endswith ('.vala'):
file_path = os.path.join (root, file)
file_err_list = check_indentation (file_path, directory)
if (file_err_list):
err_list += file_err_list
return err_list
if __name__ == "__main__":
err_list = scan_directory (sys.argv[1])
print (*err_list, sep="\n", end="\n\n")
print (f"Total errors: {len (err_list)}")
if (len (err_list) != 0):
sys.exit (1)

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
<path d="m 11.847656 1 c -1.109375 -0.027344 -2.1875 0.371094 -3.003906 1.121094 l -0.863281 0.769531 l -0.859375 -0.769531 c -1.136719 -1.019532 -2.734375 -1.355469 -4.1875 -0.875 c -1.453125 0.476562 -2.539063 1.695312 -2.8476565 3.195312 c -0.3085935 1.496094 0.2109375 3.046875 1.3554685 4.058594 l 6.539063 5.828125 l 6.542969 -5.828125 c 1.332031 -1.152344 1.820312 -3.003906 1.226562 -4.664062 c -0.589844 -1.660157 -2.140625 -2.785157 -3.902344 -2.835938 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
</svg>

After

Width:  |  Height:  |  Size: 647 B

View file

@ -4,7 +4,7 @@
height="128"
version="1.1"
id="svg16"
sodipodi:docname="io.github.Rirusha.Cassette-Devel.svg"
sodipodi:docname="space.rirusha.Cassette.Devel.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
@ -38,9 +38,9 @@
inkscape:window-height="1011"
id="namedview18"
showgrid="false"
inkscape:zoom="4.3101714"
inkscape:cx="36.54147"
inkscape:cy="53.014133"
inkscape:zoom="11.313709"
inkscape:cx="89.095454"
inkscape:cy="94.708114"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
@ -799,7 +799,7 @@
<g
id="g2"
style="display:inline;opacity:0.8"
transform="translate(-7.734375,-17.092503)">
transform="matrix(1.0003571,0,0,1.0006746,-7.7599937,-17.158376)">
<path
id="path10"
style="display:inline;fill:url(#linearGradient38)"

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Before After
Before After

View file

@ -6,7 +6,7 @@
fill="none"
version="1.1"
id="svg35"
sodipodi:docname="io.github.Rirusha.Cassette.svg"
sodipodi:docname="space.rirusha.Cassette.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View file

@ -6,9 +6,9 @@
fill="none"
version="1.1"
id="svg35"
sodipodi:docname="io.github.Rirusha.Cassette-Devel-symbolic.svg"
sodipodi:docname="space.rirusha.Cassette.Devel-symbolic.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
inkscape:export-filename="io.github.Rirusha.Cassette-symbolic.png"
inkscape:export-filename="space.rirusha.Cassette-symbolic.png"
inkscape:export-xdpi="75"
inkscape:export-ydpi="75"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before After
Before After

View file

@ -6,9 +6,9 @@
fill="none"
version="1.1"
id="svg35"
sodipodi:docname="io.github.Rirusha.Cassette-Devel-symbolic.svg"
sodipodi:docname="space.rirusha.Cassette.Devel-symbolic.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
inkscape:export-filename="io.github.Rirusha.Cassette-symbolic.png"
inkscape:export-filename="space.rirusha.Cassette-symbolic.png"
inkscape:export-xdpi="75"
inkscape:export-ydpi="75"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

View file

@ -1,5 +1,11 @@
desktop_conf = configuration_data()
desktop_conf.set('APP_ID_DYN', app_id_dyn)
desktop_file = i18n.merge_file(
input: '@0@.desktop.in'.format(app_id_dyn),
input: configure_file(
output: '@0@.desktop.in'.format(app_id_dyn),
input: '@0@.desktop.in.in'.format(app_id_dyn),
configuration: desktop_conf),
output: '@0@.desktop'.format(app_id_dyn),
type: 'desktop',
po_dir: '../po',
@ -12,12 +18,22 @@ if desktop_utils.found()
test('Validate desktop file', desktop_utils, args: [desktop_file])
endif
appstream_conf = configuration_data()
appstream_conf.set('APP_ID', app_id)
appstream_conf.set('APP_ID_DYN', app_id_dyn)
appstream_conf.set('HOMEPAGE', 'https://gitlab.gnome.org/Rirusha/Cassette')
appstream_conf.set('BUGTRACKER', 'https://gitlab.gnome.org/Rirusha/Cassette/-/issues')
appstream_conf.set('HELP', 'https://t.me/CassetteGNOME_Discussion')
appstream_file = i18n.merge_file(
input: '@0@.appdata.xml.in'.format(app_id),
output: '@0@.appdata.xml'.format(app_id),
input: configure_file(
output: '@0@.metainfo.xml.in'.format(app_id),
input: '@0@.metainfo.xml.in.in'.format(app_id),
configuration: appstream_conf),
output: '@0@.metainfo.xml'.format(app_id),
po_dir: '../po',
install: true,
install_dir: join_paths(get_option('datadir'), 'appdata')
install_dir: join_paths(get_option('datadir'), 'metainfo')
)
appstreamcli = find_program('appstreamcli', required: false)
@ -77,6 +93,7 @@ resource_files = files('@0@.gresource.xml'.format(app_id))
resources = gnome.compile_resources(
'cassette-resources',
resource_files,
source_dir: meson.current_build_dir(),
dependencies: blueprints,
c_name: 'cassette'
)

View file

@ -1,14 +1,14 @@
[Desktop Entry]
# Translators: app name should be translated
Name=Cassette (Devel)
Comment=Unofficial Yandex.Music client for GNOME (Development)
Comment=Unofficial Yandex Music client for GNOME (Devel build)
# Translators: keep number of ';'
Keywords=yandex;yandex music;yam;music;
Exec=cassette %U
Icon=io.github.Rirusha.Cassette-Devel
Icon=@APP_ID_DYN@
Terminal=false
Type=Application
Categories=Audio
Categories=GNOME;GTK;Music;Audio;AudioVideo;
StartupNotify=true
MimeType=x-scheme-handler/yandexmusic;
X-GNOME-UsesNotifications=true

View file

@ -1,14 +1,14 @@
[Desktop Entry]
# Translators: app name should be translated
Name=Cassette
Comment=Unofficial Yandex.Music client for GNOME
Comment=Unofficial Yandex Music client for GNOME
# Translators: keep number of ';'
Keywords=yandex;yandex music;yam;music;
Exec=cassette %U
Icon=io.github.Rirusha.Cassette
Icon=@APP_ID_DYN@
Terminal=false
Type=Application
Categories=Audio
Categories=GNOME;GTK;Music;Audio;AudioVideo;
StartupNotify=true
MimeType=x-scheme-handler/yandexmusic;
X-GNOME-UsesNotifications=true

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/io/github/Rirusha/Cassette/icons/scalable/actions/">
<gresource prefix="/space/rirusha/Cassette/icons/scalable/actions/">
<file alias="audio-volume-high-symbolic.svg">assets/icons/audio-volume-high-symbolic.svg</file>
<file alias="audio-volume-low-symbolic.svg">assets/icons/audio-volume-low-symbolic.svg</file>
<file alias="audio-volume-medium-symbolic.svg">assets/icons/audio-volume-medium-symbolic.svg</file>
@ -22,6 +22,7 @@
<file alias="go-next-symbolic.svg">assets/icons/go-next-symbolic.svg</file>
<file alias="go-previous-symbolic.svg">assets/icons/go-previous-symbolic.svg</file>
<file alias="isound-wave-alt-symbolic.svg">assets/icons/isound-wave-alt-symbolic.svg</file>
<file alias="like-symbolic.svg">assets/icons/like-symbolic.svg</file>
<file alias="media-playback-pause-symbolic.svg">assets/icons/media-playback-pause-symbolic.svg</file>
<file alias="media-playback-start-symbolic.svg">assets/icons/media-playback-start-symbolic.svg</file>
<file alias="media-playlist-repeat-song-symbolic.svg">assets/icons/media-playlist-repeat-song-symbolic.svg</file>
@ -128,7 +129,7 @@
<file alias="wave-my-wave-symbolic.svg">assets/icons/wave-my-wave-symbolic.svg</file>
<file alias="window-close-symbolic.svg">assets/icons/window-close-symbolic.svg</file>
</gresource>
<gresource prefix="/io/github/Rirusha/Cassette">
<gresource prefix="/space/rirusha/Cassette/">
<file alias="gtk/help-overlay.ui" preprocess="xml-stripblanks">ui/help-overlay.ui</file>
<file>style.css</file>
<file preprocess="xml-stripblanks">ui/account-info-dialog.ui</file>

View file

@ -1,23 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="cassette">
<schema id="io.github.Rirusha.Cassette" path="/io/github/Rirusha/Cassette/">
<child schema="io.github.Rirusha.Cassette.application" name="application"/>
<child schema="io.github.Rirusha.Cassette.client" name="client"/>
<schema id="space.rirusha.Cassette" path="/space/rirusha/Cassette/">
<child schema="space.rirusha.Cassette.application" name="application"/>
<child schema="space.rirusha.Cassette.client" name="client"/>
</schema>
<!-- GUI Application -->
<enum id="io.github.Rirusha.Cassette.application.application-state">
<enum id="space.rirusha.Cassette.application.application-state">
<value nick="begin" value="0"/>
<value nick="online" value="1"/>
<value nick="local" value="2"/>
<value nick="offline" value="3"/>
</enum>
<schema id="io.github.Rirusha.Cassette.application" path="/io/github/Rirusha/Cassette/application/">
<schema id="space.rirusha.Cassette.application" path="/space/rirusha/Cassette/application/">
<key name="application-state" enum="io.github.Rirusha.Cassette.application.application-state">
<key name="application-state" enum="space.rirusha.Cassette.application.application-state">
<default>"begin"</default>
</key>
@ -73,22 +73,22 @@
<!-- Client -->
<enum id="io.github.Rirusha.Cassette.client.repeat-mode">
<enum id="space.rirusha.Cassette.client.repeat-mode">
<value nick="off" value="0"/>
<value nick="one" value="1"/>
<value nick="queue" value="2"/>
</enum>
<enum id="io.github.Rirusha.Cassette.client.shuffle-mode">
<enum id="space.rirusha.Cassette.client.shuffle-mode">
<value nick="off" value="0"/>
<value nick="on" value="1"/>
</enum>
<schema id="io.github.Rirusha.Cassette.client" path="/io/github/Rirusha/Cassette/client/">
<schema id="space.rirusha.Cassette.client" path="/space/rirusha/Cassette/client/">
<key name="repeat-mode" enum="io.github.Rirusha.Cassette.client.repeat-mode">
<key name="repeat-mode" enum="space.rirusha.Cassette.client.repeat-mode">
<default>"off"</default>
</key>
<key name="shuffle-mode" enum="io.github.Rirusha.Cassette.client.shuffle-mode">
<key name="shuffle-mode" enum="space.rirusha.Cassette.client.shuffle-mode">
<default>"off"</default>
</key>

View file

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
<component type="desktop-application">
<name>Cassette</name>
<id>io.github.Rirusha.Cassette</id>
<id>@APP_ID@</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-3.0-only</project_license>
<project_license>GPL-3.0-or-later</project_license>
<summary>Unofficial Yandex Music client</summary>
<description>
<p>
GTK/Adwaita application that allows to use Yandex Music
@ -34,41 +35,61 @@
Cassette is an unofficial client and is not associated with or endorsed by Yandex.
</p>
</description>
<launchable type="desktop-id">@APP_ID_DYN@.desktop</launchable>
<developer id="space.rirusha">
<name>Vladimir Vaskov</name>
<name xml:lang="ru">Владимир Васьков</name>
</developer>
<recommends>
<control>keyboard</control>
<control>pointing</control>
<control>touch</control>
</recommends>
<branding>
<color type="primary" scheme_preference="light">#c0c0c0</color>
<color type="primary" scheme_preference="dark">#303030</color>
<color type="primary" scheme_preference="light">#fee372</color>
<color type="primary" scheme_preference="dark">#dd624b</color>
</branding>
<content_rating type="oars-1.1">
<content_attribute id="sex-themes">mild</content_attribute>
<content_attribute id="language-profanity">moderate</content_attribute>
<content_attribute id="language-discrimination">mild</content_attribute>
</content_rating>
<url type="homepage">@HOMEPAGE@</url>
<url type="bugtracker">@BUGTRACKER@</url>
<url type="help">@HELP@</url>
<screenshots>
<screenshot type="default">
<image>https://github.com/Rirusha/Cassette/blob/master/data/images/1-liked.png?raw=true</image>
<image>https://gitlab.gnome.org/Rirusha/Cassette/-/raw/959c28f67e219efdba1fa280d2170d3d72bed20a/data/images/1-liked-view.png</image>
<caption>Liked view</caption>
</screenshot>
<screenshot>
<image>https://github.com/Rirusha/Cassette/blob/master/data/images/2-playlists.png?raw=true</image>
<image>https://gitlab.gnome.org/Rirusha/Cassette/-/raw/959c28f67e219efdba1fa280d2170d3d72bed20a/data/images/2-playlists-view.png</image>
<caption>Playlists view</caption>
</screenshot>
<screenshot>
<image>https://github.com/Rirusha/Cassette/blob/master/data/images/3-lyrics.png?raw=true</image>
<image>https://gitlab.gnome.org/Rirusha/Cassette/-/raw/959c28f67e219efdba1fa280d2170d3d72bed20a/data/images/3-sync-lyrics.png</image>
<caption>Sync lyrics</caption>
</screenshot>
<screenshot>
<image>https://github.com/Rirusha/Cassette/blob/master/data/images/4-queue.png?raw=true</image>
<image>https://gitlab.gnome.org/Rirusha/Cassette/-/raw/959c28f67e219efdba1fa280d2170d3d72bed20a/data/images/4-playback-queue.png</image>
<caption>Playback queue</caption>
</screenshot>
<screenshot>
<image>https://github.com/Rirusha/Cassette/blob/master/data/images/5-main-settings.png?raw=true</image>
<image>https://gitlab.gnome.org/Rirusha/Cassette/-/raw/959c28f67e219efdba1fa280d2170d3d72bed20a/data/images/5-waves-view.png</image>
<caption>Waves view</caption>
</screenshot>
<screenshot>
<image>https://gitlab.gnome.org/Rirusha/Cassette/-/raw/959c28f67e219efdba1fa280d2170d3d72bed20a/data/images/6-main-settings.png</image>
<caption>Main preferences</caption>
</screenshot>
</screenshots>
<summary>Unofficial Yandex.Music client</summary>
<launchable type="desktop-id">io.github.Rirusha.Cassette.desktop</launchable>
<releases>
<release version="0.2.0" date="2024-01-28">
<release version="0.2.1" date="2025-02-25">
<description>
<p>Fixed a bug on the stations page and the playlist page in GNOME 48</p>
</description>
</release>
<release version="0.2.0" date="2024-07-10">
<description>
<p>A release dedicated to My Vibe</p>
<ul>
@ -132,8 +153,4 @@
</description>
</release>
</releases>
<url type="homepage">https://github.com/Rirusha/Cassette</url>
<url type="bugtracker">https://github.com/Rirusha/Cassette/issues</url>
<url type="help">https://t.me/CassetteGNOME_Discussion</url>
<developer_name>Rirusha</developer_name>
</component>

View file

@ -65,7 +65,7 @@ frame {
background-color: rgba(0, 0, 0, 0);
}
.plus-background {
.plus-button {
color: white;
background-image: linear-gradient(90deg,#ff5c4d,#eb469f 30%,#8341ef 75%,#3f68f9);
}

View file

@ -21,10 +21,10 @@ template $CassetteAccountInfoDialog: Adw.Dialog {
margin-bottom: 12;
margin-start: 12;
margin-end: 12;
maximum-size: 450;
maximum-size: 360;
Box {
spacing: 24;
spacing: 12;
orientation: vertical;
Adw.Avatar avatar {}
@ -39,45 +39,35 @@ template $CassetteAccountInfoDialog: Adw.Dialog {
wrap: true;
}
Box {
orientation: vertical;
halign: center;
spacing: 8;
ListBox {
styles [
"boxed-list-separate"
]
Button user_button {
styles [
"pill"
]
margin-top: 12;
selection-mode: none;
Adw.ButtonRow user_button {
action-name: "app.open-account";
label: _("Open in browser");
hexpand: true;
can-shrink: true;
title: _("Open in browser");
}
Button plus_button {
Adw.ButtonRow plus_button {
styles [
"pill",
"plus-background"
"plus-button"
]
action-name: "app.open-plus";
label: _("Plus");
hexpand: true;
can-shrink: true;
title: _("Plus");
}
Button logout_button {
Adw.ButtonRow logout_button {
styles [
"pill",
"destructive-action"
]
margin-top: 24;
action-name: "app.log-out";
label: _("Log out");
hexpand: true;
can-shrink: true;
title: _("Log out");
}
}
}

View file

@ -5,7 +5,17 @@ template $CassetteCoverImage: Frame {
halign: center;
valign: center;
Image real_image {
icon-size: large;
Stack stack {
hhomogeneous: true;
StackPage {
name: "placeholder";
child: Image placeholder_image {
icon-size: large;
icon-name: "audio-x-generic-symbolic";
width-request: bind template.image-widget-size;
height-request: bind template.image-widget-size;
};
}
}
}

View file

@ -25,8 +25,8 @@ template $CassetteHeaderBar: $CassetteShrinkableBin {
ToggleButton search_button {
icon-name: "edit-find-symbolic";
visible: false;
tooltip-text: _("Yandex.Music search");
sensitive: bind template.interactive;
tooltip-text: _("Yandex Music search");
// sensitive: bind template.interactive;
}
title-widget: Adw.ViewSwitcher switcher_title {

View file

@ -11,27 +11,46 @@ template $CassetteNoPlusDialog: Adw.Dialog {
[top]
Adw.HeaderBar {}
content: Adw.StatusPage {
margin-top: 24;
margin-bottom: 12;
margin-start: 12;
margin-end: 12;
icon-name: "dialog-warning-symbolic";
title: _("No Plus Subscription");
description: _("To avoid problems with Yandex, the online functions of the application are not available without a Yandex.Plus subscription. Thanks for understanding.");
content: Box {
orientation: vertical;
Button logout_button {
Adw.StatusPage {
vexpand: true;
icon-name: "dialog-warning-symbolic";
title: _("No Plus Subscription");
description: _("To avoid problems with Yandex, the online functions of the application are not available without a Yandex.Plus subscription. Thanks for understanding.");
}
ListBox {
styles [
"pill",
"destructive-action"
"boxed-list-separate"
]
visible: bind template.log-out-button-visible;
margin-top: 24;
action-name: "app.log-out";
label: _("Log out");
hexpand: true;
can-shrink: true;
margin-top: 12;
margin-bottom: 12;
margin-start: 12;
margin-end: 12;
selection-mode: none;
Adw.ButtonRow get_plus_button {
styles [
"plus-button",
]
action-name: "app.get-plus";
title: _("Get Plus");
hexpand: true;
}
Adw.ButtonRow logout_button {
styles [
"destructive-action"
]
action-name: "app.log-out";
title: _("Log out");
hexpand: true;
}
}
};
}

View file

@ -36,7 +36,7 @@
<style>
<class name="title-1"/>
</style>
<property name="label" translatable="true">Also you liked this playlists</property>
<property name="label" translatable="true">Also you liked these playlists</property>
</object>
</child>
<child>

View file

@ -17,7 +17,7 @@
</style>
<property name="search-delay">900</property>
<property name="hexpand">true</property>
<!-- Translators: placeholder of "search" entry. Local track search (inside of track lsit) -->
<!-- Translators: placeholder of "search" entry. Local track search (inside of track list) -->
<property name="placeholder-text" translatable="true">Search track</property>
</object>
</child>

View file

@ -1,61 +0,0 @@
## Как внести вклад
Если вы не знаете, чем занятся, то:
* Все запланированные задачи лежат в разделе issue и имеют ярлык "enchancement".
* Все известные проблемы лежат там же и имеют ярлык "bug".
Выбирайте задачи из ближайших версией. Их список вы можете найти [здесь](https://github.com/Rirusha/Cassette/milestones). Это как ускорит выход следующей версии, так и облегчит ревью, так так не нужно будет переключаться с одной глобальной проблемы на другую.
Также если решили исправить какой-то баг, описанный в issue, сначала убедитесь, что его всё ещё можно воспроизвести в `master` ветке.
Также, если вы считаете, что приложению чего-то не хватает или вы нашли баг, то не стесняйтесь создавать issue.
## Именование коммитов
Заголовок сообщения должен иметь вид:
```
feat: добавить кнопку проигрывания в `Имя виджета`
Кнопки не хватало, поэтому её нужно было добавить
```
Это пример. Подробнее правила описаны [здесь](https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional). Также тело сообщения необязательно, если информация в заголове исчерпывающая. Также вот список всех типов коммитов с описаниями:
* `build`: Используется для изменений, связанных с сборкой системы или внешними зависимостями.
* `chore`: Обычно включает в себя изменения, которые не относятся непосредственно к коду или тестам, например, обновление документации, настройка среды разработки, повышение версии и т. д.
* `ci`: Относится к изменениям, связанным с настройкой или улучшением CI.
* `docs`: Используется для изменений, касающихся только документации, например, исправления опечаток, обновление README или добавление комментариев в код.
* `feat`: Обозначает добавление новой функциональности или возможности в проект.
* `fix`: Относится к исправлению ошибок в коде или исправлению неполадок в проекте.
* `perf`: Используется, когда вносятся изменения с целью улучшения производительности.
* `refactor`: Относится к изменениям, которые не добавляют новую функциональность, а только изменяют структуру или организацию существующего кода.
* `revert`: Используется для отмены предыдущих коммитов в истории проекта.
* `style`: Относится к изменениям в форматировании кода, например, правки пробелов, отступов, переносов строк и т. д.
* `test`: Используется для добавления или изменения тестового кода, например, тестирование новой функциональности или исправление существующих тестов.
* `po`: Используется для добавления или изменения перевода.
## Создание Pull Request'ов
Все Pull Request'ы должны быть сделанны в `master` ветку. Если вы закрываете какое-то issue, то ссылайтесь на него с ключевым словом "close" в теле коммита, например:
```
fix: исправить некорректное поведение
close #123
```
## Форматирование кода
Если вы используете Visual Studio Code, то есть таск для запуска линтера. Иначе используйте в линтере конфигурацию в корне репозитория: vala-lint.conf, CI использует именно её.
## Разработка
Проверяйте сборку, используя flatpak, так как это единственная официально поддерживаемая версия.
## Тестирование
Крайне приветствуется написание или дополнение существующих тестов для клиента.

View file

@ -42,13 +42,13 @@ wsl -t Ubuntu
#### В терминале Ubuntu:
```shell
sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
sudo flatpak install io.github.Rirusha.Cassette
sudo flatpak install space.rirusha.Cassette
```
> [!NOTE]
> После перезагрузки Windows в меню «Пуск» появиться ярлык приложения Cassette, но его также можно запустить из терминала Ubuntu так:
> ```shell
> flatpak run io.github.Rirusha.Cassette
> flatpak run space.rirusha.Cassette
> ```
### nightly версия
@ -76,11 +76,11 @@ sudo flatpak remote-add --if-not-exists cassette-nightly https://rirusha.github.
```shell
sudo flatpak install org.gnome.Platform//master
sudo flatpak install cassette-nightly io.github.Rirusha.Cassette-Devel
sudo flatpak install cassette-nightly space.rirusha.Cassette.Devel
```
> [!NOTE]
> После перезагрузки Windows в меню «Пуск» появиться ярлык приложения Cassette-Devel, но его также можно запустить из терминала Ubuntu так:
> После перезагрузки Windows в меню «Пуск» появиться ярлык приложения Cassette.Devel, но его также можно запустить из терминала Ubuntu так:
> ```shell
> flatpak run io.github.Rirusha.Cassette-Devel
> flatpak run space.rirusha.Cassette.Devel
> ```

194
docs/README-ru.md Normal file
View file

@ -0,0 +1,194 @@
Язык README: \
[![En](https://img.shields.io/badge/en-gray)](README.md)
[![Ru](https://img.shields.io/badge/ru-green)](docs/README-ru.md)
<div align="center">
<h1>
<img
src="data/icons/hicolor/scalable/apps/space.rirusha.Cassette.svg"
height="64"
/>
Cassette
</h1>
<a href="https://stopthemingmy.app">
<img src="https://stopthemingmy.app/badge.svg"/>
</a>
<a href="https://t.me/CassetteGNOME_Devlog">
<img alt="Static Badge" src="https://img.shields.io/badge/Канал-blue?style=flat&logo=telegram">
</a>
<a href="https://t.me/CassetteGNOME_Devlog">
<img alt="Static Badge" src="https://img.shields.io/badge/Чат-blue?style=flat&logo=telegram">
</a>
</div>
<div align="center"><h4>GTK4/Adwaita приложение, которое позволит вам использовать Я.Музыку на Linux.</h4></div>
<div align="center">
<img src="data/images/1-liked-view.png" alt="Preview"/>
</div>
## Установка
**Flathub:**
<a href="https://flathub.org/apps/details/space.rirusha.Cassette">
<img width='240' alt='Скачать на Flathub' src='https://flathub.org/assets/badges/flathub-badge-en.svg'/>
</a>
```shell
flatpak install space.rirusha.Cassette
```
**Репозитории дистрибутивов:**
[![Состояние упаковки](https://repology.org/badge/vertical-allrepos/cassette.svg)](https://repology.org/project/cassette/versions)
### ALT Linux
```shell
su -
apt-get install cassette
```
### Arch Linux
> Большинство помощников AUR поддерживают флаги в стиле Pacman, например, yay.
#### yay
```shell
yay -S cassette
```
#### pamac
```shell
pamac install cassette
```
### NixOS Unstable
```shell
nix-shell -p cassette
```
## Сборка
#### Зависимости:
* `gtk4`, версия: `>= 4.14`
* `libadwaita-1`, версия: `>= 1.5`
* `libsoup-3.0`
* `gdk-pixbuf-2.0`
* `json-glib-1.0`
* `sqlite3`
* `gee-0.8`
* `libxml-2.0`
* `gstreamer-1.0`
* `webkitgtk-6.0`
* `gio-2.0`, версия: `>= 2.72`
* `git`, только для `devel`
#### Утилиты для сборки:
* `meson`
* `ninja`
* `cmake`
* `blueprint-compiler`
* `gcc`
* `valac`
* `pkg`
* `appstream-utils`
### ПредРелиз
> В данной версии будут недоступны нестабильные функции, находящиеся в разработке.
```shell
meson setup _build
```
### Флаг `is_devel`
> В данной версии будут доступны все функции, находящиеся в разработке.
```shell
meson setup _build -Dis_devel=true
```
#### Установка
```shell
sudo ninja install -C _build
```
#### Тестирование
```shell
ninja -C _build test
```
#### Удаление
```shell
sudo ninja uninstall -C _build
```
## Версия "В разработке"
> Эта версия обновляется после каждого изменения, так что она может быть нестабильна.
Нужно добавить `cassette-nightly` и `gnome-nightly` репозиторий:
```shell
flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
flatpak remote-add --if-not-exists cassette-nightly https://rirusha.space/repos/cassette-nightly.flatpakrepo
```
Установка приложения:
```shell
flatpak install cassette-nightly space.rirusha.Cassette.Devel
```
## Для разработчиков
> Репозиторий имеет рекомендуемые расширения для разработки с Visual Studio Code.
### Зависимости
#### репозиторий [gnome-nightly](https://wiki.gnome.org/Apps/Nightly):
```shell
flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
```
#### Для запуска
`org.gnome.Platform//master`
```shell
flatpak install org.gnome.Platform//master
```
#### Для сборки
`org.gnome.Sdk//master` \
`org.freedesktop.Sdk.Extension.vala//23.08beta`
```shell
flatpak install org.gnome.Sdk//master org.freedesktop.Sdk.Extension.vala//23.08beta
```
## Поддержка
Вы можете поддержать несколькими способами:
- Создать issue с проблемой или предложением по улучшению
- Отправить merge request с фиксом или добавлением функционала
- Поддержать рублём (Просьба указывать в "Сообщении получателю" свой никнейм при отправлении через Т-Банк):
<br>
<div align="center">
<a href="https://www.tbank.ru/cf/21GCxLuFuE9" style="margin-right: 100px;">
<img height="200" src="../assets/tbank.png" alt="Tinkoff">
</a>
<a href="https://boosty.to/rirusha/donate">
<img height="200" src="../assets/boosty.png" alt="boosty.to">
</a>
</div>
## Благодарность
Спасибо [MarshalX](https://github.com/MarshalX). Библиотека [yandex-music-api](https://github.com/MarshalX/yandex-music-api) была использована в качестве документации к api.
> Внимание!
> Cassette - неофициальный клиент, не связан с компанией Яндекс и не одобрен ей.

61
flake.lock generated Normal file
View file

@ -0,0 +1,61 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1720542800,
"narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "feb2849fdeb70028c70d73b848214b00d324a497",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

69
flake.nix Normal file
View file

@ -0,0 +1,69 @@
{
description = "GTK4/Adwaita application that allows you to use Yandex Music service on Linux operating systems";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = {
self,
nixpkgs,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem
(
system: let
pkgs = import nixpkgs {inherit system;};
nativeBuildInputs = with pkgs; [
blueprint-compiler
desktop-file-utils
meson
ninja
pkg-config
vala
];
buildInputs = with pkgs; [
glib-networking
gst_all_1.gst-plugins-bad
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
gst_all_1.gstreamer
gtk4
json-glib
libadwaita
libgee
libsoup_3
libxml2
sqlite
webkitgtk_6_0
];
in {
packages.default = pkgs.stdenv.mkDerivation {
name = "cassette";
src = self;
mesonFlags = [
"-Dis_devel=true"
];
nativeBuildInputs = with pkgs;
[
wrapGAppsHook4
git
]
++ nativeBuildInputs;
inherit buildInputs;
strictDeps = true;
};
devShells.default = pkgs.mkShell {
packages = with pkgs; [alejandra] ++ nativeBuildInputs ++ buildInputs;
};
}
);
}

View file

@ -1,16 +1,16 @@
project(
'cassette',
['c', 'vala'],
version: '0.2.0',
meson_version: '>= 0.62.0',
license: 'GPL-3.0-only',
version: '0.2.1',
meson_version: '>= 1.0.0',
license: 'GPL-3.0-or-later',
)
i18n = import('i18n')
gnome = import('gnome')
gtk = dependency('gtk4', version: '>= 4.14')
libadwaita = dependency('libadwaita-1', version: '>= 1.5')
gtk = dependency('gtk4', version: '>= 4.15')
libadwaita = dependency('libadwaita-1', version: '>= 1.6')
threads = dependency('threads')
libsoup = dependency('libsoup-3.0')
gdkpixbuf = dependency('gdk-pixbuf-2.0')
@ -22,35 +22,37 @@ gstreamer = dependency('gstreamer-1.0')
webkit = dependency('webkitgtk-6.0')
gio = dependency('gio-2.0', version: '>= 2.72')
app_id = 'io.github.Rirusha.Cassette'
app_id = 'space.rirusha.Cassette'
name_suffix = ''
version_suffix = ''
app_id_suffix = ''
if get_option('is_devel')
name_suffix = ' (Devel)'
app_id_suffix = '.Devel'
if get_option('profile') == 'development'
find_program('git', required: true)
name_postfix = ' (Devel)'
app_id_dyn = '@0@-Devel'.format(app_id)
app_identity_dyn = 'Cassette (Devel)'
profile = 'Devel'
vcs_tag = run_command('git', 'rev-parse', '--short', 'HEAD').stdout().strip()
vcs_tag = run_command('git', 'rev-parse', '--short', 'HEAD', check: true).stdout().strip()
version_suffix = '-dev.@0@'.format (vcs_tag)
else
name_postfix = ''
app_id_dyn = app_id
app_identity_dyn = 'Cassette'
profile = ''
version_suffix = ''
endif
app_id_dyn = '@0@@1@'.format (app_id, app_id_suffix)
app_name = 'Cassette@0@'.format (name_suffix)
conf = configuration_data()
conf.set_quoted('APP_ID', app_id)
conf.set_quoted('APP_NAME', 'Cassette@0@'.format (name_postfix))
conf.set_quoted('APP_ID_DYN', app_id_dyn)
conf.set_quoted('APP_IDENTITY_DYN', app_identity_dyn)
conf.set_quoted('APP_NAME', app_name)
conf.set_quoted('G_LOG_DOMAIN', app_id)
conf.set_quoted('PROFILE', profile)
conf.set_quoted('VERSION', meson.project_version() + version_suffix)
conf.set10('IS_DEVEL', get_option('is_devel'))
conf.set_quoted('VERSION', '@0@@1@'.format (meson.project_version(), version_suffix))
conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
conf.set_quoted('DATADIR', join_paths(get_option('prefix'), get_option('datadir')))
conf.set_quoted('GNOMELOCALEDIR', join_paths(get_option('prefix'), get_option('localedir')))
conf.set_quoted('HOMEPAGE', 'https://gitlab.gnome.org/Rirusha/Cassette')
conf.set_quoted('BUGTRACKER', 'https://gitlab.gnome.org/Rirusha/Cassette/-/issues')
conf.set_quoted('HELP', 'https://t.me/CassetteGNOME_Discussion')
subdir('data')

View file

@ -1,10 +1,5 @@
option(
'profile',
type: 'combo',
choices: [
'default',
'development',
],
value: 'default',
description: 'The build profile for app. One of "default" or "development".'
'is_devel',
type: 'boolean',
value: false
)

View file

@ -1,4 +1,13 @@
# Please keep this list alphabetically sorted
az
be
de
es
ka
pt
pt_BR
ru
sl
sv
tr
zh_CN

View file

@ -1,6 +1,6 @@
data/io.github.Rirusha.Cassette.appdata.xml.in
data/io.github.Rirusha.Cassette.desktop.in
data/io.github.Rirusha.Cassette-Devel.desktop.in
data/space.rirusha.Cassette.desktop.in.in
data/space.rirusha.Cassette.Devel.desktop.in.in
data/space.rirusha.Cassette.metainfo.xml.in.in
data/ui/account-info-dialog.blp
data/ui/begin-view.ui
data/ui/cache-deletion-preferences.ui

1317
po/az.po Normal file

File diff suppressed because it is too large Load diff

1813
po/be.po

File diff suppressed because it is too large Load diff

1350
po/de.po Normal file

File diff suppressed because it is too large Load diff

1806
po/es.po

File diff suppressed because it is too large Load diff

1317
po/ka.po Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,2 +1 @@
# add_project_arguments('-DGETTEXT_PACKAGE="cassette"', language:'c')
i18n.gettext(meson.project_name(), preset: 'glib')

1363
po/pt.po Normal file

File diff suppressed because it is too large Load diff

1364
po/pt_BR.po Normal file

File diff suppressed because it is too large Load diff

1257
po/ru.po

File diff suppressed because it is too large Load diff

1374
po/sl.po Normal file

File diff suppressed because it is too large Load diff

1366
po/sv.po Normal file

File diff suppressed because it is too large Load diff

1328
po/tr.po Normal file

File diff suppressed because it is too large Load diff

View file

@ -6,8 +6,8 @@ touch ./po/unsort-POTFILES.in
find ./data/ui -iname "*.ui" -type f -exec grep -l "translatable" {} + | while read file; do echo "${file#./}" >> ./po/unsort-POTFILES.in; done
find ./data/ui -iname "*.blp" -type f -exec grep -lrE '_\(|C_|ngettext' {} + | while read file; do echo "${file#./}" >> ./po/unsort-POTFILES.in; done
find ./src -iname "*.vala" -type f -exec grep -lrE '_\(|C_|ngettext' {} + | while read file; do echo "${file#./}" >> ./po/unsort-POTFILES.in; done
find ./data/ -iname "*.desktop.in" | while read file; do echo "${file#./}" >> ./po/unsort-POTFILES.in; done
find ./data/ -iname "*.appdata.xml.in" | while read file; do echo "${file#./}" >> ./po/unsort-POTFILES.in; done
find ./data/ -iname "*.desktop.in.in" | while read file; do echo "${file#./}" >> ./po/unsort-POTFILES.in; done
find ./data/ -iname "*.metainfo.xml.in.in" | while read file; do echo "${file#./}" >> ./po/unsort-POTFILES.in; done
cat ./po/unsort-POTFILES.in | sort | uniq > ./po/POTFILES.in

1328
po/zh_CN.po Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,36 +13,35 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette {
public Adw.AboutDialog build_about_dialog () {
const string RIRUSHA = "Rirusha https://github.com/Rirusha";
const string ME = "Vladimir Vaskov https://gitlab.gnome.org/Rirusha";
const string TELEGRAM_CHAT = "https://t.me/CassetteGNOME_Discussion";
const string TELEGRAM_CHANNEL = "https://t.me/CassetteGNOME_Devlog";
const string ISSUE_LINK = "https://github.com/Rirusha/Cassette/issues/new";
const string TINKOFF_SUPPORT_LINK = "https://www.tinkoff.ru/cf/21GCxLuFuE9";
const string BOOSTY_SUPPORT_LINK = "https://boosty.to/rirusha/donate";
string[] developers = {
RIRUSHA,
ME,
"KseBooka https://github.com/KseBooka"
};
string[] designers = {
RIRUSHA
ME
};
string[] artists = {
RIRUSHA,
ME,
"Arseniy Nechkin <krisgeniusnos@gmail.com>",
"NaumovSN",
};
string[] documenters = {
RIRUSHA,
ME,
"Armatik https://github.com/Armatik",
"Fiersik https://github.com/fiersik",
"Mikazil https://github.com/Mikazil",
@ -50,7 +50,7 @@ namespace Cassette {
var about = new Adw.AboutDialog () {
application_name = Config.APP_NAME,
application_icon = Config.APP_ID_DYN,
developer_name = "Rirusha",
developer_name = "Vladimir Vaskov",
version = Config.VERSION,
developers = developers,
designers = designers,
@ -58,10 +58,10 @@ namespace Cassette {
documenters = documenters,
// Translators: NAME <EMAIL.COM> /n NAME <EMAIL.COM>
translator_credits = _("translator-credits"),
license_type = Gtk.License.GPL_3_0_ONLY,
copyright = "© 2023-2024 Rirusha",
license_type = Gtk.License.GPL_3_0,
copyright = "© 2023-2024 Vladimir Vaskov",
support_url = TELEGRAM_CHAT,
issue_url = ISSUE_LINK,
issue_url = Config.BUGTRACKER,
release_notes_version = Config.VERSION
};
@ -69,28 +69,43 @@ namespace Cassette {
about.add_link (_("Financial support (Tinkoff)"), TINKOFF_SUPPORT_LINK);
about.add_link (_("Financial support (Boosty)"), BOOSTY_SUPPORT_LINK);
// Please keep alphabetical
about.add_acknowledgement_section (_("Sponsors"), {
"Alex Gluck",
"Amper Shiz",
"Anton P.",
"AveryanAlex",
"Avr_Iv",
"belovmv",
"dant4ick",
"Dmitry M.",
"Do6pblu_Jyk",
"eugene_t",
"Fiersik",
"Fissium",
"gen1s",
"InDevOne",
"IQQator",
"Ivan A.",
"katze_942",
"khaustovdn",
"krylov_alexandr",
"kvadrozorro",
"Mikazil E.",
"Mikazil",
"Mikhail Postnikov",
"Nikolai M.",
"Oleg Shchavelev",
"Pavel T.",
"Petr Chelpanov",
"Roman Aysin",
"Semen Fomchenkov",
"Sergey G.",
"Sergey P.",
"Sergey S.",
"Shakhrutdin Z.",
"Spp595",
"Tamahome",
"Toxblh",
"Vasily Biryukov",
"werlock",

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
using Cassette.Client;
@ -54,6 +55,7 @@ namespace Cassette {
{ "parse-url", on_parse_url_action },
{ "open-account", on_open_account_action },
{ "open-plus", on_open_plus_action },
{ "get-plus", on_get_plus_action },
{ "mute", on_mute_action },
};
@ -90,14 +92,14 @@ namespace Cassette {
public bool is_devel {
get {
return Config.PROFILE == "Devel";
return Config.IS_DEVEL;
}
}
public Application () {
Object (
application_id: Config.APP_ID_DYN,
resource_base_path: "/io/github/Rirusha/Cassette/",
resource_base_path: "/space/rirusha/Cassette/",
flags: ApplicationFlags.DEFAULT_FLAGS | ApplicationFlags.HANDLES_OPEN
);
}
@ -105,7 +107,7 @@ namespace Cassette {
construct {
application = this;
settings = new Settings ("io.github.Rirusha.Cassette.application");
settings = new Settings ("space.rirusha.Cassette.application");
Cassette.Client.init (is_devel);
@ -437,21 +439,15 @@ namespace Cassette {
}
void on_open_account_action () {
try {
Process.spawn_command_line_async ("xdg-open https://id.yandex.ru/");
} catch (SpawnError e) {
Logger.warning (_("Error while opening uri: %s").printf (e.message));
}
new Gtk.UriLauncher ("https://id.yandex.ru/").launch.begin (null, null);
}
void on_open_plus_action () {
try {
Process.spawn_command_line_async ("xdg-open https://plus.yandex.ru/");
new Gtk.UriLauncher ("https://plus.yandex.ru/").launch.begin (null, null);
}
} catch (SpawnError e) {
Logger.warning (_("Error while opening uri: %s").printf (e.message));
}
void on_get_plus_action () {
new Gtk.UriLauncher ("https://plus.yandex.ru/getplus/").launch.begin (null, null);
}
void on_mute_action () {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
using Gee;

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette.Client.YaMAPI {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
using Gee;

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
using Gee;

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
using Gee;

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette.Client.YaMAPI {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
// DEPROCATED

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
using Gee;

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
using Gee;

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette.Client.YaMAPI {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette.Client.YaMAPI {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette.Client.YaMAPI {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
using Gee;

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
using Gee;

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette.Client.YaMAPI {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette.Client.YaMAPI {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette.Client.YaMAPI {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette.Client.YaMAPI {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Cassette.Client.YaMAPI {

View file

@ -1,8 +1,9 @@
/* Copyright 2023-2024 Rirusha
/* Copyright 2023-2024 Vladimir Vaskov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@ -12,7 +13,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-only
* SPDX-License-Identifier: GPL-3.0-or-later
*/

Some files were not shown because too many files have changed in this diff Show more