-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
31 changed files
with
2,353 additions
and
1,063 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,5 @@ | ||
node_modules | ||
.cache | ||
.parcel-cache | ||
.parcel-cache | ||
skin.json | ||
token.json |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,84 +1,29 @@ | ||
<p align="center"> | ||
<a href="https://desktop.webamp.org/"> | ||
<img src="./res/logo.svg" alt="Webamp on desktop logo" width=384 height=128> | ||
</a> | ||
# Yaamp | ||
|
||
<h3 align="center">Webamp on desktop</h3> | ||
Исходники проекта по интеграции Яндекс.Музыки и *Winamp (Webamp)* | ||
|
||
<p align="center"> | ||
Just like the original, now on your Mac, Windows or a Linux! | ||
</p> | ||
### **Установка** | ||
|
||
<p align="center"> | ||
<a href="https://desktop.webamp.org" title="Downloads"><img src="https://img.shields.io/github/downloads/durasj/webamp-desktop/total.svg" /></a> | ||
<a href="https://travis-ci.org/durasj/webamp-desktop" title="Build"><img src="https://img.shields.io/travis/durasj/webamp-desktop/master.svg" alt="Build badge" /></a> | ||
<a href="https://twitter.com/intent/tweet?text=Wow:&url=https%3A%2F%2Fgithub.com%2Fdurasj%2Fwebamp-desktop" title="Tweet"><img src="https://img.shields.io/twitter/url/https/github.com/durasj/webamp-desktop.svg?style=social" alt="Tweet badge" /></a> | ||
</p> | ||
</p> | ||
1. yarn install | ||
2. В **node_modules/yandex-music-client** перенести папки **"core" и "services"** с заменой. | ||
3. Поправить в package.json - "copy" на тот, на какой системе вы сейчас работаете, на данный момент настроенно на Windows | ||
|
||
<br> | ||
**Добавление функционала и работа с Webamp** | ||
|
||
[![Screenshot of webamp desktop on Windows](./res/screen-win.gif)](https://desktop.webamp.org/) [![Screenshot of Webamp on Linux](./res/screen-linux.png)](https://desktop.webamp.org/) [![Screenshot of Webamp on Mac OS X](./res/screen-mac.png)](https://desktop.webamp.org/) | ||
1. Собираем проект - [https://github.com/umnik1/yaaamp-base](https://github.com/umnik1/yaaamp-base "https://github.com/umnik1/yaaamp-base") | ||
2. Переносим оттуда файл **webamp.bundle.js** в папку **/src/webamp** | ||
|
||
Unofficial app. It has most of the functionality of the original Winamp, but it's still more of a proof of concept. Based on the [Webamp](https://github.com/captbaritone/webamp) - "A reimplementation of Winamp 2.9 in HTML5 and JavaScript." by the [@captbaritone](https://github.com/captbaritone). Linux support via AppImage and .deb package tested on the Ubuntu 18.04. | ||
### **Общая информация** | ||
|
||
## Downloads | ||
Head over to the [desktop.webamp.org](https://desktop.webamp.org/) for the latest download files for your platform. | ||
**Всё взаимодейстиве между electron и webamp происходит через ipc** | ||
|
||
## Ideas for the future | ||
**При сборке под linux и mac удалите или закомментриуйте дискорд интеграцию - DiscordRPC* (rpc var)*** | ||
|
||
### Higher priority | ||
### **Ошибки в коде и помощь с проектом** | ||
|
||
- "Media Keys" support (Play, Pause, Stop, Previous, Next) via [Media Transport Controls](https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/system-media-transport-controls) on Windows, MPRemoteCommandCenter on Mac and [D-BUS on Linux](https://specifications.freedesktop.org/mpris-spec/latest/) - inspiration from [electron-media-service](https://github.com/MarshallOfSound/electron-media-service) | ||
- Implement Taskbar media control buttons | ||
- Milkdrop visualizer | ||
- Persisting state of the player | ||
Я толком не "прибирался" в коде, поэтому он выглядит не очень красиво и стерильно, но со временем я почищу всё. | ||
|
||
### Lower priority | ||
*Проект открыт для любых реквестов, особенно нужна помощь со сборкой под Mac и Linux. | ||
* | ||
|
||
- Support for multiple displays | ||
- Automatic updates (prepared, notifications already done) | ||
- Support file associations | ||
|
||
### Nice to have / Experiments | ||
|
||
- Features that can't be in the web version (by extending the API) | ||
- Try to integrate Spotify (inspiration from [winampify-js](https://github.com/remigallego/winampify-js)?), milkdrop can be integrated using microphone (?) due to problems with the DRM | ||
|
||
## Known issues | ||
|
||
### Installation files are not trusted | ||
|
||
Some operating systems, especially Windows or some browsers do not trust the installation files because they are not digitally signed and/or commonly used yet. Unfortunately, code signing certificates that would help us overcome this cost hundreds of euro per year. This project does not have any funding and therefore can't afford it. It's recommended to verify the checksum of the files if you are worried. Every commit (and therefore published checksum) is signed in this repository. | ||
|
||
### Poor performance on Linux | ||
|
||
Caused by the disabled hardware acceleration on the Linux. The reason is [issues with the transparency on the Chromium project](https://bugs.chromium.org/p/chromium/issues/detail?id=854601#c7). | ||
|
||
## Developing | ||
|
||
### Prerequisites | ||
|
||
Make sure you have latest [node.js](https://nodejs.org/en/) and [yarn](https://yarnpkg.com/lang/en/). | ||
|
||
### Installing | ||
|
||
Clone this repository, install dependencies and run the start script: | ||
|
||
``` | ||
git clone https://github.com/durasj/webamp-desktop.git | ||
cd webamp-desktop | ||
yarn install | ||
yarn start | ||
``` | ||
|
||
After the build has completed, you should see one window with the app and one with developer tools. To try some changes, you can: change the code in the `./src` dir, close the current window and run the `yarn start` again. | ||
|
||
## Kudos | ||
|
||
This project is possible thanks to the [Webamp](https://github.com/captbaritone/webamp) from [@captbaritone](https://github.com/captbaritone) and wonderful open source work of others like [@jberg](https://github.com/jberg) and authors of [many dependencies](https://github.com/durasj/webamp-desktop/blob/master/package.json). | ||
|
||
Thumbar icons on Windows by [Smashicons](https://smashicons.com). | ||
|
||
## Disclaimer | ||
Not affiliated with the [Winamp](http://www.winamp.com/). All product names, logos, and brands are property of their respective owners. | ||
http://yaamp.ru/ |
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
import type { ApiRequestOptions } from './ApiRequestOptions'; | ||
import type { ApiResult } from './ApiResult'; | ||
export declare class ApiError extends Error { | ||
readonly url: string; | ||
readonly status: number; | ||
readonly statusText: string; | ||
readonly body: any; | ||
readonly request: ApiRequestOptions; | ||
constructor(request: ApiRequestOptions, response: ApiResult, message: string); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
"use strict"; | ||
var __extends = (this && this.__extends) || (function () { | ||
var extendStatics = function (d, b) { | ||
extendStatics = Object.setPrototypeOf || | ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; | ||
return extendStatics(d, b); | ||
}; | ||
return function (d, b) { | ||
if (typeof b !== "function" && b !== null) | ||
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); | ||
extendStatics(d, b); | ||
function __() { this.constructor = d; } | ||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
}; | ||
})(); | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ApiError = void 0; | ||
var ApiError = /** @class */ (function (_super) { | ||
__extends(ApiError, _super); | ||
function ApiError(request, response, message) { | ||
var _this = _super.call(this, message) || this; | ||
_this.name = 'ApiError'; | ||
_this.url = response.url; | ||
_this.status = response.status; | ||
_this.statusText = response.statusText; | ||
_this.body = response.body; | ||
_this.request = request; | ||
return _this; | ||
} | ||
return ApiError; | ||
}(Error)); | ||
exports.ApiError = ApiError; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
export type ApiRequestOptions = { | ||
readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'OPTIONS' | 'HEAD' | 'PATCH'; | ||
readonly url: string; | ||
readonly path?: Record<string, any>; | ||
readonly cookies?: Record<string, any>; | ||
readonly headers?: Record<string, any>; | ||
readonly query?: Record<string, any>; | ||
readonly formData?: Record<string, any>; | ||
readonly body?: any; | ||
readonly mediaType?: string; | ||
readonly responseHeader?: string; | ||
readonly errors?: Record<number, string>; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
export type ApiResult = { | ||
readonly url: string; | ||
readonly ok: boolean; | ||
readonly status: number; | ||
readonly statusText: string; | ||
readonly body: any; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
import type { ApiRequestOptions } from './ApiRequestOptions'; | ||
import { BaseHttpRequest } from './BaseHttpRequest'; | ||
import type { CancelablePromise } from './CancelablePromise'; | ||
import type { OpenAPIConfig } from './OpenAPI'; | ||
export declare class AxiosHttpRequest extends BaseHttpRequest { | ||
constructor(config: OpenAPIConfig); | ||
/** | ||
* Request method | ||
* @param options The request options from the service | ||
* @returns CancelablePromise<T> | ||
* @throws ApiError | ||
*/ | ||
request<T>(options: ApiRequestOptions): CancelablePromise<T>; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
"use strict"; | ||
var __extends = (this && this.__extends) || (function () { | ||
var extendStatics = function (d, b) { | ||
extendStatics = Object.setPrototypeOf || | ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; | ||
return extendStatics(d, b); | ||
}; | ||
return function (d, b) { | ||
if (typeof b !== "function" && b !== null) | ||
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); | ||
extendStatics(d, b); | ||
function __() { this.constructor = d; } | ||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
}; | ||
})(); | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.AxiosHttpRequest = void 0; | ||
var BaseHttpRequest_1 = require("./BaseHttpRequest"); | ||
var request_1 = require("./request"); | ||
var AxiosHttpRequest = /** @class */ (function (_super) { | ||
__extends(AxiosHttpRequest, _super); | ||
function AxiosHttpRequest(config) { | ||
return _super.call(this, config) || this; | ||
} | ||
/** | ||
* Request method | ||
* @param options The request options from the service | ||
* @returns CancelablePromise<T> | ||
* @throws ApiError | ||
*/ | ||
AxiosHttpRequest.prototype.request = function (options) { | ||
return (0, request_1.request)(this.config, options); | ||
}; | ||
return AxiosHttpRequest; | ||
}(BaseHttpRequest_1.BaseHttpRequest)); | ||
exports.AxiosHttpRequest = AxiosHttpRequest; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import type { ApiRequestOptions } from './ApiRequestOptions'; | ||
import type { CancelablePromise } from './CancelablePromise'; | ||
import type { OpenAPIConfig } from './OpenAPI'; | ||
export declare abstract class BaseHttpRequest { | ||
readonly config: OpenAPIConfig; | ||
constructor(config: OpenAPIConfig); | ||
abstract request<T>(options: ApiRequestOptions): CancelablePromise<T>; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.BaseHttpRequest = void 0; | ||
var BaseHttpRequest = /** @class */ (function () { | ||
function BaseHttpRequest(config) { | ||
this.config = config; | ||
} | ||
return BaseHttpRequest; | ||
}()); | ||
exports.BaseHttpRequest = BaseHttpRequest; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
export declare class CancelError extends Error { | ||
constructor(message: string); | ||
get isCancelled(): boolean; | ||
} | ||
export interface OnCancel { | ||
readonly isResolved: boolean; | ||
readonly isRejected: boolean; | ||
readonly isCancelled: boolean; | ||
(cancelHandler: () => void): void; | ||
} | ||
export declare class CancelablePromise<T> implements Promise<T> { | ||
readonly [Symbol.toStringTag]: string; | ||
private _isResolved; | ||
private _isRejected; | ||
private _isCancelled; | ||
private readonly _cancelHandlers; | ||
private readonly _promise; | ||
private _resolve?; | ||
private _reject?; | ||
constructor(executor: (resolve: (value: T | PromiseLike<T>) => void, reject: (reason?: any) => void, onCancel: OnCancel) => void); | ||
then<TResult1 = T, TResult2 = never>(onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>; | ||
catch<TResult = never>(onRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null): Promise<T | TResult>; | ||
finally(onFinally?: (() => void) | null): Promise<T>; | ||
cancel(): void; | ||
get isCancelled(): boolean; | ||
} |
Oops, something went wrong.