1.1.12
This commit is contained in:
parent
5c40db1242
commit
87eb351e80
|
@ -0,0 +1,674 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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, 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
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
File diff suppressed because it is too large
Load Diff
|
@ -10,28 +10,28 @@
|
|||
"watch": "vue-cli-service build --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@mdi/font": "^5.8.55",
|
||||
"@mdi/font": "^5.9.55",
|
||||
"axios": "^0.19.2",
|
||||
"roboto-fontface": "*",
|
||||
"vue": "^2.6.12",
|
||||
"vue-esc": "^3.0.1",
|
||||
"vue-i18n": "^8.17.3",
|
||||
"vue-i18n": "^8.22.4",
|
||||
"vue-router": "^3.4.9",
|
||||
"vue-socket.io": "^3.0.10",
|
||||
"vuedraggable": "^2.24.3",
|
||||
"vuetify": "^2.3.16"
|
||||
"vuetify": "^2.4.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@intlify/vue-i18n-loader": "^1.0.0",
|
||||
"@vue/cli-plugin-eslint": "^4.5.8",
|
||||
"@vue/cli-plugin-router": "^4.5.8",
|
||||
"@vue/cli-service": "^4.5.8",
|
||||
"@vue/cli-plugin-eslint": "^4.5.10",
|
||||
"@vue/cli-plugin-router": "^4.5.10",
|
||||
"@vue/cli-service": "^4.5.10",
|
||||
"eslint": "^6.7.2",
|
||||
"eslint-plugin-vue": "^6.2.2",
|
||||
"sass": "^1.29.0",
|
||||
"sass": "^1.32.5",
|
||||
"sass-loader": "^8.0.0",
|
||||
"vue-cli-plugin-i18n": "~1.0.1",
|
||||
"vue-cli-plugin-vuetify": "~2.0.7",
|
||||
"vue-cli-plugin-vuetify": "^2.0.9",
|
||||
"vue-template-compiler": "^2.6.12",
|
||||
"vuetify-loader": "^1.3.0"
|
||||
},
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
</style>
|
||||
|
||||
<!-- Disable reloading using CTRL+R -->
|
||||
<script>
|
||||
<!-- <script>
|
||||
document.onkeydown = (e) => {
|
||||
let keycode = e.which;
|
||||
if (window.event) keycode = window.event.keyCode;
|
||||
|
@ -36,4 +36,4 @@ document.onkeydown = (e) => {
|
|||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
</script> -->
|
|
@ -0,0 +1,67 @@
|
|||
<template>
|
||||
<v-list dense>
|
||||
<!-- Play album -->
|
||||
<v-list-item dense @click='$emit("play")'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-play</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Play")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<!-- Add to queue -->
|
||||
<v-list-item dense @click='$emit("addQueue")'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-playlist-plus</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Add to queue")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<!-- Add to library -->
|
||||
<v-list-item dense @click='$emit("library")' v-if='!album.library'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-heart</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Add to library")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<!-- Remove from library -->
|
||||
<v-list-item dense @click='$emit("library")' v-if='album.library'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-heart-remove</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Remove from library")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<!-- Share -->
|
||||
<v-list-item dense @click='$emit("share")'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-share-variant</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Share")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<!-- Download -->
|
||||
<v-list-item dense @click='$emit("download")'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-download</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Download")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
</v-list>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'AlbumContext',
|
||||
props: {
|
||||
album: Object,
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -19,68 +19,28 @@
|
|||
<v-list-item-subtitle>{{album.artistString}}</v-list-item-subtitle>
|
||||
</v-list-item-content>
|
||||
<v-list-item-action>
|
||||
<!-- Context menu -->
|
||||
<v-menu v-model='menu' offset-y offset-x absolue>
|
||||
<!-- Context -->
|
||||
<v-menu offset-y offset-x absolue>
|
||||
<template v-slot:activator="{on, attrs}">
|
||||
<v-btn v-on='on' v-bind='attrs' icon>
|
||||
<v-icon>mdi-dots-vertical</v-icon>
|
||||
</v-btn>
|
||||
</template>
|
||||
<v-list dense>
|
||||
<!-- Play album -->
|
||||
<v-list-item dense @click='play'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-play</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Play")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<!-- Add to library -->
|
||||
<v-list-item dense @click='library' v-if='!album.library'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-heart</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Add to library")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<!-- Remove from library -->
|
||||
<v-list-item dense @click='library' v-if='album.library'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-heart-remove</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Remove from library")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<!-- Share -->
|
||||
<v-list-item dense @click='share'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-share-variant</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Share")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<!-- Download -->
|
||||
<v-list-item dense @click='download'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-download</v-icon>
|
||||
</v-list-item-icon>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Download")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
|
||||
</v-list>
|
||||
<AlbumContext
|
||||
:album='album'
|
||||
@play='play'
|
||||
@download='download'
|
||||
@addQueue='addQueue'
|
||||
@share='share'
|
||||
@library='library'
|
||||
></AlbumContext>
|
||||
</v-menu>
|
||||
|
||||
</v-list-item-action>
|
||||
</v-list-item>
|
||||
|
||||
<!-- Card version -->
|
||||
<v-card v-if='card' max-width='175px' max-height='230px' @click='click' color='transparent' elevation='0'>
|
||||
<v-card v-if='card' max-width='175px' max-height='230px' @click='click' color='transparent' elevation='0' @contextmenu="showMenu">
|
||||
<v-hover v-slot:default='{hover}'>
|
||||
<div>
|
||||
|
||||
|
@ -96,6 +56,26 @@
|
|||
</div>
|
||||
</v-hover>
|
||||
|
||||
<!-- Context -->
|
||||
<v-menu
|
||||
v-model='menu'
|
||||
:position-x='menuX'
|
||||
:position-y='menuY'
|
||||
absolute
|
||||
offset-y
|
||||
close-on-click>
|
||||
|
||||
<AlbumContext
|
||||
:album='album'
|
||||
@play='play'
|
||||
@download='download'
|
||||
@addQueue='addQueue'
|
||||
@share='share'
|
||||
@library='library'
|
||||
></AlbumContext>
|
||||
</v-menu>
|
||||
|
||||
|
||||
<div class='px-2 pt-2 pb-1 text-subtitle-2 text-center text-truncate'>{{album.title}}</div>
|
||||
<div class='pb-1 px-2 text-caption text-center text-truncate'>{{album.artistString}}</div>
|
||||
|
||||
|
@ -108,15 +88,18 @@
|
|||
|
||||
<script>
|
||||
import DownloadDialog from '@/components/DownloadDialog.vue';
|
||||
import AlbumContext from '@/components/AlbumContext.vue';
|
||||
|
||||
export default {
|
||||
name: 'AlbumTile',
|
||||
components: {DownloadDialog},
|
||||
components: {DownloadDialog, AlbumContext},
|
||||
data() {
|
||||
return {
|
||||
menu: false,
|
||||
hover: false,
|
||||
downloadDialog: false
|
||||
downloadDialog: false,
|
||||
menuX: 0,
|
||||
menuY: 0,
|
||||
}
|
||||
},
|
||||
props: {
|
||||
|
@ -127,6 +110,15 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
showMenu(e) {
|
||||
e.preventDefault();
|
||||
this.menu = false;
|
||||
this.menuX = e.clientX;
|
||||
this.menuY = e.clientY;
|
||||
this.$nextTick(() => {
|
||||
this.menu = true;
|
||||
});
|
||||
},
|
||||
async play() {
|
||||
let album = this.album;
|
||||
//Load album from API if tracks are missing
|
||||
|
@ -145,6 +137,18 @@ export default {
|
|||
this.$root.replaceQueue(album.tracks);
|
||||
this.$root.playIndex(0);
|
||||
},
|
||||
//Add to queue
|
||||
async addQueue() {
|
||||
let album = this.album;
|
||||
//Load album from API if tracks are missing
|
||||
if (album.tracks.length == 0) {
|
||||
let data = await this.$axios.get(`/album/${album.id}`)
|
||||
album = data.data;
|
||||
}
|
||||
if (!album) return;
|
||||
|
||||
this.$root.queue.data = this.$root.queue.data.concat(album.tracks);
|
||||
},
|
||||
//On click navigate to details
|
||||
click() {
|
||||
this.$router.push({
|
||||
|
@ -188,7 +192,7 @@ export default {
|
|||
document.body.removeChild(copyElem);
|
||||
this.$root.globalSnackbar = this.$t('Link copied!');
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div v-scroll.self='scroll'>
|
||||
<div>
|
||||
<div class='px-4 pt-2 d-flex' style='max-height: 50px;'>
|
||||
<div class='text-overline px-2 pt-1'>
|
||||
{{count}} {{$t("TRACKS")}}
|
||||
|
@ -24,7 +24,7 @@
|
|||
></v-text-field>
|
||||
</div>
|
||||
|
||||
<v-list :height='height' class='overflow-y-auto'>
|
||||
<v-list :height='height' class='overflow-y-auto' v-scroll.self='scroll' >
|
||||
<v-lazy
|
||||
v-for='(track, index) in filtered'
|
||||
:key='index + "t" + track.id'
|
||||
|
@ -69,7 +69,8 @@ export default {
|
|||
},
|
||||
methods: {
|
||||
scroll(event) {
|
||||
let loadOffset = event.target.scrollHeight - event.target.offsetHeight - 100;
|
||||
console.log(event);
|
||||
let loadOffset = event.target.scrollHeight - event.target.offsetHeight - 150;
|
||||
if (event.target.scrollTop > loadOffset) {
|
||||
if (!this.loading) this.load();
|
||||
}
|
||||
|
|
|
@ -8,6 +8,9 @@ Vue.use(Vuetify);
|
|||
|
||||
export default new Vuetify({
|
||||
theme: {
|
||||
dark: true
|
||||
dark: true,
|
||||
options: {
|
||||
customProperties: true
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -0,0 +1,141 @@
|
|||
{
|
||||
"Home": "Home",
|
||||
"Browse": "Browse",
|
||||
"Library": "Library",
|
||||
"Tracks": "Tracks",
|
||||
"Playlists": "Playlists",
|
||||
"Albums": "Albums",
|
||||
"Artists": "Artists",
|
||||
"More": "More",
|
||||
"Settings": "Settings",
|
||||
"Downloads": "Downloads",
|
||||
"Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.",
|
||||
"Play": "Play",
|
||||
"Add to library": "Add to library",
|
||||
"Download": "Download",
|
||||
"fans": "fans",
|
||||
"tracks": "tracks",
|
||||
"Quality": "Quality",
|
||||
"Estimated size:": "Estimated size:",
|
||||
"Start downloading": "Start downloading",
|
||||
"Cancel": "Cancel",
|
||||
"Stream logging is disabled!": "Stream logging is disabled!",
|
||||
"Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.",
|
||||
"History": "History",
|
||||
"Create new playlist": "Create new playlist",
|
||||
"TRACKS": "TRACKS",
|
||||
"Sort by": "Sort by",
|
||||
"Date Added": "Date Added",
|
||||
"Name (A-Z)": "Name (A-Z)",
|
||||
"Artist (A-Z)": "Artist (A-Z)",
|
||||
"Album (A-Z)": "Album (A-Z)",
|
||||
"Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!",
|
||||
"Create playlist": "Create playlist",
|
||||
"Create": "Create",
|
||||
"Add to playlist": "Add to playlist",
|
||||
"Create new": "Create new",
|
||||
"Remove": "Remove",
|
||||
"Play next": "Play next",
|
||||
"Add to queue": "Add to queue",
|
||||
"Remove from library": "Remove from library",
|
||||
"Remove from playlist": "Remove from playlist",
|
||||
"Play track mix": "Play track mix",
|
||||
"Go to": "Go to",
|
||||
"Track Mix": "Track Mix",
|
||||
"Duration": "Duration",
|
||||
"Released": "Released",
|
||||
"Disk": "Disk",
|
||||
"albums": "albums",
|
||||
"Play top": "Play top",
|
||||
"Radio": "Radio",
|
||||
"Show all albums": "Show all albums",
|
||||
"Show all singles": "Show all singles",
|
||||
"Show more": "Show more",
|
||||
"Downloaded": "Downloaded",
|
||||
"Queue": "Queue",
|
||||
"Total": "Total",
|
||||
"Stop": "Stop",
|
||||
"Start": "Start",
|
||||
"Show folder": "Show folder",
|
||||
"Clear queue": "Clear queue",
|
||||
"Playing from": "Playing from",
|
||||
"Info": "Info",
|
||||
"Lyrics": "Lyrics",
|
||||
"Track number": "Track number",
|
||||
"Disk number": "Disk number",
|
||||
"Explicit": "Explicit",
|
||||
"Source": "Source",
|
||||
"ID": "ID",
|
||||
"Error logging in!": "Error logging in!",
|
||||
"Please try again later, or try another account.": "Please try again later, or try another account.",
|
||||
"Logout": "Logout",
|
||||
"Login using browser": "Login using browser",
|
||||
"Please login using your Deezer account:": "Please login using your Deezer account:",
|
||||
"...or paste your ARL/Token below:": "...or paste your ARL/Token below:",
|
||||
"ARL/Token": "ARL/Token",
|
||||
"Login": "Login",
|
||||
"By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.",
|
||||
"Only in Electron version!": "Only in Electron version!",
|
||||
"Search results for:": "Search results for:",
|
||||
"Error loading data!": "Error loading data!",
|
||||
"Try again later!": "Try again later!",
|
||||
"Search": "Search",
|
||||
"Streaming Quality": "Streaming Quality",
|
||||
"Download Quality": "Download Quality",
|
||||
"Downloads Directory": "Downloads Directory",
|
||||
"Simultaneous downloads": "Simultaneous downloads",
|
||||
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.",
|
||||
"Show download dialog": "Show download dialog",
|
||||
"Create folders for artists": "Create folders for artists",
|
||||
"Create folders for albums": "Create folders for albums",
|
||||
"Download lyrics": "Download lyrics",
|
||||
"Variables": "Variables",
|
||||
"UI": "UI",
|
||||
"Show autocomplete in search": "Show autocomplete in search",
|
||||
"Integrations": "Integrations",
|
||||
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.",
|
||||
"Log track listens to Deezer": "Log track listens to Deezer",
|
||||
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.",
|
||||
"Login with LastFM": "Login with LastFM",
|
||||
"Disconnect LastFM": "Disconnect LastFM",
|
||||
"Requires restart to apply!": "Requires restart to apply!",
|
||||
"Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!",
|
||||
"Discord Rich Presence": "Discord Rich Presence",
|
||||
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!",
|
||||
"Discord Join Button": "Discord Join Button",
|
||||
"Other": "Other",
|
||||
"Minimize to tray": "Minimize to tray",
|
||||
"Don't minimize to tray": "Don't minimize to tray",
|
||||
"Close on exit": "Close on exit",
|
||||
"Settings saved!": "Settings saved!",
|
||||
"Available only in Electron version!": "Available only in Electron version!",
|
||||
"Crossfade (ms)": "Crossfade (ms)",
|
||||
"Select primary color": "Select primary color",
|
||||
"Light theme": "Light theme",
|
||||
"Create folders for playlists": "Create folders for playlists",
|
||||
"About": "About",
|
||||
"Links:": "Links:",
|
||||
"Telegram Releases": "Telegram Releases",
|
||||
"Telegram Group": "Telegram Group",
|
||||
"Discord": "Discord",
|
||||
"Telegram Android Group": "Telegram Android Group",
|
||||
"Credits:": "Credits:",
|
||||
"Agree": "Agree",
|
||||
"Dismiss": "Dismiss",
|
||||
"Added to playlist!": "Added to playlist!",
|
||||
"Added to library!": "Added to library!",
|
||||
"Removed from library!": "Removed from library!",
|
||||
"Removed from playlist!": "Removed from playlist!",
|
||||
"Playlist deleted!": "Playlist deleted!",
|
||||
"Delete": "Delete",
|
||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||
"Force white tray icon": "Force white tray icon",
|
||||
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||
"Share": "Share",
|
||||
"Settings quality": "Settings quality",
|
||||
"Content language": "Content language",
|
||||
"Content country": "Content country",
|
||||
"Website": "Website",
|
||||
"Visit website": "Visit website",
|
||||
"New update available:": "New update available:"
|
||||
}
|
|
@ -36,7 +36,7 @@
|
|||
"Create new": "Neu erstellen",
|
||||
"Remove": "Entfernen",
|
||||
"Play next": "Als Nächstes abspielen",
|
||||
"Add to queue": "Zur Warteschleife hinzufügen",
|
||||
"Add to queue": "In die Wiedergabeliste",
|
||||
"Remove from library": "Aus der Mediathek entfernen",
|
||||
"Remove from playlist": "Aus Playlist entfernen",
|
||||
"Play track mix": "Songmix abspielen",
|
||||
|
@ -52,7 +52,7 @@
|
|||
"Show all singles": "Zeige alle Singles",
|
||||
"Show more": "Mehr anzeigen",
|
||||
"Downloaded": "Heruntergeladen",
|
||||
"Queue": "Warteschleife",
|
||||
"Queue": "Wiedergabeliste",
|
||||
"Total": "Gesamt",
|
||||
"Stop": "Stop",
|
||||
"Start": "Start",
|
||||
|
@ -115,7 +115,7 @@
|
|||
"Create folders for playlists": "Ordner für Playlists erstellen",
|
||||
"About": "Über",
|
||||
"Links:": "Links:",
|
||||
"Telegram Releases": "Telegram-Releases",
|
||||
"Telegram Releases": "Telegram Veröffentlichungen",
|
||||
"Telegram Group": "Telegram Gruppe",
|
||||
"Discord": "Discord",
|
||||
"Telegram Android Group": "Telegram Android-Gruppe",
|
||||
|
|
|
@ -137,5 +137,8 @@
|
|||
"Content country": "Content country",
|
||||
"Website": "Website",
|
||||
"Visit website": "Visit website",
|
||||
"New update available:": "New update available:"
|
||||
"New update available:": "New update available:",
|
||||
"Shuffle": "Shuffle",
|
||||
"Download album cover": "Download album cover",
|
||||
"Art Resolution": "Art Resolution"
|
||||
}
|
|
@ -11,7 +11,7 @@
|
|||
"Downloads": "Descargas",
|
||||
"Search or paste Deezer URL. Use / to quickly focus.": "Busca o pega la URL de Deezer. Usa \"/\" para empezar a buscar.",
|
||||
"Play": "Reproducir",
|
||||
"Add to library": "Añadir a la biblioteca",
|
||||
"Add to library": "Agregar a la biblioteca",
|
||||
"Download": "Descargar",
|
||||
"fans": "seguidores",
|
||||
"tracks": "canciones",
|
||||
|
@ -36,9 +36,9 @@
|
|||
"Create new": "Crear nuevo",
|
||||
"Remove": "Quitar",
|
||||
"Play next": "Reproducir siguiente",
|
||||
"Add to queue": "Añadir a la cola de reproducción",
|
||||
"Remove from library": "Eliminar de la biblioteca",
|
||||
"Remove from playlist": "Quitar de la lista de reproducción",
|
||||
"Add to queue": "Agregar a la cola de reproducción",
|
||||
"Remove from library": "Remover de la biblioteca",
|
||||
"Remove from playlist": "Remover de la lista de reproducción",
|
||||
"Play track mix": "Reproducir mezcla de canciones",
|
||||
"Go to": "Ir a",
|
||||
"Track Mix": "Mezcla de canciones",
|
||||
|
@ -83,7 +83,7 @@
|
|||
"Streaming Quality": "Calidad de reproducción",
|
||||
"Download Quality": "Calidad de descarga",
|
||||
"Downloads Directory": "Carpeta de descargas",
|
||||
"Simultaneous downloads": "Descargas simultaneas máximas",
|
||||
"Simultaneous downloads": "Descargas simultáneas",
|
||||
"Always show download confirm dialog before downloading.": "Mostrar siempre una confirmación de descarga antes de descargar.",
|
||||
"Show download dialog": "Mostrar diálogo de descargas",
|
||||
"Create folders for artists": "Crear carpetas por artistas",
|
||||
|
|
|
@ -121,7 +121,7 @@
|
|||
"Telegram Android Group": "Gruppo Telegram per Android",
|
||||
"Credits:": "Crediti:",
|
||||
"Agree": "Accetta",
|
||||
"Dismiss": "Rifiuta",
|
||||
"Dismiss": "Chiudi",
|
||||
"Added to playlist!": "Aggiunto alla playlist!",
|
||||
"Added to library!": "Aggiunto alla libreria!",
|
||||
"Removed from library!": "Rimosso dalla libreria!",
|
||||
|
|
|
@ -1,141 +1,141 @@
|
|||
{
|
||||
"Home": "Home",
|
||||
"Browse": "Browse",
|
||||
"Library": "Library",
|
||||
"Tracks": "Tracks",
|
||||
"Playlists": "Playlists",
|
||||
"Albums": "Albums",
|
||||
"Artists": "Artists",
|
||||
"More": "More",
|
||||
"Settings": "Settings",
|
||||
"Downloads": "Downloads",
|
||||
"Home": "홈",
|
||||
"Browse": "탐색",
|
||||
"Library": "라이브러리",
|
||||
"Tracks": "트랙",
|
||||
"Playlists": "재생목록",
|
||||
"Albums": "앨범",
|
||||
"Artists": "아티스트",
|
||||
"More": "더 보기",
|
||||
"Settings": "설정",
|
||||
"Downloads": "다운로드",
|
||||
"Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.",
|
||||
"Play": "Play",
|
||||
"Add to library": "Add to library",
|
||||
"Download": "Download",
|
||||
"Play": "재생",
|
||||
"Add to library": "라이브러리에 추가",
|
||||
"Download": "다운로드",
|
||||
"fans": "fans",
|
||||
"tracks": "tracks",
|
||||
"Quality": "Quality",
|
||||
"Estimated size:": "Estimated size:",
|
||||
"Start downloading": "Start downloading",
|
||||
"Cancel": "Cancel",
|
||||
"tracks": "트랙",
|
||||
"Quality": "음질",
|
||||
"Estimated size:": "예상 용량:",
|
||||
"Start downloading": "다운로드 시작",
|
||||
"Cancel": "취소",
|
||||
"Stream logging is disabled!": "Stream logging is disabled!",
|
||||
"Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.",
|
||||
"History": "History",
|
||||
"Create new playlist": "Create new playlist",
|
||||
"TRACKS": "TRACKS",
|
||||
"Sort by": "Sort by",
|
||||
"Date Added": "Date Added",
|
||||
"Name (A-Z)": "Name (A-Z)",
|
||||
"Artist (A-Z)": "Artist (A-Z)",
|
||||
"Album (A-Z)": "Album (A-Z)",
|
||||
"Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!",
|
||||
"Create playlist": "Create playlist",
|
||||
"Create": "Create",
|
||||
"Add to playlist": "Add to playlist",
|
||||
"Create new": "Create new",
|
||||
"Remove": "Remove",
|
||||
"Play next": "Play next",
|
||||
"Add to queue": "Add to queue",
|
||||
"Remove from library": "Remove from library",
|
||||
"Remove from playlist": "Remove from playlist",
|
||||
"History": "기록",
|
||||
"Create new playlist": "새 재생목록 만들기",
|
||||
"TRACKS": "트랙",
|
||||
"Sort by": "정렬 기준",
|
||||
"Date Added": "추가된 날짜",
|
||||
"Name (A-Z)": "이름 (A-Z)",
|
||||
"Artist (A-Z)": "아티스트 (A-Z)",
|
||||
"Album (A-Z)": "앨범 (A-Z)",
|
||||
"Error loading lyrics or lyrics not found!": "가사 로딩 오류 또는 가사 없음!",
|
||||
"Create playlist": "재생목록 생성",
|
||||
"Create": "생성",
|
||||
"Add to playlist": "재생목록에 추가",
|
||||
"Create new": "새로 만들기",
|
||||
"Remove": "제거",
|
||||
"Play next": "다음 재생",
|
||||
"Add to queue": "대기열에 추가",
|
||||
"Remove from library": "라이브러리에서 삭제",
|
||||
"Remove from playlist": "재생목록에서 삭제",
|
||||
"Play track mix": "Play track mix",
|
||||
"Go to": "Go to",
|
||||
"Go to": "$로 이동",
|
||||
"Track Mix": "Track Mix",
|
||||
"Duration": "Duration",
|
||||
"Released": "Released",
|
||||
"Duration": "길이",
|
||||
"Released": "출시됨",
|
||||
"Disk": "Disk",
|
||||
"albums": "albums",
|
||||
"albums": "앨범",
|
||||
"Play top": "Play top",
|
||||
"Radio": "Radio",
|
||||
"Show all albums": "Show all albums",
|
||||
"Radio": "라디오",
|
||||
"Show all albums": "모든 앨범 보기",
|
||||
"Show all singles": "Show all singles",
|
||||
"Show more": "Show more",
|
||||
"Downloaded": "Downloaded",
|
||||
"Queue": "Queue",
|
||||
"Total": "Total",
|
||||
"Stop": "Stop",
|
||||
"Start": "Start",
|
||||
"Show folder": "Show folder",
|
||||
"Clear queue": "Clear queue",
|
||||
"Playing from": "Playing from",
|
||||
"Info": "Info",
|
||||
"Lyrics": "Lyrics",
|
||||
"Track number": "Track number",
|
||||
"Total": "총",
|
||||
"Stop": "정지",
|
||||
"Start": "시작",
|
||||
"Show folder": "폴더 보기",
|
||||
"Clear queue": "대기열 비우기",
|
||||
"Playing from": "$부터 재생:",
|
||||
"Info": "정보",
|
||||
"Lyrics": "가사",
|
||||
"Track number": "트랙 번호",
|
||||
"Disk number": "Disk number",
|
||||
"Explicit": "Explicit",
|
||||
"Source": "Source",
|
||||
"ID": "ID",
|
||||
"Error logging in!": "Error logging in!",
|
||||
"Please try again later, or try another account.": "Please try again later, or try another account.",
|
||||
"Logout": "Logout",
|
||||
"Login using browser": "Login using browser",
|
||||
"Please login using your Deezer account:": "Please login using your Deezer account:",
|
||||
"...or paste your ARL/Token below:": "...or paste your ARL/Token below:",
|
||||
"ID": "아이디",
|
||||
"Error logging in!": "로그인 오류",
|
||||
"Please try again later, or try another account.": "나중에 시도하거나 다른 계정으로 시도해주세요.",
|
||||
"Logout": "로그아웃",
|
||||
"Login using browser": "브라우저를 사용하여 로그인",
|
||||
"Please login using your Deezer account:": "Deezer 계정을 사용하여 로그인하십시오.",
|
||||
"...or paste your ARL/Token below:": "...혹은 아래에 ARL/Token을 붙여넣으세요",
|
||||
"ARL/Token": "ARL/Token",
|
||||
"Login": "Login",
|
||||
"Login": "로그인",
|
||||
"By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.",
|
||||
"Only in Electron version!": "Only in Electron version!",
|
||||
"Search results for:": "Search results for:",
|
||||
"Error loading data!": "Error loading data!",
|
||||
"Try again later!": "Try again later!",
|
||||
"Search": "Search",
|
||||
"Streaming Quality": "Streaming Quality",
|
||||
"Download Quality": "Download Quality",
|
||||
"Downloads Directory": "Downloads Directory",
|
||||
"Simultaneous downloads": "Simultaneous downloads",
|
||||
"Search results for:": "다음에 대한 검색 결과:",
|
||||
"Error loading data!": "데이터 로딩 오류!",
|
||||
"Try again later!": "나중에 다시 시도해주세요!",
|
||||
"Search": "검색",
|
||||
"Streaming Quality": "스트리밍 음질",
|
||||
"Download Quality": "다운로드 음질",
|
||||
"Downloads Directory": "다운로드 위치",
|
||||
"Simultaneous downloads": "동시 다운로드",
|
||||
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.",
|
||||
"Show download dialog": "Show download dialog",
|
||||
"Create folders for artists": "Create folders for artists",
|
||||
"Create folders for albums": "Create folders for albums",
|
||||
"Download lyrics": "Download lyrics",
|
||||
"Variables": "Variables",
|
||||
"UI": "UI",
|
||||
"Show autocomplete in search": "Show autocomplete in search",
|
||||
"Create folders for artists": "가수 용 폴더 만들기",
|
||||
"Create folders for albums": "앨범 용 폴더 만들기",
|
||||
"Download lyrics": "가사 다운로드",
|
||||
"Variables": "변수",
|
||||
"UI": "인터페이스",
|
||||
"Show autocomplete in search": "검색에 자동완성 보이기",
|
||||
"Integrations": "Integrations",
|
||||
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.",
|
||||
"Log track listens to Deezer": "Log track listens to Deezer",
|
||||
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.",
|
||||
"Login with LastFM": "Login with LastFM",
|
||||
"Login with LastFM": "LastFM에 로그인",
|
||||
"Disconnect LastFM": "Disconnect LastFM",
|
||||
"Requires restart to apply!": "Requires restart to apply!",
|
||||
"Requires restart to apply!": "변경사항을 적용하려면 재시작이 필요합니다!",
|
||||
"Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!",
|
||||
"Discord Rich Presence": "Discord Rich Presence",
|
||||
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!",
|
||||
"Discord Join Button": "Discord Join Button",
|
||||
"Other": "Other",
|
||||
"Minimize to tray": "Minimize to tray",
|
||||
"Don't minimize to tray": "Don't minimize to tray",
|
||||
"Close on exit": "Close on exit",
|
||||
"Settings saved!": "Settings saved!",
|
||||
"Other": "기타",
|
||||
"Minimize to tray": "트레이로 최소화",
|
||||
"Don't minimize to tray": "트레이로 최소화하지 않기",
|
||||
"Close on exit": "종료시 닫기",
|
||||
"Settings saved!": "설정이 저장되었습니다!",
|
||||
"Available only in Electron version!": "Available only in Electron version!",
|
||||
"Crossfade (ms)": "Crossfade (ms)",
|
||||
"Select primary color": "Select primary color",
|
||||
"Light theme": "Light theme",
|
||||
"Create folders for playlists": "Create folders for playlists",
|
||||
"About": "About",
|
||||
"Links:": "Links:",
|
||||
"Light theme": "밝은 테마",
|
||||
"Create folders for playlists": "플레이리스트 용 폴더 만들기",
|
||||
"About": "정보",
|
||||
"Links:": "링크:",
|
||||
"Telegram Releases": "Telegram Releases",
|
||||
"Telegram Group": "Telegram Group",
|
||||
"Telegram Group": "텔레그램 그룹",
|
||||
"Discord": "Discord",
|
||||
"Telegram Android Group": "Telegram Android Group",
|
||||
"Credits:": "Credits:",
|
||||
"Agree": "Agree",
|
||||
"Dismiss": "Dismiss",
|
||||
"Added to playlist!": "Added to playlist!",
|
||||
"Added to library!": "Added to library!",
|
||||
"Removed from library!": "Removed from library!",
|
||||
"Removed from playlist!": "Removed from playlist!",
|
||||
"Playlist deleted!": "Playlist deleted!",
|
||||
"Delete": "Delete",
|
||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||
"Telegram Android Group": "안드로이드 텔레그램 그룹",
|
||||
"Credits:": "크레딧:",
|
||||
"Agree": "동의",
|
||||
"Dismiss": "무시하기",
|
||||
"Added to playlist!": "재생목록에 추가되었습니다!",
|
||||
"Added to library!": "라이브러리에 추가되었습니다!",
|
||||
"Removed from library!": "라이브러리에서 삭제되었습니다!",
|
||||
"Removed from playlist!": "재생목록에서 삭제되었습니다!",
|
||||
"Playlist deleted!": "재생목록이 삭제되었습니다!",
|
||||
"Delete": "삭제",
|
||||
"Are you sure you want to delete this playlist?": "이 재생목록을 삭제하시겠습니까?",
|
||||
"Force white tray icon": "Force white tray icon",
|
||||
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||
"Share": "Share",
|
||||
"Share": "공유",
|
||||
"Settings quality": "Settings quality",
|
||||
"Content language": "Content language",
|
||||
"Content country": "Content country",
|
||||
"Website": "Website",
|
||||
"Visit website": "Visit website",
|
||||
"New update available:": "New update available:"
|
||||
"Content language": "콘텐츠 언어",
|
||||
"Content country": "콘텐츠 국가",
|
||||
"Website": "홈페이지",
|
||||
"Visit website": "홈페이지 방문하기",
|
||||
"New update available:": "사용 가능한 업데이트가 있습니다:"
|
||||
}
|
|
@ -0,0 +1,141 @@
|
|||
{
|
||||
"Home": "Home",
|
||||
"Browse": "Browse",
|
||||
"Library": "Library",
|
||||
"Tracks": "Tracks",
|
||||
"Playlists": "Playlists",
|
||||
"Albums": "Albums",
|
||||
"Artists": "Artists",
|
||||
"More": "More",
|
||||
"Settings": "Settings",
|
||||
"Downloads": "Downloads",
|
||||
"Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.",
|
||||
"Play": "Play",
|
||||
"Add to library": "Add to library",
|
||||
"Download": "Download",
|
||||
"fans": "fans",
|
||||
"tracks": "tracks",
|
||||
"Quality": "Quality",
|
||||
"Estimated size:": "Estimated size:",
|
||||
"Start downloading": "Start downloading",
|
||||
"Cancel": "Cancel",
|
||||
"Stream logging is disabled!": "Stream logging is disabled!",
|
||||
"Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.",
|
||||
"History": "History",
|
||||
"Create new playlist": "Create new playlist",
|
||||
"TRACKS": "TRACKS",
|
||||
"Sort by": "Sort by",
|
||||
"Date Added": "Date Added",
|
||||
"Name (A-Z)": "Name (A-Z)",
|
||||
"Artist (A-Z)": "Artist (A-Z)",
|
||||
"Album (A-Z)": "Album (A-Z)",
|
||||
"Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!",
|
||||
"Create playlist": "Create playlist",
|
||||
"Create": "Create",
|
||||
"Add to playlist": "Add to playlist",
|
||||
"Create new": "Create new",
|
||||
"Remove": "Remove",
|
||||
"Play next": "Play next",
|
||||
"Add to queue": "Add to queue",
|
||||
"Remove from library": "Remove from library",
|
||||
"Remove from playlist": "Remove from playlist",
|
||||
"Play track mix": "Play track mix",
|
||||
"Go to": "Go to",
|
||||
"Track Mix": "Track Mix",
|
||||
"Duration": "Duration",
|
||||
"Released": "Released",
|
||||
"Disk": "Disk",
|
||||
"albums": "albums",
|
||||
"Play top": "Play top",
|
||||
"Radio": "Radio",
|
||||
"Show all albums": "Show all albums",
|
||||
"Show all singles": "Show all singles",
|
||||
"Show more": "Show more",
|
||||
"Downloaded": "Downloaded",
|
||||
"Queue": "Queue",
|
||||
"Total": "Total",
|
||||
"Stop": "Stop",
|
||||
"Start": "Start",
|
||||
"Show folder": "Show folder",
|
||||
"Clear queue": "Clear queue",
|
||||
"Playing from": "Playing from",
|
||||
"Info": "Info",
|
||||
"Lyrics": "Lyrics",
|
||||
"Track number": "Track number",
|
||||
"Disk number": "Disk number",
|
||||
"Explicit": "Explicit",
|
||||
"Source": "Source",
|
||||
"ID": "ID",
|
||||
"Error logging in!": "Error logging in!",
|
||||
"Please try again later, or try another account.": "Please try again later, or try another account.",
|
||||
"Logout": "Logout",
|
||||
"Login using browser": "Login using browser",
|
||||
"Please login using your Deezer account:": "Please login using your Deezer account:",
|
||||
"...or paste your ARL/Token below:": "...or paste your ARL/Token below:",
|
||||
"ARL/Token": "ARL/Token",
|
||||
"Login": "Login",
|
||||
"By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.",
|
||||
"Only in Electron version!": "Only in Electron version!",
|
||||
"Search results for:": "Search results for:",
|
||||
"Error loading data!": "Error loading data!",
|
||||
"Try again later!": "Try again later!",
|
||||
"Search": "Search",
|
||||
"Streaming Quality": "Streaming Quality",
|
||||
"Download Quality": "Download Quality",
|
||||
"Downloads Directory": "Downloads Directory",
|
||||
"Simultaneous downloads": "Simultaneous downloads",
|
||||
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.",
|
||||
"Show download dialog": "Show download dialog",
|
||||
"Create folders for artists": "Create folders for artists",
|
||||
"Create folders for albums": "Create folders for albums",
|
||||
"Download lyrics": "Download lyrics",
|
||||
"Variables": "Variables",
|
||||
"UI": "UI",
|
||||
"Show autocomplete in search": "Show autocomplete in search",
|
||||
"Integrations": "Integrations",
|
||||
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.",
|
||||
"Log track listens to Deezer": "Log track listens to Deezer",
|
||||
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.",
|
||||
"Login with LastFM": "Login with LastFM",
|
||||
"Disconnect LastFM": "Disconnect LastFM",
|
||||
"Requires restart to apply!": "Requires restart to apply!",
|
||||
"Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!",
|
||||
"Discord Rich Presence": "Discord Rich Presence",
|
||||
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!",
|
||||
"Discord Join Button": "Discord Join Button",
|
||||
"Other": "Other",
|
||||
"Minimize to tray": "Minimize to tray",
|
||||
"Don't minimize to tray": "Don't minimize to tray",
|
||||
"Close on exit": "Close on exit",
|
||||
"Settings saved!": "Settings saved!",
|
||||
"Available only in Electron version!": "Available only in Electron version!",
|
||||
"Crossfade (ms)": "Crossfade (ms)",
|
||||
"Select primary color": "Select primary color",
|
||||
"Light theme": "Light theme",
|
||||
"Create folders for playlists": "Create folders for playlists",
|
||||
"About": "About",
|
||||
"Links:": "Links:",
|
||||
"Telegram Releases": "Telegram Releases",
|
||||
"Telegram Group": "Telegram Group",
|
||||
"Discord": "Discord",
|
||||
"Telegram Android Group": "Telegram Android Group",
|
||||
"Credits:": "Credits:",
|
||||
"Agree": "Agree",
|
||||
"Dismiss": "Dismiss",
|
||||
"Added to playlist!": "Added to playlist!",
|
||||
"Added to library!": "Added to library!",
|
||||
"Removed from library!": "Removed from library!",
|
||||
"Removed from playlist!": "Removed from playlist!",
|
||||
"Playlist deleted!": "Playlist deleted!",
|
||||
"Delete": "Delete",
|
||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||
"Force white tray icon": "Force white tray icon",
|
||||
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||
"Share": "Share",
|
||||
"Settings quality": "Settings quality",
|
||||
"Content language": "Content language",
|
||||
"Content country": "Content country",
|
||||
"Website": "Website",
|
||||
"Visit website": "Visit website",
|
||||
"New update available:": "New update available:"
|
||||
}
|
|
@ -136,6 +136,6 @@
|
|||
"Content language": "Limbajul conținutului",
|
||||
"Content country": "Țara conținutului",
|
||||
"Website": "Website",
|
||||
"Visit website": "Visit website",
|
||||
"New update available:": "New update available:"
|
||||
"Visit website": "Vizitați site-ul web",
|
||||
"New update available:": "Actualizare nouă disponibilă:"
|
||||
}
|
|
@ -0,0 +1,141 @@
|
|||
{
|
||||
"Home": "Domov",
|
||||
"Browse": "Iskanje",
|
||||
"Library": "Knjižnica",
|
||||
"Tracks": "Skladbe",
|
||||
"Playlists": "Seznami predvajanja",
|
||||
"Albums": "Albumi",
|
||||
"Artists": "Izvajalci",
|
||||
"More": "Več",
|
||||
"Settings": "Nastavitve",
|
||||
"Downloads": "Prenosi",
|
||||
"Search or paste Deezer URL. Use / to quickly focus.": "Išči ali prilepi Deezer URL.",
|
||||
"Play": "Predvajaj",
|
||||
"Add to library": "Dodaj v knjižnico",
|
||||
"Download": "Prenos",
|
||||
"fans": "oboževalci",
|
||||
"tracks": "skladbe",
|
||||
"Quality": "Kakovost",
|
||||
"Estimated size:": "Predvidena velikost:",
|
||||
"Start downloading": "Začni prenašati",
|
||||
"Cancel": "Prekliči",
|
||||
"Stream logging is disabled!": "Beleženje dejanj je izklopljeno!",
|
||||
"Enable it in settings for history to work properly.": "Omogočite v nastavitvah za pravilno delovanje zgodovine.",
|
||||
"History": "Zgodovina",
|
||||
"Create new playlist": "Nov seznam predvajanja",
|
||||
"TRACKS": "SKLADBE",
|
||||
"Sort by": "Razvrsti po",
|
||||
"Date Added": "Dodano",
|
||||
"Name (A-Z)": "Ime (A-Z)",
|
||||
"Artist (A-Z)": "Izvajalec (A-Z)",
|
||||
"Album (A-Z)": "Album (A-Z)",
|
||||
"Error loading lyrics or lyrics not found!": "Napaka pri nalaganju besedila ali pa besedilo ni bilo najdeno!",
|
||||
"Create playlist": "Nov seznam predvajanja",
|
||||
"Create": "Ustvari",
|
||||
"Add to playlist": "Dodaj na seznam predvajanja",
|
||||
"Create new": "Ustvari novo",
|
||||
"Remove": "Odstrani",
|
||||
"Play next": "Predvajaj naslednjega",
|
||||
"Add to queue": "Dodaj v čakalno vrsto",
|
||||
"Remove from library": "Odstrani iz knjižnice",
|
||||
"Remove from playlist": "Odstrani iz seznama predvajanja",
|
||||
"Play track mix": "Predvajaj miks",
|
||||
"Go to": "Pojdi na",
|
||||
"Track Mix": "Miks",
|
||||
"Duration": "Trajanje",
|
||||
"Released": "Objavljeno",
|
||||
"Disk": "Disk",
|
||||
"albums": "albumi",
|
||||
"Play top": "Predvajaj najboljše",
|
||||
"Radio": "Radio",
|
||||
"Show all albums": "Pokaži vse albume",
|
||||
"Show all singles": "Prikaži vse posnetke",
|
||||
"Show more": "Prikaži več",
|
||||
"Downloaded": "Prenešeno",
|
||||
"Queue": "Čakalna vrsta",
|
||||
"Total": "Skupaj",
|
||||
"Stop": "Ustavi",
|
||||
"Start": "Začni",
|
||||
"Show folder": "Prikaži v mapi",
|
||||
"Clear queue": "Počisti čakalno vrsto",
|
||||
"Playing from": "Predvajaj iz",
|
||||
"Info": "Informacije",
|
||||
"Lyrics": "Besedilo",
|
||||
"Track number": "Številka pesmi",
|
||||
"Disk number": "Številka na disku",
|
||||
"Explicit": "Izrecno",
|
||||
"Source": "Vir",
|
||||
"ID": "ID",
|
||||
"Error logging in!": "Napaka pri prijavi!",
|
||||
"Please try again later, or try another account.": "Poskusite znova pozneje ali pa uporabite drug račun.",
|
||||
"Logout": "Odjava",
|
||||
"Login using browser": "Prijava preko brskalnika",
|
||||
"Please login using your Deezer account:": "Prosimo prijavite se s svojim Deezer računom:",
|
||||
"...or paste your ARL/Token below:": "... ali prilepite svoj ARL/žeton:",
|
||||
"ARL/Token": "ARL/Žeton",
|
||||
"Login": "Prijava",
|
||||
"By using this program, you disagree with Deezer's ToS.": "Z uporabo tega programa boste kršili pogoje uporabe od Dezzer-ja.",
|
||||
"Only in Electron version!": "Samo v verziji ki jo poganja elektron!",
|
||||
"Search results for:": "Rezultati iskanja za:",
|
||||
"Error loading data!": "Napaka pri nalaganju podatkov!",
|
||||
"Try again later!": "Poskusite znova pozneje!",
|
||||
"Search": "Išči",
|
||||
"Streaming Quality": "Kvaliteta pretakanja",
|
||||
"Download Quality": "Kvaliteta prejemanja",
|
||||
"Downloads Directory": "Mapa za prenose",
|
||||
"Simultaneous downloads": "Sočasnih prejemov",
|
||||
"Always show download confirm dialog before downloading.": "Vedno pokaži okence za potrditev prenosa pred prenosom.",
|
||||
"Show download dialog": "Pokaži okno o prejemanju",
|
||||
"Create folders for artists": "Ustvari mape za izvajalce",
|
||||
"Create folders for albums": "Ustvari mape za albume",
|
||||
"Download lyrics": "Prenesi besedilo",
|
||||
"Variables": "Spremenljivke",
|
||||
"UI": "Vmesnik",
|
||||
"Show autocomplete in search": "Pokaži predloge v polju za iskanje",
|
||||
"Integrations": "Integracije",
|
||||
"This allows listening history, flow and recommendations to work properly.": "To omogoča zgodovino poslušanja in priporočila.",
|
||||
"Log track listens to Deezer": "Shranjuj poslušanja v Deezer-u",
|
||||
"Connect your LastFM account to allow scrobbling.": "Poveži svoj LastFM račun da omogočite poslušanje.",
|
||||
"Login with LastFM": "Prijava z LastFM računom",
|
||||
"Disconnect LastFM": "Odklopi LastFM",
|
||||
"Requires restart to apply!": "Uveljavitev zahteva ponovni zagon!",
|
||||
"Enable Discord Rich Presence, requires restart to toggle!": "Omogoči Discord Rich Presence, zahteva ponovni zagon!",
|
||||
"Discord Rich Presence": "Discord Rich Presence",
|
||||
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Omogoči Discord pridruži se gumb, zahteva ponovni zagon!",
|
||||
"Discord Join Button": "Discord pridruži se gumb",
|
||||
"Other": "Drugo",
|
||||
"Minimize to tray": "Pomanjšaj v orodno vrstico",
|
||||
"Don't minimize to tray": "Ne pomanjšaj v orodno vrstico",
|
||||
"Close on exit": "Zapri ob izhodu",
|
||||
"Settings saved!": "Nastavitve shranjene!",
|
||||
"Available only in Electron version!": "Samo v verziji, ki jo poganja elektron!",
|
||||
"Crossfade (ms)": "Navzkrižno pojemanje t.i. Crossfade (ms)",
|
||||
"Select primary color": "Izberi barvo",
|
||||
"Light theme": "Svetla tema",
|
||||
"Create folders for playlists": "Ustvari mape za sezname predvajanja",
|
||||
"About": "O programu",
|
||||
"Links:": "Povezave:",
|
||||
"Telegram Releases": "Telegram kanal",
|
||||
"Telegram Group": "Telegram skupina",
|
||||
"Discord": "Discord",
|
||||
"Telegram Android Group": "Telegram skupina za Android",
|
||||
"Credits:": "Zasluge:",
|
||||
"Agree": "Strinjam se",
|
||||
"Dismiss": "Opusti",
|
||||
"Added to playlist!": "Dodaj na seznam predvajanja!",
|
||||
"Added to library!": "Dodano v knjižnico!",
|
||||
"Removed from library!": "Odstranjeno iz knjižnice!",
|
||||
"Removed from playlist!": "Odstranjeno iz seznama predvajanja!",
|
||||
"Playlist deleted!": "Seznam predvajanja je izbrisan!",
|
||||
"Delete": "Izbriši",
|
||||
"Are you sure you want to delete this playlist?": "Ali ste prepričani da želite izbrisati ta seznam predvajanja?",
|
||||
"Force white tray icon": "Vsili belo ikono v orodni vrstici",
|
||||
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Vsili privzeto (belo) ikono v orodni vrstici, če je tema napačno zaznana. Zahteva ponovni zagon.",
|
||||
"Share": "Deli",
|
||||
"Settings quality": "Nastavitve kvalitete",
|
||||
"Content language": "Jezik vsebine",
|
||||
"Content country": "Koda države",
|
||||
"Website": "Spletna stran",
|
||||
"Visit website": "Obišči spletno stran",
|
||||
"New update available:": "Na voljo je nova posodobitev:"
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"Home": "Ana Sayfa",
|
||||
"Browse": "Gözat",
|
||||
"Browse": "Göz at",
|
||||
"Library": "Kütüphane",
|
||||
"Tracks": "Parçalar",
|
||||
"Playlists": "Çalma listeleri",
|
||||
|
@ -9,18 +9,18 @@
|
|||
"More": "Daha Fazla",
|
||||
"Settings": "Ayarlar",
|
||||
"Downloads": "İndirilenler",
|
||||
"Search or paste Deezer URL. Use / to quickly focus.": "Arama yapın veya Deezer URL'sini yapıştırın. Hızlı odaklanmak için \"/\" kullanın.",
|
||||
"Search or paste Deezer URL. Use / to quickly focus.": "Arayın veya Deezer URL'sini yapıştırın. Hızlıca odaklanmak için \"/\" kullanın.",
|
||||
"Play": "Oynat",
|
||||
"Add to library": "Kütüphaneye ekle",
|
||||
"Download": "İndir",
|
||||
"fans": "hayranlar",
|
||||
"tracks": "parçalar",
|
||||
"Quality": "Kalite",
|
||||
"Estimated size:": "Tahmini Süre:",
|
||||
"Estimated size:": "Tahmini süre:",
|
||||
"Start downloading": "İndirmeyi başlat",
|
||||
"Cancel": "İptal Et",
|
||||
"Stream logging is disabled!": "Akış günlüğü devre dışı bırakıldı!",
|
||||
"Enable it in settings for history to work properly.": "Geçmişin düzgün çalışması için ayarlarda etkinleştirin.",
|
||||
"Stream logging is disabled!": "Günlük akışı devre dışı bırakıldı!",
|
||||
"Enable it in settings for history to work properly.": "Geçmişin düzgün çalışması için ayarlardan etkinleştirin.",
|
||||
"History": "Geçmiş",
|
||||
"Create new playlist": "Yeni çalma listesi oluştur",
|
||||
"TRACKS": "PARÇALAR",
|
||||
|
@ -68,7 +68,7 @@
|
|||
"ID": "ID",
|
||||
"Error logging in!": "Oturum açma hatası!",
|
||||
"Please try again later, or try another account.": "Lütfen daha sonra tekrar deneyin veya başka bir hesap deneyin.",
|
||||
"Logout": "Çıkış",
|
||||
"Logout": "Çıkış Yap",
|
||||
"Login using browser": "Tarayıcı kullanarak giriş yapın",
|
||||
"Please login using your Deezer account:": "Lütfen Deezer hesabınızı kullanarak giriş yapın:",
|
||||
"...or paste your ARL/Token below:": "yada ARL/Token aşağıya yapıştırın:",
|
||||
|
@ -80,42 +80,42 @@
|
|||
"Error loading data!": "Veri yükleme hatası!",
|
||||
"Try again later!": "Daha sonra yeniden deneyin!",
|
||||
"Search": "Ara",
|
||||
"Streaming Quality": "Yayın Kalitesi",
|
||||
"Download Quality": "İndirme kalitesi",
|
||||
"Streaming Quality": "Akış Kalitesi",
|
||||
"Download Quality": "İndirme Kalitesi",
|
||||
"Downloads Directory": "İndirme Dizini",
|
||||
"Simultaneous downloads": "Eşzamanlı indirmeler",
|
||||
"Always show download confirm dialog before downloading.": "İndirmeden önce her zaman indirme onayı iletişim kutusunu göster.",
|
||||
"Always show download confirm dialog before downloading.": "İndirmeden önce her zaman indirme onayı iletişim kutusunu gösterin.",
|
||||
"Show download dialog": "İndirme iletişim kutusunu göster",
|
||||
"Create folders for artists": "Sanatçılar için klasörler oluşturun",
|
||||
"Create folders for albums": "Albümler için klasörler oluşturun",
|
||||
"Create folders for artists": "Sanatçılar için klasörler oluştur",
|
||||
"Create folders for albums": "Albümler için klasörler oluştur",
|
||||
"Download lyrics": "Şarkı sözlerini indir",
|
||||
"Variables": "Değişkenler",
|
||||
"UI": "Arayüz",
|
||||
"Show autocomplete in search": "Otomatik tamamlama listesini göster",
|
||||
"Show autocomplete in search": "Aramada otomatik tamamlamayı göster",
|
||||
"Integrations": "Entegrasyonlar",
|
||||
"This allows listening history, flow and recommendations to work properly.": "Bu dinleme geçmişinin, akışının ve önerilerin düzgün çalışmasını sağlar.",
|
||||
"Log track listens to Deezer": "Dinlediyin şarkılar Deezer'da yansıtılsın",
|
||||
"This allows listening history, flow and recommendations to work properly.": "Bu, dinleme geçmişinin, akışının ve önerilerin düzgün çalışmasını sağlar.",
|
||||
"Log track listens to Deezer": "Dinlediğin şarkılar Deezer'da yayınlansın",
|
||||
"Connect your LastFM account to allow scrobbling.": "Scrobbling'e izin vermek için LastFM hesabınızı bağlayın.",
|
||||
"Login with LastFM": "LastFM ile giriş yapın",
|
||||
"Disconnect LastFM": "LastFM bağlantısını kes",
|
||||
"Requires restart to apply!": "Yeniden başlatma gerekli!",
|
||||
"Enable Discord Rich Presence, requires restart to toggle!": "Discord zengin içeriği etkinleştirin, geçiş yapmak için yeniden başlatma gerekir!",
|
||||
"Discord Rich Presence": "Discord zengin içerik",
|
||||
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Şarkıları senkronize etmek için Discord katılma düğmesini etkinleştirin, geçiş yapmak için yeniden başlatma gerektirir!",
|
||||
"Discord Rich Presence": "Discord Zengin İçerik",
|
||||
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Şarkıları senkronize etmek için Discord katıl düğmesini etkinleştirin, değişiklik yapmak yeniden başlatma gerektirir!",
|
||||
"Discord Join Button": "Discord Katılma Düğmesi",
|
||||
"Other": "Diğer",
|
||||
"Minimize to tray": "Sistem tray'e küçülsün",
|
||||
"Don't minimize to tray": "Sistem tray'e küçülmesin tamamen kapansın",
|
||||
"Close on exit": "Programı kapattığınızda tamamen kapansın",
|
||||
"Minimize to tray": "Sistem tepsisine küçült",
|
||||
"Don't minimize to tray": "Sistem tepsisine küçültülmez",
|
||||
"Close on exit": "Çıkışta kapat",
|
||||
"Settings saved!": "Ayarlar kaydedildi!",
|
||||
"Available only in Electron version!": "Sadece Electron versiyonunda mevcuttur!",
|
||||
"Crossfade (ms)": "Crossfade (ms)",
|
||||
"Select primary color": "Birincil rengi seçin",
|
||||
"Select primary color": "Ana rengi seçin",
|
||||
"Light theme": "Aydınlık tema",
|
||||
"Create folders for playlists": "Çalma listesi için klasör oluştur",
|
||||
"About": "Hakkında",
|
||||
"Links:": "Bağlantılar:",
|
||||
"Telegram Releases": "Telegram Paylaşımları",
|
||||
"Telegram Releases": "Telegram Sürümleri",
|
||||
"Telegram Group": "Telegram Grubu",
|
||||
"Discord": "Discord",
|
||||
"Telegram Android Group": "Telegram Android Grubu",
|
||||
|
@ -129,13 +129,13 @@
|
|||
"Playlist deleted!": "Çalma listesi silindi!",
|
||||
"Delete": "Sil",
|
||||
"Are you sure you want to delete this playlist?": "Bu çalma listesini silmek istediğinizden emin misiniz?",
|
||||
"Force white tray icon": "Sistem tray'deki beyaz ikon olmasını zorla",
|
||||
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Eğer tema doğru tespitlenmediyse sistem tray'deki varsayılan (beyaz) ikon olmasını zorla. Yeniden başlatma gerekli.",
|
||||
"Force white tray icon": "Tepsi simgesini beyaz olmaya zorla",
|
||||
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Tema yanlış algılanırsa varsayılan (beyaz) tepsi simgesini zorlar. Yeniden başlatma gerektirir.",
|
||||
"Share": "Paylaş",
|
||||
"Settings quality": "Kalite ayarları",
|
||||
"Content language": "İçerik dili",
|
||||
"Content country": "İçerik ülkesi",
|
||||
"Website": "İnternet sitesi",
|
||||
"Visit website": "İnternet sitesini ziyaret et",
|
||||
"Visit website": "Web sitesine git",
|
||||
"New update available:": "Yeni güncelleme mevcut:"
|
||||
}
|
|
@ -9,133 +9,133 @@
|
|||
"More": "Thêm",
|
||||
"Settings": "Cài đặt",
|
||||
"Downloads": "Danh sách tải",
|
||||
"Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.",
|
||||
"Play": "Play",
|
||||
"Add to library": "Add to library",
|
||||
"Download": "Download",
|
||||
"fans": "fans",
|
||||
"tracks": "tracks",
|
||||
"Quality": "Quality",
|
||||
"Estimated size:": "Estimated size:",
|
||||
"Start downloading": "Start downloading",
|
||||
"Cancel": "Cancel",
|
||||
"Stream logging is disabled!": "Stream logging is disabled!",
|
||||
"Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.",
|
||||
"History": "History",
|
||||
"Create new playlist": "Create new playlist",
|
||||
"TRACKS": "TRACKS",
|
||||
"Sort by": "Sort by",
|
||||
"Date Added": "Date Added",
|
||||
"Name (A-Z)": "Name (A-Z)",
|
||||
"Artist (A-Z)": "Artist (A-Z)",
|
||||
"Search or paste Deezer URL. Use / to quickly focus.": "Tìm kiếm hoặc dán URL Deezer.",
|
||||
"Play": "Phát",
|
||||
"Add to library": "Thêm vào thư viện",
|
||||
"Download": "Tải xuống",
|
||||
"fans": "người hâm mộ",
|
||||
"tracks": "bài hát",
|
||||
"Quality": "Chất lượng",
|
||||
"Estimated size:": "Kích thước dự tính:",
|
||||
"Start downloading": "Bắt đầu tải xuống",
|
||||
"Cancel": "Hủy",
|
||||
"Stream logging is disabled!": "Đã tắt nhật kí phát trực tuyến!",
|
||||
"Enable it in settings for history to work properly.": "Kích hoạt chế độ này trong cài đặt để lịch sử nghe hoạt động bình thường.",
|
||||
"History": "Lịch sử",
|
||||
"Create new playlist": "Tạo danh sách phát mới",
|
||||
"TRACKS": "BÀI HÁT",
|
||||
"Sort by": "Sắp xếp theo",
|
||||
"Date Added": "Ngày thêm vào",
|
||||
"Name (A-Z)": "Tên (A-Z)",
|
||||
"Artist (A-Z)": "Nghệ sĩ (A-Z)",
|
||||
"Album (A-Z)": "Album (A-Z)",
|
||||
"Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!",
|
||||
"Create playlist": "Create playlist",
|
||||
"Create": "Create",
|
||||
"Add to playlist": "Add to playlist",
|
||||
"Create new": "Create new",
|
||||
"Remove": "Remove",
|
||||
"Play next": "Play next",
|
||||
"Add to queue": "Add to queue",
|
||||
"Remove from library": "Remove from library",
|
||||
"Remove from playlist": "Remove from playlist",
|
||||
"Play track mix": "Play track mix",
|
||||
"Go to": "Go to",
|
||||
"Track Mix": "Track Mix",
|
||||
"Duration": "Duration",
|
||||
"Released": "Released",
|
||||
"Disk": "Disk",
|
||||
"albums": "albums",
|
||||
"Play top": "Play top",
|
||||
"Error loading lyrics or lyrics not found!": "Lỗi tải lời bài hát hoặc lời bài hát không tồn tại!",
|
||||
"Create playlist": "Tạo danh sách phát",
|
||||
"Create": "Tạo",
|
||||
"Add to playlist": "Thêm vào danh sách phát",
|
||||
"Create new": "Tạo mới",
|
||||
"Remove": "Loại bỏ",
|
||||
"Play next": "Phát kế tiếp",
|
||||
"Add to queue": "Thêm vào hàng chờ",
|
||||
"Remove from library": "Xoá khỏi Thư Viện",
|
||||
"Remove from playlist": "Xóa khỏi danh sách phát",
|
||||
"Play track mix": "Phát trộn bài hát",
|
||||
"Go to": "Đi đến",
|
||||
"Track Mix": "Trộn bài hát",
|
||||
"Duration": "Thời lượng",
|
||||
"Released": "Phát hành",
|
||||
"Disk": "Đĩa",
|
||||
"albums": "album",
|
||||
"Play top": "Phát từ đầu",
|
||||
"Radio": "Radio",
|
||||
"Show all albums": "Show all albums",
|
||||
"Show all singles": "Show all singles",
|
||||
"Show more": "Show more",
|
||||
"Downloaded": "Downloaded",
|
||||
"Queue": "Queue",
|
||||
"Total": "Total",
|
||||
"Stop": "Stop",
|
||||
"Start": "Start",
|
||||
"Show folder": "Show folder",
|
||||
"Clear queue": "Clear queue",
|
||||
"Playing from": "Playing from",
|
||||
"Info": "Info",
|
||||
"Lyrics": "Lyrics",
|
||||
"Track number": "Track number",
|
||||
"Disk number": "Disk number",
|
||||
"Explicit": "Explicit",
|
||||
"Source": "Source",
|
||||
"Show all albums": "Hiện tất cả album",
|
||||
"Show all singles": "Hiển thị tất cả đĩa đơn",
|
||||
"Show more": "Hiển thị thêm",
|
||||
"Downloaded": "Đã tải xuống",
|
||||
"Queue": "Hàng chờ",
|
||||
"Total": "Tổng",
|
||||
"Stop": "Dừng",
|
||||
"Start": "Bắt đầu",
|
||||
"Show folder": "Hiển thị trong thư mục",
|
||||
"Clear queue": "Xóa hàng chờ",
|
||||
"Playing from": "Phát từ",
|
||||
"Info": "Thông tin",
|
||||
"Lyrics": "Lời bài hát",
|
||||
"Track number": "Số thứ tự bài hát",
|
||||
"Disk number": "Số thứ tự đĩa",
|
||||
"Explicit": "18+",
|
||||
"Source": "Nguồn",
|
||||
"ID": "ID",
|
||||
"Error logging in!": "Error logging in!",
|
||||
"Please try again later, or try another account.": "Please try again later, or try another account.",
|
||||
"Logout": "Logout",
|
||||
"Login using browser": "Login using browser",
|
||||
"Please login using your Deezer account:": "Please login using your Deezer account:",
|
||||
"...or paste your ARL/Token below:": "...or paste your ARL/Token below:",
|
||||
"Error logging in!": "Lỗi đăng nhập!",
|
||||
"Please try again later, or try another account.": "Vui lòng thử lại sau, hoặc thử lại bằng tài khoản khác.",
|
||||
"Logout": "Đăng xuất",
|
||||
"Login using browser": "Đăng nhập bằng trình duyệt",
|
||||
"Please login using your Deezer account:": "Xin vui lòng đăng nhập bằng tài khoản Deezer của bạn:",
|
||||
"...or paste your ARL/Token below:": "...hoặc dán mã ARL/Token vào đây:",
|
||||
"ARL/Token": "ARL/Token",
|
||||
"Login": "Login",
|
||||
"By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.",
|
||||
"Only in Electron version!": "Only in Electron version!",
|
||||
"Search results for:": "Search results for:",
|
||||
"Error loading data!": "Error loading data!",
|
||||
"Try again later!": "Try again later!",
|
||||
"Search": "Search",
|
||||
"Streaming Quality": "Streaming Quality",
|
||||
"Download Quality": "Download Quality",
|
||||
"Downloads Directory": "Downloads Directory",
|
||||
"Simultaneous downloads": "Simultaneous downloads",
|
||||
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.",
|
||||
"Show download dialog": "Show download dialog",
|
||||
"Create folders for artists": "Create folders for artists",
|
||||
"Create folders for albums": "Create folders for albums",
|
||||
"Download lyrics": "Download lyrics",
|
||||
"Variables": "Variables",
|
||||
"UI": "UI",
|
||||
"Show autocomplete in search": "Show autocomplete in search",
|
||||
"Integrations": "Integrations",
|
||||
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.",
|
||||
"Log track listens to Deezer": "Log track listens to Deezer",
|
||||
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.",
|
||||
"Login with LastFM": "Login with LastFM",
|
||||
"Disconnect LastFM": "Disconnect LastFM",
|
||||
"Requires restart to apply!": "Requires restart to apply!",
|
||||
"Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!",
|
||||
"Login": "Đăng nhập",
|
||||
"By using this program, you disagree with Deezer's ToS.": "Với việc sử dụng ứng dụng này, bạn đã từ chối điều khoản dịch vụ của Deezer.",
|
||||
"Only in Electron version!": "Chỉ có trong phiên bản electron!",
|
||||
"Search results for:": "Kết quả tìm kiếm cho:",
|
||||
"Error loading data!": "Lỗi khi tải dữ liệu!",
|
||||
"Try again later!": "Thử lại sau!",
|
||||
"Search": "Tìm kiếm",
|
||||
"Streaming Quality": "Chất lượng phát trực tuyến",
|
||||
"Download Quality": "Chất lượng tải xuống",
|
||||
"Downloads Directory": "Thư mục tải xuống",
|
||||
"Simultaneous downloads": "Tải xuống đồng thời",
|
||||
"Always show download confirm dialog before downloading.": "Luôn hiển thị hộp thoại xác nhận tải xuống trước khi tải xuống.",
|
||||
"Show download dialog": "Hiển thị hộp thoại tải xuống",
|
||||
"Create folders for artists": "Tạo thư mục theo tên nghệ sĩ",
|
||||
"Create folders for albums": "Tạo thư mục theo tên album",
|
||||
"Download lyrics": "Tải xuống lời bài hát",
|
||||
"Variables": "Các biến số",
|
||||
"UI": "Giao diện",
|
||||
"Show autocomplete in search": "Hiển thị tự động hoàn thành trong tìm kiếm",
|
||||
"Integrations": "Tích hợp",
|
||||
"This allows listening history, flow and recommendations to work properly.": "Điều này giúp lịch sử nghe, phát nhạc thông minh (flow) và đề xuất hoạt động bình thường.",
|
||||
"Log track listens to Deezer": "Lưu nhật ký nhạc đã nghe cho Deezer",
|
||||
"Connect your LastFM account to allow scrobbling.": "Kết nối tài khoản LastFM của bạn để sử dụng hệ thống phát thông minh của LastFM (scrobbling).",
|
||||
"Login with LastFM": "Đăng nhập tài khoản LastFM",
|
||||
"Disconnect LastFM": "Đăng xuất LastFM",
|
||||
"Requires restart to apply!": "Khởi động lại ứng dụng để áp dụng!",
|
||||
"Enable Discord Rich Presence, requires restart to toggle!": "Bật tính năng Discord Rich Presence, yêu cầu khởi động lại để chuyển đổi!",
|
||||
"Discord Rich Presence": "Discord Rich Presence",
|
||||
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!",
|
||||
"Discord Join Button": "Discord Join Button",
|
||||
"Other": "Other",
|
||||
"Minimize to tray": "Minimize to tray",
|
||||
"Don't minimize to tray": "Don't minimize to tray",
|
||||
"Close on exit": "Close on exit",
|
||||
"Settings saved!": "Settings saved!",
|
||||
"Available only in Electron version!": "Available only in Electron version!",
|
||||
"Crossfade (ms)": "Crossfade (ms)",
|
||||
"Select primary color": "Select primary color",
|
||||
"Light theme": "Light theme",
|
||||
"Create folders for playlists": "Create folders for playlists",
|
||||
"About": "About",
|
||||
"Links:": "Links:",
|
||||
"Telegram Releases": "Telegram Releases",
|
||||
"Telegram Group": "Telegram Group",
|
||||
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Bật nút tham gia Discord để đồng bộ các bài hát, yêu cầu khởi động lại để chuyển đổi!",
|
||||
"Discord Join Button": "Nút tham gia Discord",
|
||||
"Other": "Khác",
|
||||
"Minimize to tray": "Thu xuống khay hệ thống",
|
||||
"Don't minimize to tray": "Không thu xuống khay hệ thống",
|
||||
"Close on exit": "Đóng khi thoát",
|
||||
"Settings saved!": "Cài đặt đã lưu!",
|
||||
"Available only in Electron version!": "Chỉ có ở phiên bản Electron!",
|
||||
"Crossfade (ms)": "Khoảng lặng (ms)",
|
||||
"Select primary color": "Chọn màu chính",
|
||||
"Light theme": "Màu sáng",
|
||||
"Create folders for playlists": "Tạo thư mục theo danh sách phát",
|
||||
"About": "Giới thiệu",
|
||||
"Links:": "Liên kết:",
|
||||
"Telegram Releases": "Các bản phát hành trên Telegram",
|
||||
"Telegram Group": "Nhóm Telegram",
|
||||
"Discord": "Discord",
|
||||
"Telegram Android Group": "Telegram Android Group",
|
||||
"Credits:": "Credits:",
|
||||
"Agree": "Agree",
|
||||
"Dismiss": "Dismiss",
|
||||
"Added to playlist!": "Added to playlist!",
|
||||
"Added to library!": "Added to library!",
|
||||
"Removed from library!": "Removed from library!",
|
||||
"Removed from playlist!": "Removed from playlist!",
|
||||
"Playlist deleted!": "Playlist deleted!",
|
||||
"Delete": "Delete",
|
||||
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
|
||||
"Force white tray icon": "Force white tray icon",
|
||||
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
|
||||
"Share": "Share",
|
||||
"Settings quality": "Settings quality",
|
||||
"Content language": "Content language",
|
||||
"Content country": "Content country",
|
||||
"Website": "Website",
|
||||
"Visit website": "Visit website",
|
||||
"New update available:": "New update available:"
|
||||
"Telegram Android Group": "Nhóm Telegram Android",
|
||||
"Credits:": "Đóng góp:",
|
||||
"Agree": "Đồng ý",
|
||||
"Dismiss": "Đóng",
|
||||
"Added to playlist!": "Đã thêm vào danh sách phát!",
|
||||
"Added to library!": "Đã thêm vào Thư viện!",
|
||||
"Removed from library!": "Đã xoá khỏi thư viện!",
|
||||
"Removed from playlist!": "Đã xóa khỏi danh sách phát!",
|
||||
"Playlist deleted!": "Đã xoá danh sách phát!",
|
||||
"Delete": "Xóa",
|
||||
"Are you sure you want to delete this playlist?": "Bạn có chắc chắn muốn xóa danh sách phát này?",
|
||||
"Force white tray icon": "Buộc biểu tượng khay hệ thống màu trắng",
|
||||
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Buộc biểu tượng khay mặc định (trắng) nếu không phát hiện được chủ đề. Khởi động lại để áp dụng.",
|
||||
"Share": "Chia sẻ",
|
||||
"Settings quality": "Cài đặt chất lượng",
|
||||
"Content language": "Ngôn ngữ nội dung",
|
||||
"Content country": "Quốc gia của nội dung",
|
||||
"Website": "Trang web",
|
||||
"Visit website": "Truy cập trang web",
|
||||
"New update available:": "Có bản cập nhật mới:"
|
||||
}
|
|
@ -45,7 +45,7 @@
|
|||
<v-list-item-title class='font-weight-bold'>{{$t("Telegram Android Group")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<v-list-item @click='openUrl("https://discord.gg/7ap654Tp3z")'>
|
||||
<v-list-item @click='openUrl("https://discord.gg/qwJpa3r4dQ")'>
|
||||
<v-list-item-icon>
|
||||
<v-icon>mdi-discord</v-icon>
|
||||
</v-list-item-icon>
|
||||
|
@ -102,8 +102,11 @@
|
|||
<v-dialog v-model='xandarDialog' max-width='512'>
|
||||
<v-card elevation='2'>
|
||||
<v-card-title class="headline">
|
||||
f
|
||||
ass
|
||||
</v-card-title>
|
||||
<v-card-text>
|
||||
windows user
|
||||
</v-card-text>
|
||||
<v-card-actions>
|
||||
<v-spacer></v-spacer>
|
||||
<v-btn color="red darken-1" text @click="xandarDialog = false">
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
<template>
|
||||
<div>
|
||||
<h1>{{$t("Library")}}</h1>
|
||||
<h1>{{$t("Library")}}
|
||||
<v-btn class='ml-2 mb-1' icon @click='shuffle'>
|
||||
<v-icon>mdi-shuffle</v-icon>
|
||||
</v-btn>
|
||||
</h1>
|
||||
|
||||
<v-tabs v-model='tab'>
|
||||
<v-tab key='tracks'>
|
||||
|
@ -76,7 +80,18 @@ export default {
|
|||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
async shuffle() {
|
||||
let res = await this.$axios.get('/shuffle');
|
||||
if (res && res.data) {
|
||||
this.$root.queue.source = {
|
||||
text: this.$t('Shuffle'),
|
||||
source: 'playlist',
|
||||
data: 0
|
||||
};
|
||||
this.$root.replaceQueue(res.data);
|
||||
this.$root.playIndex(0);
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
//Make mutable
|
||||
|
|
|
@ -79,6 +79,18 @@
|
|||
<v-list-item-title>{{$t("Create folders for albums")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
</v-list-item>
|
||||
<!-- Download Cover -->
|
||||
<v-list-item>
|
||||
<v-list-item-action>
|
||||
<v-checkbox v-model='$root.settings.downloadCover' class='pl-2'></v-checkbox>
|
||||
</v-list-item-action>
|
||||
<v-list-item-content>
|
||||
<v-list-item-title>{{$t("Download album cover")}}</v-list-item-title>
|
||||
</v-list-item-content>
|
||||
<!-- Resolution -->
|
||||
<v-select :items='artResolutions' :label='$t("Art Resolution")' v-model='$root.settings.coverResolution' style='max-width: 150px;'></v-select>
|
||||
|
||||
</v-list-item>
|
||||
<!-- Download lyrics -->
|
||||
<v-list-item>
|
||||
<v-list-item-action>
|
||||
|
@ -324,8 +336,10 @@ export default {
|
|||
{code: 'es', name: 'Spanish'},
|
||||
{code: 'tr', name: 'Turkish'},
|
||||
{code: 'uk', name: 'Ukrainian'},
|
||||
{code: 'vi', name: 'Vietnamese'}
|
||||
{code: 'vi', name: 'Vietnamese'},
|
||||
{code: 'uwu', name: 'Furry'}
|
||||
],
|
||||
artResolutions: [256, 512, 600, 800, 1000, 1200, 1400, 1600, 1800],
|
||||
colorPicker: false,
|
||||
primaryColorIndex: 0,
|
||||
primaries: ['#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3', '#03A9F4',
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "freezer",
|
||||
"private": true,
|
||||
"version": "1.1.11",
|
||||
"version": "1.1.12",
|
||||
"description": "",
|
||||
"main": "background.js",
|
||||
"scripts": {
|
||||
|
|
|
@ -66,7 +66,7 @@ class DeezerAPI {
|
|||
|
||||
//Invalid CSRF
|
||||
if (data.data.error && data.data.error.VALID_TOKEN_REQUIRED) {
|
||||
await this.callApi('deezer.getUserData');
|
||||
await this.authorize();
|
||||
return await this.callApi(method, args, gatewayInput);
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,7 @@ class DeezerAPI {
|
|||
|
||||
//Invalid CSRF
|
||||
if (data.error && data.error.VALID_TOKEN_REQUIRED) {
|
||||
await this.callApi('deezer.getUserData');
|
||||
await this.authorize();
|
||||
return await this.callApi(method, args, gatewayInput);
|
||||
}
|
||||
|
||||
|
|
|
@ -122,14 +122,13 @@ class DeezerImage {
|
|||
this.hash = hash;
|
||||
this.type = type;
|
||||
//Create full and thumb, to standardize size and because functions aren't preserved
|
||||
this.full = this.url(1400);
|
||||
this.thumb = this.url(256);
|
||||
this.full = DeezerImage.url(this.hash, this.type, 1400);
|
||||
this.thumb = DeezerImage.url(this.hash, this.type, 256);
|
||||
}
|
||||
|
||||
url(size = 256) {
|
||||
if (!this.hash)
|
||||
return `https://e-cdns-images.dzcdn.net/images/${this.type}/${size}x${size}-000000-80-0-0.jpg`;
|
||||
return `https://e-cdns-images.dzcdn.net/images/${this.type}/${this.hash}/${size}x${size}-000000-80-0-0.jpg`;
|
||||
static url(hash, type, size = 256) {
|
||||
if (!hash)
|
||||
return `https://e-cdns-images.dzcdn.net/images/${type}/${size}x${size}-000000-80-0-0.jpg`;
|
||||
return `https://e-cdns-images.dzcdn.net/images/${type}/${hash}/${size}x${size}-000000-80-0-0.jpg`;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ const decryptor = require('nodeezcryptor');
|
|||
const sanitize = require('sanitize-filename');
|
||||
const ID3Writer = require('browser-id3-writer');
|
||||
const Metaflac = require('metaflac-js2');
|
||||
const { Track, Lyrics } = require('./definitions');
|
||||
const { Track, Lyrics, DeezerImage } = require('./definitions');
|
||||
const { throwDeprecation } = require('process');
|
||||
|
||||
let deezer;
|
||||
|
@ -206,6 +206,7 @@ class DownloadThread {
|
|||
this.settings = settings;
|
||||
this.stopped = true;
|
||||
this.isUserUploaded = download.track.id.toString().startsWith('-');
|
||||
this.coverPath = null;
|
||||
}
|
||||
|
||||
//Callback wrapper
|
||||
|
@ -328,9 +329,11 @@ class DownloadThread {
|
|||
await fs.promises.unlink(`${tmp}.DEC`);
|
||||
await fs.promises.unlink(tmp);
|
||||
|
||||
let cover = null;
|
||||
|
||||
if (!this.isUserUploaded) {
|
||||
//Tag
|
||||
await this.tagTrack(outPath);
|
||||
//Tag, returns cover to prevent double downlaoding
|
||||
cover = await this.tagTrack(outPath);
|
||||
|
||||
//Lyrics
|
||||
if (this.settings.downloadLyrics) {
|
||||
|
@ -347,6 +350,25 @@ class DownloadThread {
|
|||
}
|
||||
}
|
||||
|
||||
//Cover
|
||||
if (this.coverPath) {
|
||||
if (!fs.existsSync(this.coverPath)) {
|
||||
//Create empty file to "lock"
|
||||
fs.closeSync(fs.openSync(this.coverPath, 'w'));
|
||||
|
||||
if (!cover) {
|
||||
try {
|
||||
cover = await this.downloadCover(DeezerImage.url(this.track.albumArt.hash, 'cover', this.settings.coverResolution));
|
||||
} catch (e) {}
|
||||
}
|
||||
if (!cover) {
|
||||
logger.warn("Error downloading album art!");
|
||||
} else {
|
||||
await fs.promises.writeFile(this.coverPath, cover);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.download.state = 3;
|
||||
this._cb();
|
||||
|
@ -355,7 +377,7 @@ class DownloadThread {
|
|||
async tagTrack(path) {
|
||||
let cover;
|
||||
try {
|
||||
cover = await this.downloadCover(this.track.albumArt.full);
|
||||
cover = await this.downloadCover(this.track.albumArt.hash, 'cover', this.settings.coverResolution);
|
||||
} catch (e) {}
|
||||
|
||||
//Genre tag
|
||||
|
@ -392,7 +414,8 @@ class DownloadThread {
|
|||
|
||||
//Write
|
||||
await fs.promises.writeFile(path, Buffer.from(writer.arrayBuffer));
|
||||
return;
|
||||
|
||||
return cover;
|
||||
}
|
||||
|
||||
//Tag FLAC
|
||||
|
@ -496,7 +519,12 @@ class DownloadThread {
|
|||
}
|
||||
//Generate folders
|
||||
if (this.settings.createArtistFolder) folder = path.join(folder, sanitize(this.track.artists[0].name));
|
||||
if (this.settings.createAlbumFolder) folder = path.join(folder, sanitize(this.track.album.title));
|
||||
if (this.settings.createAlbumFolder) {
|
||||
folder = path.join(folder, sanitize(this.track.album.title));
|
||||
if (this.settings.downloadCover) {
|
||||
this.coverPath = path.join(folder, "cover.jpg");
|
||||
}
|
||||
}
|
||||
|
||||
//Extension
|
||||
if (quality.toString() == '9') {
|
||||
|
|
|
@ -204,6 +204,15 @@ app.get('/profile', async (req, res) => {
|
|||
res.send(profile);
|
||||
});
|
||||
|
||||
//Get shuffled library
|
||||
app.get('/shuffle', async (req, res) => {
|
||||
let data = await deezer.callApi('tracklist.getShuffledCollection', {
|
||||
nb: 50,
|
||||
start: 0
|
||||
});
|
||||
res.send(data.results.data.map((t) => new Track(t)));
|
||||
});
|
||||
|
||||
//Get list of `type` from library
|
||||
app.get('/library/:type', async (req, res) => {
|
||||
let type = req.params.type;
|
||||
|
|
|
@ -23,6 +23,8 @@ class Settings {
|
|||
this.createArtistFolder = true;
|
||||
this.downloadFilename = '%0trackNumber%. %artists% - %title%';
|
||||
this.downloadDialog = true;
|
||||
this.downloadCover = true;
|
||||
this.coverResolution = 1400;
|
||||
|
||||
this.logListen = false;
|
||||
this.lastFM = null;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "freezer",
|
||||
"private": true,
|
||||
"version": "1.1.11",
|
||||
"version": "1.1.12",
|
||||
"description": "",
|
||||
"scripts": {
|
||||
"pack": "electron-builder --dir",
|
||||
|
|
Loading…
Reference in New Issue