From a68c822cb50f07da22dfcab8c32a01b40cb856e9 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sun, 23 Jun 2024 22:19:04 +0200 Subject: [PATCH] Release --- .gitignore | 3 +- LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 46 +++- dataview-query.js | 4 +- image1.png | Bin 0 -> 74110 bytes image2.png | Bin 0 -> 17479 bytes main.janet | 64 ++--- media.janet | 21 -- utils.janet | 45 ++++ 9 files changed, 790 insertions(+), 67 deletions(-) create mode 100644 LICENSE create mode 100644 image1.png create mode 100644 image2.png delete mode 100644 media.janet create mode 100644 utils.janet diff --git a/.gitignore b/.gitignore index 36d33ed..8f72eb2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ build jpm_tree response.json -bookmarks \ No newline at end of file +bookmarks +.env \ No newline at end of file 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/README.md b/README.md index 1ec295f..0522b23 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,47 @@ -## Setup +# Mastodon Bookmarks Archive +_A small Janet script to archive all your Mastodon bookmarks in Markdown files._ + +Because Mastodon posts can disappear for a variety of reasons (deletion, defederation, server instance shutdown, ...), it is safer to archive your bookmarks. + +Each Markdown file will contain: +- A link to the original post +- The author's handle +- The post's content in HTML +- The media attachments locally downloaded +- If available, the alt text for each media + +Most of these values will be in the form of `key:: value` for easy integration with Obsidian's plugin Dataview. A sample script is available [here](./dataview-query.js) + +## Setup & Run + +- Get an access token for your Mastodon account + +![](image1.png) +![](image2.png) + +- Run the program + +```sh +$ ./mastodon-bookmarks YOUR_APP_TOKEN +``` + +## Development + +- Clone this repository - Install Janet and jpm https://janet-lang.org/ - `jpm deps --local` -- `mkdir -R bookmarks/attachments` -- Replace the `apptoken` value in `main.janet` -## Run - -`janet main.janet` +```sh +$ janet main.janet YOUR_APP_TOKEN +``` ## Build binary -`jpm build` +```sh +$ jpm build +``` +## LICENSE + +Licensed under [GPL-3](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3). diff --git a/dataview-query.js b/dataview-query.js index 8927bdf..602bdaf 100644 --- a/dataview-query.js +++ b/dataview-query.js @@ -4,9 +4,9 @@ const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); .filter(p => p.file.name !== dv.current().file.name) .sort((a,b) => new Date(b['mastodon-published']) - new Date(a['mastodon-published'])) for (const page of pages) { - console.log(page) + dv.span(`[[${page.file.path}]]`) dv.span(`![[${page.file.path}]]`) dv.span('


') - await wait(1) + await wait(0) } })() diff --git a/image1.png b/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..ebf9ceb553d7241dfce1e8a86af42c153b64ef2e GIT binary patch literal 74110 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

P-JjLY_7{)FB_xJSufB^<7A^&Fjq3 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 literal 0 HcmV?d00001 diff --git a/image2.png b/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..49c4280f24addeaa89a1d5f8df7cd63915142ae3 GIT binary patch literal 17479 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 G`~LxMHyMrq literal 0 HcmV?d00001 diff --git a/main.janet b/main.janet index 87145ca..4f20510 100644 --- a/main.janet +++ b/main.janet @@ -1,45 +1,23 @@ (import httprequest :as r) (import spork/json :as json) -(import ./media :as media) +(import ./utils :as utils) -(def apptoken "REDACTED") +(var apptoken "") +(var dbg false) (def urls @["https://hachyderm.io/api/v1/bookmarks"]) (def save-path "./bookmarks/") - (def done @[]) -(defn array/shift [arr] - "Removes the first element from the array." - (if (empty? arr) (break nil)) - (def head (in arr 0)) - (array/remove arr 0) - head) - - -(defn get-link [response rel] - "Gets the link with the specified relation from the response. - e.g. (get-link response \"next\")" - - # Get the links from the headers - (def link-header ((response :headers) "Link")) - (if (= link-header nil) (break nil)) - - (def links (string/split "," link-header)) - # Find the link with the specified relation - (def link (find |(not= (string/find rel $) nil) links)) - # Extract the url from the link string (as an array of 1 element) - (def url (peg/match ~(sequence (any " ") "<" (capture (some (if-not ">" 1))) ">") link)) - (if url (in url 0) nil)) - (defn download-media [item] "Downloads the media from the item." (def files @[]) (def media (item "media_attachments")) + (pp (item "media_attachments")) (each m media (def url (m "url")) (def folder (string save-path "attachments/")) - (array/push files {:path (string "./attachments/" (media/get-image url folder)) + (array/push files {:path (string "./attachments/" (utils/get-image url folder)) :description (m "description")})) (pp files) files) @@ -80,24 +58,35 @@ (defn download-bookmarks [] "Downloads the bookmarks and saves them to a file." (while (>= (length urls) 0) - (def url (array/shift urls)) - (print (string "Downloading " url)) + (def url (utils/array-shift urls)) + # Empty array means we're done + (if (not url) + (do + (print "Done") + (os/exit 0))) + + (print (string "Downloading " url)) (def response (r/get url {"Authorization" (string "Bearer " apptoken)} {})) + (def bookmarks (json/decode (response :body) false true)) + (if (and (struct? bookmarks) (bookmarks "error")) + (do + (print (string "Error: " (bookmarks "error"))) + (os/exit 1))) + # Pagination - (def next-link (get-link response "next")) + (def next-link (utils/get-link response "next")) (if (and next-link (not (has-value? done next-link))) (array/insert urls 0 next-link)) - (def prev-link (get-link response "prev")) + (def prev-link (utils/get-link response "prev")) (if (and prev-link (not (has-value? done prev-link))) (array/insert urls 0 prev-link)) - (def bookmarks (json/decode (response :body))) # Debugging - write response to file - (def fout (file/open "./response.json" :w)) - (file/write fout (response :body)) + (if dbg (do (def fout (file/open "./response.json" :w)) + (file/write fout (response :body)))) # Write the bookmarks to md files (each item bookmarks @@ -107,5 +96,8 @@ (defn main [& args] - (download-bookmarks) - (print "Done.")) + (set apptoken (or (os/getenv "TOKEN") (args 1))) + (set dbg (get args 2)) + (os/mkdir "./bookmarks") + (os/mkdir "./bookmarks/attachments") + (download-bookmarks)) diff --git a/media.janet b/media.janet deleted file mode 100644 index a813a58..0000000 --- a/media.janet +++ /dev/null @@ -1,21 +0,0 @@ -(import httprequest :as r) - -(defn get-image [url folder &named headers opts] - "Download an image from a URL and save it to a file. Returns the path to the saved file." - (default headers {}) - (default opts {}) - - (def filename (array/pop (string/split "/" url))) - (def fullpath (string folder filename)) - - # Check if the file already exists - (def existing (file/open fullpath :r)) - (if existing (file/close existing)) - (if (not existing) - (do - (print (string "Downloading " url)) - (def response (r/get url headers opts)) - (def fout (file/open fullpath :w)) - (file/write fout (response :body)) - (file/close fout))) - filename) diff --git a/utils.janet b/utils.janet new file mode 100644 index 0000000..19332aa --- /dev/null +++ b/utils.janet @@ -0,0 +1,45 @@ +(import httprequest :as r) + +(defn get-image [url folder &named headers opts] + "Download an image from a URL and save it to a file. Returns the path to the saved file." + (default headers {}) + (default opts {}) + + (def filename (array/pop (string/split "/" url))) + (def fullpath (string folder filename)) + + # Check if the file already exists + (def existing (file/open fullpath :r)) + (if existing (file/close existing)) + (if (not existing) + (do + (print (string "Downloading " url)) + (def response (r/get url headers opts)) + (def fout (file/open fullpath :w)) + (file/write fout (response :body)) + (file/close fout))) + filename) + +(defn get-link [response rel] + "Gets the link with the specified relation from the response. + e.g. (get-link response \"next\")" + + # Get the links from the headers + (def link-header ((response :headers) "Link")) + (if (= link-header nil) (break nil)) + + (def links (string/split "," link-header)) + # Find the link with the specified relation + (def link (find |(not= (string/find rel $) nil) links)) + # Extract the url from the link string (as an array of 1 element) + (if link (do + (def url (peg/match ~(sequence (any " ") "<" (capture (some (if-not ">" 1))) ">") link)) + (if url (in url 0) nil)))) + + +(defn array-shift [arr] + "Removes the first element from the array." + (if (empty? arr) (break nil)) + (def head (in arr 0)) + (array/remove arr 0) + head) \ No newline at end of file