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/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)
# Get Started
## Contents
* [Get Started](index.md)
* [Supported Futures](supported.md)
* [API Reference](api.md)
## 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.
## 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/).
## 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.

View File

@ -1,8 +1,15 @@
## Supported Futures
| Futures | Supported |
| Futures | Supported |
| --- | --- |
| Get Metadata | |
| Play Music | △*1 |
| 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.

View File

@ -1,13 +1,16 @@
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 random
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):
__MAX_PORT = 65536
@ -16,7 +19,8 @@ class ZeroconfServer(Closeable):
__keys: DiffieHellman
__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.__keys = DiffieHellman()
@ -39,7 +43,17 @@ class ZeroconfServer(Closeable):
return self
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:
device_type: Connect.DeviceType = None
@ -48,22 +62,25 @@ class ZeroconfServer(Closeable):
preferred_locale: str = None
conf = None
def __init__(self,
device_type: Connect.DeviceType,
device_name: str,
preferred_locale: str,
conf: Session.Configuration,
device_id: str = None):
def __init__(
self,
device_type: Connect.DeviceType,
device_name: str,
preferred_locale: str,
conf: Session.Configuration,
device_id: str = None,
):
self.preferred_locale = preferred_locale
self.conf = conf
self.device_type = device_type
self.device_name = device_name
self.device_id = device_id if device_id is not None else Utils.random_hex_string(
40)
self.device_id = (device_id if device_id is not None else
Utils.random_hex_string(40))
class HttpRunner(Runnable, Closeable):
__sock: socket
__executorService: concurrent.futures.ThreadPoolExecutor = concurrent.futures.ThreadPoolExecutor()
__executorService: concurrent.futures.ThreadPoolExecutor = (
concurrent.futures.ThreadPoolExecutor())
__shouldStop: bool = False
def __init__(self, port: int):
@ -86,4 +103,3 @@ class ZeroconfServer(Closeable):
def close(self) -> None:
super().close()

View File

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