From 4b777a8935fe04e644d51450476b017d8657ff01 Mon Sep 17 00:00:00 2001 From: Lukas Winkler Date: Mon, 15 Jun 2020 22:03:37 +0200 Subject: [PATCH] cleanup everything --- LICENSE | 674 ++++++++++++++++++ Makefile | 7 +- README.md | 37 +- astroacro.desktop => acronomy.desktop | 4 +- acronomy.py | 75 ++ astroacro.py | 58 -- ....desktop => plasma-runner-acronomy.desktop | 8 +- screenshot.png | Bin 0 -> 30082 bytes 8 files changed, 782 insertions(+), 81 deletions(-) create mode 100644 LICENSE rename astroacro.desktop => acronomy.desktop (59%) create mode 100644 acronomy.py delete mode 100644 astroacro.py rename plasma-runner-astroacro.desktop => plasma-runner-acronomy.desktop (71%) create mode 100644 screenshot.png diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + 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 +. diff --git a/Makefile b/Makefile index 12129c4..931b505 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,10 @@ install-config: mkdir -p ~/.local/share/kservices5/ - rm ~/.local/share/kservices5/plasma-runner-astroacro.desktop + rm -f ~/.local/share/kservices5/plasma-runner-acronomy.desktop kquitapp5 krunner; kstart5 krunner - cp plasma-runner-astroacro.desktop ~/.local/share/kservices5/ + cp plasma-runner-acronomy.desktop ~/.local/share/kservices5/ kquitapp5 krunner; kstart5 krunner create-autostart: - # Configure the path in the .desktop file first mkdir -p ~/.config/autostart/ - cp astroacro_autostart.desktop ~/.config/autostart/ + cp astroacro.desktop ~/.config/autostart/ diff --git a/README.md b/README.md index 4bde45e..8352d1c 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,26 @@ -### Simple Krunner dbus template +## Acronomy Krunner plugin -This plugin provides a simple template for a Krunner plugin using dbus. - -To run this plugin you have to execute the `make install-config` command. -This installs the .desktop file so that your runner gets recognized. -Secondly you have to run your script. Because Krunner queries the dbus -interface and does not load a plugin you can use for example a debugger. - -More information can be found here: -https://cgit.kde.org/krunner.git/plain/src/data/org.kde.krunner1.xml -https://techbase.kde.org/Development/Tutorials/D-Bus/Introduction +![screenshot](screenshot.png) -On Debian/Ubuntu you need: -`sudo apt install python3 python3-hglib` \ No newline at end of file +This plugin allows to quickly look up an acronym on [Acronomy](https://acronomy.lw1.at/) directly from the Krunner KDE plasma search. + +#### Installation + +- copy the `plasma-runner-acronomy.desktop` file to `~/.local/share/kservices5/` +- restart krunner: `kquitapp5 krunner; kstart5 krunner` + +The `acronomy.py` script needs to run permanently in the background to fetch the results. + +One easy way to accomplish this is to copy the `acronomy.desktop` to `~/.config/autostart/`. + +You can replace the search keyword (default `acr`) with the `--keyword` parameter. + +If you enable the `--less-privacy` mode, you don't need to specify any search keyword, but as a result all krunner searches are sent to the Astroacro API. (instead of only the ones starting with the search keyword) + + +This plugin uses the [Astroacro API](https://acronomy.lw1.at/api/). ([Privacy Policy](http://lw1.at/i)) + + +-------------------- + +based on [Krunner Python Plugin](https://store.kde.org/p/1333634/) by Alexander Lohnau licenced under GPLv2 or later diff --git a/astroacro.desktop b/acronomy.desktop similarity index 59% rename from astroacro.desktop rename to acronomy.desktop index 0840196..b7bab14 100644 --- a/astroacro.desktop +++ b/acronomy.desktop @@ -2,9 +2,9 @@ Version=1.0 Type=Application Name=Runner -Comment=Autostart entry for a Krunner plugin +Comment=Autostart entry for the Acronomy Krunner plugin Keywords=Runner;Krunner Categories=Utilities -Exec=python3 "%{Folder_LOCATION}/astroacro.py" +Exec=python3 "/path/to/acronomy.py" Icon=python StartupNotify=true diff --git a/acronomy.py b/acronomy.py new file mode 100644 index 0000000..f25ab7f --- /dev/null +++ b/acronomy.py @@ -0,0 +1,75 @@ +#!/bin/env python3 +import argparse +import webbrowser + +import dbus.service +import requests +from dbus.mainloop.glib import DBusGMainLoop +from gi.repository import GLib + +DBusGMainLoop(set_as_default=True) + +objpath = "/acronomy" + +iface = "org.kde.krunner1" + +s = requests.Session() + + +class Runner(dbus.service.Object): + def __init__(self, args): + self.args = args + dbus.service.Object.__init__(self, dbus.service.BusName("net.acronomy", dbus.SessionBus()), objpath) + + @dbus.service.method(iface, in_signature="s", out_signature="a(sssida{sv})") + def Match(self, query: str): + + if not self.args.less_privacy: + if not query.startswith(self.args.keyword): + return [] + query = query.replace(self.args.keyword + " ", "") + + if " " in query: + return [] + + runners = [] + r = s.get("https://acronomy.lw1.at/api/acronym/", params={"search": query}) + icon = "plasmagik" + type = 100 # (Plasma::QueryType) + relevance = 0.2 # 0-1 + + for result in r.json(): + data = result["slug"] + display_text = result["name"] + ": " + result["full_name"] + properties = { + "subtext": ", ".join(result["tags"]), + # "category": "", + # "urls": "" + } + runners.append((data, display_text, icon, type, relevance, properties)) + return runners + + # @dbus.service.method(iface, out_signature="a(sss)") + # def Actions(self): + # # id, text, icon + # return [("id", "Tooltip", "planetkde")] + + @dbus.service.method(iface, in_signature="ss") + def Run(self, data: str, action_id: str) -> None: + webbrowser.open("https://acronomy.lw1.at/acronym/" + data) + + +def main(): + parser = argparse.ArgumentParser(description="acrronomy krunner background task") + parser.add_argument("-k", "--keyword", action="store", default="acr") + parser.add_argument("-l", "--less-privacy", action="store_true", default=False) + + args = parser.parse_args() + + runner = Runner(args) + loop = GLib.MainLoop() + loop.run() + + +if __name__ == "__main__": + main() diff --git a/astroacro.py b/astroacro.py deleted file mode 100644 index 235a866..0000000 --- a/astroacro.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/env python3 -import webbrowser - -import dbus.service -import requests -from dbus.mainloop.glib import DBusGMainLoop -from gi.repository import GLib - -DBusGMainLoop(set_as_default=True) - -objpath = "/astroacro" - -iface = "org.kde.krunner1" - -s = requests.Session() - - -class Runner(dbus.service.Object): - def __init__(self): - dbus.service.Object.__init__(self, dbus.service.BusName("net.astroacro", dbus.SessionBus()), objpath) - - @dbus.service.method(iface, in_signature='s', out_signature='a(sssida{sv})') - def Match(self, query: str): - """This method is used to get the matches and it returns a list of lists/tupels""" - if " " in query: - return [] - - runners = [] - r = s.get("http://127.0.0.1:8000/api/acronym/", params={"search": query}) - icon = "internet-web-browser" - type = 100 # (Plasma::QueryType) - relevance = 1.0 # 0-1 - - for result in r.json(): - data = result["slug"] - display_text = result["name"] + ": " + result["full_name"] - properties = { - "subtext": ", ".join(result["tags"]), - # "category": "", - # "urls": "" - } - runners.append((data, display_text, icon, type, relevance, properties)) - return runners - - # @dbus.service.method(iface, out_signature='a(sss)') - # def Actions(self): - # # id, text, icon - # return [("id", "Tooltip", "planetkde")] - - @dbus.service.method(iface, in_signature='ss') - def Run(self, data: str, action_id: str): - print(data, action_id) - webbrowser.open("http://127.0.0.1:8000/acro/" + data) - - -runner = Runner() -loop = GLib.MainLoop() -loop.run() diff --git a/plasma-runner-astroacro.desktop b/plasma-runner-acronomy.desktop similarity index 71% rename from plasma-runner-astroacro.desktop rename to plasma-runner-acronomy.desktop index f166576..1ae7305 100644 --- a/plasma-runner-astroacro.desktop +++ b/plasma-runner-acronomy.desktop @@ -1,15 +1,15 @@ [Desktop Entry] -Name=astroacro +Name=Acronomy Comment=Look up astronomical Acronyms X-KDE-ServiceTypes=Plasma/Runner Type=Service Icon=accessories-dictionary X-KDE-PluginInfo-Author=Lukas Winkler X-KDE-PluginInfo-Email=kde@lw1.at -X-KDE-PluginInfo-Name=astroacro +X-KDE-PluginInfo-Name=acronomy X-KDE-PluginInfo-Version=1.0 X-KDE-PluginInfo-License=LGPL X-KDE-PluginInfo-EnabledByDefault=true X-Plasma-API=DBus -X-Plasma-DBusRunner-Service=net.astroacro -X-Plasma-DBusRunner-Path=/astroacro +X-Plasma-DBusRunner-Service=net.acronomy +X-Plasma-DBusRunner-Path=/acronomy diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..dc41c5395482b57d68a6a7dcc5d0959f02faca08 GIT binary patch literal 30082 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 TzySq@aY8bZ3NQ1;4gLNHH%nQU literal 0 HcmV?d00001