Merge remote-tracking branch 'origin/main'

# Conflicts:
#	docs/index.md
This commit is contained in:
kokarare1212 2021-05-18 16:13:14 +09:00
commit 5768f49f4a
5 changed files with 78 additions and 29 deletions

21
SECURITY.md Normal file
View File

@ -0,0 +1,21 @@
# Security Policy
## Supported Versions
Use this section to tell people about which versions of your project are
currently being supported with security updates.
| Version | Supported |
| ------- | ------------------ |
| 5.1.x | :white_check_mark: |
| 5.0.x | :x: |
| 4.0.x | :white_check_mark: |
| < 4.0 | :x: |
## Reporting a Vulnerability
Use this section to tell people how to report a vulnerability.
Tell them where to go, how often they can expect to get an update on a
reported vulnerability, what to expect if the vulnerability is accepted or
declined, etc.

View File

@ -2,27 +2,32 @@
![](https://img.shields.io/github/stars/kokarare1212/librespot-python.svg) ![](https://img.shields.io/github/stars/kokarare1212/librespot-python.svg)
![](https://img.shields.io/github/forks/kokarare1212/librespot-python.svg) ![](https://img.shields.io/github/forks/kokarare1212/librespot-python.svg)
[![](https://deepsource.io/gh/kokarare1212/librespot-python.svg/?label=active+issues&show_trend=true)](https://deepsource.io/gh/kokarare1212/librespot-python/?ref=repository-badge) [![](https://deepsource.io/gh/kokarare1212/librespot-python.svg/?label=active+issues&show_trend=true)](https://deepsource.io/gh/kokarare1212/librespot-python/?ref=repository-badge)
# Get Started # Get Started
## Contents ## Contents
* [Get Started](index.md)
* [Supported Futures](supported.md) * [Supported Futures](supported.md)
* [API Reference](api.md) * [API Reference](api.md)
## What's librespot-python? ## What's librespot-python?
librespot-python is a python port of Spotify's open source client library [librespot](https://github.com/librespot-org/librespot). librespot-python is a python port of Spotify's open source client library [librespot](https://github.com/librespot-org/librespot).
It was created to play Spotify on various platforms and devices. It was created to play Spotify on various platforms and devices.
## What do you need? ## What do you need?
In order to develop with this library, you need to use Python. In order to develop with this library, you need to use Python.
Python can be downloaded from [the official website here](https://python.org/). Python can be downloaded from [the official website here](https://python.org/).
## Disclaimer ## Disclaimer
Please keep in mind that this library is not like Spotify approved. Please keep in mind that this library is not like Spotify approved.
Therefore, the worst that can happen is that you will be banned from Spotify. Therefore, the worst that can happen is that you will be banned from Spotify.
Also, please keep in mind that this library is in alpha and may behave in unintended ways. Also, please keep in mind that this library is in alpha and may behave in unintended ways.

View File

@ -1,8 +1,15 @@
## Supported Futures ## Supported Futures
| Futures | Supported |
| Futures | Supported |
| --- | --- | | --- | --- |
| Get Metadata | | | Get Metadata | |
| Play Music | △*1 | | Play Music | △*1 |
| Spotify Connect | ×*2 | | Spotify Connect | ×*2 |
*1 It is currently possible to retrieve the music stream, but it requires separate software for decoding.
*1 It is currently possible to retrieve the music stream, but it requires separate software for decoding.
*2 This feature will be added in the future. *2 This feature will be added in the future.

View File

@ -1,13 +1,16 @@
from __future__ import annotations from __future__ import annotations
from librespot.common import Utils
from librespot.core import Session
from librespot.crypto import DiffieHellman
from librespot.standard import Closeable, Runnable
from librespot.proto import Connect
import concurrent.futures import concurrent.futures
import random import random
import socket import socket
from librespot.common import Utils
from librespot.core import Session
from librespot.crypto import DiffieHellman
from librespot.proto import Connect
from librespot.standard import Closeable
from librespot.standard import Runnable
class ZeroconfServer(Closeable): class ZeroconfServer(Closeable):
__MAX_PORT = 65536 __MAX_PORT = 65536
@ -16,7 +19,8 @@ class ZeroconfServer(Closeable):
__keys: DiffieHellman __keys: DiffieHellman
__inner: ZeroconfServer.Inner __inner: ZeroconfServer.Inner
def __init__(self, inner: ZeroconfServer.Inner, listen_port: int, listen_all: bool): def __init__(self, inner: ZeroconfServer.Inner, listen_port: int,
listen_all: bool):
self.__inner = inner self.__inner = inner
self.__keys = DiffieHellman() self.__keys = DiffieHellman()
@ -39,7 +43,17 @@ class ZeroconfServer(Closeable):
return self return self
def create(self) -> ZeroconfServer: def create(self) -> ZeroconfServer:
return ZeroconfServer(ZeroconfServer.Inner(self.device_type, self.device_name, self.preferred_locale, self.conf, self.device_id), self.__listenPort, self.__listenAll) return ZeroconfServer(
ZeroconfServer.Inner(
self.device_type,
self.device_name,
self.preferred_locale,
self.conf,
self.device_id,
),
self.__listenPort,
self.__listenAll,
)
class Inner: class Inner:
device_type: Connect.DeviceType = None device_type: Connect.DeviceType = None
@ -48,22 +62,25 @@ class ZeroconfServer(Closeable):
preferred_locale: str = None preferred_locale: str = None
conf = None conf = None
def __init__(self, def __init__(
device_type: Connect.DeviceType, self,
device_name: str, device_type: Connect.DeviceType,
preferred_locale: str, device_name: str,
conf: Session.Configuration, preferred_locale: str,
device_id: str = None): conf: Session.Configuration,
device_id: str = None,
):
self.preferred_locale = preferred_locale self.preferred_locale = preferred_locale
self.conf = conf self.conf = conf
self.device_type = device_type self.device_type = device_type
self.device_name = device_name self.device_name = device_name
self.device_id = device_id if device_id is not None else Utils.random_hex_string( self.device_id = (device_id if device_id is not None else
40) Utils.random_hex_string(40))
class HttpRunner(Runnable, Closeable): class HttpRunner(Runnable, Closeable):
__sock: socket __sock: socket
__executorService: concurrent.futures.ThreadPoolExecutor = concurrent.futures.ThreadPoolExecutor() __executorService: concurrent.futures.ThreadPoolExecutor = (
concurrent.futures.ThreadPoolExecutor())
__shouldStop: bool = False __shouldStop: bool = False
def __init__(self, port: int): def __init__(self, port: int):
@ -86,4 +103,3 @@ class ZeroconfServer(Closeable):
def close(self) -> None: def close(self) -> None:
super().close() super().close()

View File

@ -1,8 +1,10 @@
from __future__ import annotations from __future__ import annotations
import re
from librespot.common import Base62 from librespot.common import Base62
from librespot.common import Utils from librespot.common import Utils
from librespot.proto.ContextTrack import ContextTrack from librespot.proto.ContextTrack import ContextTrack
import re
class SpotifyId: class SpotifyId:
@ -47,9 +49,9 @@ class PlayableId:
@staticmethod @staticmethod
def is_supported(uri: str): def is_supported(uri: str):
return not uri.startswith("spotify:local:") and \ return (not uri.startswith("spotify:local:")
not uri == "spotify:delimiter" and \ and not uri == "spotify:delimiter"
not uri == "spotify:meta:delimiter" and not uri == "spotify:meta:delimiter")
@staticmethod @staticmethod
def should_play(track: ContextTrack): def should_play(track: ContextTrack):
@ -260,5 +262,3 @@ class TrackId(PlayableId, SpotifyId):
def get_gid(self) -> bytes: def get_gid(self) -> bytes:
return Utils.hex_to_bytes(self._hexId) return Utils.hex_to_bytes(self._hexId)