From 15552d86e1654ec3490dc792b0ab96b64c517434 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Thu, 25 Aug 2022 09:35:52 +0200 Subject: [PATCH 01/22] Add license file --- LICENSE.md | 675 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 675 insertions(+) create mode 100755 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100755 index 0000000..2fb2e74 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,675 @@ +### GNU GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +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. + + + Copyright (C) + + 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 . + +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: + + Copyright (C) + 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 . + +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 . From 2c23f09c6da356a6d2a362517ae12ef0ebdc3487 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Thu, 25 Aug 2022 09:36:23 +0200 Subject: [PATCH 02/22] Add contributing file --- CONTRIBUTING.md | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..c8b2680 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,90 @@ +# Contributing + +When contributing to this repository, please first discuss the change you wish to make via issue, +email, or any other method with the owners of this repository before making a change. + +Please note we have a code of conduct, please follow it in all your interactions with the project. + +## Pull Request Process + +1. Be sure to use the Pull Request templates and its guidelines contained therein. +2. Update the README.md with details of changes. +3. Increase the version numbers in variable and manual to the new version that this + Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). +4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you + do not have permission to do that, you may request the second reviewer to merge it for you. + +## Code of Conduct + +### Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +### Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +### Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +### Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +### Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at [INSERT EMAIL ADDRESS]. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +### Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ \ No newline at end of file From 29eeb999aec8d0d4a07e02dedcb9386ec6be6711 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Thu, 25 Aug 2022 09:36:55 +0200 Subject: [PATCH 03/22] Add code of conduct file --- CODE_OF_CONDUCT.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..2bc9774 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,52 @@ +# Contributor Code of Conduct + +As contributors and maintainers of this project, and in the interest of +fostering an open and welcoming community, we pledge to respect all people who +contribute through reporting issues, posting feature requests, updating +documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free +experience for everyone, regardless of level of experience, gender, gender +identity and expression, sexual orientation, disability, personal appearance, +body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery +* Personal attacks +* Trolling or insulting/derogatory comments +* Public or private harassment +* Publishing other's private information, such as physical or electronic + addresses, without explicit permission +* Other unethical or unprofessional conduct + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +By adopting this Code of Conduct, project maintainers commit themselves to +fairly and consistently applying these principles to every aspect of managing +this project. Project maintainers who do not follow or enforce the Code of +Conduct may be permanently removed from the project team. + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project maintainers at msfdev@metasploit.com. If +the incident involves a committer, you may report directly to +egypt@metasploit.com or todb@metasploit.com. + +All complaints will be reviewed and investigated and will result in a +response that is deemed necessary and appropriate to the circumstances. +Maintainers are obligated to maintain confidentiality with regard to the +reporter of an incident. + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.3.0, available at +[http://contributor-covenant.org/version/1/3/0/][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/3/0/ \ No newline at end of file From ab36e542ee9c2da1ccd6488d98c522dbc927d744 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Thu, 25 Aug 2022 09:39:40 +0200 Subject: [PATCH 04/22] Add info project --- MANIFEST.in | 1 + __info__.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 MANIFEST.in create mode 100644 __info__.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..83dcafa --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include __info__.py \ No newline at end of file diff --git a/__info__.py b/__info__.py new file mode 100644 index 0000000..9f36dad --- /dev/null +++ b/__info__.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8 -*- +# vim: se ts=4 et syn=python: + +# created by: matteo.guadrini +# __info__ -- mkpl +# +# Copyright (C) 2022 Matteo Guadrini +# +# 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 . + +"""Information variable used by modules on this package.""" + +__version__ = '0.0.1' +__author__ = 'Matteo Guadrini' +__email__ = 'matteo.guadrini@hotmail.it' +__homepage__ = 'https://github.com/MatteoGuadrini/mkpl' From 0640e855978804585cc48d546b5bd8bab1b19b22 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Fri, 26 Aug 2022 10:10:59 +0200 Subject: [PATCH 05/22] Add GitHub content --- .github/ISSUE_TEMPLATE/mkpl-enhancement.md | 19 ++++++++++++++++ .github/ISSUE_TEMPLATE/mkpl-issue.md | 26 ++++++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 13 +++++++++++ 3 files changed, 58 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/mkpl-enhancement.md create mode 100644 .github/ISSUE_TEMPLATE/mkpl-issue.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE/mkpl-enhancement.md b/.github/ISSUE_TEMPLATE/mkpl-enhancement.md new file mode 100644 index 0000000..fe20f25 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/mkpl-enhancement.md @@ -0,0 +1,19 @@ +--- +name: mkpl enhancement +about: mkpl enhancement template +title: mkpl enhancement +labels: enhancement +assignees: MatteoGuadrini +--- + +## Description + +Description of the proposal + + +## Proposed names of the parameters (short and long) + +* name parameter +* possible argument(s) + +Additional context diff --git a/.github/ISSUE_TEMPLATE/mkpl-issue.md b/.github/ISSUE_TEMPLATE/mkpl-issue.md new file mode 100644 index 0000000..06f200f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/mkpl-issue.md @@ -0,0 +1,26 @@ +--- +name: mkpl bug +about: mkpl bug template +title: mkpl bug +labels: bug +assignees: MatteoGuadrini +--- + +## Description + +Description of problem + +## Steps to Reproduce + +Line of code + +## Expected Behaviour + +Description of what is expected + +## Your Environment + +* mkpl version used: +* Operating System and version: + +Additional context diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..f3caa63 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,13 @@ +# Title of Pull Request + +## List of changes + +- This pull request has a changes in the format: `changes is...`. + - ✅ `Add function on pynosql` + - ✅ `Add parameter -p/--parameter` + - ✅ `Update readme.md` + - ❌ `Delete part of documentation` + +### Description of the proposed features + +Descriptive text of the features. From 82b43350a8c62e6af5fdc695fbd27da3c0984047 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Sat, 27 Aug 2022 09:54:50 +0200 Subject: [PATCH 06/22] Add readme file --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..eb890bc --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# ``mkpl``: Make playlist + +``mkpl`` is a _command line tool_ for create playlist file (**M3U format**). From 151475571af570b2f78dd3b126a179aa2936d0f8 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Sun, 28 Aug 2022 10:21:05 +0200 Subject: [PATCH 07/22] Add "Command arguments" --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index eb890bc..3730ef4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,23 @@ # ``mkpl``: Make playlist ``mkpl`` is a _command line tool_ for create playlist file (**M3U format**). + +## Command arguments + +``mkpl`` have many command line arguments. They are explained in this table: + +| short | long | description | args | +|-------|----------------|-----------------------------------------------|---------------------------| +| -d | --directories | Directories that contains multimedia file | Path of directories | +| -e | --exclude-dirs | Exclude directory paths | Path of directories | +| -i | --include | Include other file format | Format of file. ex. mp3 | +| -p | --pattern | Regular expression inclusion pattern | Regular expression string | +| -f | --format | Select only a file format | Format of file. ex. mp3 | +| -s | --size | Start size in bytes | Bytes number | +| -m | --max-tracks | Maximum number of tracks | Number | +| -r | --recursive | Recursive search | | +| -a | --absolute | Absolute file name | | +| -s | --shuffle | Casual order | | +| -u | --unique | The same files are not placed in the playlist | | +| -c | --append | Continue playlist instead of override it | | + From 8b5db053100e39d0b14d473d63208963af64a2c0 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Mon, 29 Aug 2022 10:25:01 +0200 Subject: [PATCH 08/22] Add "Installation" section --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 3730ef4..e22c19d 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,14 @@ ``mkpl`` is a _command line tool_ for create playlist file (**M3U format**). +## Installation + +To install ``mkpl``, see here: + +```console +$ pip install mkpl +``` + ## Command arguments ``mkpl`` have many command line arguments. They are explained in this table: From 38845e83ff5517a936b371223ba2ec54f5a4d6ba Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Mon, 29 Aug 2022 12:06:01 +0200 Subject: [PATCH 09/22] Add "Examples" section --- README.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/README.md b/README.md index e22c19d..b817b75 100644 --- a/README.md +++ b/README.md @@ -29,3 +29,53 @@ $ pip install mkpl | -u | --unique | The same files are not placed in the playlist | | | -c | --append | Continue playlist instead of override it | | +## Examples + +1. Create a playlist for one music album: + + ```bash + cd myalbum + mkpl myalbum.m3u + ``` + +2. Create a playlist of a film saga + + ```bash + mkpl -d HarryPotter -f mkv HP_saga.m3u + ``` + +3. Create a shuffled playlist with my music collection + + ```bash + mkpl -d "my_mp3_collection" "my_mp4_collection" -rs "my music.m3u" + ``` + +4. Create a shuffled playlist with my music collection and exclude dirs + + ```bash + mkpl -d "my_mp3_collection" "my_mp4_collection" -r -s -e "my_mp3_collection/metallica" "my_mp3_collection/dk" "my music.m3u" + ``` + +5. Create a TV series playlist with max 15 tracks + + ```bash + mkpl -d "my_series/GOT" -m 15 "got_first_15.m3u" + ``` + +6. Add into _my_music_ playlist new songs and don't add same file + + ```bash + mkpl -d "new_collection" -rsu "my music.m3u" -a + ``` + +7. Create playlist with music and video files if files is greater then 10MB + + ```bash + mkpl -d "my_files" -r -z 10485760 "multimedia.m3u" + ``` + +8. Create playlist with only number one and two tracks wit regular expression + + ```bash + mkpl -d "my_mp3_collection" -r -p "^[12]|[012]{2}" "my music.m3u" + ``` \ No newline at end of file From 79e7b4235d4bf2911f86b856a9726aa67ec02b3f Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Tue, 30 Aug 2022 09:42:54 +0200 Subject: [PATCH 10/22] Add "Open source" section --- README.md | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b817b75..23b21dc 100644 --- a/README.md +++ b/README.md @@ -78,4 +78,48 @@ $ pip install mkpl ```bash mkpl -d "my_mp3_collection" -r -p "^[12]|[012]{2}" "my music.m3u" - ``` \ No newline at end of file + ``` + +## Open source +_mkpl_ is an open source project. Any contribute, It's welcome. + +**A great thanks**. + +For donations, press this + +For me + +[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.me/guos) + +For [Telethon](http://www.telethon.it/) + +The Telethon Foundation is a non-profit organization recognized by the Ministry of University and Scientific and Technological Research. +They were born in 1990 to respond to the appeal of patients suffering from rare diseases. +Come today, we are organized to dare to listen to them and answers, every day of the year. + + Telethon + +[Adopt the future](https://www.ioadottoilfuturo.it/) + + +## Treeware + +This package is [Treeware](https://treeware.earth). If you use it in production, +then we ask that you [**buy the world a tree**](https://plant.treeware.earth/matteoguadrini/mkpl) to thank us for our work. +By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats. + +[![Treeware](https://img.shields.io/badge/dynamic/json?color=brightgreen&label=Treeware&query=%24.total&url=https%3A%2F%2Fpublic.offset.earth%2Fusers%2Ftreeware%2Ftrees)](https://treeware.earth) + + +## Acknowledgments + +Thanks to Mark Lutz for writing the _Learning Python_ and _Programming Python_ books that make up my python foundation. + +Thanks to Kenneth Reitz and Tanya Schlusser for writing the _The Hitchhiker’s Guide to Python_ books. + +Thanks to Dane Hillard for writing the _Practices of the Python Pro_ books. + +Special thanks go to my wife, who understood the hours of absence for this development. +Thanks to my children, for the daily inspiration they give me and to make me realize, that life must be simple. + +Thanks Python! \ No newline at end of file From b15d9a5ad3d4a56232562026fb9422d706d5219d Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Wed, 31 Aug 2022 10:04:51 +0200 Subject: [PATCH 11/22] Create mkpl module --- mkpl.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 mkpl.py diff --git a/mkpl.py b/mkpl.py new file mode 100644 index 0000000..3bd5d5e --- /dev/null +++ b/mkpl.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8 -*- +# vim: se ts=4 et syn=python: + +# created by: matteo.guadrini +# mkpl -- mkpl +# +# Copyright (C) 2022 Matteo Guadrini +# +# 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 . + +"""mkpl module. This is command line utility for playlist creation.""" + From 7c6ad21b2ebbc7c14ad3419b5f7e7eccbb56607a Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Thu, 1 Sep 2022 12:20:06 +0200 Subject: [PATCH 12/22] Add file formats --- mkpl.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mkpl.py b/mkpl.py index 3bd5d5e..7e9ef1f 100644 --- a/mkpl.py +++ b/mkpl.py @@ -22,3 +22,8 @@ """mkpl module. This is command line utility for playlist creation.""" +# region globals +FILE_FORMAT = {'mp1', 'mp2', 'mp3', 'mp4', 'aac', 'ogg', 'wav', 'wma', + 'avi', 'xvid', 'divx', 'mpeg', 'mpg', 'mov', 'wmv'} + +# endregion From d7b0ceba11435ade43f7a6c0f9dfefe681553e40 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Thu, 1 Sep 2022 12:26:38 +0200 Subject: [PATCH 13/22] Add get_args function --- mkpl.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/mkpl.py b/mkpl.py index 7e9ef1f..4964962 100644 --- a/mkpl.py +++ b/mkpl.py @@ -22,8 +22,63 @@ """mkpl module. This is command line utility for playlist creation.""" +# region imports +import argparse + +# endregion + # region globals FILE_FORMAT = {'mp1', 'mp2', 'mp3', 'mp4', 'aac', 'ogg', 'wav', 'wma', 'avi', 'xvid', 'divx', 'mpeg', 'mpg', 'mov', 'wmv'} + +# endregion + +# region functions +def get_args(): + """Get command-line arguments""" + + global FILE_FORMAT + + parser = argparse.ArgumentParser( + description="Make music playlist", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + epilog='Playlist format is m3u' + ) + + parser.add_argument("playlist", help="Playlist file", type=str) + parser.add_argument("-d", "--directories", help="Directories that contains multimedia file", + nargs=argparse.ONE_OR_MORE, default=['.']) + parser.add_argument("-e", "--exclude-dirs", help="Exclude directory paths", nargs=argparse.ONE_OR_MORE, default=[]) + parser.add_argument("-i", "--include", help="Include other file format", nargs=argparse.ONE_OR_MORE, + metavar='FORMAT') + parser.add_argument("-p", "--pattern", help="Regular expression inclusion pattern", default='.*') + parser.add_argument("-f", "--format", help="Select only a file format", type=str, choices=FILE_FORMAT) + parser.add_argument("-z", "--size", help="Start size in bytes", type=int, default=1, metavar='BYTES') + parser.add_argument("-m", "--max-tracks", help="Maximum number of tracks", type=int, default=None, metavar='NUMBER') + parser.add_argument("-r", "--recursive", help="Recursive search", action='store_true') + parser.add_argument("-a", "--absolute", help="Absolute file name", action='store_true') + parser.add_argument("-s", "--shuffle", help="Casual order", action='store_true') + parser.add_argument("-u", "--unique", help="The same files are not placed in the playlist", action='store_true') + parser.add_argument("-c", "--append", help="Continue playlist instead of override it", action='store_true') + + args = parser.parse_args() + + # Check extension of playlist file + if not args.playlist.endswith('.m3u'): + args.playlist += '.m3u' + + # Open playlist file + mode = 'at' if args.append else 'wt' + args.playlist = open(args.playlist, mode=mode) + + # Extend files format + if args.include: + FILE_FORMAT.update(set(args.include)) + + # Select only one format + if args.format: + FILE_FORMAT = {args.format.strip('*').strip('.')} + + return args # endregion From 550f83a9a925a7aaee7e8ff1aa8b3881d02cbdeb Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Fri, 2 Sep 2022 09:25:26 +0200 Subject: [PATCH 14/22] Add file_in_playlist function --- mkpl.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/mkpl.py b/mkpl.py index 4964962..4ada71d 100644 --- a/mkpl.py +++ b/mkpl.py @@ -24,6 +24,8 @@ # region imports import argparse +from filecmp import cmp +from os.path import join # endregion @@ -81,4 +83,15 @@ def get_args(): FILE_FORMAT = {args.format.strip('*').strip('.')} return args + + +def file_in_playlist(playlist, file, root=None): + """Check if file is in the playlist""" + for f in playlist: + # Check if absolute path in playlist + if root: + f = join(root, f) + # Compare two files + if cmp(f, file): + return True # endregion From 4bf67dc729c01c6e401fb2259fcb697fedfde7ce Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Sat, 3 Sep 2022 12:26:09 +0200 Subject: [PATCH 15/22] Add main function --- mkpl.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/mkpl.py b/mkpl.py index 4ada71d..65c97dd 100644 --- a/mkpl.py +++ b/mkpl.py @@ -24,8 +24,10 @@ # region imports import argparse +from re import findall from filecmp import cmp from os.path import join +from pathlib import Path # endregion @@ -94,4 +96,38 @@ def file_in_playlist(playlist, file, root=None): # Compare two files if cmp(f, file): return True + + +def main(): + """Make a playlist""" + + args = get_args() + multimedia_files = list() + + # Walk to directories + for directory in args.directories: + # Build a Path object + path = Path(directory) + root = path.parent + for fmt in FILE_FORMAT: + # Check recursive + folder = '**/*' if args.recursive else '*' + for file in path.glob(folder + f'.{fmt}'): + # Check if in exclude dirs + if any([e_path in str(file) for e_path in args.exclude_dirs]): + continue + # Check if file is in playlist + if args.unique: + if file_in_playlist(multimedia_files, + str(file), + root=root if not args.absolute else None): + continue + # Check absolute file names + size = file.stat().st_size + file = str(file) if args.absolute else str(file.relative_to(path.parent)) + # Check re pattern + if findall(args.pattern, file): + # Check file size + if size >= args.size: + multimedia_files.append(file) # endregion From b05b9c0688310dbd882922b0032dd858740c3117 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Sun, 4 Sep 2022 12:30:24 +0200 Subject: [PATCH 16/22] Add playlist maker --- mkpl.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mkpl.py b/mkpl.py index 65c97dd..8fca166 100644 --- a/mkpl.py +++ b/mkpl.py @@ -28,6 +28,7 @@ from filecmp import cmp from os.path import join from pathlib import Path +from random import shuffle # endregion @@ -130,4 +131,15 @@ def main(): # Check file size if size >= args.size: multimedia_files.append(file) + + # Build a playlist + if multimedia_files: + # Check shuffle + if args.shuffle: + shuffle(multimedia_files) + with args.playlist as playlist: + playlist.writelines('\n'.join(multimedia_files[:args.max_tracks])) + else: + print(f'warning: No multimedia files found here: {",".join(args.directories)}') + # endregion From 0159458eb9624d6fcf0e125d0ef1fdf49108bb4c Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Mon, 5 Sep 2022 12:41:22 +0200 Subject: [PATCH 17/22] Add main region --- mkpl.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mkpl.py b/mkpl.py index 8fca166..87974a0 100644 --- a/mkpl.py +++ b/mkpl.py @@ -142,4 +142,11 @@ def main(): else: print(f'warning: No multimedia files found here: {",".join(args.directories)}') + +# endregion + +# region main +if __name__ == "__main__": + main() + # endregion From 4d27d54243fb5c2a8529789c1cad8afa30696704 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Tue, 6 Sep 2022 12:33:34 +0200 Subject: [PATCH 18/22] Add version argument --- __info__.py | 2 +- mkpl.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/__info__.py b/__info__.py index 9f36dad..30524a7 100644 --- a/__info__.py +++ b/__info__.py @@ -22,7 +22,7 @@ """Information variable used by modules on this package.""" -__version__ = '0.0.1' +__version__ = '1.0.0' __author__ = 'Matteo Guadrini' __email__ = 'matteo.guadrini@hotmail.it' __homepage__ = 'https://github.com/MatteoGuadrini/mkpl' diff --git a/mkpl.py b/mkpl.py index 87974a0..9eb0a0e 100644 --- a/mkpl.py +++ b/mkpl.py @@ -35,6 +35,7 @@ # region globals FILE_FORMAT = {'mp1', 'mp2', 'mp3', 'mp4', 'aac', 'ogg', 'wav', 'wma', 'avi', 'xvid', 'divx', 'mpeg', 'mpg', 'mov', 'wmv'} +__version__ = '1.0.0' # endregion @@ -52,6 +53,7 @@ def get_args(): ) parser.add_argument("playlist", help="Playlist file", type=str) + parser.add_argument("-v", "--version", help="Print version", action='version', version=__version__) parser.add_argument("-d", "--directories", help="Directories that contains multimedia file", nargs=argparse.ONE_OR_MORE, default=['.']) parser.add_argument("-e", "--exclude-dirs", help="Exclude directory paths", nargs=argparse.ONE_OR_MORE, default=[]) From 15afd5ec4d04099bb87551278d6ebd22815bf92c Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Wed, 7 Sep 2022 16:17:47 +0200 Subject: [PATCH 19/22] Add setup --- setup.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 setup.py diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..34479db --- /dev/null +++ b/setup.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8 -*- +# vim: se ts=4 et syn=python: + +# created by: matteo.guadrini +# setup -- mkpl +# +# Copyright (C) 2022 Matteo Guadrini +# +# 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 . + +import __info__ +from setuptools import setup + +with open("README.md", "r") as fh: + long_description = fh.read() + +setup( + name='mkpl', + version=__info__.__version__, + url=__info__.__homepage__, + project_urls={ + 'Documentation': __info__.__homepage__, + 'GitHub Project': __info__.__homepage__, + 'Issue Tracker': __info__.__homepage__ + '/issues' + }, + license='GNU General Public License v3.0', + author=__info__.__author__, + author_email=__info__.__email__, + maintainer=__info__.__author__, + maintainer_email=__info__.__email__, + description='Make M3U format playlist from command line', + long_description=long_description, + long_description_content_type="text/markdown", + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", + "Operating System :: OS Independent" + ], + entry_points={ + 'console_scripts': [ + 'dinosay = mkpl:main' + ] + }, + python_requires='>=3.5' +) From 9f883c2501b3de7c17873f385f277a5508c7fcff Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Thu, 8 Sep 2022 11:15:57 +0200 Subject: [PATCH 20/22] Fix command line script name --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 34479db..6f099d1 100644 --- a/setup.py +++ b/setup.py @@ -50,7 +50,7 @@ ], entry_points={ 'console_scripts': [ - 'dinosay = mkpl:main' + 'mkpl = mkpl:main' ] }, python_requires='>=3.5' From edce2583ceccad5f7d858de065d8c3a817ac69e5 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Fri, 9 Sep 2022 10:26:37 +0200 Subject: [PATCH 21/22] Add GitHub page configuration --- _config.yml | 4 ++++ index.md | 1 + 2 files changed, 5 insertions(+) create mode 100644 _config.yml create mode 120000 index.md diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..3a05331 --- /dev/null +++ b/_config.yml @@ -0,0 +1,4 @@ +theme: jekyll-theme-leap-day +name: Matteo Guadrini +show_downloads: true +description: "Make M3U format playlist from command line." \ No newline at end of file diff --git a/index.md b/index.md new file mode 120000 index 0000000..42061c0 --- /dev/null +++ b/index.md @@ -0,0 +1 @@ +README.md \ No newline at end of file From a03bf06a88642b6d099555a6999453a4b9ff84f9 Mon Sep 17 00:00:00 2001 From: Matteo Guadrini Date: Fri, 9 Sep 2022 10:32:17 +0200 Subject: [PATCH 22/22] Add other installation instructions --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 23b21dc..90319e2 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,13 @@ To install ``mkpl``, see here: ```console -$ pip install mkpl +$ pip install mkpl # for python enviroment + +$ dnf copr enable matteoguadrini/mkpl +$ dnf install python-mkpl -y # for Red Hat, CentOS, Mageia and fedora + +$ git clone https://github.com/MatteoGuadrini/mkpl.git && cd mkpl +$ python setup.py install # for others ``` ## Command arguments