From bfcc00a480ed1ef5e92662019f801c189ddf31b1 Mon Sep 17 00:00:00 2001 From: legatvs Date: Sun, 1 Mar 2009 22:05:26 +0200 Subject: [PATCH] Initial commit. --- AUTHORS | 1 + CHANGES | 4 + COPYING | 674 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ README | 23 ++ TODO | 46 ++++ abby.pro | 19 ++ i18n/abby_fi.qm | Bin 0 -> 6814 bytes i18n/abby_fi.ts | 568 ++++++++++++++++++++++++++++++++++++++++++++++ rc/Makefile | 205 +++++++++++++++++ rc/abby.png | Bin 0 -> 399 bytes rc/abby.qrc | 6 + rc/aboutdlg.ui | 184 +++++++++++++++ rc/mainwnd.ui | 672 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ rc/passdlg.ui | 96 ++++++++ rc/prefsdlg.ui | 542 ++++++++++++++++++++++++++++++++++++++++++++ rc/rc.pro | 12 + src/aboutdlg.cpp | 47 ++++ src/aboutdlg.h | 30 +++ src/main.cpp | 47 ++++ src/mainwnd.cpp | 316 ++++++++++++++++++++++++++ src/mainwnd.h | 55 +++++ src/passdlg.cpp | 26 +++ src/passdlg.h | 30 +++ src/prefsdlg.cpp | 181 +++++++++++++++ src/prefsdlg.h | 46 ++++ 25 files changed, 3830 insertions(+) create mode 100644 AUTHORS create mode 100644 CHANGES create mode 100644 COPYING create mode 100644 README create mode 100644 TODO create mode 100644 abby.pro create mode 100644 i18n/abby_fi.qm create mode 100644 i18n/abby_fi.ts create mode 100644 rc/Makefile create mode 100644 rc/abby.png create mode 100644 rc/abby.qrc create mode 100644 rc/aboutdlg.ui create mode 100644 rc/mainwnd.ui create mode 100644 rc/passdlg.ui create mode 100644 rc/prefsdlg.ui create mode 100644 rc/rc.pro create mode 100644 src/aboutdlg.cpp create mode 100644 src/aboutdlg.h create mode 100644 src/main.cpp create mode 100644 src/mainwnd.cpp create mode 100644 src/mainwnd.h create mode 100644 src/passdlg.cpp create mode 100644 src/passdlg.h create mode 100644 src/prefsdlg.cpp create mode 100644 src/prefsdlg.h diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..64004e5 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Toni Gundogdu diff --git a/CHANGES b/CHANGES new file mode 100644 index 0000000..5466c8d --- /dev/null +++ b/CHANGES @@ -0,0 +1,4 @@ +0.1.0 +(March 1, 2009) + + * Initial release diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/COPYING @@ -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 b/README new file mode 100644 index 0000000..1ab251e --- /dev/null +++ b/README @@ -0,0 +1,23 @@ + + + abby - for the command line fearing masses + +abby is a front-end for cclive video extraction utility. It is +written in C++ and depends on the Qt 4.3+ framework. + + + Prerequisites + +- Qt 4.3+, if you are building abby from the source code, be sure +to install the development files also. + +- cclive 0.2.3+, from http://code.google.com/p/cclive/ + + + Compiling abby + +Normally you can just do: + % qmake-qt4 && make + +This builds the 'abby' executable. Installing isn't currently supported +but you can just as well copy the executable to your ~/bin directory. diff --git a/TODO b/TODO new file mode 100644 index 0000000..5ff2838 --- /dev/null +++ b/TODO @@ -0,0 +1,46 @@ + +0.1.1 +* implement --stream-exec and --stream + +0.1.x +* create a proper window icon + +planned +* replace ui with + - menubar + - file + - add link... + - remove (selected) link(s) + - clear completed + - about... + - edit + - preferences... + - toolbar + - add + - remove + - clear + -- sep + - move up + - move down + - treeview + - used as a queue + - configurable columns + - id | proc_id | status | filename | ... + - window splitter + - tab widget + - general + - transfer details + - log + - cclive log + - statusbar + +* add AddDialog + - similar to 0.1.x "video link" combined with "options" +* add "number of active transfers" to preferences +* add "language" to preferences (req. restart) +* improve "user-experience" + - autocheck --continue compatibility + - autocheck --exec expression + - autocheck --format compatibility +* consider adding compatibility level for clive +* integrated rss parsing feature diff --git a/abby.pro b/abby.pro new file mode 100644 index 0000000..2c671ce --- /dev/null +++ b/abby.pro @@ -0,0 +1,19 @@ +###################################################################### +# Automatically generated by qmake (2.01a) Sun Mar 1 20:41:59 2009 +###################################################################### + +TEMPLATE = app +TARGET = +DEPENDPATH += . i18n rc src +INCLUDEPATH += . src + +# Input +HEADERS += src/aboutdlg.h src/mainwnd.h src/passdlg.h src/prefsdlg.h +FORMS += rc/aboutdlg.ui rc/mainwnd.ui rc/passdlg.ui rc/prefsdlg.ui +SOURCES += src/aboutdlg.cpp \ + src/main.cpp \ + src/mainwnd.cpp \ + src/passdlg.cpp \ + src/prefsdlg.cpp +RESOURCES += rc/abby.qrc +TRANSLATIONS += i18n/abby_fi.ts diff --git a/i18n/abby_fi.qm b/i18n/abby_fi.qm new file mode 100644 index 0000000000000000000000000000000000000000..ba3870e8e75d9e9c1e3682d26b4cbf9e9b8a3fc5 GIT binary patch literal 6814 zcwW_5eQaA-6+gDqe7rbz7P3*o6in1bC2c+wLWR7JwWIAqKeDifqz$OzC2<;_zPRfeec|R&&Th4+;hG0+}P@czaRhJYoEOJ7hiqq=a=sy@&t&eozw@Td!A^| zeR$qLG=;yqM~JK*jK_%X=l5sGeP)QrHB26=!}=eR=ZOTy=c(evcA~0-RPn(mQ9}<^ z&O8o2{c7|sQsvpB*ngC&{>FUHQQOZdz^9tpes>$jW?HxD2$AovwC*s|FHo2FU*LO! z?w-E@K3>}8K15W#f%Y82Xgoy2^%!dxDEh)l@Ozn}Kix{?f5tU*04SVADtTxIcX574Qvs8h^3|`~U2@ef*n6eH7SFeL zp8W;y_ zW0h}zg6)34YTJ)qB&vV7YG^Tx{V!EL*aEw#vg-9C8R&Nk<9irisLE{n6viJ^*VjR= ze`obz--B3pqUK{WO_1-d+4tkuA@6ie^ve%`K2mdd8t=7@HIH8T1NgVp%)gEG^*uFb zZ|Z;_-!!_fK0$Qzi1FALj${3t@p$Yk#s}2s+hm-+@=uJ{jn}>dJpHGP#kbx8elORq z9lruUd22s2kJ0yP?fnkY^|>Ye{1^zYgzw*G|P2R?WDWX3&QI*JM+YLWJ8t1_am9TopWTmWAK-ue>V zgD41M#a65c$Q)b7&wKHl77ioW8^B)}yjg?0F%zf#f=|w_0F8q(4f}GDp-^BHjUpW; zg&q(~RIZuqbEoZ|SAl8Ho?=UKvN|w3gt-xDkP!b(i-*#(l2Kp`!phxL#>seNT)HlqD!X+Nh$Q&aXc4pWG; zYj|S~lN8r`Bib^lFVHn@I8kQh%)A&sOJgl z#&ZuDH?9|C8B4XlQ`pg?cg$$()Z3?#dx#wDHp=8;(B3a=45`3TK{X}bQ{341lj3XJ z7mQE{`!a%8Qlf=@wnH#d6{}oi^IlcMLs_&_+LImngxD^goFr%EG*G)$Y^t-V8}A&Q z%8$9q+b;a3v6lUvUqu!FHb<=(%SJ|ygGKqL@fzfWDOTGnRs0v9+YN=MqSky)x`kL4 znNqr{b4113R-sNw&g%Lv@xVEgz;h?QvyO=9pix1l6R0z$qgZ_>_}+mi=tb;y?2xRHo?u0qtu1L?eqX1m?5yr!`bhOJT%lDgSvm`H{YxRzs+I@DleTw5 zQhR4~^$g0www#M~5S;4lNs1Euwe1zR42gOp!g6MUZQ4iz6ae8gGVVdnB8S zL9rq!o=R!Fiz`6+9A8+b>nl7P<2pC)k$A|R)at}DB@Q_X?c2oCnWlVe5O-L1w9Mw! zq~gBG_E08^rY*N4uXpt3MRZVSK^{ercgC&i$qM>dec~y}>V$~r&8KySwH5GQGHaIZ zdrNl0%~E4*@1#g|Iw`T*)b4q3bw+#25==OfOu^UE5g*ie7T(}| z;MA&nzgbENtzKvxNt&l#$v1?s><(*wU7+0yUX!HyJ!Mx|P_zVNyH2PGvu#wIk`lvd z>GX2FQbyln41LE-Yx#|$dnwGiP`%=U$I8wGJL6iH%$f2TZ{L`9=xFB%Yn9p*%=30a zd{oLq>zC0{X=L}NVX~`lMkwVxY~RuOCYkSHul9Irma?&^qbhfz7S`ps_D#o<97^tS zZF2NCWp1z%2f1@3q~k{2cbt4Xq%%};XXm^^iTkeGKyP>SDol+_Hrw^ijtA#yGbSBc z@ogf%YQ?kgH0uZ|aoOGl?;Z^`nAkCvu)q=_Kxd*@v^TOY9Nk*BAU! zuoOZnPOE|Y0641L9zhqYdST1WPs=#))-0@%4 z1+{0bzQ^a{o;Atu)5Bt!sU`H6iQ1BVpzLWV?(u}auS6v%j0tr^aK?n9Wgt!6?Ml}R z8xgx+WL9kBdEFHxBs-#dR>fcGd!+OC6H|M|S=rQ#eSgaRMyKvQMmADap3IW{3xO>) zA{{UL)2>u0Ep=LEc}CfM%3*UatQmmU>{EM2c(*T)h0b+n#c5e-v`B}xf}5gf{LSKD z!DLr{JO$)b8q*$8bt{LarO~#vwRBCiPfm5uw0~#G)vasNhjzF+Q7aSleft0Txb#@P z!kvGaBDdbW?vaG#*NZVxysyO*3|x;n+|(HWoiXzJ4>6 QIuK8e>B)z|!R>PW2TWfxTmS$7 literal 0 HcwPel00001 diff --git a/i18n/abby_fi.ts b/i18n/abby_fi.ts new file mode 100644 index 0000000..97234f0 --- /dev/null +++ b/i18n/abby_fi.ts @@ -0,0 +1,568 @@ + + + + AboutDialog + + + About + Tietoja + + + + abby + + + + + - + + + + + Version: + Versio: + + + + cclive + + + + + libcurl: + + + + + License + Lisenssi + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Copyright (C) 2009 Toni Gundogdu &lt;legatvs@gmail.com&gt;.</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">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.</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">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.</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">You should have received a copy of the GNU General Public License along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</p></body></html> + + + + + Qt: + + + + + MainWindow + + + Enter a video link. + Syötä video-sivun linkki. + + + + Path to cclive command undefined. See preferences. + Määrittelemätön polku cclive-ohjelmaan. Muuta asetuksia. + + + + Save directory undefined. See preferences. + Määrittelemätön "tallenna videot hakemistoon" polku. Muuta asetuksia. + + + + error: failed to start process + virhe: prosessin käynnistäminen epäonnistui + + + + Fetching link... + Haetaan tietoja... + + + + Verifying video link... + Tarkastetaan video tietoja... + + + + error: see log for details + virhe: katso historia + + + + Extracting video... + Kopioidaan videota... + + + + Process exited with an error; see log + Prosessi päättyi virheeseen; katso historia + + + + Process exited normally + Prosessi päättyi normaalisti + + + + Process terminated + Prosessi keskeytetty + + + + Process crashed; see log + Prosessi kaatui; katso historia + + + + error: + virhe: + + + + English + Suomi + + + + abby + + + + + &Download + K&opioi + + + + &Video link: + &Video-linkki: + + + + Link to the video page to download the video from. + +Example: http://youtube.com/watch?v=3HD220e0bx4 + Linkki video-sivulle. + +Esimerkki: http://youtube.com/watch?v=3HD220e0bx4 + + + + &Start + &Käynnistä + + + + &Progress + &Tiedot + + + + File: + Tiedosto: + + + + - + + + + + Size: + Koko: + + + + -- / -- + + + + + Rate: + Nopeus: + + + + --.- + + + + + ETA: + Jäljellä: + + + + --:-- + + + + + &Cancel + &Keskeytä + + + + &Log + &Historia + + + + &Options + Va&ihtoehdot + + + + &Format: + Tie&dostomuoto: + + + + Download format of the video. This is a website specific feature. + +Note that different formats often mean different video +resolution. Also note that some formats may not be available +for all videos. Listing only non-flv formats. + +DailyMotion: spark | spak-mini | vp6-hq | vp6-hd | vp6 | h264 +Youtube: mp4 | xflv | 3gpp +GoogleVideo: mp4 + +If unsure, choose flv which is supported by all websites. + Kopioi tiedostomuoto. Web-palvelusta riippuva asetus. + +Huomaa, että tiedostomuoto vaihtelee web-palvelusta riippuen, +ja tarkoittaa useasti myös eroja kuvalaadussa. Huomaa myös, että +tiedostomuoto ei ole aina välttämättä saatavilla. Alla oleva +lista pitää sisällään ainoastaan flv:stä poikkeavat muodot. + +DailyMotion: spark | spak-mini | vp6-hq | vp6-hd | vp6 | h264 +Youtube: mp4 | xflv | 3gpp +GoogleVideo: mp4 + +Valitse flv, jos olet epävarma. Kaikki web-palvelut tukevat sitä. + + + + flv + + + + + mp4 + + + + + xflv + + + + + 3gpp + + + + + spak-mini + + + + + vp6-hq + + + + + vp6-hd + + + + + vp6 + + + + + h264 + + + + + Run the command specified in the preferences after +download finishes. + Suorita asetuksissa määritelty komento kopioinnin +jälkeen. + + + + &Preferences... + &Asetukset... + + + + Attempt to continue a partially downloaded video file. +Do not use for Youtube or GoogleVideo flv videos. + Yritä jatkaa osittain kopioitua tiedostoa. +HUOM: Ei toimi Youtube eikä GoogleVideo flv-muotoisten +tiedostojen kanssa. + + + + &Continue partially downloaded file + &Jatka osittain kopioitua tiedostoa + + + + &Save video as: + Tallenna video &nimellä: + + + + Write video to file. Overrides default file naming. + Tallenna video tiedostoon. Ohittaa tavanomaisen cclive-ohjelmassa +käytetyn tiedostojen nimeämistavan. + + + + &Browse + &Selaa + + + + &File + &Tiedosto + + + + &Edit + &Muokkaa + + + + &Quit + &Lopeta + + + + Ctrl+Q + + + + + Prefere&nces... + &Asetukset... + + + + Ctrl+E + + + + + &About... + &Tietoja... + + + + &Run external command when done + S&uorita komento kopioinnin jälkeen + + + + Save as + Tallenna nimellä + + + + PasswordDialog + + + Youtube password + Youtube salasana + + + + &Enter password: + &Anna salasana: + + + + PreferencesDialog + + + Choose command + Valitse polku komentoon + + + + Choose cclive + Valitse polku cclive komentoon + + + + You need to restart the application for the language change to take effect. + Käynnistä ohjelma uudelleen, jotta valittu kieli tulee käyttöön. + + + + Preferences + Asetukset + + + + &General + Y&leiset + + + + &Save videos to: + &Tallenna videot hakemistoon: + + + + Save downloaded videos to this directory. + Tallenna kopioidut tiedostot tähän hakemistoon. + + + + &Browse + &Selaa + + + + E&xternal command: + S&uoritettava komento: + + + + Bro&wse + S&elaa + + + + &Path to cclive: + Pol&ku cclive-ohjelmaan: + + + + Path to cclive command. + Polku cclive-ohjelmaan. + + + + Brows&e + Sel&aa + + + + &Additional options: + Yl&imääräiset parametrit: + + + + Additional options to be passed to cclive. + Ylimääräiset, cclive-ohjelmalle välitettävät parametrit. + + + + &Connection + Y&hteys + + + + Whether use a HTTP proxy for connections. +If unsure, leave to "No Proxy". + Käytä HTTP proxy -välityspalvelinta. +Valitse "Ei välityspalvelinta" jos olet epävarma. + + + + No Proxy + Ei välityspalvelinta + + + + Use Proxy + Käytä välityspalvelinta + + + + Limit download transfer speed. + Rajoita siirtonopeutta. + + + + &Limit transfer rate: + &Rajoita siirtonopeutta: + + + + KB/s + KT/s + + + + &Youtube + + + + + Usually needed only to download videos that have +been flagged as mature content. + Tarpeellinen ainoastaan kopioitaessa videoita, jotka ovat +merkitty vain aikuisille sopiviksi. + + + + &Log in + &Kirjaudu sisään + + + + &Username: + Käyttä&jä: + + + + &Password: + &Salasana: + + + + Leave empty if you want abby to prompt for it. + Jos tyhjä, abby kysyy salasanaa käynnistettäessä. + + + + &Misc + &Muut + + + + &Language: + &Kieli: + + + + Command to be run after finishing downloading. You may +use the "%i" specifier which will be replaced by the +name of the downloaded video file. + +Example: /usr/local/bin/mplayer %i + Kopioinnin jälkeen suoritettava komento. +Voit käyttää %i-merkkiä osoittamaan kopioidun +tiedoston nimen paikkaa komennossa. + +Esimerkki: /usr/local/bin/mplayer %i + + + diff --git a/rc/Makefile b/rc/Makefile new file mode 100644 index 0000000..965fa21 --- /dev/null +++ b/rc/Makefile @@ -0,0 +1,205 @@ +############################################################################# +# Makefile for building: rc +# Generated by qmake (2.01a) (Qt 4.4.3) on: Sun Mar 1 20:11:53 2009 +# Project: rc.pro +# Template: app +# Command: /usr/local/bin/qmake-qt4 -unix -o Makefile rc.pro +############################################################################# + +####### Compiler, tools and options + +CC = cc +CXX = c++ +DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED +CFLAGS = -pipe -O2 -fno-strict-aliasing -pipe -Wall -W $(DEFINES) +CXXFLAGS = -pipe -O2 -fno-strict-aliasing -pipe -Wall -W $(DEFINES) +INCPATH = -I/usr/local/share/qt4/mkspecs/freebsd-g++ -I. -I/usr/local/include/qt4/QtCore -I/usr/local/include/qt4/QtCore -I/usr/local/include/qt4/QtGui -I/usr/local/include/qt4/QtGui -I/usr/local/include/qt4 -I. -I. -I. -I/usr/local/include +LINK = c++ +LFLAGS = -pthread -Wl,-rpath,/usr/local/lib/qt4 +LIBS = $(SUBLIBS) -L/usr/local/lib -L/usr/local/lib/qt4 -lQtGui -L/usr/local/lib/qt4 -L/usr/local/lib -pthread -lpng -lSM -lICE -pthread -pthread -lXi -lXrender -lXrandr -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lglib-2.0 -liconv +AR = ar cqs +RANLIB = +QMAKE = /usr/local/bin/qmake-qt4 +TAR = tar -cf +COMPRESS = gzip -9f +COPY = cp -f +SED = sed +COPY_FILE = $(COPY) +COPY_DIR = $(COPY) -R +INSTALL_FILE = $(COPY_FILE) +INSTALL_DIR = $(COPY_DIR) +INSTALL_PROGRAM = $(COPY_FILE) +DEL_FILE = rm -f +SYMLINK = ln -sf +DEL_DIR = rmdir +MOVE = mv -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = qrc_abby.cpp +OBJECTS = qrc_abby.o +DIST = /usr/local/share/qt4/mkspecs/common/unix.conf \ + /usr/local/share/qt4/mkspecs/qconfig.pri \ + /usr/local/share/qt4/mkspecs/features/qt_functions.prf \ + /usr/local/share/qt4/mkspecs/features/qt_config.prf \ + /usr/local/share/qt4/mkspecs/features/exclusive_builds.prf \ + /usr/local/share/qt4/mkspecs/features/default_pre.prf \ + /usr/local/share/qt4/mkspecs/features/release.prf \ + /usr/local/share/qt4/mkspecs/features/default_post.prf \ + /usr/local/share/qt4/mkspecs/features/unix/thread.prf \ + /usr/local/share/qt4/mkspecs/features/warn_on.prf \ + /usr/local/share/qt4/mkspecs/features/qt.prf \ + /usr/local/share/qt4/mkspecs/features/moc.prf \ + /usr/local/share/qt4/mkspecs/features/resources.prf \ + /usr/local/share/qt4/mkspecs/features/uic.prf \ + /usr/local/share/qt4/mkspecs/features/yacc.prf \ + /usr/local/share/qt4/mkspecs/features/lex.prf \ + rc.pro +QMAKE_TARGET = rc +DESTDIR = +TARGET = rc + +first: all +####### Implicit rules + +.SUFFIXES: .o .c .cpp .cc .cxx .C + +.cpp.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cc.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cxx.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.C.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.c.o: + $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" + +####### Build rules + +all: Makefile $(TARGET) + +$(TARGET): ui_aboutdlg.h ui_mainwnd.h ui_passdlg.h ui_prefsdlg.h $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: rc.pro /usr/local/share/qt4/mkspecs/freebsd-g++/qmake.conf /usr/local/share/qt4/mkspecs/common/unix.conf \ + /usr/local/share/qt4/mkspecs/qconfig.pri \ + /usr/local/share/qt4/mkspecs/features/qt_functions.prf \ + /usr/local/share/qt4/mkspecs/features/qt_config.prf \ + /usr/local/share/qt4/mkspecs/features/exclusive_builds.prf \ + /usr/local/share/qt4/mkspecs/features/default_pre.prf \ + /usr/local/share/qt4/mkspecs/features/release.prf \ + /usr/local/share/qt4/mkspecs/features/default_post.prf \ + /usr/local/share/qt4/mkspecs/features/unix/thread.prf \ + /usr/local/share/qt4/mkspecs/features/warn_on.prf \ + /usr/local/share/qt4/mkspecs/features/qt.prf \ + /usr/local/share/qt4/mkspecs/features/moc.prf \ + /usr/local/share/qt4/mkspecs/features/resources.prf \ + /usr/local/share/qt4/mkspecs/features/uic.prf \ + /usr/local/share/qt4/mkspecs/features/yacc.prf \ + /usr/local/share/qt4/mkspecs/features/lex.prf \ + /usr/local/lib/qt4/libQtGui.prl \ + /usr/local/lib/qt4/libQtCore.prl + $(QMAKE) -unix -o Makefile rc.pro +/usr/local/share/qt4/mkspecs/common/unix.conf: +/usr/local/share/qt4/mkspecs/qconfig.pri: +/usr/local/share/qt4/mkspecs/features/qt_functions.prf: +/usr/local/share/qt4/mkspecs/features/qt_config.prf: +/usr/local/share/qt4/mkspecs/features/exclusive_builds.prf: +/usr/local/share/qt4/mkspecs/features/default_pre.prf: +/usr/local/share/qt4/mkspecs/features/release.prf: +/usr/local/share/qt4/mkspecs/features/default_post.prf: +/usr/local/share/qt4/mkspecs/features/unix/thread.prf: +/usr/local/share/qt4/mkspecs/features/warn_on.prf: +/usr/local/share/qt4/mkspecs/features/qt.prf: +/usr/local/share/qt4/mkspecs/features/moc.prf: +/usr/local/share/qt4/mkspecs/features/resources.prf: +/usr/local/share/qt4/mkspecs/features/uic.prf: +/usr/local/share/qt4/mkspecs/features/yacc.prf: +/usr/local/share/qt4/mkspecs/features/lex.prf: +/usr/local/lib/qt4/libQtGui.prl: +/usr/local/lib/qt4/libQtCore.prl: +qmake: FORCE + @$(QMAKE) -unix -o Makefile rc.pro + +dist: + @$(CHK_DIR_EXISTS) .tmp/rc1.0.0 || $(MKDIR) .tmp/rc1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/rc1.0.0/ && $(COPY_FILE) --parents abby.qrc .tmp/rc1.0.0/ && $(COPY_FILE) --parents aboutdlg.ui mainwnd.ui passdlg.ui prefsdlg.ui .tmp/rc1.0.0/ && (cd `dirname .tmp/rc1.0.0` && $(TAR) rc1.0.0.tar rc1.0.0 && $(COMPRESS) rc1.0.0.tar) && $(MOVE) `dirname .tmp/rc1.0.0`/rc1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/rc1.0.0 + + +clean:compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +####### Sub-libraries + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) Makefile + + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +compiler_moc_header_make_all: +compiler_moc_header_clean: +compiler_rcc_make_all: qrc_abby.cpp +compiler_rcc_clean: + -$(DEL_FILE) qrc_abby.cpp +qrc_abby.cpp: abby.qrc \ + ../i18n/abby_fi.qm + /usr/local/bin/rcc -name abby abby.qrc -o qrc_abby.cpp + +compiler_image_collection_make_all: qmake_image_collection.cpp +compiler_image_collection_clean: + -$(DEL_FILE) qmake_image_collection.cpp +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: ui_aboutdlg.h ui_mainwnd.h ui_passdlg.h ui_prefsdlg.h +compiler_uic_clean: + -$(DEL_FILE) ui_aboutdlg.h ui_mainwnd.h ui_passdlg.h ui_prefsdlg.h +ui_aboutdlg.h: aboutdlg.ui + /usr/local/bin/uic-qt4 aboutdlg.ui -o ui_aboutdlg.h + +ui_mainwnd.h: mainwnd.ui + /usr/local/bin/uic-qt4 mainwnd.ui -o ui_mainwnd.h + +ui_passdlg.h: passdlg.ui + /usr/local/bin/uic-qt4 passdlg.ui -o ui_passdlg.h + +ui_prefsdlg.h: prefsdlg.ui + /usr/local/bin/uic-qt4 prefsdlg.ui -o ui_prefsdlg.h + +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_uic_clean + +####### Compile + +qrc_abby.o: qrc_abby.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_abby.o qrc_abby.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/rc/abby.png b/rc/abby.png new file mode 100644 index 0000000000000000000000000000000000000000..24d8ee5b8ec5dc4b3a5819f297a245e392102261 GIT binary patch literal 399 zcwXxa@N?(olHy`uVBq!ia0vp^<{-=gBp7-(^v(iOjKx9jP7LeL$-D$|n3BBRT^JZv z^(q?yd7K3vk;M!Q+`=Ht$S`Y;1W=H@#M9T6{U$S`uo+ij!2AtB6NEio978;gzn!$- z`*46rD}RvaC#7i}kCtVBTgS($c}~yj<(;Mf*uNhCuVV4)SBzRKLA zzxR~RdDXi^@vz$cwH0&a`-1n*5tS618C}>~c~bYq(jLK+0uL{DDff7)8LV3W7!=Z;u6{1-oD!M + + ../i18n/abby_fi.qm + ../rc/abby.png + + diff --git a/rc/aboutdlg.ui b/rc/aboutdlg.ui new file mode 100644 index 0000000..aef868e --- /dev/null +++ b/rc/aboutdlg.ui @@ -0,0 +1,184 @@ + + Toni Gundogdu + AboutDialog + + + Qt::ApplicationModal + + + + 0 + 0 + 491 + 300 + + + + About + + + true + + + + + + + + abby + + + + + + - + + + + + + + - + + + + + + + Version: + + + + + + + Qt: + + + + + + + + + + cclive + + + + + + Version: + + + + + + + - + + + + + + + libcurl: + + + + + + + - + + + + + + + + + + + + + 371 + 0 + + + + License + + + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Copyright (C) 2009 Toni Gundogdu &lt;legatvs@gmail.com&gt;.</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">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.</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">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.</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">You should have received a copy of the GNU General Public License along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</p></body></html> + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + + + + + buttonBox + accepted() + AboutDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AboutDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/rc/mainwnd.ui b/rc/mainwnd.ui new file mode 100644 index 0000000..c275955 --- /dev/null +++ b/rc/mainwnd.ui @@ -0,0 +1,672 @@ + + Toni Gundogdu + MainWindow + + + + 0 + 0 + 504 + 279 + + + + abby + + + + + + + 0 + + + + &Download + + + + + + + + &Video link: + + + urlEdit + + + + + + + Link to the video page to download the video from. + +Example: http://youtube.com/watch?v=3HD220e0bx4 + + + + + + + &Start + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + QTabWidget::South + + + 0 + + + + &Progress + + + + + + + + + 0 + 0 + + + + File: + + + + + + + + 0 + 0 + + + + - + + + + + + + + + + + + 0 + 0 + + + + Size: + + + + + + + true + + + -- / -- + + + + + + + + 0 + 0 + + + + Rate: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + true + + + --.- + + + + + + + + 0 + 0 + + + + ETA: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + true + + + --:-- + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + true + + + + 0 + 0 + + + + 0 + + + + + + + false + + + + 0 + 0 + + + + &Cancel + + + + + + + + + + &Log + + + + + + true + + + true + + + + + + + + + + + + &Options + + + + + + + + &Format: + + + formatCombo + + + + + + + Download format of the video. This is a website specific feature. + +Note that different formats often mean different video +resolution. Also note that some formats may not be available +for all videos. Listing only non-flv formats. + +DailyMotion: spark | spak-mini | vp6-hq | vp6-hd | vp6 | h264 +Youtube: mp4 | xflv | 3gpp +GoogleVideo: mp4 + +If unsure, choose flv which is supported by all websites. + + + + flv + + + + + mp4 + + + + + xflv + + + + + 3gpp + + + + + spak-mini + + + + + vp6-hq + + + + + vp6-hd + + + + + vp6 + + + + + h264 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Run the command specified in the preferences after +download finishes. + + + &Run external command when done + + + + + + + false + + + &Preferences... + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + Attempt to continue a partially downloaded video file. +Do not use for Youtube or GoogleVideo flv videos. + + + &Continue partially downloaded file + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + &Save video as: + + + saveasEdit + + + + + + + true + + + Write video to file. Overrides default file naming. + + + + + + + true + + + &Browse + + + + + + + + + + + + + + + 0 + 0 + 504 + 25 + + + + + &File + + + + + + + + &Edit + + + + + + + + + + &Quit + + + Ctrl+Q + + + + + true + + + Prefere&nces... + + + Ctrl+E + + + + + &About... + + + + + urlEdit + startButton + logEdit + tabWidget_2 + saveasEdit + saveasButton + formatCombo + commandBox + preferencesButton + + + + + + action_Quit + activated() + MainWindow + close() + + + -1 + -1 + + + 189 + 148 + + + + + action_Preferences + activated() + MainWindow + onPreferences() + + + -1 + -1 + + + 189 + 148 + + + + + startButton + clicked() + MainWindow + onStart() + + + 467 + 99 + + + 189 + 148 + + + + + cancelButton + clicked() + MainWindow + onCancel() + + + 456 + 218 + + + 189 + 148 + + + + + action_About + activated() + MainWindow + onAbout() + + + -1 + -1 + + + 189 + 151 + + + + + commandBox + stateChanged(int) + MainWindow + onCommandStateChanged(int) + + + 141 + 150 + + + 244 + 151 + + + + + preferencesButton + clicked() + MainWindow + onPreferences() + + + 325 + 151 + + + 244 + 151 + + + + + saveasButton + clicked() + MainWindow + onSaveasBrowse() + + + 430 + 86 + + + 244 + 160 + + + + + + onPreferences() + onStart() + onCancel() + onAbout() + onCommandStateChanged(int) + onSaveasStateChanged(int) + onSaveasBrowse() + + diff --git a/rc/passdlg.ui b/rc/passdlg.ui new file mode 100644 index 0000000..3133f4d --- /dev/null +++ b/rc/passdlg.ui @@ -0,0 +1,96 @@ + + Toni Gundogdu + PasswordDialog + + + Qt::ApplicationModal + + + + 0 + 0 + 306 + 88 + + + + Youtube password + + + true + + + + + + + + &Enter password: + + + passEdit + + + + + + + QLineEdit::Password + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + passEdit + buttonBox + + + + + + buttonBox + accepted() + PasswordDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + PasswordDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/rc/prefsdlg.ui b/rc/prefsdlg.ui new file mode 100644 index 0000000..220f074 --- /dev/null +++ b/rc/prefsdlg.ui @@ -0,0 +1,542 @@ + + Toni Gundogdu + PreferencesDialog + + + Qt::ApplicationModal + + + + 0 + 0 + 437 + 237 + + + + Preferences + + + true + + + + + + + + + 0 + + + + &General + + + + + + + + &Save videos to: + + + savedirEdit + + + + + + + Save downloaded videos to this directory. + + + + + + + &Browse + + + + + + + + + + + E&xternal command: + + + commandEdit + + + + + + + Command to be run after finishing downloading. You may +use the "%i" specifier which will be replaced by the +name of the downloaded video file. + +Example: /usr/local/bin/mplayer %i + + + + + + + + + + Bro&wse + + + + + + + + + + + &Path to cclive: + + + ccliveEdit + + + + + + + Path to cclive command. + + + + + + + Brows&e + + + + + + + + + + + &Additional options: + + + additionalEdit + + + + + + + Additional options to be passed to cclive. + + + + + + + + + + &Connection + + + + + + + + Whether use a HTTP proxy for connections. +If unsure, leave to "No Proxy". + + + + No Proxy + + + + + Use Proxy + + + + + + + + false + + + + + + + + + + + Limit download transfer speed. + + + &Limit transfer rate: + + + + + + + false + + + KB/s + + + 1 + + + 9999 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + &Youtube + + + + + + Usually needed only to download videos that have +been flagged as mature content. + + + &Log in + + + true + + + false + + + + + + &Username: + + + ytuserEdit + + + + + + + + + + + + + + &Password: + + + ytpassEdit + + + + + + + Leave empty if you want abby to prompt for it. + + + QLineEdit::Password + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + &Misc + + + + + + + + &Language: + + + langCombo + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 99 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + + tabWidget + savedirEdit + savedirButton + commandEdit + commandButton + ccliveEdit + ccliveBrowse + additionalEdit + proxyCombo + proxyEdit + limitBox + limitSpin + youtubeGroup + ytuserEdit + ytpassEdit + buttonBox + + + + + + buttonBox + accepted() + PreferencesDialog + accept() + + + 257 + 188 + + + 157 + 274 + + + + + buttonBox + rejected() + PreferencesDialog + reject() + + + 325 + 188 + + + 286 + 274 + + + + + proxyCombo + currentIndexChanged(int) + PreferencesDialog + onProxyChanged(int) + + + 67 + 90 + + + 188 + 98 + + + + + limitBox + stateChanged(int) + PreferencesDialog + onLimitStateChanged(int) + + + 102 + 125 + + + 188 + 98 + + + + + PreferencesDialog + finished(int) + PreferencesDialog + onFinished(int) + + + 188 + 98 + + + 188 + 98 + + + + + savedirButton + clicked() + PreferencesDialog + onBrowseSaveDir() + + + 319 + 57 + + + 188 + 98 + + + + + commandButton + clicked() + PreferencesDialog + onBrowseCommand() + + + 319 + 92 + + + 188 + 98 + + + + + ccliveBrowse + clicked() + PreferencesDialog + onBrowseCclive() + + + 319 + 127 + + + 188 + 116 + + + + + + onProxyChanged(int) + onLimitStateChanged(int) + onYoutubeToggled(bool) + onFinished(int) + onBrowseSaveDir() + onBrowseCommand() + onBrowseCclive() + onLangChanged(int) + + diff --git a/rc/rc.pro b/rc/rc.pro new file mode 100644 index 0000000..40cf1cd --- /dev/null +++ b/rc/rc.pro @@ -0,0 +1,12 @@ +###################################################################### +# Automatically generated by qmake (2.01a) Sun Mar 1 20:11:52 2009 +###################################################################### + +TEMPLATE = app +TARGET = +DEPENDPATH += . +INCLUDEPATH += . + +# Input +FORMS += aboutdlg.ui mainwnd.ui passdlg.ui prefsdlg.ui +RESOURCES += abby.qrc diff --git a/src/aboutdlg.cpp b/src/aboutdlg.cpp new file mode 100644 index 0000000..21a28cd --- /dev/null +++ b/src/aboutdlg.cpp @@ -0,0 +1,47 @@ +/* + * abby Copyright (C) 2009 Toni Gundogdu. + * This file is part of abby. + * + * abby 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. + * + * abby 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 . + */ +#include +#include +#include + +#include "aboutdlg.h" + +AboutDialog::AboutDialog(QWidget *parent, QString cclivePath) + : QDialog(parent) +{ + setupUi(this); + + abbyVersionLabel->setText("0.1.0"); + //QCoreApplication::applicationVersion()); // 4.4+ + qtVersionLabel->setText(qVersion()); + + if (!cclivePath.isEmpty()) { + QProcess cclive; + cclive.setProcessChannelMode(QProcess::MergedChannels); + cclive.start(cclivePath, QStringList() << "--version"); + + if (!cclive.waitForFinished()) + qDebug() << "cclive failed:" << cclive.errorString(); + else { + QString output = QString::fromLocal8Bit(cclive.readAll()); + QStringList lst = output.split(" ",QString::SkipEmptyParts); + ccliveVersionLabel->setText(lst[2]); + curlVersionLabel->setText(lst[6]); + } + } +} diff --git a/src/aboutdlg.h b/src/aboutdlg.h new file mode 100644 index 0000000..75e40d9 --- /dev/null +++ b/src/aboutdlg.h @@ -0,0 +1,30 @@ +/* + * abby Copyright (C) 2009 Toni Gundogdu. + * This file is part of abby. + * + * abby 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. + * + * abby 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 . + */ +#ifndef aboutdlg_h +#define aboutdlg_h + +#include "ui_aboutdlg.h" + +class QDialog; + +class AboutDialog : public QDialog, private Ui::AboutDialog { + Q_OBJECT +public: + AboutDialog(QWidget *parent, QString cclivePath); +}; +#endif diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..276f89a --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,47 @@ +/* + * abby Copyright (C) 2009 Toni Gundogdu. + * This file is part of abby. + * + * abby 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. + * + * abby 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 . + */ +#include +#include +#include + +#include "mainwnd.h" + +int +main (int argc, char *argv[]) { + QApplication app(argc,argv); + + QCoreApplication::setOrganizationName("abby"); + QCoreApplication::setApplicationName("abby"); + //QCoreApplication::setApplicationVersion("0.1.0"); // 4.4+ + QCoreApplication::setOrganizationDomain("code.google.com/p/abby"); + + QSettings settings; + settings.beginGroup("PreferencesDialog"); + QString qmFile = settings.value("qmFile").toString(); + settings.endGroup(); + + QTranslator transl; + if (qmFile.isEmpty()) + transl.load("abby_" + QLocale::system().name(), ":/i18n"); + else + transl.load(qmFile); + app.installTranslator(&transl); + + (new MainWindow)->show(); + return app.exec(); +} diff --git a/src/mainwnd.cpp b/src/mainwnd.cpp new file mode 100644 index 0000000..e0b82d8 --- /dev/null +++ b/src/mainwnd.cpp @@ -0,0 +1,316 @@ +/* + * abby Copyright (C) 2009 Toni Gundogdu. + * This file is part of abby. + * + * abby 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. + * + * abby 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 . + */ +#include +#include +#include +#include +#include +#include + +#include "mainwnd.h" +#include "prefsdlg.h" +#include "passdlg.h" +#include "aboutdlg.h" + +MainWindow::MainWindow(): + cancelled(false) +{ + // NOTE: This string is displayed in the preferences dialog + // languages selection. It is not intended to be translated, + // but replaced with the name of the target language (in native). + // e.g. Suomi, Deutsch, Svenska, Turkce, Francais, ... + const QString lang = tr("English"); + + setupUi(this); + setWindowIcon(QIcon(":/rc/abby.png")); + readSettings(); + + prefs = new PreferencesDialog(this); + + connect(&process, SIGNAL(started()), + this, SLOT(onProcStarted())); + connect(&process, SIGNAL(error(QProcess::ProcessError)), + this, SLOT(onProcError(QProcess::ProcessError))); + connect(&process, SIGNAL(readyReadStandardError()), + this, SLOT(onProcStderrReady())); + connect(&process, SIGNAL(finished(int,QProcess::ExitStatus)), + this, SLOT(onProcFinished(int,QProcess::ExitStatus))); +} + +void +MainWindow::closeEvent(QCloseEvent *event) { + writeSettings(); + event->accept(); +} + +void +MainWindow::writeSettings() { + QSettings s; + s.beginGroup("MainWindow"); + s.setValue("size",size()); + s.setValue("pos",pos()); + s.setValue("formatCombo",formatCombo->currentIndex()); + s.endGroup(); +} + +void +MainWindow::readSettings() { + QSettings s; + s.beginGroup("MainWindow"); + resize(s.value("size",QSize(400,400)).toSize()); + move(s.value("pos",QPoint(200,200)).toPoint()); + formatCombo->setCurrentIndex(s.value("formatCombo").toInt()); + s.endGroup(); +} + +void +MainWindow::updateLog(QString newText) { + QString text = logEdit->toPlainText() + newText; + logEdit->setPlainText(text); +} + + +// Slots + +void +MainWindow::onPreferences() { + prefs->exec(); +} + +void +MainWindow::onCommandStateChanged(int state) { + preferencesButton->setEnabled(state != 0); +} + +void +MainWindow::onSaveasStateChanged(int state) { + saveasEdit->setEnabled(state != 0); +} + +void +MainWindow::onSaveasBrowse() { + QString fname = QFileDialog::getSaveFileName(this,tr("Save as")); + if (!fname.isEmpty()) + saveasEdit->setText(fname); +} + +void +MainWindow::onStart() { + // Check video URL + + QString url = urlEdit->text(); + + if (url.isEmpty()) { + statusBar()->showMessage(tr("Enter a video link.")); + return; + } + + url = url.trimmed(); + + if (!url.startsWith("http://",Qt::CaseInsensitive)) + url.insert(0,"http://"); + + // Check cclive + + QString cclive = prefs->ccliveEdit->text(); + if (cclive.isEmpty()) { + QMessageBox::information(this,QCoreApplication::applicationName(), + tr("Path to cclive command undefined. See preferences.")); + onPreferences(); + return; + } + + // Check video save directory + + // NOTE: cclive itself does not support this concept so we + // work around it by changing the working directory to the + // save directory. + + QString savedir = prefs->savedirEdit->text(); + if (savedir.isEmpty()) { + QMessageBox::information(this,QCoreApplication::applicationName(), + tr("Save directory undefined. See preferences.")); + onPreferences(); + return; + } + process.setWorkingDirectory(savedir); + + // Construct cclive args + + QStringList args; + args << "--print-fname"; + + QString s = prefs->additionalEdit->text(); + if (!s.isEmpty()) + args << s; + + s = prefs->commandEdit->text(); + if (!s.isEmpty() && commandBox->isChecked()) { + if (!s.endsWith(";")) + s += ";"; + args << QString("--exec=%1").arg(s); + } + + if (prefs->proxyCombo->currentIndex() == 0) + args << "--no-proxy"; + else { + s = prefs->proxyEdit->text(); + if (!s.isEmpty()) + args << QString("--proxy=%1").arg(s); + } + + if (prefs->limitBox->checkState()) { + int n = prefs->limitSpin->value(); + args << QString("--limit-rate=%1").arg(n); + } + + if (prefs->youtubeGroup->isChecked()) { + QString user = prefs->ytuserEdit->text(); + QString pass = prefs->ytpassEdit->text(); + if (pass.isEmpty()) { + PasswordDialog pwd(this); + if (pwd.exec()) + pass = pwd.passEdit->text(); + } + if (!user.isEmpty() && !pass.isEmpty()) { + args << QString("--youtube-user=%1").arg(user); + args << QString("--youtube-pass=%1").arg(pass); + } + } + + s = saveasEdit->text(); + if (!s.isEmpty()) + args << QString("--output-video=%1").arg(s); + + if (continueBox->isChecked()) + args << "--continue"; + + args << QString("--download=%1").arg(formatCombo->currentText()); + args << QString("%1").arg(url); + + // Prepare log + + logEdit->clear(); + updateLog("% cclive " +args.join(" ")+ "\n"); + + // And finally start the process + + cancelled = false; + process.start(cclive,args); +} + +void +MainWindow::onCancel() { + cancelled = true; + process.kill(); +} + +void +MainWindow::onAbout() { + AboutDialog about(this,prefs->ccliveEdit->text()); + about.exec(); +} + +void +MainWindow::onProcStarted() { + statusBar() ->clearMessage(); + fileLabel ->setText("-"); + sizeLabel ->setText("-- / --"); + rateLabel ->setText("--.-"); + etaLabel ->setText("--:--"); + progressBar ->setValue(0); + + startButton ->setEnabled(false); + cancelButton->setEnabled(true); +} + +void +MainWindow::onProcError(QProcess::ProcessError err) { + if (err == QProcess::FailedToStart) { + QString msg = tr("error: failed to start process"); + updateLog(msg); + statusBar()->showMessage(msg); + } +} + +void +MainWindow::onProcStderrReady() { + QString newText = + QString::fromLocal8Bit(process.readAllStandardError()); + + QString status; + if (newText.contains("fetch")) + status = tr("Fetching link..."); + else if (newText.contains("verify")) + status = tr("Verifying video link..."); + else if (newText.contains("error:")) { + // Probably better to connect finished etc. signal instead + status = tr("error: see log for details"); + } + else if (newText.contains("file:")) { + status = tr("Extracting video..."); + QStringList lst = newText.split(" ",QString::SkipEmptyParts); + fileLabel->setText(lst[1].remove("\n")); + } + + if (!status.isEmpty()) + statusBar()->showMessage(status.remove("\n")); + + if (newText.contains("%")) { + newText.replace("\n", " "); + + QStringList lst = + newText.split(" ",QString::SkipEmptyParts); + + QString percent = lst[1].remove(QChar('%')); + QString now = lst[2]; + QString expected= lst[4]; + QString rate = lst[5]; + QString eta = lst[6]; + + sizeLabel->setText(now +" / "+ expected); + rateLabel->setText(rate); + etaLabel->setText(eta); + progressBar->setValue(percent.toInt()); + } else { + updateLog(newText); + } +} + +void +MainWindow::onProcFinished(int exitCode, QProcess::ExitStatus exitStatus) { + QString status; + if (exitStatus == QProcess::NormalExit) { + if (exitCode != 0) + status = tr("Process exited with an error; see log"); + else + status = tr("Process exited normally"); + } else { + status = cancelled + ? tr("Process terminated") + : tr("Process crashed; see log"); + } + + if (!statusBar()->currentMessage().contains(tr("error:"))) + statusBar()->showMessage(status); + + updateLog(status + "."); + + startButton ->setEnabled(true); + cancelButton->setEnabled(false); +} diff --git a/src/mainwnd.h b/src/mainwnd.h new file mode 100644 index 0000000..79881fa --- /dev/null +++ b/src/mainwnd.h @@ -0,0 +1,55 @@ +/* + * abby Copyright (C) 2009 Toni Gundogdu. + * This file is part of abby. + * + * abby 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. + * + * abby 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 . + */ +#ifndef mainwnd_h +#define mainwnd_h + +#include + +#include "ui_mainwnd.h" + +class QMainWindow; +class PreferencesDialog; + +class MainWindow : public QMainWindow, private Ui::MainWindow { + Q_OBJECT +public: + MainWindow(); +private slots: + void onPreferences(); + void onStart(); + void onCancel(); + void onAbout(); + void onSaveasStateChanged(int state); + void onCommandStateChanged(int state); + void onSaveasBrowse(); + void onProcStarted(); + void onProcError(QProcess::ProcessError); + void onProcStderrReady(); + void onProcFinished(int exitCode, QProcess::ExitStatus exitStatus); +private: + QProcess process; + PreferencesDialog *prefs; + bool cancelled; +private: + void writeSettings(); + void readSettings(); + void updateLog(QString text); +protected: + void closeEvent(QCloseEvent *event); +}; +#endif diff --git a/src/passdlg.cpp b/src/passdlg.cpp new file mode 100644 index 0000000..dfeafb8 --- /dev/null +++ b/src/passdlg.cpp @@ -0,0 +1,26 @@ +/* + * abby Copyright (C) 2009 Toni Gundogdu. + * This file is part of abby. + * + * abby 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. + * + * abby 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 . + */ +#include + +#include "passdlg.h" + +PasswordDialog::PasswordDialog(QWidget *parent) + : QDialog(parent) +{ + setupUi(this); +} diff --git a/src/passdlg.h b/src/passdlg.h new file mode 100644 index 0000000..269baab --- /dev/null +++ b/src/passdlg.h @@ -0,0 +1,30 @@ +/* + * abby Copyright (C) 2009 Toni Gundogdu. + * This file is part of abby. + * + * abby 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. + * + * abby 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 . + */ +#ifndef passdlg_h +#define passdlg_h + +#include "ui_passdlg.h" + +class QDialog; + +class PasswordDialog : public QDialog, public Ui::PasswordDialog { + Q_OBJECT +public: + PasswordDialog(QWidget *parent); +}; +#endif diff --git a/src/prefsdlg.cpp b/src/prefsdlg.cpp new file mode 100644 index 0000000..3a72d38 --- /dev/null +++ b/src/prefsdlg.cpp @@ -0,0 +1,181 @@ +/* + * abby Copyright (C) 2009 Toni Gundogdu. + * This file is part of abby. + * + * abby 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. + * + * abby 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 . + */ +#include +#include +#include +#include +#include + +#include "prefsdlg.h" + +PreferencesDialog::PreferencesDialog(QWidget *parent) + : QDialog(parent) +{ + setupUi(this); + readSettings(); + + langCombo->addItem("English"); + + int sel = 0; + qmFiles = findQmFiles(); + for (int i=0; iaddItem(langName(qmFiles[i])); + if (qmFile == qmFiles[i]) + sel = i+1; + } + langCombo->setCurrentIndex(sel); + + connect(langCombo, SIGNAL(currentIndexChanged(int)), + this, SLOT(onLangChanged(int))); +} + +void +PreferencesDialog::onFinished(int) { + writeSettings(); +} + +void +PreferencesDialog::writeSettings() { + QSettings s; + + s.beginGroup("PreferencesDialog"); + + s.setValue("size",size()); + s.setValue("pos",pos()); + + s.setValue("savedirEdit",savedirEdit->text()); + s.setValue("commandEdit",commandEdit->text()); + s.setValue("ccliveEdit",ccliveEdit->text()); + s.setValue("additionalEdit",additionalEdit->text()); + + s.setValue("proxyCombo",proxyCombo->currentIndex()); + s.setValue("proxyEdit",proxyEdit->text()); + s.setValue("limitBox",limitBox->checkState()); + s.setValue("limitSpin",limitSpin->value()); + + s.setValue("youtubeGroup",youtubeGroup->isChecked()); + s.setValue("ytuserEdit",ytuserEdit->text()); + s.setValue("ytpassEdit",ytpassEdit->text()); + + s.setValue("qmFile",qmFile); + + s.endGroup(); +} + +void +PreferencesDialog::readSettings() { + QSettings s; + + s.beginGroup("PreferencesDialog"); + + resize(s.value("size",QSize(400,400)).toSize()); + move(s.value("pos",QPoint(200,200)).toPoint()); + + savedirEdit->setText(s.value("savedirEdit").toString()); + commandEdit->setText(s.value("commandEdit").toString()); + ccliveEdit->setText(s.value("ccliveEdit").toString()); + additionalEdit->setText(s.value("additionalEdit").toString()); + + proxyCombo->setCurrentIndex(s.value("proxyCombo").toInt()); + proxyEdit->setText(s.value("proxyEdit").toString()); + limitBox->setCheckState( + s.value("limitBox").toBool() + ? Qt::Checked + : Qt::Unchecked); + limitSpin->setValue(s.value("limitSpin").toInt()); + + youtubeGroup->setChecked(s.value("youtubeGroup").toBool()); + ytuserEdit->setText(s.value("ytuserEdit").toString()); + ytpassEdit->setText(s.value("ytpassEdit").toString()); + + qmFile = s.value("qmFile").toString(); + + s.endGroup(); +} + +QStringList +PreferencesDialog::findQmFiles() { + QDir dir(":/i18n"); + + QStringList fnames = + dir.entryList(QStringList("*.qm"), QDir::Files, QDir::Name); + + QMutableStringListIterator iter(fnames); + while (iter.hasNext()) { + iter.next(); + iter.setValue(dir.filePath(iter.value())); + } + return fnames; +} + +QString +PreferencesDialog::langName(const QString &qmFile) { + QTranslator transl; + transl.load(qmFile); + return transl.translate("MainWindow","English"); +} + + +// Slots + +void +PreferencesDialog::onProxyChanged(int index) { + proxyEdit->setEnabled(index == 1); +} + +void +PreferencesDialog::onLimitStateChanged(int state) { + limitSpin->setEnabled(state != 0); +} + +void +PreferencesDialog::onBrowseSaveDir() { + QFileDialog dlg(this); + + dlg.setFileMode(QFileDialog::Directory); + dlg.setViewMode(QFileDialog::Detail); + dlg.setDirectory(savedirEdit->text()); + + if (dlg.exec()) + savedirEdit->setText(dlg.selectedFiles()[0]); +} + +void +PreferencesDialog::onBrowseCommand() { + QString fname = QFileDialog::getOpenFileName(this,tr("Choose command")); + if (!fname.isEmpty()) + commandEdit->setText(fname); +} + +void +PreferencesDialog::onBrowseCclive() { + QString fname = QFileDialog::getOpenFileName(this,tr("Choose cclive")); + if (!fname.isEmpty()) + ccliveEdit->setText(fname); +} + +void +PreferencesDialog::onLangChanged(int index) { + qmFile = ""; + if (index > 0) + qmFile = qmFiles[index-1]; + + QMessageBox::information(this, QCoreApplication::applicationName(), + tr("You need to restart the application for the language change " + "to take effect.")); +} diff --git a/src/prefsdlg.h b/src/prefsdlg.h new file mode 100644 index 0000000..1f30a02 --- /dev/null +++ b/src/prefsdlg.h @@ -0,0 +1,46 @@ +/* + * abby Copyright (C) 2009 Toni Gundogdu. + * This file is part of abby. + * + * abby 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. + * + * abby 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 . + */ +#ifndef prefsdlg_h +#define prefsdlg_h + +#include "ui_prefsdlg.h" + +class QDialog; + +class PreferencesDialog : public QDialog, public Ui::PreferencesDialog { + Q_OBJECT +public: + PreferencesDialog(QWidget *parent=0); +private slots: + void onProxyChanged(int index); + void onLimitStateChanged(int state); + void onFinished(int result); + void onBrowseSaveDir(); + void onBrowseCommand(); + void onBrowseCclive(); + void onLangChanged(int index); +private: + void readSettings(); + void writeSettings(); + QStringList findQmFiles(); + QString langName(const QString &qmFile); +private: + QStringList qmFiles; + QString qmFile; +}; +#endif -- 2.11.4.GIT